PHP принудительная загрузка удаленного файла без чтения в память - PullRequest
4 голосов
/ 11 февраля 2012

Можно ли принудительно загрузить удаленный файл в PHP, не считывая его в память? Я знаю, что fpassthru (), readfile (), file_get_contents () считывают файлы в память перед тем, как выводить их в браузер.

Вот мой код:

if($url = getRemoteFileURL($file_id))
{
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename="abc.zip"');
  header('Content-Transfer-Encoding: binary');
  header('Expires: 0');
  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
  header('Pragma: public');
  header('Pragma: no-cache');

  readfile($url);  // is there a better function ?
}

Я не хочу делать заголовок ("Location:"), потому что это покажет URL

1 Ответ

3 голосов
/ 11 февраля 2012

Если вы делаете header("Location: ..."); для загруженного файла, URL-адрес на самом деле не раскрывается, если вообще отображается.

В любом случае, readfile, вероятно, ваш лучший вариант. Я бы предположил, учитывая, что он записывает прямо в вывод, что PHP продолжает чтение части файла, затем выводит ее, затем читает следующую часть и т. Д., В целом используя очень мало памяти.

...