如何将STDOUT重定向到PHP中的文件?
下面的代码几乎有效,但这不是我真正的意思:
ob_start();
echo 'xxx';
$contents = ob_get_contents();
ob_end_clean();
file_put_contents($file,$contents);
有没有更自然的方式?
下面的代码几乎有效,但这不是我真正的意思:
ob_start();
echo 'xxx';
$contents = ob_get_contents();
ob_end_clean();
file_put_contents($file,$contents);
有没有更自然的方式?
可以将STDOUT直接写入PHP中的文件,这比使用输出缓冲更容易,更直接。
在脚本的开头执行此操作:
fclose(STDIN);
fclose(STDOUT);
fclose(STDERR);
$STDIN = fopen('/dev/null', 'r');
$STDOUT = fopen('application.log', 'wb');
$STDERR = fopen('error.log', 'wb');
为什么在一开始你可能会问?不应打开任何文件描述符,因为当您关闭标准输入、输出和错误文件描述符时,前三个新描述符将成为新的标准输入、输出和错误文件描述符。
在我这里的例子中,我将标准输入重定向到 /dev/null,并将输出和错误文件描述符重定向到日志文件。这是在 PHP 中制作守护程序脚本时的常见做法。
要写入应用程序.log文件,这就足够了:
echo "Hello world\n";
要写入错误.log,必须执行以下操作:
fwrite($STDERR, "Something went wrong\n");
请注意,当您更改输入、输出和错误描述符时,内置的 PHP 常量 STDIN、STDOUT 和 STDERR 将变得不可用。PHP不会将这些常量更新为新的描述符,并且不允许重新定义这些常量(毕竟它们被称为常量是有原因的)。
这是一种转移输出的方法,这似乎是原始问题
$ob_file = fopen('test.txt','w');
function ob_file_callback($buffer)
{
global $ob_file;
fwrite($ob_file,$buffer);
}
ob_start('ob_file_callback');
更多信息在这里:
http://my.opera.com/zomg/blog/2007/10/03/how-to-easily-redirect-php-output-to-a-file