为什么PHP不能从Web浏览器执行命令?

时间:2013-02-22 00:05:45

标签: php apache exec

这很简单,但我根本无法工作。花了很多时间,我总是放弃。我创建了名为copy.php的php脚本,它应该调用一个名为copy.py的python脚本。

我想执行这样的命令行

 <?php exec('/var/www/html/copy.py'); ?>

真的很简单。

为什么我不能从php exec()执行python脚本? python脚本中的函数是从另一个目录(Apache之外)获取error_log的副本到html目录。

如果我从终端

运行它
 > php copy.php

它确实执行了该功能并制作了副本。为什么网络浏览器没有这样做?

让我简化一下:

为什么不能exec(“cp / var / log / httpd / error_log / var / www / html / path / to / php / script”)工作?

如果我在终端中键入它,但在浏览器中运行时不能正常工作。

4 个答案:

答案 0 :(得分:1)

它不起作用的唯一原因是你没有设置写权限!

做:

sudo nano /etc/sudoers 

然后提出以下内容:

www-data ALL=(root) NOPASSWD:ALL

答案 1 :(得分:0)

也许不同的设置适用于Apache环境与命令行。

使用error_reporting(E_ALL);ini_set('display_errors', true)查看可能出现的错误。

可能禁止Apache环境使用exec,或者Apache运行在对python脚本没有execute权限的其他用户下运行。

答案 2 :(得分:0)

听起来像是一个权限错误。检查您的服务器是否以足够的权限运行。

echo exec('whoami');

将错误报告设置为全部报告:

ini_set('display_errors', true);
error_reporting(E_ALL);

并检查错误..

如果您的 whoami 返回的用户不是SU系列(linux)或管理员(Windows)的成员,请重新申请您的权限。

Linux中: 分配由whoami返回的用户运行python脚本的正确权限。不要允许生成的用户名以root用户身份运行,具有总管理权限。这是一个很大的不可能

答案 3 :(得分:0)

正如其他人所提到的,差异可能是权限。从命令行运行命令时,通常与运行apache脚本的用户不同。

换句话说,如果从命令行键入whoami,您可能会得到您的用户帐户名称。

php中的echo exec('whoami');显示脚本运行的对象,即Apache。

因此,您尝试从Web服务器运行的任何命令都无法以Apache用户身份运行。您提到您已经能够exec("python /usr/diskpurge/script.py")工作,但没有exec('/var/www/html/copy.py')没有。这是因为在一个实例中,您正在运行python,而在另一个实例中,您正在尝试执行copy.py脚本。如果copy.py没有Apache用户的执行权限,那么您将无法从浏览器运行它。