我的操作系统是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)。
我的目标是获得输出。
编辑:解决了。感谢苛刻的回答。
答案 0 :(得分:2)
您的第二个Perl脚本未向STDOUT
输出任何内容。在您的第一个Perl脚本中,print
语句指定没有输出目标,因此默认为STDOUT
。在第二个Perl脚本中,每个print
语句都转到文件或转到STDERR
(除了--help
消息)。由于PHP exec()
函数仅捕获STDOUT
上的输出,因此即使您在手动运行时看到输出,在运行时也不会在PHP中输出。
您有几个选择。下面列出了两个:
致电STDERR
时将STDOUT
重定向至exec()
`exec('perl test.pl 2>&1', $out, $r);`
在Perl脚本中将输出消息写入STDOUT
如果预期输出,我会将您的print STDERR
来电更改为简单的print
来电。
此Stack Overflow答案中有更多选项: