【发布时间】:2016-06-23 21:23:51
【问题描述】:
我遇到了一个奇怪的问题。我有一个按钮设置,当单击它时,它将运行我使用 PHP 创建的 shell 脚本。 shell 脚本是两个 curl 命令。
curl -H "Accept: application/xml" "http://blah/blah" > /tmp/listofchannels.xml
curl -H "Accept: application/xml" "http://blah/blah" > /tmp/listofnodes.xml
echo "Done!"
我使用shell_exec()、exec() 和system() 用PHP 运行这个脚本,它运行成功。但它不会将输出重定向到文件/tmp/listofchannels.xml 和/tmp/listofnodes.xml。
我在 httpd 错误日志中使用了tail,它显示 curls 运行。使用system() 时,我什至会在我的网页上看到Done!,但它不会创建文件。
如果我自己从命令行运行脚本,它完全可以工作。文件确实会创建,但前提是我自己从命令行运行脚本而不是使用 PHP 代码。
有人知道为什么吗?
我认为这可能是权限问题,但我没有收到表明我没有权限的错误。
任何帮助都会很棒!
更新:
我发现了问题并修复了它。它是 SElinux。也许我应该提到我在 CentOS7 上这样做。 我所做的是创建一个新文件夹并让所有者 apache 然后允许 apache 写入它。
chown apache:apache /folder
sudo chcon -t httpd_sys_rw_content_t /folder
【问题讨论】:
-
为什么不用php curl?
-
我的意思是我想我可以。我只是好奇为什么这不起作用...我的意思是它运行脚本,所以为什么没有创建两个文件...我只是想了解现在发生了什么。
-
我赌的是权限问题
-
您可以将
true > /doesntexist/foo添加到您的脚本并检查bash: /doesntexist/foo: No such file or directory的错误日志,以确保您在正确的位置查找。如果你没有看到它,你应该找到错误的去向。如果您确实看到了,可能您的 Web 服务器已 chroot,因此您的 FS 有不同的视图。