Очищятор битрикса с интерфейсом. Скрипт в корень сайта.
Код |
---|
<?php
$nbDDDrawErrAndMess=true;//отладсообщения
$pwUrlCurr=parse_url($_SERVER["REQUEST_URI"],PHP_URL_HOST).parse_url($_SERVER["REQUEST_URI"],PHP_URL_PATH).__FILE__;//
$pwUrlLoopBody="http://".$_SERVER["HTTP_HOST"].dirname(parse_url($_SERVER["REQUEST_URI"],PHP_URL_PATH))."/loopDoUpdateItem.php";//$pwUrlLoopBody="http://ooo-senar.ru/_proTargetTovarSynronaizer/loopDoUpdateItem_new.php";
header("Content-Type:text/html;charset=windows-1251");
session_start();//?>
<!DO CTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<ht ml xmlns="http://www.w3.org/1999/xhtml"><head><met a http-equiv="Content-Type" content="text/html; charset=windows-1251" /><met a http-equiv="X-UA-Compatible" content="IE=EmulateIE9" />
<title>Очиститель Битрикса 1.0</title><li nk rel="stylesheet" href="allInOne.css" type="text/css"/><li nk href="/gfx/mzrf.ico" rel="shortcut icon" /></head><body><?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/header.php");
global $USER;if(!$USER->IsAdmin()){echo "авторизуйся с правами администратора...";return;}
define("NO_KEEP_STATISTIC", true);define("NOT_CHECK_PERMISSIONS", true);//бесполезно ведь
$patchBackup=$_SERVER['DOCUMENT_ROOT'] . "/upload/uxoos_Backup/";if(!file_exists($patchBackup)){CheckDirPath($patchBackup);}//создать папку бэкапа
$rootDirPath=$_SERVER['DOCUMENT_ROOT'] . "/upload/iblock";//Целевая папка для поиска файлов
$arFilesCache = array();$time_start=microtime(true);//записи из базы b_file
if(!$_REQUEST['nbOnlyScan'])$_REQUEST['nbOnlyScan'];////Удалять ли найденые файлы. по умолчанию не ставить
if(!$_REQUEST['nbCopyToBackup'])$_REQUEST['nbCopyToBackup']="aeChecked";//Создаст бэкапы файлов
if(!$_REQUEST['unNumbBegnFolder'])$_REQUEST['unNumbBegnFolder']=0;
if(!$_REQUEST['unNumbEndsFolders'])$_REQUEST['unNumbEndsFolders']=5;
if(!$_REQUEST['unNumbBeginFile'])$_REQUEST['unNumbBeginFile']=0;
if(!$_REQUEST['unNumbEndsFiles'])$_REQUEST['unNumbEndsFiles']=999999;
if(!$_REQUEST['unNumbDeletedFiles'])$_REQUEST['unNumbDeletedFiles']=0;
if(!$_REQUEST['unTickBetweenPacks'])$_REQUEST['unTickBetweenPacks']=10000;?>
<fo rm id="htmlFormEdinstveniy" method="get" action=""><input type="hidden" id="unNumbDeletedFiles" name="unNumbDeletedFiles" value="<?=$_REQUEST['unNumbDeletedFiles'];?>">
<br><input type="checkbox" id="nbOnlyScan" <?if(isset($_REQUEST['nbOnlyScan'])&&($_REQUEST['nbOnlyScan']=="aeChecked")){echo"checked='checked' ";}?> value="aeChecked" style="top: 0px; box-shadow: none; background: none 0% 0% / auto repeat scroll padding-box border-box #373737;">Только сканировать, без изменений <?=$$rootDirPath;?>
<br><input type="checkbox" id="nbCopyToBackup" <?if(isset($_REQUEST['nbCopyToBackup'])&&($_REQUEST['nbCopyToBackup']=="aeChecked")){echo"checked='checked' ";}?> value="aeChecked" style="top: 0px; box-shadow: none; background: none 0% 0% / auto repeat scroll padding-box border-box #373737;">Скопировать не нужные файлы в <?=$patchBackup;?>
<br><input type="number" min="0" id="unNumbBegnFolder" name="unNumbBegnFolder" value="<?=$_REQUEST['unNumbBegnFolder'];?>"> сколько папок пропустить
<br><input type="number" min="1" id="unNumbEndsFolders" name="unNumbEndsFolders" value="<?=$_REQUEST['unNumbEndsFolders'];?>"> сколько папок обработать
<br><input type="number" min="0" id="unNumbBeginFile" name="unNumbBeginFile" value="<?=$_REQUEST['unNumbBeginFile'];?>"> сколько файлов пропустить. При большом количестве файлов в подкаталоге
<br><input type="number" min="1" id="unNumbEndsFiles" name="unNumbEndsFiles" value="<?=$_REQUEST['unNumbEndsFiles'];?>"> сколько файлов обработать
<br><button type="submit" id="nbButtCopyFromEtimRs24" name="nbButtCopyFromEtimRs24" disabled="disabled" value="nbButtCopyFromEtimRs24">Идёт выполнение</button>
<input type="checkbox" id="htmlNextLoopInListSectionWhereTake" name="htmlNextLoopInListSectionWhereTake" <?if(isset($_REQUEST['htmlNextLoopInListSectionWhereTake'])&&($_REQUEST['htmlNextLoopInListSectionWhereTake']=="aeChecked")){echo"checked='checked' ";}?> value="aeChecked" style="top:0px;box-shadow: none; background: none 0% 0% / auto repeat scroll padding-box border-box #373737;">Перезаряжать на следующую пачку через
<input type="number" min="0" id="unTickBetweenPacks" name="unTickBetweenPacks" value="<?=$_REQUEST['unTickBetweenPacks'];?>"> миллисекунд<?
$hRootDir=opendir($rootDirPath);$unTotalCastFileProcessed=0;$removeFile=0;$contDir = 0;//Счётчик пройденых папок
while(false !== ($subDirName = readdir($hRootDir))){$contDir++;
if($subDirName=='.'||$subDirName=='..'){continue;}//пропускать фигню
$filesCount = 0;//Счётчик пройденых файлов
$hSubDir=opendir("$rootDirPath/$subDirName");//Путь до подкатегорий с файлами
if($contDir<$_REQUEST['unNumbBegnFolder']){continue;}//пропускать перебраные в предвызове текфайла подпапки
if($contDir>=($_REQUEST['unNumbBegnFolder']+$_REQUEST['unNumbEndsFolders'])){break;}//ограничение в переборе папок за такт сработало или цикл отработал сам
$result = $DB->Query('SEL ECT FILE_NAME FR OM b_file WHERE MODULE_ID = "iblock" AND SUBDIR="iblock/'.$subDirName.'"');
unset($arFilesCache);$arFilesCache=[];//предидущий список файлов
while($row = $result->Fetch()){$arFilesCache[$row['FILE_NAME']]="";}
while (false !== ($fileName = readdir($hSubDir))) {
if($fileName == '.' || $fileName == '..') { continue; }//пропускать фигню
$unTotalCastFileProcessed++;$filesCount++;
if($unTotalCastFileProcessed>($_REQUEST['unNumbBeginFile']+$_REQUEST['unNumbEndsFiles'])){echo"<br>Пачка ".($_REQUEST['unNumbEndsFiles'])." файлов отработала. ";break;}
if($unTotalCastFileProcessed<$_REQUEST['unNumbBeginFile']){$unTotalCastFileProcessed++;continue;}
echo"<br>Перебран $rootDirPath/$subDirName/$fileName";
if(array_key_exists($fileName, $arFilesCache)){continue;}//Файл с диска есть в списке файлов базы - пропуск
$result = $DB->Query('SELECT FILE_NAME FR OM b_file WH ERE MODULE_ID = "iblock" AND FILE_NAME="'.$fileName.'" LIMIT 1');
if($result->Fetch()){echo"Предупреждение 534 допнагрузска на SQL. Файл дополнительно проверяеться. ";$filesCount++;continue;}//Файл с диска есть в списке файлов базы - пропуск
$removeFile++;$fullPath="$rootDirPath/$subDirName/$fileName";//полный путь до файла
if($_REQUEST['nbCopyToBackup']=="aeChecked"){
if(!file_exists($patchBackup.$subDirName)){if(!CheckDirPath($patchBackup.$subDirName . '/')){echo"НЕ УДАЛОСЬ СОЗДАТЬ ПОДДЕРИКТОРИЮ ".$patchBackup.$subDirName;return;}}//создал поддиректорию
CopyDirFiles($fullPath, $patchBackup . $subDirName . '/' . $fileName);}//копия в бэкап
if($_REQUEST['nbOnlyScan']=="aeChecked"){echo 'Кандидат к удалению'. $fullPath . '<br>';}
else{if(unlink($fullPath)){echo"Удалён ".$fullPath. '<br>';}else{echo"Ошибка удаления файла ".$fullPath;}}//Удаление файла
unset($fileName);}
if($unTotalCastFileProcessed>($_REQUEST['unNumbBeginFile']+$_REQUEST['unNumbEndsFiles'])){echo" с ".($_REQUEST['unNumbBeginFile'])." файла<br>";break;}
closedir($hSubDir);
if(($_REQUEST['nbOnlyScan']!="aeChecked")&&(!$filesCount)){rmdir("$rootDirPath/$subDirName");}}//Удалить поддиректорию, если удаление активно и счётчик файлов пустой - т.е каталог пуст
closedir($hRootDir);
$_REQUEST['unNumbDeletedFiles']=$_REQUEST['unNumbDeletedFiles']+$removeFile;
if($removeFile<1){echo '<br>В текущей пачке нет файлов на удаление/перемещение<br>';}
if($_REQUEST['nbCopyToBackup']=="aeChecked"){echo 'Всего файлов <strong>';echo($removeFile+$_REQUEST['unNumbDeletedFiles']).'</strong> перемещенно в: <strong>' . $patchBackup . '</strong>';}
elseif($_REQUEST['nbOnlyScan']=="aeChecked"){echo 'Всего файлов к удалению увидено <strong>';echo($removeFile+$_REQUEST['unNumbDeletedFiles']).'</strong>';}
else{echo 'Всего файлов удалено <strong>';echo($removeFile+$_REQUEST['unNumbDeletedFiles']).'</strong>';}
echo '<br>Всего отработано <strong>'.$unTotalCastFileProcessed.'</strong> файлов в ' . $rootDirPath ;
echo '<br>Всего отработано <strong>'.$contDir.'</strong> подкаталогов в ' . $rootDirPath;
echo '<br>Количество файлов в текущей пачке: <strong>'. count($arFilesCache) . '</strong>';
$time = microtime(true) - $time_start;
echo "<br>Время выполнения пачки $time секунд\n";?>
<sc ript src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></sc ript>
<sc ript language="javascript" type="text/javascript">
//----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
setTimeout(start,<?=$_REQUEST['unTickBetweenPacks'];?>);
function start(){
<?if($subDirName===false){?>//предцикл завершился сам а не из-за ограничителя
document.getElementById('nbButtCopyFromEtimRs24').firstChild.data="Очистка завершена";
document.getElementById('htmlNextLoopInListSectionWhereTake').checked=false;
return;<?}?>
document.getElementById('unNumbBegnFolder').value='<?=$contDir;?>';
document.getElementById('unNumbDeletedFiles').value=Number(document.getElementById('unNumbDeletedFiles').value+<?=$_REQUEST['unNumbDeletedFiles'];?>);
document.getElementById('nbButtCopyFromEtimRs24').firstChild.data="Пуск";
document.getElementById('nbButtCopyFromEtimRs24').disabled = false;
if(document.getElementById('htmlNextLoopInListSectionWhereTake').checked){document.getElementById('htmlFormEdinstveniy').submit();}}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
</sc ript></form></body></html>
|