【发布时间】:2013-02-22 00:05:45
【问题描述】:
这真的很简单,但我根本无法让它工作。花了很多时间,我总是放弃。我创建了名为 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") 工作?
如果我在终端中输入它可以正常工作,但在浏览器中运行时就不行。
【问题讨论】:
-
用户权限问题
-
Dagon 暗示的是,当您在命令行上运行该页面时,它正在您的用户名下运行。所以php拥有的权限和你一样。如果你可以运行脚本,php 可以。当从 apache 调用时,php 在 apache 用户(通常是“apache”)下运行。用户 apache 必须具有 exec 运行 python 脚本的执行权限,并且很可能具有访问 python 脚本试图访问的任何内容的权限。还有,我不知道python脚本是做什么的,但是如果只是copy的话,php有copy的功能。
-
我回显了“whoami”,它说的是 Apache,但没有意义的是我使用 exec("python /usr/diskpurge/script.py") 执行 python 脚本在 Apache 目录之外,我的一个 php 脚本也没有问题,它也将“Apache”回显为 whoami。并且没有 php 错误或任何东西。