某个类型的perl文件在PHP exec函数执行时没有提供输出

时间:2014-07-20 10:09:51

标签: php linux perl

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

示例名为test.pl的Perl文件:

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

名为test.php的示例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)。

我的目标是获得输出。

编辑:解决了。感谢苛刻的回答。

1 个答案:

答案 0 :(得分:2)

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

您有几个选择。下面列出了两个:

  1. 致电STDERR时将STDOUT重定向至exec()

    `exec('perl test.pl 2>&1', $out, $r);`
    
  2. 在Perl脚本中将输出消息写入STDOUT

    如果预期输出,我会将您的print STDERR来电更改为简单的print来电。

  3. 此Stack Overflow答案中有更多选项: