我有一个运行python脚本的index.php文件,如下所示:
shell_exec("/usr/custom/test.py")
test.py文件尝试写入文件(默认情况下目录中不存在),如下所示:
#!/usr/bin/env python
import io
with io.FileIO("foobar.txt, "w") as file:
file.write("Hello!")
现在,如果我在Ubuntu中以root身份直接运行此文件,它可以正常工作。该文件已创建并具有“Hello!”内部。
如果我通过php脚本运行它(通过访问我的index.php页面),我在/var/log/apache2/error.log中收到以下错误
Traceback (most recent call last):
File "/usr/custom/test.py", line 5, in <module>
with io.FileIO("foobar.txt", "w") as file:
IOError: [Errno 13] Permission denied: 'foobar.txt'
现在......我尝试了另一个只打印一些东西的python文件,我能够让它运行正常。所以这就是我感到困惑的地方。
文件夹和test.py文件的权限相同,如下所示:
-rwxrwxrwx 1 www-data www-data 102
我无法弄清楚为什么这不会让我写入文件。我甚至尝试先创建文件(触摸),然后赋予它权限......但它没有用。
有谁知道如何才能让它发挥作用?
答案 0 :(得分:1)
当你从php调用该脚本时,它会尝试在与python文件本身相同的文件夹中创建文件(在/usr/custom/
中),而不是php文件。要解决该问题,您需要为文件写入绝对路径:
with open('/var/www/html/foobar.txt', 'w') as file:
file.write("Hello!\n")
如果您需要在与php文件相同的位置创建该文件,则需要在path
调用中将shell_exec
作为参数传递。阅读this文档以进行参数解析。您可以在php中使用getcwd
来获取当前目录的路径。