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

为什么PHP不能从web浏览器执行命令?,php,apache,exec,Php,Apache,Exec,这真的很简单,但我根本无法让它工作。花了很多时间,我总是放弃。我创建了名为copy.php的php脚本,它应该调用名为copy.py的python脚本 我想执行这样的命令行 <?php exec('/var/www/html/copy.py'); ?> 它确实执行了该功能并制作了一份副本。为什么web浏览器没有这样做 让我简化一下: 为什么exec(“cp/var/log/httpd/error\u log/var/www/html/path/to/php/script”)不能工

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

我想执行这样的命令行

 <?php exec('/var/www/html/copy.py'); ?>
它确实执行了该功能并制作了一份副本。为什么web浏览器没有这样做

让我简化一下:

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


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

与命令行相比,Apache环境可能适用不同的设置

使用
错误报告(E\u ALL)
ini\u set('display\u errors',true)
查看可能出现的错误


Apache环境可能被禁止使用
exec
,或者Apache在另一个用户下运行,而该用户在python脚本上没有
execute
权限。

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

echo exec('whoami')

将错误报告设置为报告所有:

ini_set('display_errors', true);
error_reporting(E_ALL);
并检查错误

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

Linux:
为whoami返回的用户分配运行python脚本的正确权限。。不允许生成的用户名以总管理权限的root用户身份运行。。正如其他人所暗示的,这是一个很大的禁忌,区别可能在于权限。当您从命令行运行命令时,您通常不是运行apache脚本的用户

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

echo exec('whoami')显示脚本的运行身份,即Apache


因此,您试图从web服务器运行的任何命令都不能作为Apache用户运行。您提到您可以让
exec(“python/usr/diskpurge/script.py”)
工作,但不能让
exec('/var/www/html/copy.py')
不工作。这是因为在一个实例中运行python,在另一个实例中尝试执行
copy.py
脚本。如果copy.py没有Apache用户的执行权限,您将无法从浏览器中运行它。

它不工作的唯一原因是您没有设置写入权限

做:

然后把下面的内容放进去:

www-data ALL=(root) NOPASSWD:ALL

用户权限问题Dagon暗示的是,当您在命令行上以您的用户名运行页面时。因此php拥有的权限与您相同。如果可以运行脚本,php也可以。从apache调用时,php在apache用户(通常是“apache”)下运行。用户apache必须具有exec运行python脚本的执行权限,并且很可能具有访问python脚本试图访问的任何内容的权限。另外,我不知道python脚本做什么,但如果它只是复制,php有一个复制功能。我回写了“whoami”,它说的是Apache,但没有意义的是,我使用exec(“python/usr/diskpurge/script.py”)在Apache目录外执行python脚本,而我的一个同样回写了“Apache”的php脚本没有问题就像我一样。没有php错误或任何错误。没有任何错误。我的一个php脚本在apache之外执行python脚本时没有出现问题,即使它的运行方式是apache
sudo nano /etc/sudoers 
www-data ALL=(root) NOPASSWD:ALL