我正在研究一个每天运行一次的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输出的结果。
答案 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);