我正在编写一个脚本来自动从我的 Windows 开发 PC 部署到共享托管服务器。
根据我是通过 Putty 还是 PHP 执行命令,我会得到不同的结果(两者都在我的电脑上运行).
在 putty 中,当我通过 SSH 登录服务器时,我可以运行如下命令:
cd /www/
ls -la #outputs contents of /www
但是当我通过 PHP 使用 phpseclib 执行此操作时,如下所示,任何cd
命令被完全忽略:
<?php
require_once __DIR__.'/vendor/autoload.php';
use phpseclib\Net\SSH2;
$ssh = new SSH2('ssh.mydomain.com');
if (!$ssh->login('mydomain.com', 'mypassword')) {
trigger_error("Login Failed", E_ERROR);
}
echo $ssh->exec('pwd');
$ssh->exec('cd /www/');
echo $ssh->exec('pwd'); // unchanged
echo $ssh->exec('ls -la'); // does NOT output contents of /www/
echo $ssh->exec('ls /www/ -la'); // DOES output contents of /www/
在上面指定绝对 URL 是一种可接受的解决方法。然而,以下是一个主要问题。
如果我上传一个文件,stuff.zip
进入 /www/ ,然后尝试提取它,通过 Putty 可以进行以下操作:
unzip /www/stuff.zip -d /www/
但如果我通过 PHP 尝试:
echo $ssh->exec('unzip /www/stuff.zip -d /www/');
我收到错误:
解压缩:无法找到或打开 /www/stuff.zip、/www/stuff.zip.zip 或 /www/stuff.zip.ZIP。
我努力了chmod 777 /www/stuff.zip
但这没有什么区别。
我该如何诊断/解决这个问题?