2015-10-18 54 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