2015-10-18 66 views
1

看來,在我的服務器上popen()根本不起作用。我通過瀏覽器訪問test.php,文件postt1.phppostt2.php未被執行。沒有寫入article1.txtarticle2.txt文件。所有文件都在同一個目錄中。Popen不工作

可能是什麼問題?

在文件test.php我:

<?php 
$pipe1 = popen('postt1.php', 'w'); 
$pipe2 = popen('postt2.php', 'w'); 

pclose($pipe1); 
pclose($pipe2); 
echo "end"; 
?> 

內的文件postt1.php我:

<?php 
$tosave = "Hello there"; 

$file = fopen("article1.txt","w"); 
fwrite($file,$tosave); 
fclose($file); 
echo $tosave; 
echo "<br>done"; 
?> 

,並在postt2.php我有,只是我寫入文件article2.txt同樣的事情。

+1

POPEN需要一個命令第一個參數,你只是過客'postt1.php',我會說像' php postt1.php「。如果你想執行那些(postt1&postt2)文件,則使用'include'。 – Jigar

+0

你確定 - 在這個頁面上popen沒有另一個參數 - http://stackoverflow.com/questions/70855/how-can-one-use-multi-threading-in-php-applications – Brana

回答

0

postt1.php end postt2.php need shebang tags(#!)並執行權限。

通過告訴文件PHP解釋器位於文件的第一行(<?php!之前)來添加shebang標籤。最佳做法規定您應該通過env命令訪問解釋:

#!/usr/bin/env php 

<?php 
$tosave = "Hello there"; 

$file = fopen("article1.txt","w"); 
fwrite($file,$tosave); 
fclose($file); 
echo $tosave; 
echo "<br>done"; 
?> 

您還可以使用直接指向php一個家當:#!/usr/bin/php。但這在系統中便攜性較差。


您還必須確保這兩個文件具有可執行premissions:

$ chmod +x posttl.php