我想使用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脚本有什么问题。
答案 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文档的引用(链接见上文)
如果输出参数存在,那么指定的数组将用命令的每一行输出填充。