我正在开发一个每天运行一次的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);
关闭处理程序