同样,php://output
和php://stdout
之间有什么区别?
我试图弄清楚服务器如何提供php://input
和php://output
。我能想到的唯一方法(假设php://input
和php://output
都独立于this page in the manual的神秘php.ini文件)将改变stdin
和{ {1}}都指向连接套接字的文件描述符。但令我懊恼的是,我发现stdout
和php://stdin
也被定义了 - 大概是以不同的方式。
这只是冗余还是这些文件名实际上是指做不同的事情?有人能告诉我这里发生了什么吗?
答案 0 :(得分:5)
不同之处在于您期望使用它们的环境。 php://stdin
,php://stdout
和php://stderr
直接映射到相关的POSIX file streams,并且打算与CLI SAPI一起使用。另一方面,php://input
和php://output
适用于基于Web的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之类的Web SAPI使用,并且不会获取传递给它的STDIN的内容。同样,尝试使用php://input
读取原始POST数据(php://stdin
的唯一实际用途)会失败。
php://output
通常可以在两种环境中使用,但很少使用,因为一个人可以简单地echo
输出。 php://stdout
是命令行代码更合乎逻辑的选择,尽管再次使用echo
通常更容易。
php://stderr
对于需要将信息,调试或错误消息输出到与程序输出不同的流的命令行程序员来说是无价的。