Минификация кода 3: замена текста по всех файлах

Discussion in 'PHP' started by Дикс, 8 Aug 2008.

  1. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Первые две части:

    0. о перфекционизме и проститутках

    1. random image viewer- минифицируем код?

    эта будет третья.
    сейчас я уже минифицировал свой собственный код, но он работает не идеально.
    от вас ожидаются другие, инновационые решения и фикс моей проблемы :)


    рабочий вариант
    PHP:
    <?php

    $pages 
    glob("files/*");
    foreach(
    $pages as $page)
        if(!
    substr_count((string)$page'index.php')){
        
    $data file_get_contents($page);

        
    $data str_ireplace('АЛЬТЕА''Алтеа'$data);
        
    $data str_ireplace('Альтеа''Алтеа'$data);

        
    file_put_contents($page$data);    
    }

    нерабочий
    PHP:
    foreach(glob("files/*") as $page)
    file_put_contents($pagestr_ireplace('Альтеа''Алтеа'file_get_contents($page)));    
    Нерабочий не меняет вхождения типа:
    АЛЬТЕА</h1>

    Можно конечно сунуть вместо строк массив с двумя значениями, но мне хотелось бы понять, почему Ireplace реагирует на регистр
     
    #1 Дикс, 8 Aug 2008
    Last edited: 8 Aug 2008
    3 people like this.
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,194
    Reputations:
    252
    str_ireplace - Регситро-независимый вариант функции str_replace..
    Ты бы нашел ошибку если бы разложил все по строкам..
     
  3. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    ..
     
  4. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    Code:
    <?php
    $pages=glob('files/*');
    foreach($pages as $page)
    	if(!strpos($page, 'index.php'))
    		file_put_contents($page, preg_replace('~(?<=ал)ь(?=теа)~i', '', file_get_contents($page)));
    Только убирает мягкий знак.
     
  5. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    Гуд. Но регулярка в цикле для каждого из 124 html-файлов (что я делал в реале) - не лучший метод.
    Более правильно всё-таки понять, почему str_ireplace не реагировала на регистр.

    Потом проверку на индекс не надо - он не лежит в папке files и не попадает под маску glob

    И glob я считаю можно вставить в foreach. Он не выполняется при каждой итерации, что подтверждает следующий тестовый скрипт:
    PHP:
    <?php

    function iglob(){
        global 
    $cnt;
        
    $arr = array('file1','file2','file3');
        
    $cnt++;
        return 
    $arr;
    }

    $test iglob();

    foreach (
    $test as $r){
        echo 
    $r.'<br />';

    }

    echo 
    '<br />cnt is '.$cnt.'<br />';

    $cnt 0;

    foreach (
    iglob() as $r){
        echo 
    $r.'<br />';

    }

    echo 
    '<br />cnt is '.$cnt.'<br />';
    Добавим до кучи короткий тег (<?)

    Итого мы имеем:

    PHP:
    <? foreach(glob('files/*') as $pfile_put_contents($pstr_ireplace('Альтеа''Алтеа'file_get_contents($p))); 
    Итого, NOmeR1, ты предложил лишь фикс проблемы, являющийся неоптимизированной заплаткой.

    Полная минификация:
    скрипт для замены подстрок во всех указанных файлах.
    укладываемся в 107 байт, если учесть что исходная подстрока = 'текст1', а заменяющая - 'текст2'
    PHP:
    <?foreach(glob('files/*')as$p)file_put_contents($p,str_ireplace('текст1','текст2',file_get_contents($p)));
     
  6. life96

    life96 Elder - Старейшина

    Joined:
    9 Apr 2008
    Messages:
    51
    Likes Received:
    18
    Reputations:
    23
    Дикс у меня проблемы с str_ireplace нету
    PHP:
    <?
      
    $data "Альтеа АЛЬТЕА альтеа";
      
    $data str_ireplace('АЛЬТЕА''Алтеа'$data); 
      die(
    $data);
    ?>
    IMHO проверь настройки кодовой страницы, см. в строну setlocale()
     
  7. Пиотр Тотамович

    Joined:
    8 Aug 2008
    Messages:
    6
    Likes Received:
    1
    Reputations:
    0
    Знаешь, наверно трудно тебе понять что это просто невероятно нелепо создавать такие темы и гордиться двумя строчками элементарного кода на php. Поэтому даю простую рекомендацию. Скачай исходный код любого опенсурсного проекта (apache например или php да что угодно). Найди там какой-нибудь файл с исходным кодом размером эдак мегабайт или по-больше. Открой его. И долго втыкай, пока твоя самооценка не опустится до уровня Земного ядра. Потом закрой, удали нафиг этот код и больше не создавай таких тем...
     
  8. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    если тебе неприятно читать подобные темы, то просто их не открывай. лично я тебе прочтение этого не навязывал.
    а мне интересно пообщаться с людьми, которых тоже это интересует и узнать что-то новое.
     
  9. Дикс

    Дикс Elder - Старейшина

    Joined:
    16 Apr 2006
    Messages:
    1,194
    Likes Received:
    227
    Reputations:
    26
    насчёт str_ireplace я кажется понял:
    у меня было 124 html-файла.
    в большинстве из них кодировка utf-8, но были и файлы в iso-8859-1
    вероятно поэтому для них не срабатывала замена.
    интересно, можно как-то получить контент в нужной кодировке? или для этого надо функцию писать (mbstring?)
     
  10. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Ты случайно не попутал исходник с фоткой в формате Bmp? ))

    Хотя общий ход мыслей поддерживаю, стоит посмотреть на чужие проекты. И почитать книжки хорошие. По пхп советую Гутманса(для начала), один из разработчиков PHP.


    google.com/search?q=%D0%B3%D1%83%D1%82%D0%BC%D0%B0%D0%BD%D1%81+PHP
     
    #10 nerezus, 10 Aug 2008
    Last edited: 10 Aug 2008