0

这真的很简单,但我根本无法让它工作。花了很多时间,我总是放弃。我创建了名为 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

4 回答 4

1

正如其他人所暗示的那样,区别可能在于权限。当您从命令行运行命令时,您通常与运行 apache 脚本的用户不同。

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

from inside 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 用户的执行权限,您将无法从浏览器运行它。

于 2013-03-22T22:08:14.283 回答
0

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

echo exec('whoami');

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

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

并检查错误..

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

Linux:为 whoami 返回的用户分配正确的权限以运行 python 脚本.. 不允许生成的用户名以具有全部管理权限的 root 身份运行.. 这是一个很大的不不

于 2013-02-22T00:45:34.207 回答
0

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

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

可能是 Apache 环境被禁止使用exec,或者 Apache 在没有executePython 脚本权限的不同用户下运行。

于 2013-02-22T00:08:51.067 回答
0

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

做:

sudo nano /etc/sudoers 

然后输入以下内容:

www-data ALL=(root) NOPASSWD:ALL
于 2015-11-30T11:32:37.583 回答