我需要使用 php 执行一个程序,有问题的文件是 ClustalW (clustalw2)。我的apache用户是使用fish shell的http,所以我将clustalw2移动到/srv/http/Clustal
并将目录添加到fish路径。
如果我使用终端登录 http 并运行,clustalw2 -INFILE=input_file -OUTFILE=output_file
一切都会按预期工作。
但每次我运行时都shell_exec('clustalw2 -INFILE=input_file -OUTFILE=output_file');
没有任何反应,并且我收到以下错误日志:sh: line 1: clustalw2: command not found
如果我运行:
<?php
echo "USER: ".shell_exec('whoami')."<br>";
echo "SHELL: ".shell_exec('echo "$SHELL"')."<br>";
echo "WHICH clustalw2: ".shell_exec('which clustalw2');
输出:
用户:http
shell:/usr/bin/fish
其中 clustalw2:
如果我which clustalw2
使用 http 用户在终端中运行:
/srv/http/Clustalw/clustalw2
答案1
找不到您的程序,clustalw2
因为clustalw2
它不在$PATH
.
对于您的情况,最简单的解决方案是替换clustalw2
为完整路径,/srv/http/Clustalw/clustalw2
作为shell_exec
.