12

在 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");
?>

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

4

1 回答 1

26

正如php:// wrappers手册页上的手册所示:

php://output是一个只写流,它允许您以与printecho相同的方式写入输出缓冲区机制。

因此,如果要将输出写入浏览器,请使用php://output

另一方面,php://stdout

允许直接访问 PHP 进程的相应输入或输出流。

对于 Apache,此输出是 Apache 的标准输出句柄,通常在任何地方都看不到,因为这是 Apache 的控制台输出,通常在后台运行。如果您要在控制台的前台运行 Apache,那么您写入的任何内容都php://stdout将在控制台上可见。由于 Apache 在后台运行,因此stdout通常不会在任何地方捕获或写入数据。

要对此进行测试,请执行以下步骤:

  • 在前台运行 Apache(例如/usr/local/apache2/bin/httpd -D FOREGROUND -k start
  • 保持控制台窗口打开
  • 从浏览器运行脚本
  • stdout在控制台上查找您的输出。
于 2012-07-03T21:11:38.793 回答