PHPSeclib使用写操作的附加换行符
对于通过SSH编辑文件的特定用例,我即将简单地将其移回PERL。似乎无论我做什么,都会在文件中放置额外的换行符。示例变量具有以下特性:PHPSeclib使用写操作的附加换行符,php,phpseclib,Php,Phpseclib,对于通过SSH编辑文件的特定用例,我即将简单地将其移回PERL。似乎无论我做什么,都会在文件中放置额外的换行符。示例变量具有以下特性: req_extensions = v3_req prompt = no [req_distinguished_name] C = US 使用下面的命令,我得到下面的输出 $ssh->write("echo '$file' > /directory/test.txt\n"); 导致: req_extensions = v3_req prompt
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
使用下面的命令,我得到下面的输出
$ssh->write("echo '$file' > /directory/test.txt\n");
导致:
req_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
编辑并添加相关调试日志:
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0022, network: 0s)
00000000 00:00:00:02:00:00:00:01:65 ........e
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0001s)
00000000 00:00:00:02:00:00:00:01:63 ........c
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0s)
00000000 00:00:00:02:00:00:00:01:68 ........h
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0s)
00000000 00:00:00:02:00:00:00:01:6f ........o
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0003s)
00000000 00:00:00:02:00:00:00:01:20 ........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0004, network: 0s)
00000000 00:00:00:02:00:00:00:01:27 ........'
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000 00:00:00:02:00:00:00:01:72 ........r
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:65 ........e
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0.0002s)
00000000 00:00:00:02:00:00:00:01:71 ........q
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:5f ........_
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:65 ........e
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0007, network: 0.0006s)
00000000 00:00:00:02:00:00:00:01:78 ........x
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0s)
00000000 00:00:00:02:00:00:00:01:74 ........t
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000 00:00:00:02:00:00:00:01:65 ........e
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0.0002s)
00000000 00:00:00:02:00:00:00:01:6e ........n
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000 00:00:00:02:00:00:00:01:73 ........s
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:69 ........i
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0002s)
00000000 00:00:00:02:00:00:00:01:6f ........o
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0s)
00000000 00:00:00:02:00:00:00:01:6e ........n
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:73 ........s
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:20 ........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0004, network: 0s)
00000000 00:00:00:02:00:00:00:01:3d ........=
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:20 ........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000 00:00:00:02:00:00:00:01:76 ........v
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:33 ........3
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000 00:00:00:02:00:00:00:01:5f ........_
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000 00:00:00:02:00:00:00:01:72 ........r
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:65 ........e
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000 00:00:00:02:00:00:00:01:71 ........q
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:02:0d:0a ..........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:02:3e:20 ........>
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0004s)
00000000 00:00:00:02:00:00:00:02:0d:0a ..........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:02:3e:20 ........>
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:70 ........p
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:72 ........r
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:6f ........o
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:6d ........m
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0001s)
00000000 00:00:00:02:00:00:00:01:70 ........p
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000 00:00:00:02:00:00:00:01:74 ........t
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:20 ........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0s)
00000000 00:00:00:02:00:00:00:01:3d ........=
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:20 ........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0002s)
00000000 00:00:00:02:00:00:00:01:6e ........n
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:01:6f ........o
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0002, network: 0.0002s)
00000000 00:00:00:02:00:00:00:02:0d:0a ..........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:02:3e:20 ........>
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:02:0d:0a ..........
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0001, network: 0s)
00000000 00:00:00:02:00:00:00:02:3e:20 ........>
只要传递-n
,它就会解决这个问题
$ssh->write(“echo-n'$file'>/directory/test.txt\n”);
-n
告诉不要追加新行。我不确定write()
为什么要发送额外的换行符。我确信如果我一行一行地添加到该文件中,就会起作用。最后,我简单地使用了SFTP::put()
,它允许我将@
放在SSH::exec()
无法使用的地方。感谢所有的输入-这是一个与我所希望的略有不同的方法,但它可以工作。您想删除新行还是想添加新行?我不想添加实际上不在字符串中的额外换行符。我想需要查看该字符串变量的十六进制?可能是CR和LF?您在该命令的末尾添加了\n
。删除它,它将删除换行符。您的命令可以是$ssh->write(“echo'$file'>/directory/test.txt”)代码>^对此也感到奇怪。这不会让你得到test.txtn
?根据echo
手册页,结果与以前相同<代码>-n
应该可以解决这个问题。虽然它对我有用。请参阅我的要点。我在这里找到了类似问题的解决方案。如果write
方法有任何问题,您可以使用exec()
方法。还有,你的远程服务器的操作系统是什么?太棒了。。为什么不使用put
?