将 PHP 输出存储到文件


Store PHP Output To File?

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

我可以从字面上将我想要的所有消息写入一个变量,不断附加我想要写入文件的信息,但这将是非常乏味的,我有没有必要的预感。

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

例如,假设脚本说

.PHP:

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

它应该输出到一个文件,说:"你好,你好世界";

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

我已经知道了

file_put_contents('log.txt', 'some data', FILE_APPEND);
这取决于"一些数据",

当我不知道"一些数据"是什么时,除非我把它放在变量中。 我正在尝试捕获 PHP 输出的任何结果。

您可能

希望将输出重定向到crontab

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

或者将 PHP 与 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);
您可以使用

ob_start()将脚本输出存储到缓冲区中。请参阅 php 文档ob_get_clean

  <?php
  ob_start();
  echo "Hello World";
  $out = ob_get_clean();
  $out = strtolower($out);
  var_dump($out);
  ?>

如果您使用的是 cron,我想您在 Unix 机器上运行它,因此:

一种方法是编写您想要stdout流的所有内容,以便在 Unix 中您可以将此输出抓取到文件中:

在 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);关闭处理程序