无法使用PHP将脚本输出捕获到文件中

时间:2013-06-14 20:37:54

标签: php tcl

我想使用PHP将TCL脚本的输出捕获到文件中。 我能够将hello world输出捕获到文件中,但是当我运行需要时间并且输出量很大的长脚本时,我不是。

这是我的代码:

 <?php
 ob_start();
 passthru(' /path/to/file/helloworld ');
 $out1 = ob_get_contents();
 ob_end_clean();
 $fp = fopen('/path/to/file/output.txt',w);
 fwrite($fp,$out1);
 fclose($fp);
 echo'<pre>', $out1,'</pre>';
 #var_dump($out1);
 ?>

请告诉我长TCl脚本有什么问题。

1 个答案:

答案 0 :(得分:1)

编辑: 对于长时间运行的脚本(如守护进程),我建议使用popen并从资源中流出内容。

示例:

<?php
$h = popen('./test.sh', 'r');                                                                                                                                                        
while (($read = fread($h, 2096)) ) {                                                                                                                                                 
    echo $read;
    sleep(1);                                                                                                                                                                        
}
pclose($h);

您应该检查php.ini中的“max_execution_time”。如果您在Web服务器上下文中,还要检查配置的超时。

编辑结束

您是否尝试过exec

第二个参数是对数组的引用,该数组用脚本输出

填充

简而言之:

<?php
$output = array();
exec('/path/to/file/helloworld', $output);
file_put_contents('/path/to/file/output.txt', implode("\n", $output));

示例:

test.sh:

#!/bin/bash                                                                                                                                                                          
echo -e "foo\nbar\nbaz";                                                                                                                                                             
echo -e "1\n2\n3"; 

test.php的:

<?php

$output = array();
exec('./test.sh', $output);
var_dump($output); 

输出:

php test.php
array(6) {
  [0]=>
  string(3) "foo"
  [1]=>
  string(3) "bar"
  [2]=>
  string(3) "baz"
  [3]=>
  string(1) "1"
  [4]=>
  string(1) "2"
  [5]=>
  string(1) "3"
}

官方php文档的引用(链接见上文)

  

如果输出参数存在,那么指定的数组将用命令的每一行输出填充。