【问题标题】:PHP stdout on ApacheApache 上的 PHP 标准输出
【发布时间】:2012-07-03 20:34:30
【问题描述】:

在 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。标准输出会怎样?

【问题讨论】:

  • 检查 apache 和/或 php 日志,因为这是引用 PHP 进程的 stdout 流,我猜这就是它被发送的地方。
  • 不在 apache 或 php 日志中。 PHP stderr 输出在 apache 日志中。

标签: php apache


【解决方案1】:

正如手册在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 输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-25
    • 2020-04-12
    • 2012-07-20
    • 1970-01-01
    • 2017-04-08
    • 2019-01-08
    • 2010-10-29
    • 2013-09-18
    相关资源
    最近更新 更多