我有一个ssh_exec()拒绝执行"cd"命令的问题.
如果我直接登录服务器并执行命令,它工作正常,所以我认为问题不在于我的命令.
我的代码如下:
$str = ssh2_exec($sshStream, 'cp /var/www/compressed.tar.gz /var/www/vhosts/demo-domain1.com/httpdocs/');
$errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR);
stream_set_blocking($str, true);
stream_set_blocking($errstr, true);
echo "Output: " . stream_get_contents($str);
echo "Error: " . stream_get_contents($errstr);
$str = ssh2_exec($sshStream, 'cd /var/www/vhosts/demo-domain1.com/httpdocs/');
$errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR);
stream_set_blocking($str, true);
stream_set_blocking($errstr, true);
echo "Output: " . stream_get_contents($str);
echo "Error: " . stream_get_contents($errstr);
$str = ssh2_exec($sshStream, 'tar xzf c-class.tar.gz');
$errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR);
stream_set_blocking($str, true);
stream_set_blocking($errstr, true);
echo "Output: " . stream_get_contents($str);
echo "Error: " . stream_get_contents($errstr);
Run Code Online (Sandbox Code Playgroud)
我以root身份登录.
第一个命令正确运行并将文件复制到该位置.第二个命令不执行,但不输出错误.第三个命令显示错误(显然因为前一个cd命令不起作用).
我知道它没有改变dirs,因为当我执行"pwd"时,它返回说它仍在根目录中.
如前所述,如果我从shell运行命令,它们执行正常,所以我99.9%确定我的语法是正确的.
这是由1和1提供的专用服务器,运行CentOS和Plesk 9.
Rin*_*g Ø 14
执行ssh2_exec()PHP会启动一个将ssh在远程服务器上执行的进程.
远程创建的shell进程有自己的环境,包括当前工作目录.
该cd命令将更改shell由第二个命令启动的工作目录.
当第二个命令结束时,shell就会死掉它.随着工作目录信息.
换句话说,在执行命令n + 1期间不会记住命令n shell环境.
如果你想在shell命令,同时视对方在环境方面的合作,你应该把一些命令在一个独特的ssh2_exec像
$str = ssh2_exec($sshStream, 'cd /var/www/vhosts/demo-domain1.com/httpdocs/;'
. 'tar xzf c-class.tar.gz');
$errstr = ssh2_fetch_stream($str, SSH2_STREAM_STDERR);
stream_set_blocking($str, true);
stream_set_blocking($errstr, true);
echo "Output: " . stream_get_contents($str);
echo "Error: " . stream_get_contents($errstr);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5012 次 |
| 最近记录: |