PHP не открывается, если файл большой

0

Я запускаю приложение в Google App Engine, на PHP.

Я использую следующий код для загрузки файла из API:

$context = [
   "http" => [
   "method" => "GET",
   "header" => "Authorization: ".$token."\r\n",
   "follow_location"=>1,
   "timeout"=>600,
   "ignore_errors"=>1
              ]
            ];
$context = stream_context_create($context);
$sourceFile = fopen($location,"r", false,$context) or die("no handle");

Затем за этим кодом следует чтение и запись chunk на другой ресурс (в основном я храню файл в Google Storage).

$destinationFile = fopen($filename,"w");
while ($buffer = fread($sourceFile, 1048576)) {
      fwrite($destinationFile,$buffer);
} 

Проблема с этим кодом заключается в том, что он работает отлично, если файл небольшой (около 30 МБ), но fopen терпит неудачу, если файл большой. У меня есть сообщение "no handle".

Это странно, потому что я явно избегал использовать файл_get_contents, чтобы загрузить весь файл в памяти, и я не понимаю, почему fopen не сработает!

Вы можете мне помочь? благодаря

Теги:
google-app-engine

1 ответ

0

Предел составляет 32 мегабайта. Вот почему он терпит неудачу. Предел, по-видимому, не применяется локально, поэтому он работает на dev-сервере.

https://cloud.google.com/appengine/docs/python/urlfetch/#Python_Quotas_and_limits

  • 0
    Но я не получаю полный файл с запросом: я просто получаю fopen и затем читаю его кусками. Вы говорите, что HTTP-запрос получит полный ответ? Если да, то как я могу получить большой файл из запроса на загрузку API и разместить его в Google Storage? Любой рекомендуемый метод? Спасибо
  • 0
    ну, похоже, HTTP-запрос получает полный ответ. Я не занимаюсь PHP, поэтому не слишком помогаю. В python вы можете установить заголовки «Accept-Ranges» и / или «Accept-Length», так что, предположительно, в PHP есть нечто похожее для получения частичного содержимого.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню