PHP不能执行任何外部命令?

我们从Slackware转移到CentOS这里,它工作的很好,没有通知,php停止执行外部呼叫,如调用“wc”和“spamc”。 所有这些调用都显示在error_log上,如下所示:

sh:/ usr / bin / spamc:权限被拒绝

path是正确的。 我们有正确的权限设置和Apache应该能够执行没有问题的文件。 我们不在safe_mode上,我们没有设置base_dir。 这不是SELinux,或者至lesssestatus说SELinux是禁用的。

概要:

  • PHP不能执行任何通过exec()或popen()
  • 二进制文件的path是正确的。
  • 我们不在安全模式
  • 我们没有设置base_dir
  • 二进制文件的权限允许apache用户执行它们
  • SELinux被禁用
  • 在php.ini上,disable_functions是空的
  • 我们不知道为什么它不起作用

PHP版本5.3.3和CentOS 5.5

任何人都有可能发生什么事情的线索? 提前致谢

发现错误。

例如,我试图执行/ usr / bin / tidy,usr文件夹有一个644的权限,类似于我的书中的lovecraftian恐怖。 我可以工作,因为我是根。

我发疯了,并决定检查命令的所有path组件的权限从根/文件夹到整洁的二进制文件,我发现所有权限设置正确,但usr文件夹烫发完全搞砸了。

这是固定的。

权限?

记住这个权限

“权限被拒绝”可以在path的任何地方,而不仅仅是你自己调用的文件。 所以请看“/ usr / usr / bin”和“/”。

PHP

这也可能是由于PHP没有编译它想要的东西。 你可以转弯,再试一次吗?

要做到这一点 – 你需要停止/启动apache / exim(或其他)w / strace打开:

strace -f -o trace.txt /etc/rc.d/init.d/servicename start 

通常这是apache顺便说一句

strace -f -o trace.txt /etc/rc.d/init.d/httpd start现在只需再次运行该函数

由于“-o”选项将结果保存到“trace.txt”文件中,我们继续前进并查看该文件:

 cat trace.txt | grep "/usr/bin/spamc" 

这应该让你看到一个更好的日志和提示发生了什么事情

确保你把这个closures – 或日志会变得非常大