2011-03-28 328 views
0

我对php有问题!我想用php运行一个外部程序。这个程序在命令行和Linux平台上工作。所以它一定很好。但我尝试更多的时间,我不能运行它。所以怎么了! 这是该程序的链接:http://www.lalescu.ro/liviu/fet/ ,这是其在命令行正常工作的命令,而不是在PHP的情况下:用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

它可以帮助我们,如果你格式化你的代码,所以我们可以看到你试图运行什么。 – 2011-03-28 09:25:52

+1

你确定你在正确的子目录下运行./fet吗? – stillstanding 2011-03-28 09:28:01

+0

好,我现在去编辑我的问题。 – mkotwd 2011-03-28 09:28:27

回答

0

它看起来像你正在运行FET从本地安装(基于您发布的./fet命令)。

您需要将您的fet安装位置添加到您的PATH变量中。

在Linux系统上,编辑您的〜/ .bashrc,并添加以下内容:

export PATH=$PATH:/home/mkotwd/fet 

如果/家庭/ mkotwd/FET是你已经安装了FET。您也可以创建一个目录〜/ bin,将它添加到您的PATH中(如上所述),并创建一个指向您的fet可执行文件的符号链接〜/ bin/fet。这是推荐的解决方案,因为您不必在PATH中添加将来可能要运行的每个本地命令的目录,只需在〜/ bin中为每个可执行文件创建符号链接

您可能还想要检查出http://php.net/manual/en/function.exec.php的调用细节,安全注意事项以及由使用该命令执行各种任务的用户发布的其他提示。

+0

是我尝试所有这一切,但不是工作,执行命令返回0 int如果完成, fyi函数返回1的值! – mkotwd 2011-03-28 09:39:52

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

能力UPDATE

为了让事情更清晰,请尝试运行此命令:

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"); 
} 

UPDATE

为@mkotwd告诉另一个答案(试图调试代码后,上面)。问题是因为fet试图访问X服务器。所以,作为@mkotwd答案是解决方案的补充:

export DISPLAY=:0 

,并成为命令:

exec("export DISPLAY=:0 && fet --inputfile=Hopwood.fet --outputdir=out"); 
+0

不幸的是,我设置了正确的权限和整个路径,但没有工作! – mkotwd 2011-03-28 09:37:00

+0

如果权限是正确的(您需要在程序和输入/输出目录上执行,并在'fet'和它需要的任何资源上读取+执行权限),并且您已经检查过网络服务器没有运行chroot,没有禁用执行功能,那么它将工作。回去再试一次。 – symcbean 2011-03-28 11:59:13

+0

@symcbean谢谢,如果你可以试试这个程序,我把链接设置为 – mkotwd 2011-03-28 13:07:33

0

检查php -i | less为:

它可能是防止这些重要命令(或两者)的安全措施之一。

+0

执行命令适用于其他程序,我尝试,如调整与Inkscape和mkdir命令,ls ..安全模式关闭! – mkotwd 2011-03-28 09:52:04

0

的解决方案是之前添加此命令:

export DISPLAY=:0 

所以代码变成:

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

您可能已经提到过,默认情况下,fet会尝试启动一个窗口。 – Amey 2011-03-29 10:05:07

+0

@Amey是的,我从错误日志中读到这个.. – mkotwd 2011-03-29 11:58:09

+0

@Amey,你应该阅读整个评论和问题和答案;) – ariefbayu 2011-03-29 21:40:26