PHP php://
简介
php:// 包装器允许访问各种 I/O 流。这包括标准输入、输出和错误流。内存中、磁盘支持和过滤流也可以使用 php:// 协议访问。
标准流
php://stdin、php://stdout 和 php://stderr 分别允许直接访问 PHP 进程的标准输入流设备、标准输出流和错误流。预定义常量 STDIN、STDOUT 和 STDERR 分别表示这些流。
php://input
php://input 允许只读访问 HTTP 请求正文中包含的原始数据。请注意,相同的数据也可在 $HTTP_POST_RAW-DATA 变量中获得(该变量现已弃用)。但是,如果 enctype 属性设置为 multipart/form-data,则 php://input 不可使用。
php://output
此包装器表示只写流,允许缓冲机制,类似于 print 和 echo 语句。
php://fd
可以通过此包装器访问文件描述符。标准流 STDIN、STDOUT 和 STDERR 分别分配了文件描述符 1、2 和 3。每个其他流都分配了递增的文件描述符。因此,php://fd/5 指的是文件描述符 5。
php://memory
这是一个读写流,允许将数据临时存储在内存中。php://temp 包装器与此类似。但是,在后者的情况下,数据存储在临时文件中而不是内存中。
php://filter
此包装器允许在打开流时对其应用过滤器。过滤器在使用 readfile()、file_get_contents() 和 file() 函数时特别有用。
示例
在以下示例中,控制台输入从 php://stdin 读取,并使用 php://stdout 显示输出。
<?php $file=fopen("php://stdin","r"); $x=fread($file,10); echo $x; $out=fopen("php://stdout","w"); fwrite($out, $x); fclose($file); ?>
php://input 流包装器允许从 HTTP 请求中获取原始数据。在以下示例中,HTML 表单使用 POST 方法将数据发布到 PHP 脚本。
<html> <body> <form action="testscript.php" method="POST"> <input type="text" name="name"> <input type="text" name="age"> <input type ="submit" value="submit"> </form> </body> </html>
用于检索原始 HTTP 数据的 PHP 脚本如下所示:
<?php $json = file_get_contents("php://input"); $data = json_decode($json); print_r($json); ?>