Gateway Timeout после создания Zip-файла

169
01 декабря 2018, 02:40

Создаю zip-файл с помощью ZipArchive, куда записываю изображения. Процесс довольно долгий, но VPS позволяет.

  $zip = new ZipArchive();
  $imagesZipFile = __DIR__.'/../files/images_' . $xmlCreateDatetime . '.zip';
  $imageNewName = 'autocity_'.$car['id'];
  $i = 0;
  foreach($imagesArray as $image){
    if($image != '..' AND $image != '.'):
      // Add image to zip
      if($zip->open($imagesZipFile, ZipArchive::CREATE)!==TRUE):
        continue;
      endif;
      $zip->addFile($imageDir . '/' . $image, $imageNewName.$image);
      // Add string to xml
      $ImageElt  = $domDoc->createElement('Image');
      $ImageName = $domDoc->createAttribute('name');
      $ImageName->appendChild($domDoc->createTextNode($imageNewName.$image));
      $ImageElt->appendChild($ImageName);
      $ImagesNode->appendChild($ImageElt);
      $i++;
    endif;
  }
  $zip->close();

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

В итоге два вопроса:

  1. Возможно ли как-то облегчить процесс создания архива (может быть очистка памяти или что-нибудь подобное)
  2. Можно ли избежать 504-ой ошибки и если можно, то как?
Answer 1

Если у вас fast-cgi + php-fpm на сервере, то можно использовать функцию fastcgi_finish_request(); она отдает ответ браузеру, при этом скрипт продолжает выполняться на сервере, периодически записывая куда-то состояние выполнения задачи

READ ALSO
Как изменить положение текста

Как изменить положение текста

Как изменить положение текста с тегом ?

217
Как создать рабочий url без создания html (php) документа?

Как создать рабочий url без создания html (php) документа?

Во многих интернет-магазинах замечаю, что url страницы товара является латинским транслитом наименования этого товараИ вряд-ли разработчики...

178
Как передавать cookie между файлами в библиотеке Ratchet websocket

Как передавать cookie между файлами в библиотеке Ratchet websocket

Кто работал с данной библиотекой - знает, куки браузера можно получить только при событие onOpen доступном в chatphp только там можно получить данные...

148
не работает 4 цикл C++

не работает 4 цикл C++

Показательный пример, почему не надо пихать объявления сразу нескольких переменных в одну строку

253