我们在这里从 Slackware 迁移到 CentOS,它运行良好,然后突然没有通知,php 停止执行外部调用,例如对“wc”和“spamc”的调用。所有此类调用都显示在 error_log 中,如下所示:
sh:/usr/bin/spamc:权限被拒绝
路径正确。我们已正确设置权限,Apache 应该能够毫无问题地执行文件。我们不是在 safe_mode 上,我们没有设置 base_dir。这不是 SELinux,或者至少 sestatus 显示 SELinux 已禁用。
概括:
- PHP 无法通过 exec() 或 popen() 执行任何操作
- 二进制文件的路径是正确的。
- 我们没有处于安全模式
- 我们没有设置 base_dir
- 二进制文件的权限允许 apache 用户执行它们
- SELinux 已禁用
- 在 php.ini 上 disable_functions 为空
- 我们不知道为什么它不起作用
PHP 版本 5.3.3 和 CentOS 5.5
有人知道会发生什么吗?提前致谢
答案1
发现错误。
例如,我尝试执行 /usr/bin/tidy,usr 文件夹的权限为 644,在我看来,这类似于洛夫克拉夫特式的恐怖。我可以工作,因为我是 root。
在我疯狂地决定检查从根目录 / 文件夹到整洁二进制文件的命令的所有路径组件的权限后,我发现所有权限都设置正确,但 usr 文件夹权限完全被搞砸了。
这是已修复的。
答案2
权限?
这会影响权限...请记住
“权限被拒绝”可以出现在路径的任何地方,而不仅仅是你调用的文件本身。因此,也请查看“/usr /usr/bin”和“/”。
PHP
这也可能是因为 php 没有编译所需的内容。您可以打开 strace 并重试吗?
要做到这一点 - 你需要停止/启动 apache / exim (或其他任何程序)并打开 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"
这应该可以让你看到更好的日志和正在发生的事情的提示
确保关闭 strace - 否则日志会变得非常大