который является лучшим способом загрузки из больших файлов 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; }