Посоветуйте мне самый оптимальный способ сохранения больших файлов с php stdin, пожалуйста. Разработчик iOS отправляет мне большой видеоконтент на сервер, и я должен его хранить в файлах.
Я прочитал поток stdin с видеоданными и напишу его в файл. Например, следующим образом:
$handle = fopen("php://input", "rb"); while (!feof($handle)) { $http_raw_post_data .= fread($handle, 8192); }
Какую функцию лучше использовать? file_get_contents или fread или что-то еще?
Не используйте file_get_contents
потому что он попытается загрузить все содержимое файла в строку
ОТ PHP DOC
file_get_contents () является предпочтительным способом чтения содержимого файла в строку. Он будет использовать методы сопоставления памяти, если их поддерживает ваша ОС для повышения производительности.
Уверен, вы просто хотите создать файл фильма на своем сервере. Это более эффективный способ
$in = fopen("php://input", "rb"); $out = fopen('largefile.dat', 'w'); while ( ! feof($in) ) { fwrite($out, fread($in, 8192)); }
Я согласен с @ hek2mgl, что обращение к нему как к загрузке многостраничной формы имеет смысл, но если вы не можете изменить свой интерфейс ввода, вы можете использовать file_put_contents()
в потоке, а не file_put_contents()
файл самостоятельно.
$handle = fopen("php://input", "rb"); if (false === file_put_contents("outputfile.dat", $handle)) { // handle error } fclose($handle);
Это чище, чем итерация через файл, и это может быть быстрее (я не тестировал).
Если вы используете nginx в качестве веб-сервера, я хочу рекомендовать модуль загрузки nginx с возможностью возобновления загрузки.