Что такое php memory
php:// — Доступ к различным потокам ввода-вывода
Описание
PHP предоставляет несколько разнообразных потоков ввода-вывода, которые позволяют получить доступ к собственным потокам ввода-вывода PHP, к дескрипторам стандартного ввода, вывода и потока ошибок, к временным файловым потокам в памяти и на диске, и фильтрам, которые могут манипулировать другими файловыми ресурсами по мере их считывания или записи.
php://stdin, php://stdout и php://stderr
php://stdin , php://stdout и php://stderr позволяют получить прямой доступ к соответствующим потокам ввода или вывода процесса PHP. Поток указывает на копию файлового дескриптора, таким образом, если вы откроете php://stdin и потом закроете его, вы закроете только вашу копию дескриптора. Актуальный поток, на который ссылается STDIN , остаётся неизменным. Рекомендуется просто использовать константы STDIN , STDOUT и STDERR вместо ручного открытия потоков, используя эти обёртки.
Поток php://stdin предназначен только для чтения, тогда как php://stdout и php://stderr предназначены только для записи.
php://input
php://input является потоком только для чтения, который позволяет вам читать необработанные данные из тела запроса. php://input недоступен в POST-запросах с enctype=»multipart/form-data» , если опция enable_post_data_reading включена.
php://output
php://output является потоком только для записи, который позволяет вам записать данные в выходной буфер аналогично, как это делают функции print и echo .
php://fd
php://fd предоставляет прямой доступ к указанному файловому дескриптору. Например, php://fd/3 относится к файловому дескриптору 3.
php://memory и php://temp
php://memory и php://temp являются потоками для чтения/записи и позволяют сохранять временные данные в файлоподобной обёртке. Единственная разница между ними заключается в том, что php://memory будет всегда хранить данные в оперативной памяти, тогда как php://temp будет использовать временный файл в том случае, когда объем хранимой информации достигнет заданного лимита (по умолчанию 2 Мб). Расположение этого временного файла определяется аналогично функции sys_get_temp_dir() .
Размер лимита для php://temp может устанавливаться путём добавления /maxmemory:NN , где NN — это максимальный размер данных в байтах для хранения в памяти перед использованием временного файла.
php://filter
php://filter — это вид мета-обёртки, предназначенный для разрешения применения фильтров к потоку во время открытия. Это полезно для функционально полных файловых функций, таких как readfile() , file() и file_get_contents() , где нет возможности применить фильтр к потоку до того, как содержимое будет прочитано.
Поток php://filter принимает следующие параметры как часть своего пути. В одном пути можно указать несколько цепочек фильтров. Пожалуйста, ознакомьтесь с примерами и особенностями при использовании этих параметров.
Название | Описание |
---|---|
resource= | Этот параметр является необходимым. Он указывает потоку, что его необходимо отфильтровать. |
read= | Этот параметр является необязательным. Одно или несколько имён фильтров может быть указано здесь, разделённых вертикальной чертой ( | ). |
write= | Этот параметр является необязательным. Одно или несколько имён фильтров может быть указано здесь, разделённых вертикальной чертой ( | ). |
Любой список фильтров, которые используются без префиксов read= или write= , будет применён к обоим потокам на чтение и на запись при необходимости. |
Опции
Атрибут | Поддержка |
---|---|
Ограничение по allow_url_fopen | Нет |
Ограничение по 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://stdout , php://stderr , php://output , php://fd , php://memory и php://temp . (Эквивалентно записи) |
Одновременное чтение и запись | только php://fd , php://memory и php://temp . |
Поддержка stat() | нет. Тем не менее, php://memory и php://temp поддерживают fstat() . |
Поддержка unlink() | Нет |
Поддержка rename() | Нет |
Поддержка mkdir() | Нет |
Поддержка rmdir() | Нет |
Поддержка stream_select() | только php://stdin , php://stdout , php://stderr , php://fd и php://temp . |
Примеры
Пример #1 php://temp/maxmemory
Этот необязательный параметр позволяет установить лимит памяти до того, как php://temp начнёт использовать временный файл.
// Установка предела в 5 MB.
$fiveMBs = 5 * 1024 * 1024 ;
$fp = fopen ( «php://temp/maxmemory: $fiveMBs » , ‘r+’ );
?php
// Читаем то, что мы записали.
rewind ( $fp );
echo stream_get_contents ( $fp );
?>
Пример #2 php://filter/resource=
Этот параметр должен быть расположен в конце вашей спецификации php://filter и должен указывать на поток, который вы хотите фильтровать.
/* Это просто эквивалентно:
readfile(«http://www.example.com»);
так как на самом деле фильтры не указаны */
?php
Пример #3 php://filter/read=
Этот параметр принимает один или более имён фильтров, разделённых вертикальной чертой | .
/* Этот скрипт выведет содержимое
www.example.com полностью в верхнем регистре */
readfile ( «php://filter/read=string.toupper/resource=http://www.example.com» );
?php
/* Этот скрипт делает тоже самое, что вверхний, но
будет также кодировать алгоритмом ROT13 */
readfile ( «php://filter/read=string.toupper|string.rot13/resource=http://www.example.com» );
?>
Пример #4 php://filter/write=
Этот параметр принимает один или более имён фильтров, разделённых вертикальной чертой | .
/* Этот скрипт будет фильтровать строку «Hello World»
через фильтр rot13, затем записывать результат в
файл example.txt в текущей директории */
file_put_contents ( «php://filter/write=string.rot13/resource=example.txt» , «Hello World» );
?>?php
Пример #5 php://memory и php://temp нельзя переиспользовать
php://memory и php://temp нельзя переиспользовать, то есть после закрытия потоков невозможно сослаться на них снова.
file_put_contents(‘php://memory’, ‘PHP’);
echo file_get_contents(‘php://memory’); // ничего не напечатает
Что такое php memory
php:// — Доступ к различным потокам ввода-вывода
Описание
PHP предоставляет несколько разнообразных потоков ввода-вывода, которые позволяют получить доступ к собственным потокам ввода-вывода PHP, к дескрипторам стандартного ввода, вывода и потока ошибок, к временным файловым потокам в памяти и на диске, и фильтрам, которые могут манипулировать другими файловыми ресурсами по мере их считывания или записи.
php://stdin, php://stdout и php://stderr
php://stdin , php://stdout и php://stderr позволяют получить прямой доступ к соответствующим потокам ввода или вывода процесса PHP. Поток указывает на копию файлового дескриптора, таким образом, если вы откроете php://stdin и потом закроете его, вы закроете только вашу копию дескриптора. Актуальный поток, на который ссылается STDIN , остается неизменным. Обратите внимание, что PHP демонстрировал ошибочное поведение в этом отношении до версии PHP 5.2.1. Рекомендуется просто использовать константы STDIN , STDOUT и STDERR вместо ручного открытия потоков, используя эти обертки.
Поток php://stdin предназначен только для чтения, тогда как php://stdout и php://stderr предназначены только для записи.
php://input
php://input является потоком только для чтения, который позволяет вам читать необработанные данные из тела запроса. В случае POST-запросов предпочтительней использовать php://input вместо $HTTP_RAW_POST_DATA , так как этот метод не зависит от специальных директив php.ini . Кроме того, в тех случаях, где $HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее затратно для памяти, чем активация директивы always_populate_raw_post_data. php://input недоступен с типом содержимого enctype=»multipart/form-data» .
php://output
php://output является потоком только для записи, который позволяет вам записать данные в выходной буфер аналогично, как это делают функции print и echo .
php://fd
php://fd предоставляет прямой доступ к указанному файловому дескриптору. Например, php://fd/3 относится к файловому дескриптору 3.
php://memory и php://temp
php://memory и php://temp являются потоками для чтения/записи и позволяют сохранять временные данные в файлоподобной обертке. Единственная разница между ними заключается в том, что php://memory будет всегда хранить данные в оперативной памяти, тогда как php://temp будет использовать временный файл в том случае, когда объем хранимой информации достигнет заданного лимита (по умолчанию 2 Мб). Расположение этого временного файла определяется аналогично функции sys_get_temp_dir() .
Размер лимита для php://temp может устанавливаться путем добавления /maxmemory:NN , где NN — это максимальный размер данных в байтах для хранения в памяти перед использованием временного файла.
php://filter
php://filter — это вид мета-обертки, предназначенный для разрешения применения фильтров к потоку во время открытия. Это полезно для функционально полных файловых функций, таких как readfile() , file() и file_get_contents() , где нет возможности применить фильтр к потоку до того, как содержимое будет прочитано.
Поток php://filter принимает следующие параметры как часть своего пути. В одном пути можно указать несколько цепочек фильтров. Пожалуйста, ознакомьтесь с примерами и особенностями при использовании этих параметров.
Название | Описание |
---|---|
resource= | Этот параметр является необходимым. Он указывает потоку, что его необходимо отфильтровать. |
read= | Этот параметр является необязательным. Одно или несколько имен фильтров может быть указано здесь, разделенных вертикальной чертой ( | ). |
write= | Этот параметр является необязательным. Одно или несколько имен фильтров может быть указано здесь, разделенных вертикальной чертой ( | ). |
Любой список фильтров, которые используются без префиксов read= или write= , будет применен к обоим потокам на чтение и на запись при необходимости. |
Опции
Атрибут | Поддержка |
---|---|
Ограничение по allow_url_fopen | Нет |
Ограничение по 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://stdout , php://stderr , php://output , php://fd , php://memory и php://temp . (Эквивалентно записи) |
Одновременное чтение и запись | только php://fd , php://memory и php://temp . |
Поддержка stat() | нет. Тем не менее, php://memory и php://temp поддерживают fstat() . |
Поддержка unlink() | Нет |
Поддержка rename() | Нет |
Поддержка mkdir() | Нет |
Поддержка rmdir() | Нет |
Поддержка stream_select() | только php://stdin , php://stdout , php://stderr , php://fd и php://temp . |
Примеры
Пример #1 php://temp/maxmemory
Этот необязательный параметр позволяет установить лимит памяти до того, как php://temp начнет использовать временный файл.
// Установка предела в 5 MB.
$fiveMBs = 5 * 1024 * 1024 ;
$fp = fopen ( «php://temp/maxmemory: $fiveMBs » , ‘r+’ );
?php
// Читаем то, что мы записали.
rewind ( $fp );
echo stream_get_contents ( $fp );
?>
Пример #2 php://filter/resource=
Этот параметр должен быть расположен в конце вашей спецификации php://filter и должен указывать на поток, который вы хотите фильтровать.
/* Это просто эквивалентно:
readfile(«http://www.example.com»);
так как на самом деле фильтры не указаны */
?php
Пример #3 php://filter/read=
Этот параметр принимает один или более имен фильтров, разделенных вертикальной чертой | .
/* Этот скрипт выведет содержимое
www.example.com полностью в верхнем регистре */
readfile ( «php://filter/read=string.toupper/resource=http://www.example.com» );
?php
/* Этот скрипт делает тоже самое, что вверхний, но
будет также кодировать алгоритмом ROT13 */
readfile ( «php://filter/read=string.toupper|string.rot13/resource=http://www.example.com» );
?>
Пример #4 php://filter/write=
Этот параметр принимает один или более имен фильтров, разделенных вертикальной чертой | .
/* Этот скрипт будет фильтровать строку «Hello World»
через фильтр rot13, затем записывать результат в
файл example.txt в текущей директории */
file_put_contents ( «php://filter/write=string.rot13/resource=example.txt» , «Hello World» );
?>?php
Пример #5 php://memory и php://temp нельзя переиспользовать
php://memory и php://temp нельзя переиспользовать, то есть после закрытия потоков невозможно сослаться на них снова.
file_put_contents(‘php://memory’, ‘PHP’);
echo file_get_contents(‘php://memory’); // ничего не напечатает