Наичнается учебный год в универе.(Работа с файлами)

Статус
В этой теме нельзя размещать новые ответы.

LEXAlForpostl

Мой дом здесь!
Регистрация
21 Май 2008
Сообщения
766
Реакции
228
Здравствуйте.
Начался учебный год в универе и первые задания :).
Подскажите пожалуйста:
1) Как во всех в файлах .txt, расположенных в субдирректории subdir/, заменить word1 на word2?

2) Как все файлы папки изменить на "word".$i с сохранением расширения и вывести в конце первоначальное значение файлов.

Буду безмерно благодарен.
 
  • Заблокирован
  • #2
replace $ так попробуй
 
пхп код на пункт 1

PHP:
<?php
$dpath="subdir";

$dir=opendir($dpath);
while($name=readdir($dir)) { if(!is_file($name)){ continue; } if( (strtolower(substr($name,strlen($name)-4)))==".txt") 
{ echo("found: $name <br>\r\n"); $string=file_get_contents($name); $string=str_replace("word1","word2",$string); 
$file=fopen($name,"w+"); fputs($file,$string); fclose($file); } }
?>
 
код на 2:
PHP:
<?php
$dpath="startdir";
$dir=opendir($dpath);
$i = 1;
echo 'Old names:<br>\r\n';
while($name=readdir($dir)) { 
	if(is_file($name) && $name !== '.' && $name !=='..')
	{ 
	
	$ext = substr($name,strlen($name)-4);
	rename($dpath."/".$name, $dpath."/word".$i.$ext);
	$i++;
	echo("$name <br>\r\n"); 
	}
}
?>

P.s.: При желании можно старые и новые имена заносить в массив для последующих манипуляций с ними.
Например в тело цикла, перед инкрементом, вставить:
PHP:
$filenames[$name] = 'word'.$i.$ext;
Тогда получится ассоциативный массив со старыми именами в ключе и новыми в значении.
 
  • Заблокирован
  • #5
$ext = substr($name,strlen($name)-4);

Расширение правильнее получать так:
PHP:
$ext = strrchr($name, '.');
Ведь расширения не обязательно могут быть из 3х символов (.html) или вообще файлы могут быть без расширения.
 
PHP:
$ext = strrchr($name, '.');
Если встречаются файлы с двумя точками - то он их не распознаёт.
Что необходимо исправить?
 
А вот еще пример, который будет работать быстрее всех приведенных примеров
PHP:
$ext  = substr($var, strrpos($name, '.') + 1);
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху