php 中 passthru 的意外行为

php 中 passthru 的意外行为

我已经在 ubuntu 服务器 12.04 上设置了 nginx 和 php。我有以下 php 文件:

<?php
echo "Hello ";
echo passthru("cat /proc/meminfo");
echo "world. I am ";
echo passthru("whoami");   
?>

从命令行运行时,此命令运行正常,php 返回 /proc/meminfo 中的文本。但是,通过 nginx 运行时,我看到的是以下内容:

Hello world. I am www-data 

显然,passthru 正在运行。但是,我似乎无法读取 /proc 中的任何内容。/proc 上的权限是 dr-xr-xr-x,并且我已确认 nginx 和 php 运行的 www-data 用户可以访问该目录。我已打开 php 日志记录,没有与此相关的错误消息。

有什么建议吗?

编辑:安全模式已关闭。

答案1

因此,我们离线修复了这个问题——我把这个问题放在这里,以便下一个遇到这个问题的人可以参考:

我们验证了使用 cat 的完整路径可以解决问题。没有可见的错误,因为 passthru 不会捕获 stderr(错误是找不到 cat)。然后 River 发现 $PATH 被设置为错误,并修复了它。

相关内容