什么';这两者的区别是什么php://input 及php://stdin
同样地,什么';这两者的区别是什么php://input 及php://stdin,php,sockets,io,stdout,stdin,Php,Sockets,Io,Stdout,Stdin,同样地,php://output和php://stdout 我试图弄清楚服务器是如何提供php://input和php://output。我能想到的唯一方法(考虑到php://input和php://output独立于神秘的php.ini文件(根据),将stdin和stdout更改为都引用连接套接字的文件描述符。但令我懊恼的是,我发现php://stdin和php://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
直接映射到相关的,并用于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的内容传递给它。同样地,尝试读取原始POST数据(只有php://input
)使用php://stdin
将失败
php://output
通常可以在两种环境中使用,但很少使用,因为可以简单地echo
输出<代码>php://stdout是命令行代码更合理的选择,不过通常只使用echo
更容易
php://stderr
对于需要将信息、调试或错误消息输出到与程序输出不同的流的命令行程序员来说,当然是非常宝贵的。您可以在这里阅读相关内容,它特别提到了these@NicRobertson这实际上是我在问题中提到的同一页。页面上写着“php://stdin
,php://stdout
和php://stderr
允许直接访问PHP进程的相应输入或输出流php://input是一个只读流,允许您从请求正文中读取原始数据。“这与stdin不一样吗?更让人困惑的是,文件上写着“php://output
是一个只写流,允许您以与打印和回显相同的方式写入输出缓冲机制。”这似乎意味着标准输出和输出是相同的。文档中解释的问题应该说明不理解它们的原因/点。重复文档的答案是没有帮助的。@Sven我认为文档中没有包括这一点。input和stdin都具有相同的权限,并且(在没有缓存的情况下)引用相同的文件描述符。这些不同之处不在文档中介绍。