Apache上的PHP stdout

tko*_*jan 8 php apache

在Windows 7的Apache 2.2中使用PHP 5.3作为php5_module.

stdout在上面的配置中去了哪里?

使用以下代码进行测试:

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

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

这仅显示output在浏览器中.stdout会发生什么?

dre*_*010 21

正如手册在php://包装器手册页上显示:

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在控制台上查找输出.