2014-07-20 33 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腳本不能被執行。非常感謝。我試了一下,它做到了。 –