我必须在 PHP 中获取有关操作系统的基本信息:
$p = shell_exec('cat /etc/*-release 2>&1');
返回:
cat: '/etc/*-release': No such file or directory
该命令通过 PuTTY 在终端/CLI 中正常运行。
我目前最好的解释是 PHP 需要设置路径。所以我尝试了这个:
$p = shell_exec('echo $PATH');
返回:
/bin:/usr/bin
echo $PATH
当我直接在终端中运行时,我得到了一个:
分隔列表。所以我把所有这些都直接放到了 PHP 文件中,如下所示:
putenv('/etc');
//plus others
仍然没有结果。我知道shell_exec()
与其他命令配合使用效果很好shell_exec('whoami');
。在终端/CLI 中,我以与 PHP 8.3 完全相同的用户身份登录。
我还遗漏了什么?
这里有多个问题。
fopen
。*-release
这是一个有效的文件名。/etc
,但是...cat
,而是找不到您作为参数提供的文件……对平台的一般了解是编程的一个很好的起点。putenv('/etc');
不是如何putenv
工作的。环境变量通常是key=value
-pairs。问题在于 PHP 被设置为在
chroot
jail 中运行。我已经尝试了所有其他可能性。多亏了 @vidarlo 的评论,我才发现这一点。我能够通过 CageFS 插件解决 WHM 中的问题。PHP 使用的 Linux 用户被设置为执行,我将其从关联中删除。