【问题标题】:Why isn't PHP's STDIN defined when operating with Apache?为什么在运行 Apache 时没有定义 PHP 的 STDIN?
【发布时间】:2015-10-12 12:32:25
【问题描述】:

我在 Centos 6 上运行 PHP 版本 5.5.24。http://php.net/manual/en/wrappers.php.php 似乎暗示我应该使用已定义的常量 STDIN,但是,如使用 Apache 执行时所示,它没有定义。

<?php
$input = fgets(STDIN);

注意:使用未定义的常量 STDIN - 在 /var/www/bidjunction/html/stdin.php 在第 2 行

警告:fgets() 期望参数 1 是资源,字符串在 /var/www/bidjunction/html/stdin.php 在第 2 行

编辑。它是从 CLI 定义的。让我更新一下标题。

[Michael@devserver ~]$ php -r 'echo(STDIN);'
Resource id #1
[Michael@devserver ~]$

【问题讨论】:

  • stdin 是一个文件句柄,而不是一个常量。你可以在 fread/fwrite 类型的操作中使用它,但它不是你可以在 echo/print 中使用的东西。这不是传统的define()'d 常量。
  • @MarcB $input = fgets(STDIN); 也会导致未定义的错误。另外,请参阅我编辑过的关于 CLI 的帖子。
  • stdin/stdout 通常也只能在 CLI php 中使用。
  • 你提到了 Apache。你是通过php-fpm 提供php 服务还是使用那个超级垃圾mod_php
  • @N.B.大概是后者。我该如何检查?

标签: php linux apache stdin


【解决方案1】:

根据 deceze 的评论。

FWIW,STDIN 似乎只由 CLI SAPI 定义: php.net/manual/en/features.commandline.io-streams.php

【讨论】:

    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 2010-09-27
    • 2011-11-29
    • 1970-01-01
    • 2016-06-09
    • 2016-02-20
    • 2014-01-01
    • 2018-08-21
    相关资源
    最近更新 更多