我有一个php脚本,它调用一个python脚本,python脚本反过来负责将一些文件写入磁盘。
如果我通过在web浏览器中输入url来执行php脚本,它可以执行几个与文件系统相关的任务:
- 它可以创建一个目录
- 它能够chmod目录
但是它不能执行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条答案
按热度按时间amrnrhlw1#
首先,不要假设用户是www-data。您应该从运行PHP脚本的
whoami
获取输出,以查看它是否为www-data
。此外,您需要确保脚本对用户具有+x
或execute权限。你应该read about execute permissions。
您需要在PHP脚本中使用
chown
将所有权更改为www-data
用户:字符串
然后你需要给予用户执行权限:
型