我在文件夹"fold"中有一个简单的Python脚本,它是从PHP文件启动的。它在同一目录下创建一个文件,然后退出到PHP。
f = open("t.txt","w")
f.write("test")
f.close()
可以在PHP中调用:
$proc=proc_open("fold/simple.py",array(0=>array('pipe','r'),1=>array('pipe','w'),2=>array('pipe','w')),$pipes);
或
execute("python fold/simple.py");
等。
在我看来合乎逻辑的设置是:
- 我在文件夹和python文件的所有者中添加了apache组。
- 我允许在该文件夹上写组。
- 我将python文件设置为可执行的。
这看起来很正常,对吗?然而,从PHP报告的错误是没有写权限。我还测试了用户从PHP使用:
echo 'current user :'.exec('whoami');
,它是"apache",显然它属于谐音组。
那么,我哪里做错了,什么样的设置能满足最好和最简单之间的平衡?谢谢!
根据我的经验,我建议您创建一个目录,该目录仅用于由您的程序创建文件,可能是文件或其他东西,并将权限设置为777(chmod -R 777文件),其他目录应该是755,出于安全原因。
大家都说了,一般情况下设置777权限的目录是不好的!如果你知道你的脚本在哪里工作,这是没有必要的!
但是,回答你的问题,解决方案应该是改变apache:apache的权限到你想写的文件夹,更重要的是,不要依赖于你想要运行/读/写的文件的相对路径,但总是指定一个绝对路径:在python中,你可以在你想要写的文件名前加上…
from os.path import dirname, abspath
basedir = dirname(abspath(__file__)) + '/'