将PHP输出存储到文件?

时间:2014-04-01 13:19:15

标签: php cron output

我正在研究一个每天运行一次的cron php脚本。因为它以这种方式运行,所以无法看到文件的输出。

我可以将我想要的所有消息写入变量,不断追加我想要写入文件的信息,但这将非常繁琐,我不需要预感。

是否有PHP命令告诉写缓冲区在某处写入日志文件?有没有办法访问已发送到缓冲区的内容,以便我可以看到我的脚本发出的消息。

例如,假设脚本说

PHP:

<?
  echo 'hello there';
  echo 'hello world';
?>

它应输出到一个文件说:&#39; hello therehello world&#39;;

有什么想法吗?这可能吗?

我已经知道了

file_put_contents('log.txt', 'some data', FILE_APPEND);

这取决于某些数据&#39;当我不知道某些数据是什么时?除非我把它放在一个变量中。我试图捕捉PHP输出的结果。

3 个答案:

答案 0 :(得分:9)

您可能希望在crontab中重定向输出:

php /path/to/php/file.php >> log.txt

或者使用PHP,例如file_put_contents()

file_put_contents('log.txt', 'some data', FILE_APPEND);

如果要捕获所有PHP输出,请使用ob_函数,如:

ob_start();
/*
We're doing stuff..
stuff
...
and again
*/
$content = ob_get_contents();
ob_end_clean(); //here, output is cleaned. You may want to flush it with ob_end_flush()
file_put_contents('log.txt', $content, FILE_APPEND);

答案 1 :(得分:1)

您可以使用ob_start()将脚本输出存储到缓冲区中。见php documentation ob_get_clean

  <?php

  ob_start();

  echo "Hello World";

  $out = ob_get_clean();
  $out = strtolower($out);

  var_dump($out);
  ?>

答案 2 :(得分:0)

如果你正在使用cron,我想你是在Unix机器上运行它,所以:

其中一种方法是在Unix中编写你想要stdout流的所有内容你可以将这个输出抓取到一个文件中:

在php脚本中:

$handle = fopen("php://stdout","w");

fwrite($handle,"Hello world"); // Hello world will be written to console
cron作业中的

将此输出抓取到文件:

@hourly php /var/www/phpscript.php >> /path/to/your/outputfile.txt

注意: >>运算符将附加到文件,>运算符将覆盖新数据的文件。首次写入

将自动创建文件

因此,您作为第二个参数调用fwrite的所有内容都将放在/path/to/your/outputfile.txt

您可以根据需要多次拨打fwrite。不要忘记按fclose($handle);

关闭处理程序