Intereting Posts
добавление счетчика на страницу php для подсчета уникальных посетителей Laravel: Отсутствие расширения mcrypt только при использовании phpunit Регулярное выражение – любой текст, подходящий для URL-адреса как использовать phpfastcache? PHP напечатанное логическое значение пуст, почему? Лучшая альтернатива для password_hash в PHP 5.3.27? PHP: Как преобразовать временную метку сервера в часовой пояс пользователя? PHP Удаленная потоковая передача файлов с поддержкой возобновления загружать большие файлы с помощью php, apache Настройка входа в систему для веб-сайта с использованием PHP Как разобрать сообщения о доставке Уведомления, отправленные от Mailer Deamons PHPMailer, AddStringAttachment и схема URI данных doctrine: schema: обновление не учитывает порядок столбцов fetchAll вспомогательная функция с использованием PDO Как получить данные с помощью> = И <= в 12-часовой формат времени в php / mysql?

Загрузка больших файлов и запись их локально

который является лучшим способом загрузки из больших файлов php без использования всей памяти сервера?

Я мог бы это сделать (плохой код):

$url='http://server/bigfile'; $cont = file_get_contents($url); file_put_contents('./localfile',$cont); 

В этом примере загружается удаленный файл ввода в $cont и это может превышать ограничение памяти.

Есть ли безопасная функция (возможно, встроенная) для этого (возможно, stream_ *)?

благодаря

Вы можете использовать curl и параметр CURLOPT_FILE для сохранения загруженного содержимого непосредственно в файл.

 set_time_limit(0); $fp = fopen ('file', 'w+b'); $ch = curl_init('http://remote_url/file'); curl_setopt($ch, CURLOPT_TIMEOUT, 75); curl_setopt($ch, CURLOPT_FILE, $fp); curl_exec($ch); curl_close($ch); fclose($fp); 

Вот функция, которую я использую при загрузке больших файлов. Это позволит избежать загрузки всего файла в буфер. Вместо этого он будет записываться в пункт назначения, когда он получает байты.

 function download($file_source, $file_target) { $rh = fopen($file_source, 'rb'); $wh = fopen($file_target, 'wb'); if (!$rh || !$wh) { return false; } while (!feof($rh)) { if (fwrite($wh, fread($rh, 1024)) === FALSE) { return false; } } fclose($rh); fclose($wh); return true; }