【问题标题】:Run Shell script using PHP使用 PHP 运行 Shell 脚本
【发布时间】: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 有不同的视图。

标签: php linux bash shell curl


【解决方案1】:

我发现了问题并修复了它。它是 SElinux。也许我应该提到我在 CentOS7 上这样做。我所做的是创建一个新文件夹并让所有者 apache 然后允许 apache 写入它。

chown apache:apache /folder
sudo chcon -t httpd_sys_rw_content_t /folder

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 2012-01-15
    • 2014-10-10
    • 2013-04-20
    • 1970-01-01
    • 2012-03-28
    • 1970-01-01
    相关资源
    最近更新 更多