Хотите создать резервную копию кода на PHP, где файлы, которые должны быть взяты в качестве резервной копии, считываются из другой указанной папки (patch).?

#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");
            }
        }
    }
}
  

Спасибо..