Wil*_*oom 7 php sockets io stdin stdout
同样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'));"
Run Code Online (Sandbox Code Playgroud)
您将获得如下输出:
Command line code:1:
string(3) "foo"
Command line code:1:
string(0) ""
Run Code Online (Sandbox Code Playgroud)
因为它php://input期望被CGI或mod_php之类的Web SAPI使用,并且不会获取传递给它的STDIN的内容。同样,尝试使用读取原始POST数据(的唯一真正用途php://input)php://stdin会失败。
php://output通常可以在两种环境中使用,但很少使用,因为一个人可以简单地echo输出。php://stdout对于命令行代码来说,是更合乎逻辑的选择,尽管再次使用它通常更容易echo。
php://stderr 对于需要将信息,调试或错误消息输出到与程序输出不同的流的命令行程序员来说,这无疑是无价的。
| 归档时间: |
|
| 查看次数: |
1212 次 |
| 最近记录: |