php脚本执行python脚本写一些文件

时间:2014-02-05 16:01:41

标签: php python linux apache ubuntu-10.04

我有一个调用python脚本的php脚本,而脚本又负责将一些文件写入磁盘。

如果我通过在Web浏览器中输入其URL来执行php脚本,它可以执行几个与文件系统相关的任务:

  • 它可以创建一个目录
  • 它可以chmod the dir

但是它无法执行创建和编写其他文件的python脚本。

奇怪的是,如果我以www-data手动运行python脚本:

user@host $ sudo su www-data
passwd for sudo:
$ whoami
www-data
$ python my_script.py

它就像一个魅力。

我通过浏览器运行脚本时假设用户为www-data。那么为什么控制台中的结果会有所不同呢?


解决:

Python脚本从我的存储库导入一些模块开始,这些模块通过登录控制台上的.bashrc.bash_profile附加到路径中。浏览器无法向用户www-data提供这些模块。所以将它添加到python脚本解决了它:

import sys
sys.path.insert(0, 'path_to_my_modules')

解决了它。

我为这个问题道歉。它没有为用户带来所有必要的信息来导致解决方案。我想问题是如此广泛,以至于我很难开始考虑它的根源。

我缺乏一个好的调试技术来查看错误是什么。我注释掉了所有的python脚本,并以一个简单的print 'here'开头。逐行取消注释行显示我不再打印任何内容的地方(错误很明显)。

1 个答案:

答案 0 :(得分:1)

首先,不要假设用户是www-data。您应该从PHP脚本运行whoami的输出,看它是否为www-data。此外,您需要确保您的脚本具有+x或执行用户权限。

你应该read about execute permissions

您需要在PHP脚本上使用chown将所有权更改为www-data用户:

sudo chown www-data:www-data yourscript.php

然后你需要赋予用户执行权限:

sudo chmod u+x yourscript.php
相关问题