Я написал скрипт для создания резервной копии моего 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 дня, но не нашел никакого рабочего решения.
Может кто-нибудь помочь мне, где я нахожусь делать неправильно.
Заранее спасибо.