php://input - what does it do in fopen()?
$handle = fopen("/home/rasmus/file.txt", "r");
$handle = fopen("/home/rasmus/file.gif", "wb");
I can understand this that /home/rasmus/file.txt
and /home开发者_Python百科/rasmus/file.gif
are the file path.
But what these mean:
php://input
php://temp
in
$objInputStream = fopen("php://input", "r");
$objTempStream = fopen("php://temp", "w+b");
What do they do?
php://input
is a read-only stream that allows you to read raw data from the request body. In the case of POST requests, it is preferable to$HTTP_RAW_POST_DATA
as it does not depend on special php.ini directives. Moreover, for those cases where$HTTP_RAW_POST_DATA
is not populated by default, it is a potentially less memory intensive alternative to activatingalways_populate_raw_post_data
. php://input is not available withenctype="multipart/form-data"
.
Check out the manual: http://php.net/manual/en/wrappers.php.php
php://temp
stores data in a temporary file which is only accessible for the duration of the script's execution. It is a real file, but is cleaned up as soon as the script terminates unlike a true file opened with fopen()
, that will persist on the filesystem.
php://input
is used for reading the raw HTTP request body, without having the $_POST
and $_SERVER
variables abstracted out. The php://input
stream would give access to the entire HTTP request as the server handed it to the PHP interpreter.
Those are stream wrappers and allow you to read from various streams. The reading and writting to stream is performed in the same way as with the file (some limitation can exists, for example not every stream wrapper supports fseek).
php://input
gives you access to the raw HTTP data (it's available in $HTTP_RAW_POST_DATA if server is configured to prepopulate it). Best - read the corresponding section in the documentation
精彩评论