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

Тема в разделе "PHP", создана пользователем LEXAlForpostl, 16 авг 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. LEXAlForpostl

    LEXAlForpostl

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

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

    Буду безмерно благодарен.
     
  2. Travolta_2009

    Travolta_2009 Читатель

    Заблокирован
    Регистр.:
    4 апр 2009
    Сообщения:
    5
    Симпатии:
    0
    replace $ так попробуй
     
  3. betatest

    betatest

    Регистр.:
    3 дек 2007
    Сообщения:
    517
    Симпатии:
    127
    пхп код на пункт 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); } }
    ?> 
     
    LEXAlForpostl и irk нравится это.
  4. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
    код на 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. SergEX

    SergEX Читатель

    Заблокирован
    Регистр.:
    8 авг 2009
    Сообщения:
    6
    Симпатии:
    1
    Расширение правильнее получать так:
    PHP:
    $ext strrchr($name'.');
    Ведь расширения не обязательно могут быть из 3х символов (.html) или вообще файлы могут быть без расширения.
     
  6. LEXAlForpostl

    LEXAlForpostl

    Регистр.:
    21 май 2008
    Сообщения:
    739
    Симпатии:
    226
    PHP:
    $ext strrchr($name'.');  
    Если встречаются файлы с двумя точками - то он их не распознаёт.
    Что необходимо исправить?
     
  7. tommy

    tommy Постоялец

    Регистр.:
    7 авг 2006
    Сообщения:
    74
    Симпатии:
    12
    тогда уж так

    PHP:
    $str explode("."$name);
    $ext $str[count($str)-1]; 
     
  8. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    тогда уже так:
    PHP:
    $ext end(explode("."$name));
    раза в 2 быстрей исполнится :))
     
  9. tostrss

    tostrss

    Регистр.:
    16 окт 2007
    Сообщения:
    771
    Симпатии:
    217
    А вот еще пример, который будет работать быстрее всех приведенных примеров
    PHP:
    $ext  substr($varstrrpos($name'.') + 1);
     
  10. saen

    saen

    Регистр.:
    6 авг 2006
    Сообщения:
    756
    Симпатии:
    129
    Перейти по ссылке - почитай ;)
     
    tostrss нравится это.
Статус темы:
Закрыта.