file_get_contents или fopen для чтения нескольких мегабайт php: // input? - PullRequest
4 голосов
/ 21 октября 2011

Это может показаться повторяющимся вопросом, но это не так: я получаю несколько мегабайт данных через php: / input (1-500mb), которые мне нужно сохранить в файл. Более производительный (загрузка сервера, скорость), используя:

file_put_contents($filename, file_get_contents('php://input'))

OR

$input = fopen("php://input", "r");
$temp = tmpfile();
$realSize = stream_copy_to_stream($input, $temp);
fclose($input);

$target = fopen($filename, "w");
fseek($temp, 0, SEEK_SET);
stream_copy_to_stream($temp, $target);
fclose($target);

1 Ответ

6 голосов
/ 21 октября 2011

Есть еще более короткая версия: copy

  copy("php://input", $filename);

PHP уже внутренне реализует то, что делает ваш код. (Не уверен, что это измерило бы разницу). Хотя я не уверен, почему вы сначала создадите временный файл.

А если размер входного файла составляет до 500 МБ, то подход file_get_contents не будет работать в любом случае, так как он должен хранить все эти данные в строке / памяти.

...