我有一个调用python脚本的php脚本,而脚本又负责将一些文件写入磁盘。
如果我通过在Web浏览器中输入其URL来执行php脚本,它可以执行几个与文件系统相关的任务:
但是它无法执行创建和编写其他文件的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'
开头。逐行取消注释行显示我不再打印任何内容的地方(错误很明显)。
答案 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