将PHP输出存储到文件?

将PHP输出存储到文件?,php,cron,output,Php,Cron,Output,我正在编写一个cronphp脚本,它将每天运行一次。因为它以这种方式运行,所以无法看到文件的输出 我可以将我想要的所有消息写入一个变量,不断地将我想要写入的信息添加到文件中,但这将非常乏味,而且我有一种预感,这是不必要的 是否有PHP命令告诉写入缓冲区在某个地方写入日志文件?是否有一种方法可以访问已经发送到缓冲区的内容,以便查看脚本生成的消息 例如,让我们假设脚本说 PHP: <? echo 'hello there'; echo 'hello world'; ?> 这取决

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

我可以将我想要的所有消息写入一个变量,不断地将我想要写入的信息添加到文件中,但这将非常乏味,而且我有一种预感,这是不必要的

是否有PHP命令告诉写入缓冲区在某个地方写入日志文件?是否有一种方法可以访问已经发送到缓冲区的内容,以便查看脚本生成的消息

例如,让我们假设脚本说

PHP:

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

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

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

php /path/to/php/file.php >> log.txt
或者使用PHP,例如:

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

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()将脚本输出存储到缓冲区中。看


如果您正在使用cron,我想您应该在Unix机器上运行它,以便:

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

@hourly php /var/www/phpscript.php >> /path/to/your/outputfile.txt
在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)关闭处理程序

问题是,在您的示例中,“一些数据”必须是所有输出的集合,是否有办法访问当前由PHP“响应”的内容?crontab的想法很好,但我没有权限告诉crontab将其结果写入文件,因为我在共享服务器上。为什么我要寻找这个解决方案。@JosephAstrahan得到了,FixedWesome,这就是我想要的,谢谢。将很快接受回答,这迫使我等待7分钟。如果我需要在不同时间打印PHP的状态,ob_get_clean很有用,因为它会为您清除缓冲区,很高兴知道+1
$handle = fopen("php://stdout","w");

fwrite($handle,"Hello world"); // Hello world will be written to console
@hourly php /var/www/phpscript.php >> /path/to/your/outputfile.txt