2

我想使用 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 脚本有什么问题。

4

1 回答 1

1

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

例子:

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

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

编辑结束

你试过执行吗

第二个参数是对一个被脚本输出填充的数组的引用

简而言之:

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

例子:

测试.sh:

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

测试.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 文档的引用(链接见上文)

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

于 2013-06-14T20:46:10.993 回答