Правка файла + touch

Тема в разделе "PHP", создана пользователем spiderbuber, 6 май 2011.

Модераторы: latteo
  1. spiderbuber

    spiderbuber

    Заблокирован
    Регистр.:
    20 июл 2009
    Сообщения:
    237
    Симпатии:
    61
    Требуется открыть файл, внести в него изменения, сохранить и изменить дату+время модификации на ту, что были до редактирования.
    Сейчас я это делаю так. Открываю, вношу изменения и тачу, предварительно посмотрев дату и время..
    PHP:
    $parser "file.php";
    $file fopen($parser'r'); 
    $text fread($filefilesize($parser));
    fclose($file);
    $file fopen($parser'w');
    $text str_replace('text_do''text_posle'$text);
    fwrite($file$text);
    fclose($file);
    $new_date strtotime "2012-05-26 23:23:23" );
    touch $parser $new_date );
    Как сделать проще?
    И еще вопрос: как затачить все файлы и папки в которых только что были внесены изменения одним махом?
     
  2. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    int filemtime ( string filename )

    Функция возвращает время последнего изменения указанного файла или FALSE в случае возникновения ошибки. Время возвращается в формате 'Unix timestamp', который подходит для передачи в качестве аргумента функции date().
     
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    например используя такую конструкцию получишь время последней модификации файла в секундах
    PHP:
    echo date('U')- date('U',filemtime('timer.txt'));
    timer.txt это файл время модификации которого узнаем и никаких touch не надо
     
  4. spiderbuber

    spiderbuber

    Заблокирован
    Регистр.:
    20 июл 2009
    Сообщения:
    237
    Симпатии:
    61
    Мне же нужно не только узнать время, но и изменить его на то, которое было до внесения изменений..

    Что-то не могу догнать.. Узнали время, подставили..
    PHP:
    $parser "dbconfig.php"
    date('U',filemtime('$parser'));
    $file fopen($parser'r');  
    $text fread($filefilesize($parser)); 
    fclose($file); 
    $file fopen($parser'w'); 
    $text str_replace('?>''?> 1'$text); 
    fwrite($file$text); 
    fclose($file); 
    $new_date strtotime "date('U')" ); 
    touch $parser $new_date );
    В итоге:
    как правильно использовать?
     
  5. CAPAXA

    CAPAXA

    Регистр.:
    7 июн 2007
    Сообщения:
    896
    Симпатии:
    535
    Ошибка здесь
    Код:
    filemtime('$parser')
    надо так
    Код:
    filemtime($parser)
    и ты не сделал время файла переменной
    Код:
    $time_create = date('U',filemtime('$parser')); 
    И потом используй так
    Код:
    $new_date = strtotime ( $time_create ); 
     
  6. spiderbuber

    spiderbuber

    Заблокирован
    Регистр.:
    20 июл 2009
    Сообщения:
    237
    Симпатии:
    61
    Не помогло, дата по прежнему сбрасывается..
    PHP:
    $parser "dbconfig.php";  
    $time_create date('U'filemtime($parser)); 
    $file fopen($parser'r');   
    $text fread($filefilesize($parser));  
    fclose($file);  
    $file fopen($parser'w');  
    $text str_replace('?>''?> 1'$text);  
    fwrite($file$text);  
    fclose($file);  
    $new_date strtotime ($time_create);
    touch $parser $new_date ); 
     
  7. uNknownMark

    uNknownMark

    Регистр.:
    22 сен 2007
    Сообщения:
    393
    Симпатии:
    169
    Вопрос, зачем делать так
    PHP:
    $time_create date('U'filemtime($parser));
    если можно так
    PHP:
    $time_create filemtime($parser);
    в первом случаи в $time_create будет строка, в втором int, и второй быстрее.

    Этот вариант у меня работает, проверенно:
    PHP:
    <?php
    $parser 
    'test.php';  
    $time_create filemtime($parser);
    /*
    $file = fopen($parser, 'r');   
    $text = fread($file, filesize($parser));  
    fclose($file);*/
    //Как вариант заменить на
    $text=file_get_contents($parser);

    $file fopen($parser'w');  
    $text str_replace('?>''?> 1'$text);  
    fwrite($file$text);  
    fclose($file);

    $res=touch $parser $time_create );  
    ?>
     
    spiderbuber нравится это.
  8. spiderbuber

    spiderbuber

    Заблокирован
    Регистр.:
    20 июл 2009
    Сообщения:
    237
    Симпатии:
    61
    Всё гениальное - просто :)
    Спасибо, uNknownMark!
    Нашел пример, как тачить 1 файл временем соседнего файла.
    PHP:
    $original "config.php";
    $file2 "dbconfig.php";
    $time filemtime($original);
    if(!
    touch($file2filemtime($original))){
    echo 
    "something wrong";
    }
    А как протачить все файлы массивом?
     
  9. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    все файлы директории? попробуй так...
    PHP:
    <?php
        $files 
    scandir("patch_to_dir");
        
    $result count($files);
        for (
    $i=0$i$result$i++ ){
        if ((
    $files[$i] != ".") && ($files[$i] != "..")){
    $original $files[$i]; 
    $next_file=$i+1;
    if(
    $next_file<=$result){
    $file2 $files[$next_file]; 
    $time filemtime($original); 
    if(!
    touch($originalfilemtime($file2))){ 
    echo 
    "something wrong"
    }  }
      }
        }
    ?>
     
  10. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    ты сам то понял что сказал :-] если переменную заключить в кавычки как там написано получишь строку. Не пробовал применить filemtime к строке????