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

spiderbuber

Гуру форума
Заблокирован
Регистрация
20 Июл 2009
Сообщения
237
Реакции
59
  • Автор темы
  • Заблокирован
  • #1
Требуется открыть файл, внести в него изменения, сохранить и изменить дату+время модификации на ту, что были до редактирования.
Сейчас я это делаю так. Открываю, вношу изменения и тачу, предварительно посмотрев дату и время..
PHP:
$parser = "file.php";
$file = fopen($parser, 'r'); 
$text = fread($file, filesize($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 );

Как сделать проще?
И еще вопрос: как затачить все файлы и папки в которых только что были внесены изменения одним махом?
 
int filemtime ( string filename )

Функция возвращает время последнего изменения указанного файла или FALSE в случае возникновения ошибки. Время возвращается в формате 'Unix timestamp', который подходит для передачи в качестве аргумента функции date().
 
например используя такую конструкцию получишь время последней модификации файла в секундах
PHP:
echo date('U')- date('U',filemtime('timer.txt'));
timer.txt это файл время модификации которого узнаем и никаких touch не надо
 
  • Автор темы
  • Заблокирован
  • #4
Мне же нужно не только узнать время, но и изменить его на то, которое было до внесения изменений..

Что-то не могу догнать.. Узнали время, подставили..
PHP:
$parser = "dbconfig.php"; 
date('U',filemtime('$parser'));
$file = fopen($parser, 'r');  
$text = fread($file, filesize($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 );

В итоге:
как правильно использовать?
 
Ошибка здесь
Код:
filemtime('$parser')
надо так
Код:
filemtime($parser)
и ты не сделал время файла переменной
Код:
$time_create = date('U',filemtime('$parser'));
И потом используй так
Код:
$new_date = strtotime ( $time_create );
 
  • Автор темы
  • Заблокирован
  • #6
Не помогло, дата по прежнему сбрасывается..
PHP:
$parser = "dbconfig.php";  
$time_create = date('U', filemtime($parser)); 
$file = fopen($parser, 'r');   
$text = fread($file, filesize($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 );
 
  • Автор темы
  • Заблокирован
  • #8
Всё гениальное - просто :)
Спасибо, uNknownMark!
Нашел пример, как тачить 1 файл временем соседнего файла.
PHP:
$original = "config.php";
$file2 = "dbconfig.php";
$time = filemtime($original);
if(!touch($file2, filemtime($original))){
echo "something wrong";
}
А как протачить все файлы массивом?
 
все файлы директории? попробуй так...
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($original, filemtime($file2))){ 
echo "something wrong"; 
}  }
  }
    }
?>
 
Все таки в строке filemtime($parser) должны быть кавычки, у меня с ними заработало..
ты сам то понял что сказал :-] если переменную заключить в кавычки как там написано получишь строку. Не пробовал применить filemtime к строке????
 
Назад
Сверху