Php://input - что он делает в fopen()?
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
Я могу понять, что /home/rasmus/file.txt
и /home/rasmus/file.gif
- путь к файлу.
Но что они означают:
php://input
php://temp
в
$objInputStream = fopen("php://input", "r");
$objTempStream = fopen("php://temp", "w+b");
Что они делают?
Ответы
Ответ 1
php://input
- это поток, доступный только для чтения, который позволяет вам считывать необработанные данные из тела запроса. В случае запросов POST предпочтительнее $HTTP_RAW_POST_DATA
, поскольку это не зависит от специальных директив php.ini. Более того, для тех случаев, когда $HTTP_RAW_POST_DATA
не заполняется по умолчанию, это потенциально менее энергоемкая альтернатива активации always_populate_raw_post_data
. php://вход не доступен с помощью enctype="multipart/form-data"
.
Ознакомьтесь с руководством: http://php.net/manual/en/wrappers.php.php
Ответ 2
php://temp
хранит данные во временном файле, который доступен только для продолжительности выполнения script. Это реальный файл, но очищается, как только script заканчивается в отличие от истинного файла, открытого с помощью fopen()
, который будет сохраняться в файловой системе.
php://input
используется для чтения тела необработанного HTTP-запроса без учета абстрагированных переменных $_POST
и $_SERVER
. Поток php://input
предоставил бы доступ ко всему HTTP-запросу, поскольку сервер передал его интерпретатору PHP.
Ответ 3
Это обтекатели потоков и позволяют читать из разных потоков. Чтение и запись в поток выполняется так же, как и с файлом (может существовать некоторое ограничение, например, не каждая обтекающая строка поддерживает fseek).
php://input
предоставляет вам доступ к необработанным HTTP-данным (он доступен в $HTTP_RAW_POST_DATA, если сервер настроен на предварительное заполнение). Лучшее - прочитайте соответствующий раздел в документации