#php #ubuntu #yii #cron #backup
#php #ubuntu #yii #cron #резервное копирование
Вопрос:
Мне нужно сделать резервную копию кода для моего проекта, но условие :-
Я создаю папку Patch через SVN, в которой файлы структурированы таким же образом, как и в основной папке проекта (в патче файлов меньше, чем в основном проекте). Я хочу написать код, который считывает основной проект и выбирает только те файлы, которые присутствуют в исправлении, и сохраняет его в новой папке резервного копирования.
Код, который я написал, является :-
/*Patch Folder */
$frmFoldr = 'patch_test/';
$basepath = '/var/www/html/TestingBackupCron/';
/*The Folder where files are to be backed up it would use basepath and toFoldr folder name. */
$toFoldr = 'axisdirectcheck/';
/* Read/Copy File from this folder. */
$prodMainFolder = '';
$prodBasePath = '/var/www/html/TestingBackupCron/sijucheckfiles/';
$dir_iterator = new RecursiveDirectoryIterator($basepath . $frmFoldr);
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
foreach ($iterator as $file) {
$readDir = strstr($file->getPathname(), $frmFoldr);
$tofileminpath = str_replace($frmFoldr, "", $readDir);
$fromExPath = $prodBasePath . $tofileminpath;
$toExPath = $basepath . $toFoldr . $tofileminpath;
if (strpos($fromExPath, '.php') || strpos($fromExPath, '.js') || strpos($fromExPath, '.css')) {
if (file_exists($fromExPath)) {
copy($fromExPath, $toExPath);
print_r('Files copied to ' . $toExPath . ".n");
}else{
print_r($fromExPath." ::: Read path not found.n");
}
}
}
Приведенный выше код выдает ошибку «не удалось открыть stream: нет такого файла или каталога». Я думаю, что copy не создает папки. Пожалуйста, помогите, ребята.
Комментарии:
1. Создание частичной резервной копии, когда у вас все есть в системе управления версиями, кажется немного ненужным.
2. У нас есть более 600 МБ основных файлов проекта. Я чувствовал, что брать все это в качестве резервной копии не нужно.
3. На самом деле я хотел сказать, что вам вообще не нужна отдельная резервная копия без контроля версий, когда вы используете контроль версий 🙂
Ответ №1:
Найдено решение. Приведенный ниже код сначала создаст папки, а затем в следующем цикле запишет скопированные файлы в эти папки.
public function run($args) {
/*Patch Folder */
$frmFoldr = 'patch_test/';
$basepath = '/var/www/html/TestingBackupCron/';
/*The Folder where files are to be backed up it would use basepath and toFoldr folder name. */
$toFoldr = 'axisdirectcheck/';
/* Read/Copy File from this folder. */
$prodMainFolder = '';
$prodBasePath = '/var/www/html/TestingBackupCron/sijucheckfiles/';
if (file_exists($basepath . $frmFoldr)) {
$dir_iterator = new RecursiveDirectoryIterator($basepath . $frmFoldr);
$iterator = new RecursiveIteratorIterator($dir_iterator, RecursiveIteratorIterator::SELF_FIRST);
} else{
print_r("Read Directory '$basepath$frmFoldr' not Found. Please check the read directory filename.n");
exit;
}
$fromDir = array();
$sendToArray = array();
/* this foreach would create folders inside the path ($toFoldr) specified */
foreach ($iterator as $file) {
$readDir = strstr($file->getPathname(), $frmFoldr);
$tofileminpath = str_replace($frmFoldr, "", $readDir);
$fromExPath = $basepath . $readDir;
$toExPath = $basepath . $toFoldr . $tofileminpath;
$sendToArray[] = $tofileminpath;
if (strpos($file, '/.')) {
if (!file_exists($toExPath)) {
$oldmask = umask(0);
mkdir("$toExPath", 0777, true);
umask($oldmask);
}
}
}
/* this foreach would copy files from PROD/UAT and paste inside the path($toExPath) specified */
foreach ($sendToArray as $fPath) {
$fromExPath = $prodBasePath . $fPath;
$toExPath = $basepath . $toFoldr . $fPath;
if (strpos($fromExPath, '.php') || strpos($fromExPath, '.js') || strpos($fromExPath, '.css')) {
if (file_exists($fromExPath)) {
copy($fromExPath, $toExPath);
print_r('Files copied to ' . $toExPath . ".n");
}else{
print_r($fromExPath." ::: Read path not found.n");
}
}
}
}
Спасибо..