Создание архива с использованием Ajax Breaks с ошибкой 502 Wordpress
Я написал сценарий для создания резервной копии моего Wordpress. Размер папки wordpress wp-content более 1 ГБ. Итак, я разделил список файлов на набор из 200 файлов, которые будут обрабатываться в каждом запросе ajax. Проблема в том, что в середине создания zip-архива ajax прерывается с ошибкой 502. Если я снова обработаю этот конкретный запрос, используяReplay XHR
от Network tab
консоли Chrome, то этот запрос отлично работает со статусом 200. Я не понимаю, почему это происходит.
Вот мой код:
public function create_zip($fileslist=array(), $offest, $current){
@set_time_limit(900);
$sub_offset = 0;
$timeAfterMinute = strtotime("+1 minutes");
if(!Options::getDiskSpace()){
return array("error" => __("Your are running low on disk space."));
}
if (!class_exists('PclZip')) {
include ABSPATH . 'wp-admin/includes/class-pclzip.php';
}
/// check if zip is not enabled
if ( ( ( ! class_exists( 'ZipArchive' ) || ( ! extension_loaded( 'zip' ) && ! method_exists( 'ZipArchive', 'AddFile' ) ) ) ) && $this->library == 0) {
return array("error" => __("Backup creation terminated. Reason: ZipArchive is not Available or is Disabled."));
}
$error_log = "";
$files = self::create_set($fileslist);
$loopFiles = $files[$offest];
$new_offset = isset($files[$offest + 1]) ? $offest + 1 : -1;
$index = $current != 0 ? $current : 0;
$loop = false;
$zip = new PclZip($this->destination);
for($key = $index; $key < count($loopFiles); $key++){
$file = $loopFiles[$key];
$size = $this->getFilesize($file["file_path"]);
$current_time = time();
if(($size && $loop) || ($current_time > $timeAfterMinute)){ // check if file size is more than 400 kb and loop is running from last 1 minute
$new_offset = $offest;
$sub_offset = $key;
break;
}
else
{
$list = $zip->add($file["file_path"], PCLZIP_OPT_REMOVE_PATH, $this->destination);
if ($list == 0) {
$error_log .= __("Error: ") . $zip->errorInfo(true) . " ".$file["file_path"]."<br /><br />";
}
$loop = true;
}
}
clearstatcache();
$progress = $this->calculateProgress($offest, count($files)); // calculate progress
if($new_offset == -1){
$error_log .= __("Files backup created successfully");
}
return array("offset" => $new_offset, "error_log" => $error_log,"progress" => $progress, "key" => base64_encode($this->filename), "current" => $sub_offset ,* "total" => count($fileslist));
}
Когда есть запрос ajax, вызывается функция создания zip. Я много искал, но не нашел рабочего решения. Эта проблема чаще всего возникает при обработкеuploads
папка.
Я искал решение последние 3 дня, но не нашел рабочего решения.
Может ли кто-нибудь помочь мне, где я делаю неправильно.
Заранее спасибо.