2014-07-20 34 views
0

我的操作系统是Ubuntu 14.04,我有lampp。我想通过我的浏览器从PHP 执行一个perl文件。我只是使用exec函数(在PHP中)来做到这一点,它的工作原理。我已经在stackoverflow中看到类似的问题,但它们与此无关。某些类型的perl文件没有给PHP执行函数执行输出

例的Perl文件名为test.pl:

#!usr/bin/perl 
print "This is a perl file"; 

例PHP文件名为test.php的:

<?php 
$perl=exec('perl test.pl',$out,$r); //Works successfully 
print_r($out); //Outputs Array ([0]=>This is a perl file) 
?> 

但我需要执行一些其他的Perl文件。 我可以从命令行成功执行。让我们假设该文件的名称是: test2.pl

当命令在命令行给出了作为

perl test2.pl -u argument1 -m argument2 -p testresult 

这需要几分之一秒执行上述命令。 我得到命令行中的输出。

但是,当我从PHP执行相同的命令为:

<?php 
$perl=exec('perl test2.pl -u argument1 -m argument2 -p testresult',$out,$r); 
print_r($out); //Outputs Array () 
?> 

我的输出是

Array 
(
) 

现在我没有得到输出,但是perl的文件执行,但我无法获得$out的输出。我可以向你保证perl文件是被执行的,因为它在执行后也会生成某种文件。

我不明白为什么它不给我输出。

我也试图在PHP已经下列功能:,

exec 
system 
shell_exec 

他们都不是给我的输出,他们正在罚款test.pl而不是test2.pl(test.pl和上面提到了test2.pl)。

我的目标是获得输出。

编辑:解决。感谢hrunting的回答。

回答

2

你的第二个Perl脚本不会输出任何内容到STDOUT。在您的第一个Perl脚本中,print语句指定没有输出目标,因此它将默认为STDOUT。在第二个Perl脚本中,每个print语句要么转到文件,要么转到STDERR(您的--help消息除外)。由于PHP exec()函数仅捕获STDOUT上的输出,因此即使在手动运行时看到输出,运行时也不会以PHP输出。

您有几个选项。在你的Perl脚本

如果输出期望的呼叫exec()

`exec('perl test.pl 2>&1', $out, $r);` 
  • 输出消息写入STDOUT

    1. 重定向STDERRSTDOUT,:两个现介绍如下我会将您的print STDERR调用更改为简单的print电话。

    有这个堆栈溢出的答案更多的选择:

  • +0

    就解决了!我几乎放弃了所有的希望,并认为这种perl脚本不能被执行。非常感谢。我试了一下,它做到了。 –