我创建了一个简单的测试文件,让我们用这个内容称它为exec.php:
<?php
exec('scp -r /vhosts/malta/docs/www/mysite/uploads/www.mysite.com/images/promotions/xmas-survey user@255.255.255.255:/vhosts/mysite/docs/www/images/promotions/xmas-survey/',$out);
print_r($out);
?>
Command Executed.
仅供参考:帐户用户无需密码即可访问255.255.255.255
问题在于:
当我从终端运行此文件时,如
php /vhosts/test/www/exec.php
该命令有效,但当我尝试从网上运行时
http://localhost/test/exec.php
命令没有。
有什么想法吗?
提前致谢
答案 0 :(得分:0)
您需要为运行Web服务器的用户(例如www-data,apache2等)创建从Web服务器到其他服务器的ssh登录,否则scp命令将无效。
创建ssh登录后,命令应该有效......
您可能希望使用rsa密钥保护ssh登录,以便在没有这样做的情况下提高安全性
答案 1 :(得分:0)
您可能需要指定scp的完整路径,这可能是错误的。 Web服务器用户通常在路径中没有相同的东西。
要实际诊断出错的地方,请将stderr重定向到可以从中读取的地方。
例如:
exec($yourcommand . " 2>&1", $out);
// print out the $out variable
答案 2 :(得分:0)
检查用户“www-data”是否具有运行exec.php文件所需的执行权限