Наверняка многие имеют в хояйстве внешний жёсткий диск (стоит удовольствие около 100$) или Flash-ку внушительных размеров (дороже, но компактнее), однако до резервного копирования критически важных данных руки не доходят, так как их занимают критически важные задачи :))). При помощи PHP можно осуществлять резервное копирование при помощи нажатии одной клавиши мыши или кнопки Enter. Допустим производится копирование всей информации с диска D: на диск H:, причём таким образом, чтобы все данные, предварительно записанные на диск H: уничтожались. Решить эту задачу можно при помощи рекурсивного спуска по дереву каталогов, так как это описывается ниже. <?php
// Устанавливаем не ограниченное время выполнения скрипта
set_time_limit(0);
//////////////////////////////////////////////////////////
// Удаляем все файлы с диска H:
//////////////////////////////////////////////////////////
delTemporaryFiles("H:");
function delTemporaryFiles($directory)
{
$dir = opendir($directory);
while(($file = readdir($dir)))
{
// Если это файл - удаляем его
if(is_file($directory."/".$file)) unlink($directory."/".$file);
// Если это директория - осуществляем рекурсивный вызов
if(is_dir($directory."/".$file) &&
($file != ".") &&
($file != ".."))
{
delTemporaryFiles($directory."/".$file);
rmdir($directory."/".$file);
}
}
closedir($dir);
}
//////////////////////////////////////////////////////////
// Рекурсивная функция по копированию файлов
//////////////////////////////////////////////////////////
lowering("E:","H:");
function lowering($dirname,$dirdestination)
{
// Открываем директорию
$dir = opendir($dirname);
// В цикле выводим её содержимое
while (($file = readdir($dir)) !== false)
{
// Вырезаем диск
$dir_name = substr($dirname,3);
// Если это файл копируем его
if(is_file($dirname."/".$file))
{
copy($dirname."/".$file, $dirdestination."/".$dir_name."/".$file);
}
// Если это директория - создаём её
if(is_dir($dirname."/".$file) &&
$file != "." &&
$file != "..")
{
// Создаём директорию
if(!mkdir($dirdestination."/".$dir_name."/".$file))
{
echo "Не возможно создать ".$dirdestination."/".$dir_name."/".$file."\n";
}
// Вызываем рекурсивно функцию lowering
lowering("$dirname/$file",$dirdestination);
}
}
// Закрываем директорию
closedir($dir);
}
?>
Можно, конечно запускать этот скрипт через локальный Apache, но боюсь, что вам это надоест через неделю - хорошо бы организовать что-то попроще. Для того чтобы в Windows скрипты воспринимались как исполняемые программы, необходимо привязать обработчик PHP к расширению *.php. Для этого выделите любой PHP-файл и в контекстном меню выберите пункт Свойства. После чего, нажмите кнопку Изменить. В открывшемся окне выберите кнопку Найти. В открывшемся диалоговом окне выберите файл C:\PHP\php.exe В корневой директории PHP находится три исполняемых модуля: php.exe, php-cgi.exe и php-win.exe. php-cgi.exe предназначен для совместной работы с Web-сервером, именно он обрабатывает запросы к PHP-скриптам, если PHP установлен не модулем. php.exe предназначен для консольной обработки скриптов, при его запуске появляется чёрное окно консоли, в которую выводится весь внешний вывод скрипта. php-win.exe позволяет запускать PHP-скрипты без открытия окна консоли в качестве процесса со скрытым окном. Если вы не хотите, чтобы при запуске PHP-скриптов открывались окна, можно выбрать именно этот обработчик. Теперь можно и иконку скрипта на рабочий стол вытащить - по крайней мере перед глазами будет. Однако лень человеческая не знает границ, иначе бы не появились компьютеры. Хорошо бы заставить это чудо инженерной мысли самостоятельно запускать процесс резеврного копирования. Обычно для этого применяют cron. Классическую реализацию cron для Windows можно загрузить по адресу https://www.nncron.ru/download.shtml. На странице представлено две версии cron - nnCron, условно бесплатная программа с Windows-интерфейсом и nnCron LITE - бесплатная программа, с классическим интерфейсом через конфигурационный файл crontab. Рекомендуется использовать именно nnCron LITE, так как знание синтаксиса конфигурационного файла cron.tab позволит без труда работать с UNIX-версией cron на сервере хост-провайдера. На странице https://www.nncron.ru/download.shtml можно также обнаружить русскую документацию по синтаксису cron.tab и различные плагины к nnCron. Столь не хитрые манипуляции избавят вас от проблемы резервного копирования и организации рейд-массивов в домашних условиях, которые на платах начального уровня работают через пень колоду. |