gpt4 book ai didi

php - php ://input and php://stdin有什么区别

转载 作者:可可西里 更新时间:2023-11-01 12:55:18 24 4
gpt4 key购买 nike

同样php://outputphp://stdout有什么区别?

我试图弄清楚服务器是如何提供 php://inputphp://output 的。我能想到的唯一方法(假设 php://inputphp://output 根据 this page in the manual 独立于神秘的 php.ini 文件) 将更改 stdinstdout 以同时引用连接套接字的文件描述符。但令我懊恼的是,我发现 php://stdinphp://stdout 也被定义了——大概是以不同的方式定义的。

这只是冗余还是这些文件名实际上指的是做不同的事情?谁能告诉我这是怎么回事?

最佳答案

区别在于您预期使用它们的环境。 php://stdin, php://stdout, php://stderr 直接映射到相关的POSIX file streams并旨在与 CLI SAPI 一起使用。另一方面,php://inputphp://output 旨在用于基于网络的 SAPI。

尝试从命令行运行这两个命令:

printf "foo" | php -r "var_dump(file_get_contents('php://stdin'));"

printf "foo" | php -r "var_dump(file_get_contents('php://input'));"

你会得到这样的输出:

Command line code:1:
string(3) "foo"

Command line code:1:
string(0) ""

因为 php://input 期望被像 CGI 或 mod_php 这样的网络 SAPI 使用,并且不会获得传递给它的 STDIN 的内容。同样,尝试使用 php://stdin 读取原始 POST 数据(php://input 的唯一实际用途)将失败。

php://output 通常可以在两种环境中使用,但它很少被使用,因为可以简单地使用 echo 输出。 php://stdout 是命令行代码的更合乎逻辑的选择,尽管使用 echo 通常更容易。

php://stderr 对于需要将信息、调试或错误消息输出到与程序输出不同的流的命令行程序员来说当然是无价的。

关于php - php ://input and php://stdin有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34278827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com