PHP在Apache上的标准输出

14

在Windows 7上,使用Apache 2.2中的php5_module作为PHP 5.3。

在上述配置中,stdout输出到哪里?

使用以下代码进行测试:

<?php
    $stdout = fopen('php://stdout', 'w');
    fwrite($stdout, "stdout<br />\n");

    $output = fopen('php://output', 'w');
    fwrite($output, "output<br />\n");
?>

这只在浏览器中显示output。标准输出(stdout)会发生什么?


请检查Apache和/或PHP日志,因为这是引用PHP进程的“stdout”流,我猜测那里就是它被发送的地方。 - nickb
不在Apache或PHP日志中。 PHP的stderr输出在Apache日志中。 - tkocjan
1个回答

27
根据php:// wrappers手册页面的说明,php://output是一个只写流,可以像printecho一样写入输出缓冲区机制。因此,如果要向浏览器输出内容,请使用php://output。另一方面,php://stdout 允许直接访问PHP进程的相应输入或输出流。在Apache的情况下,该输出是Apache的stdout句柄,通常不会在任何地方看到,因为这是Apache的控制台输出,并且通常在后台运行。如果您在控制台上以前台方式运行Apache,则会在控制台上看到任何写入php://stdout的数据。由于Apache在后台运行,通常不会捕获或写入任何stdout数据。要测试这个,请按照以下步骤操作:运行Apache在前台(例如:/usr/local/apache2/bin/httpd -D FOREGROUND -k start),将控制窗口保持打开状态,从浏览器运行您的脚本,在控制台上查找您的stdout输出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接