PHP exec命令在终端上运行,但不在Web上运行

时间:2012-10-24 16:19:48

标签: php unix exec solaris scp

我创建了一个简单的测试文件,让我们用这个内容称它为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

命令没有。

有什么想法吗?

提前致谢

3 个答案:

答案 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文件所需的执行权限