popen失败了"sh:<command>:not found"

sma*_*ans 7 php shell popen sh

我正在开发一个服务器应用程序,我最近在测试服务器(Debian Squeeze)上遇到了这个奇怪的错误.

我传递给popen的每个可执行文件都失败了一个msg:

sh: sort: not found // happens to any command
Run Code Online (Sandbox Code Playgroud)

无论我是指向"类型"返回的完整路径还是保持简短,都会发生这种情况.如前所述,这只发生在一个测试环境中,增加了混乱,运行相同的操作系统并且没有任何问题.

Popen显然是使用sh来执行命令,但如果我通过命令行(bash或sh)运行相同的命令,一切都很好

提前致谢

(PS:甚至尝试使用Python os.popen只是为了解决这个问题,并且它有效!)

编辑 这是一个失败的简单调用:

$command="tail -10 myfile";
$handle = popen($command.' 2>&1','r');
if($handle){
  while (!feof($handle)){
  ....//process buffer
  }
}
Run Code Online (Sandbox Code Playgroud)

收益:

sh: tail: not found
Run Code Online (Sandbox Code Playgroud)

Spi*_*dey 1

调用 popen 时,可能您的 PATH 配置不正确。我猜这是一个 PHP 配置问题,但你可以通过以下方式绕过它:

  1. 运行which tail以确定 tail 程序的完整路径。
  2. popen使用 1 中找到的路径进行调用。