繁体   English   中英

从 php exec() 获取退出代码 127(未找到命令)

[英]Getting Exit Code 127 (Command not Found) from php exec()

编辑 - 在顶部添加新信息以提高可见性。 www-data 用户不能使用exec()命令。 所有尝试都会返回 127 错误。

我设置了一个简单的脚本就是这样

<?php
$res = exec("echo EXEC", $res1, $res2);
var_dump($res);
var_dump($res1);
var_dump($res2);
?>

当通过应用程序(当然作为 www-data 运行)执行时,这将返回 127 错误代码。
通过此命令执行时,它会完美运行sudo -u root php testExec.php
通过此命令执行时,它再次返回 127 错误代码sudo -u www-data php testExec.php

原始问题

尝试在 php 中使用exec命令时,我似乎只能得到错误代码 127。我正在尝试使用https://github.com/rialto-php/puphpeteer package 生成 pdf,它工作得很好但我找不到导致它现在失败的更改。

我一直在使用/usr/local/.nvm/versions/node/v14.2.0/bin/node作为节点的路径,但我也尝试将它复制到这里/node/v16.14.2/bin这样我就可以给出整个目录结构执行权限。 在任何一个/两个地方,节点由 www-data(php 运行的用户)所有,并具有执行权限 (755)。

从命令行运行'/node/v16.14.2/bin/node' '/var/www/html/vendor/nesk/puphpeteer/src/get-puppeteer-version.js'生成的初始命令)有效很好并返回预期结果"5.5.0"所以节点在那里并且可执行并且 get-puppeteer-version 脚本存在。

在排除故障后,我决定只测试 exec 并发现它对任何命令都不起作用。 我试过只运行exec("date"); exec("echo EXEC")并且它们也返回相同的退出代码 127。

disable_functions ini 设置为空(通过ini_get('disable_functions')空结果确认)。 未启用安全模式(通过ini_get('safe_mode')错误结果确认)。

如果有人对 exec 根本不起作用的原因有任何见解,那就太好了!

环境:
Ubuntu 18.04.4
PHP 8.1

于是进一步调查.. 我发现这确实是一个权限问题。 我仔细检查了该节点,/bin 文件夹中的所有内容都具有适当的执行权限。

我错过的(并且不确定它是如何改变的)是 /bin 文件夹本身没有适当的执行权限。 添加那些立即解决了我的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM