用php运行外部程序

时间:2011-03-28 09:23:52

标签: php linux command exec

我的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

4 个答案:

答案 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)

检查php -i | less

这可能是其中一种安全措施,可以防止这些关键命令(或两者)。

答案 3 :(得分:0)

解决方案是在以下之前添加此命令:

export DISPLAY=:0

所以代码变成:

<?php
exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out");
?>