PHP Wrappers
分类
- file:// — 访问本地文件系统
- http:// — 访问 HTTP(s) 网址
- ftp:// — 访问 FTP(s) URLs
- php:// — 访问各个输入/输出流(I/O streams)
- zlib:// — 压缩流
- data:// — 数据(RFC 2397)
- glob:// — 查找匹配的文件路径模式
- phar:// — PHP 归档
- ssh2:// — Secure Shell 2
- rar:// — RAR
- ogg:// — 音频流
- expect:// — 处理交互式的流
php://
直接访问PHP进程的输入或者输出流:
php://stdin
:只读php://stdout
:只写php://stderr
:只写
php://input
php://input
是可以访问请求的原始数据的只读流。
POST
请求的情况下,最好使用php://input
来替代$_HTTP_RAW_POST_DATA
,因为它不依赖于特定的php.ini
指令。
enctype="multipart/form-data"
的时候php://input
是无效的。
php://output
php://output
是一个只写的数据流,允许你以print
和echo
一样的方式写入到输出缓冲区。
php://fd
php://fd
允许直接访问指定的文件描述符,如php://fd/3
引用了文件描述符3。
php://memory和php://temp
php://memory
总是把数据存储在内存中
php://temp
会在内存量达到预定义的限制之后(默认2M)存入临时文件中。临时文件位置的决定和sys_get_temp_dir()
的方式一致。
php://filter
php://filter
是一种元封装器,设计用于数据流打开时的筛选过滤应用。这对于一体式的文件函数非常有用,类似readfile()
、file()
和file_get_contents()
,在数据流内容读取之前没有机会应用其他过滤器。
php://filter
目标使用一下的参数作为它路径的一部分。
名称 | 描述 |
---|---|
resource=<要过滤的数据流> | 这个参数是必须的。它指定了你要筛选过滤的数据流。 |
read=<读链的筛选列表> | 可选参数。可以设定一个或多个过滤器名称,以管道符/ 分隔。 |
write=<写链的筛选列表> | 可选参数。可以设定一个或多个过滤器名称,以管道符/ 分隔。 |
<; 两个链的筛选列表> | 任何没有以read= 或write= 作为前缀的筛选器列表会视情况应用于读链或写链。 |
封装协议摘要(针对php://filter
,参考被筛选的封装器
属性 | 支持 |
---|---|
受限于allow_url_fopen |
No |
受限于allow_url_include |
仅php://input 、php://stdin 、php://memory 、php://temp |
允许读取 | 仅php://stdin 、php://input 、php://fd 、php://memory 、php://temp |
允许写入 | 仅php://stdout 、php://stderr 、php://output 、php://fd 、php://memory 、php://temp |
允许追加 | 同写入 |
允许同时读写 | 仅php://fd 、php://memory 、php://temp |
支持stat() |
仅php://memory 、php://temp |
支持unlink() |
No |
支持rename() |
No |
支持mkdir() |
No |
支持rmdir() |
No |
仅支持stream_select() |
php://stdin 、php://stdout 、php://stderr 、php://fd 、php://temp |
1 |
|
可用过滤器列表
It is worth noting a slight asymmetry between stream_filter_append() and stream_filter_prepend(). Every PHP stream contains a small read buffer where it stores blocks of data retrieved from the filesystem or other resource in order to process data in the most efficient manner. As soon as data is pulled from the resource into the stream’s internal buffer, it is immediately processed through any attached filters whether the PHP application is actually ready for the data or not. If data is sitting in the read buffer when a filter is appended, this data will be immediately processed through that filter making the fact that it was sitting in the buffer seem transparent. However, if data is sitting in the read buffer when a filter is prepended, this data will NOT be processed through that filter. It will instead wait until the next block of data is retrieved from the resource.
字符串过滤器
string.rot13
:使用rot13对流数据进行加密,相当于str_rot13()
函数。
1 |
|
string.toupper
:大写string.tolower
:小写string.strip_tags
:参考strip_tags()
函数
转换过滤器
具体用法参考对应函数名。
convert.base64-encode
convert.base64-decode
convert.quoted-printable-encode
convert.quoted-printable-decode
convert.iconv.*
1 |
|
压缩过滤器
压缩过滤器不产生命令行工具如gzip
的头和尾信息。知识压缩和解压数据流中的有效载荷部分。
zlib.deflate
和zlib.inflate
1 |
|
bzip2.compress
和bzip2.decompress
加密过滤器
1 |
|