setFlags(SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE); $filesList = []; $lines = []; foreach ($checksumFile as $line) { $parts = explode(' ', $line); if (!isset($parts[1])) { // Skip end line break; } if (basename($parts[1]) === basename(CHECKSUMS_FILE)) { // Skip checksums.md5 continue; } $filesList[] = [ 'path' => trim($parts[1]), 'hash' => trim($parts[0]) ]; } $dynamicFiles = [ hide_bb_path(BB_ENABLED), '.htaccess', 'robots.txt', 'opensearch_desc.xml', 'opensearch_desc_bt.xml', 'favicon.png', 'composer.json', 'composer.lock', 'library/config.php', 'library/defines.php', 'styles/images/logo/logo.png' ]; $wrongFilesList = []; foreach ($filesList as $file) { if (!empty($dynamicFiles) && in_array($file['path'], $dynamicFiles)) { // Exclude dynamic files continue; } if (!file_exists(BB_ROOT . '/' . $file['path']) || strtolower(md5_file(BB_ROOT . '/' . $file['path'])) !== strtolower($file['hash'])) { $wrongFilesList[] = $file['path']; } } // Restore corrupt files if (is_file(RESTORE_CORRUPT_CONFIRM_FILE)) { $buildDownloader = new \TorrentPier\Updater(); if ($buildDownloader->download(INT_DATA_DIR . '/', $bb_cfg['tp_version'])) { // Unzip downloaded build file $zipArchive = new ZipArchive; $extractDownloadedFile = $zipArchive->open($buildDownloader->savePath); if ($extractDownloadedFile === true) { if ($zipArchive->extractTo(BB_ROOT, $wrongFilesList)) { $wrongFilesList = []; } $zipArchive->close(); } } // Delete restore confirm file & build file if (isset($buildDownloader->savePath)) { unlink($buildDownloader->savePath); } unlink(RESTORE_CORRUPT_CONFIRM_FILE); } $data = [ 'success' => empty($wrongFilesList), 'wrong_files' => $wrongFilesList, 'wrong_files_num' => count($wrongFilesList), 'total_num' => count($filesList), 'timestamp' => TIMENOW, ]; $this->store('files_integrity', $data);