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