이 기사에서는 주로 PHP의 특수 프로토콜을 소개하고, php:// 프로토콜에 대해 자세히 설명하므로 관심 있는 친구가 더 자세히 알아볼 수 있습니다.
php:// — 다양한 입/출력 스트림(I/O 스트림)에 액세스
설명
PHP는 액세스를 허용하는 다양한 입/출력(IO) 스트림을 제공합니다. PHP 입력 및 출력 스트림, 표준 입력 및 출력 및 오류 설명자, 메모리 및 디스크 백업의 임시 파일 스트림, 기타 읽기 및 쓰기 파일 리소스에서 작동할 수 있는 필터.
php://stdin, php://stdout 및 php://stderr
, 직접 액세스 허용
PHP 프로세스의 해당 입력 또는 출력 스트림입니다. 데이터 스트림은 복사된 파일 설명자를 참조하므로 파일을 열었다가 닫으면
이러한 래퍼를 수동으로 여는 대신 실제 참조STDIN
并不受影响。 注意 PHP 在这方面的行为有很多 BUG 直到 PHP 5.2.1。 推荐你简单使用常量 STDIN
、 STDOUT
和 STDERR
인 복제본을 닫으세요.
은 읽기 전용이고 쓰기 전용입니다.
php://input
은 요청된 원시 데이터에 액세스할 수 있는 읽기 전용 스트림입니다.
POST 요청의 경우 특정 지시문에 의존하지 않으므로 대신 사용하는 것이 좋습니다.
게다가 이 경우에는 기본적으로 패딩이 없습니다.
Always_populate_raw_post_data를 활성화하는 것보다 잠재적으로 더 적은 메모리가 필요할 수 있습니다. enctype="multipart/form-data"가 유효하지 않습니다.
Note: 열린 데이터 스트림은 한 번만 읽을 수 있습니다.
데이터 스트림은 탐색 작업을 지원하지 않습니다. 그러나 SAPI 구현에 따라 요청 본문 데이터가 저장되면 다른 데이터 스트림을 열고 다시 읽을 수 있습니다.
일반적으로 이는 POST 요청에만 해당되며 PUT 또는 PROPFIND와 같은 다른 요청 방법에는 해당되지 않습니다.
php://output
은 쓰기 전용 데이터 스트림입니다.
echo와 같은 방식으로 print를 허용합니다.
출력 버퍼에 씁니다.
php://fd
지정된 파일 설명자에 대한 직접 액세스를 허용합니다.
예를 들어 파일 설명자 3을 참조합니다.
php://memory 및 php://temp
과 유사한 파일입니다.
임시 데이터를 읽고 쓸 수 있는 데이터 스트림용 래퍼입니다. 둘 사이의 유일한 차이점은 항상 데이터를 메모리에 저장하는 반면, 메모리 양이 미리 정의된 제한에 도달하면 삭제된다는 것입니다(기본값은
2MB)이 임시 파일에 저장됩니다. 임시 파일 위치는 sys_get_temp_dir()과 같은 방식으로 결정됩니다.
메모리 제한은 /maxmemory:NN을 추가하여 제어할 수 있습니다. NN은 메모리에 보관되는 최대 데이터 양(바이트)을 초과하는 경우 임시 파일이 사용됩니다.
php://filter
은 메타 래퍼입니다.
데이터 스트림이 열릴 때 애플리케이션을 필터링하도록 설계되었습니다. 이는 readfile(), file() 및 file_get_contents()과 같은 올인원 파일 기능에 유용합니다.
데이터 스트림 콘텐츠를 읽기 전에는 추가 필터를 적용할 기회가 없습니다.
대상은 경로의 일부로 다음 매개변수를 사용합니다.
경로에 복합 필터 체인을 지정할 수 있습니다. 이러한 매개변수의 자세한 사용에 대해서는 특정 예를 참조하십시오.
php://filter 매개변수
Name |
Description |
resource=<필터링할 데이터 스트림> |
이 매개변수는 필수입니다. 필터링하려는 데이터 스트림을 지정합니다. |
read=<체인 필터 목록 읽기> |
이 매개변수는 선택사항입니다. 파이프 문자(|)로 구분된 하나 이상의 필터 이름을 설정할 수 있습니다. |
write=<체인 필터 목록 쓰기> |
이 매개변수는 선택사항입니다. 파이프 문자(|)로 구분된 하나 이상의 필터 이름을 설정할 수 있습니다. |
<두 체인에 대한 필터 목록> |
read= 또는 write= 접두사가 붙지 않은 모든 필터 목록은 적절하게 읽기 또는 쓰기 체인에 적용됩니다. |
선택 사항
캡슐화 프로토콜 요약(php://filter의 경우 필터링된 래퍼를 참조하세요.)
속성 |
지원됨 |
allow_url_fopen의 첫 번째 | 아니요 |
우선 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://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()
아니요 |
|
는 stream_select()
php://stdin, php://stdout, php://stderr, php://fd 및 php://temp만 지원합니다. |
|
업데이트 로그
예
예 #1 php://temp/maxmemory
이 옵션 옵션을 사용하면 임시 사용을 시작할 수 있습니다. 파일 이전의 최대 메모리 제한입니다.
<?php
// Set the limit to 5 MB.
$fiveMBs = 5 * 1024 * 1024;
$fp = fopen("php://temp/maxmemory:$fiveMBs", 'r+');
fputs($fp, "hello\n");
// Read what we have written.
rewind($fp);
echo stream_get_contents($fp);
?>
로그인 후 복사
<code style="font-family:'Fira Mono', 'Source Code Pro', monospace;display:block;"><br/>
Example #2 php://filter/resource=<待过滤的数据流>
这个参数必须位于 的末尾,并且指向需要过滤筛选的数据流。
<?php
/* 这简单等同于:
readfile("http://www.example.com");
实际上没有指定过滤器
*/readfile("php://filter/resource=
?>
로그인 후 복사
Example #3 php://filter/read=<读链需要应用的过滤器列表>
这个参数采用一个或以管道符 | 分隔的多个过滤器名称。
<?php
/* 这会以大写字母输出 www.example.com 的全部内容 */
readfile
(
"php://filter/read=string.toupper/resource=http://www.example.com"
);
/* 这会和以上所做的一样,但还会用 ROT13 加密。 */
readfile
(
"php://filter/read=string.toupper|string.rot13/resource=http://www.example.com"
);
?>
로그인 후 복사
<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><br/>
Example #4 php://filter/write=<写链需要应用的过滤器列表>
这个参数采用一个或以管道符 | 分隔的多个过滤器名称。
<?php
/* 这会通过 rot13 过滤器筛选出字符 "Hello World"
然后写入当前目录下的 example.txt */
file_put_contents
(
"php://filter/write=string.rot13/resource=example.txt"
,
"Hello World"
);
?>
로그인 후 복사
<span style="color:rgb(0,0,0);"><span style="color:rgb(0,0,187);"></span></span><br>
예 #2 php://filter/resource=< ;필터링할 데이터 스트림>
이 매개변수는 필터링해야 하는 데이터 스트림의 끝에 위치해야 하며 이를 가리켜야 합니다.
rrreee예제 #3 php://filter/read=<체인을 읽을 때 적용해야 하는 필터 목록>
🎜🎜이 매개변수는 파이프 문자로 구분된 하나 이상의 필터 이름을 사용합니다 | . 🎜🎜🎜🎜🎜rrreee<span style="color:rgb(0,0,0); "><span style="color:rgb(0,0,187);"></span></span>🎜
🎜🎜🎜🎜🎜예 #4 php://filter/write=🎜🎜🎜🎜🎜이 매개변수는 파이프 문자로 구분된 하나 이상의 필터 이름을 사용합니다 | 🎜🎜🎜🎜🎜rrreee<span style="color:rgb(0,0,0); "><span style="color:rgb(0,0,187);"></span></span>🎜
🎜🎜관련 권장 사항: 🎜🎜🎜PHP의 HTTP 프로토콜 포스트 요청 매개변수, PHP 프로토콜 포스트 Request_PHP 튜토리얼🎜🎜🎜🎜PHP의 HTTP 프로토콜 포스트 요청 매개변수, PHP 프로토콜 포스트 요청🎜🎜🎜🎜php 포스트 제출이 나타납니다. 입력 변수가 1000을 초과했습니다🎜🎜
위 내용은 PHP의 특수 프로토콜, php:// 프로토콜에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!