我的PHP有问题!我想用php运行外部程序。这个程序在命令行和linux平台上工作。所以它必须工作得很好。但我尝试了更多的时间,我无法运行它。怎么了! 这是该计划的链接:http://www.lalescu.ro/liviu/fet/ 这是在命令行中运行良好的命令,而不是php中的情况:
./fet --inputfile=Hopwood.fet --outputdir=out
这是php代码:
<?php
`./fet --inputfile=Hopwood.fet --outputdir=out`
?>
我希望能解决这个问题。
提前谢谢..
更新我上传可执行程序和Hopwood.fet文件供您试用.. 这是一个链接: http://rapidshare.com/files/454756427/fet.tar.gz
答案 0 :(得分:2)
尝试完整路径:
/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out
所以你最终会执行:
exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out");
另外,请确保正在运行的进程能够写入/path/to/your/out
<强>更新强>
为了使事情更清楚,请尝试运行此命令:
exec("/path/to/installed/fet --inputfile=/path/to/your/Hopwood.fet --outputdir=/path/to/your/out 2> /tmp/fet.error.log", $output, $status);
echo "status: " . $status;
echo "output: " . implode("\n", $output);
if(file_exists("/tmp/fet.error.log"))
{
echo "Error Log: " . file_get_contents("/tmp/fet.error.log");
}
<强>更新强>
正如@mkotwd在另一个答案中所说的那样(在上面尝试调试代码之后)。问题是因为fet
试图访问X Server。所以,正如@mkotwd回答的那样,解决方案是添加:
export DISPLAY=:0
,命令变为:
exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out");
答案 1 :(得分:0)
看起来你正在从本地安装运行fet(基于你发布的./fet命令)。
您需要将胎儿安装的位置添加到PATH变量中。
在Linux系统上,编辑〜/ .bashrc,并添加以下内容:
export PATH=$PATH:/home/mkotwd/fet
如果/ home / mkotwd / fet是你安装fet的地方。
或者,你也可以创建一个目录〜/ bin,如上所述将它添加到你的PATH中,并创建一个指向你的fet可执行文件的符号链接〜/ bin / fet。这是推荐的解决方案,因为您不必将PATE添加到将来可能要运行的每个本地命令的目录中,您只需为〜/ bin中的每个可执行文件创建符号链接
您可能还想查看http://php.net/manual/en/function.exec.php有关使用该命令执行各种任务的用户发布的呼叫详细信息,安全注意事项和其他提示。
答案 2 :(得分:0)
答案 3 :(得分:0)
解决方案是在以下之前添加此命令:
export DISPLAY=:0
所以代码变成:
<?php
exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out");
?>