php支持的协议和封装协议总结(推荐)
序
如今网络程序的开发技术真的是百家争鸣,比如ASP.NET、PHP、JSP、Perl、AJAX等等。无论未来Web技术如何发展,了解Web应用程序之间通信的基本协议都是非常重要的,因为它可以让我们了解Web应用程序的内部工作。
PHP有很多内置的URL风格的封装协议,可以用于像fopen()、copy()、file_exists()和filesize()这样的文件系统功能。除了这些封装协议之外,您还可以通过stream_wrapper_register()注册自定义封装协议。
描述封装协议的注释:的URL语法只支持scheme://.不支持Scheme:/和Scheme:语法。
Php协议类型
文件://-访问本地文件系统http://-访问HTTP(s)网站FTP ://-访问FTP(s)URL PHP :///-访问各种I/O流zlib 3360///-压缩流数据://-数据(RFC 2397)glob :///-查找匹配的文件路径模式phar3360//-PHP存档ssh 2://-安全shell2rar3360
Allow _ URL _ fopen: on默认情况下,如果打开此选项,则会激活URL形式的fopen封装协议,以便可以访问URL对象文件。默认情况下,Allow _ URL _ include: off处于关闭状态。如果此选项打开,则允许包含文件://协议,如URL对象文件。
file ://-访问本地文件系统,独立于allow_url_fopen和allow_url_include
施用方式
文件://[文件的绝对路径和文件名]
http://127.0.0.1/code/1.php?file=file :///e : \ phpStudy \ WWW \ code \ phpinfo . PHP
Php://协议
PHP ://-访问各种输入/输出流(I/O流)
无需打开allow_url_fopen,只需打开php://input、php://stdin、php://memory和php://temp即可打开allow_url_include。
Php://stdin、php://stdout和php://stderr
Php://stdin、php://stdout和php://stderr允许直接访问Php进程的相应输入或输出流。
Php://stdin为只读,php://stdout和php://stderr为只写。
php://stdin
?PHP while($ line=fopen(' PHP ://stdin ',' r '){//打开我们的文件指针从stdin echo $line读取。\ n ';echo fgets($ line);//读取}?
php://stdout
?php $fd=fopen('php://stdout ',' w ');if ($fd) { echo $fd。\ n ';fwrite($fd,' test ');fwrite($fd,' \ n ');fc lose(FD美元);}?
php://stderr
?PHP $ stderr=fopen(' PHP ://stderr ',' w ');echo $stderr。\ n ';fwrite($stderr,' uknow ');fc lose($ stderr);
PHP ://过滤器
最常用的伪协议之一可以用来读取任意文件。
Php://filter是一个元封装器,设计用于数据流打开时过滤应用程序。这对于多合一文件功能非常有用,例如readfile(),file()和file_get_contents(),在读取数据流内容之前没有机会应用其他过滤器。
参数
名称描述资源=要过滤的数据流此参数是必需的。它指定要过滤的数据流。Read=读取链的过滤器列表。此参数是可选的。您可以设置一个或多个由管道字符分隔的过滤器名称。Write=写链的筛选器列表。此参数是可选的。您可以设置一个或多个由管道字符分隔的过滤器名称。两个链的筛选列表任何不以read=或write=为前缀的筛选列表都将根据情况应用于读链或写链。phpinclude($_GET['file'])?http://127.0.0.1/code/1.php?file=PHP ://filter/read=convert . base64-encode/resource=。PHP
PHP ://输入
Php://input可以访问请求的原始数据的只读流,并将post请求中的数据作为Php代码执行。
允许/开启允许/包含:开启
Zip://,bzip2://,zlib ://协议
zip://、bzip2://、zlib ://协议也可以在双关情况下正常使用;
Zip://、bzip2://、zlib ://都属于压缩流,可以访问压缩文件中的子文件。更重要的是,没有必要指定后缀名称。
允许使用:关闭/打开允许使用:关闭/打开使用
zip ://archive . zip # dir/file . txt
zip ://[压缩文件的绝对路径]#[压缩文件中的子文件名]
试验
把要执行的PHP代码写成phpcode.txt,对phpcode.txt进行zip压缩,压缩后的文件名为file.zip,如果可以上传zip文件,直接上传。如果你不能,将文件. zip重命名为file.zip并上传。其他压缩格式也可以这样做。
因为#忽略了get请求中的以下参数,所以在使用get请求时url应该编码为#并且在这里测试后相对路径不可行,所以只能使用绝对路径。
http://127.0.0.1/code/1.php?file=zip ://e : \ phpStudy \ WWW \ code/1 . zip # 1 . txt
Data://协议
Data://协议必须打开才能正常使用;
allow _ URL _ fopen:on allow _ URL _ include:http://127 . 0 . 0 . 1/code/1 . PHP?file=data :///text/纯文本,php phpinfo()?http://127.0.0.1/code/1.php?file=data :///text/plain;base64,pd9 wahagghwaw5mbygppz 4=
Glob://协议
glob ://-查找匹配的文件路径模式
?PHP $ it=new directorityerator($ _ GET[' file ']);foreach($it as $f) { printf('%s ',$ f-getFilename());echo '/br ';}?
期望://协议
预期://-处理交互流
默认情况下,封装协议不会打开
要使用expect://包装器,必须在pecl上安装expect扩展。
使用
期望://附加命令:HTTP协议无状态和连接:保持活动的区别
无状态意味着协议没有用于事务处理的内存,服务器不知道客户端处于什么状态。另一方面,在服务器上打开网页和之前在该服务器上打开网页之间没有联系
HTTP是一种无状态的面向连接的协议。无状态并不意味着HTTP不能保持TCP连接,也不意味着HTTP使用UDP协议(无连接)
自HTTP/1.1以来,默认情况下保持活动状态是打开的,并且保持连接功能。简单来说,当一个网页打开时,客户端和传输HTTP数据的服务器之间的TCP连接不会关闭。如果客户端再次访问此服务器上的网页,它将继续使用已建立的连接。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设置
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。
参考
Phphphp伪协议实现了命令执行的七种姿态
版权声明:php支持的协议和封装协议总结(推荐)是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。