Создание Zip с использованием Ajax разрывов с ошибкой WordPress 502 - PullRequest
0 голосов
/ 30 апреля 2020

Я написал скрипт для создания резервной копии моего wordpress. Размер папки WordPress wp-content составляет более 1 ГБ. Итак, я разделил список файлов в наборе из 200 файлов, которые будут обрабатываться в каждом ajax запросе. Проблема в том, что в середине создания zip ajax разрывается с ошибкой 502. Если я обработаю этот указанный c запрос снова, используя 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, вызывается функция create zip. Я много искал, но не нашел никакого рабочего решения. Эта проблема в основном возникает при обработке папки uploads.

Я искал решение за последние 3 дня, но не нашел никакого рабочего решения.

Может кто-нибудь помочь мне, где я нахожусь делать неправильно.

Заранее спасибо.

...