Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Минификация кода 3: замена текста по всех файлах (https://forum.antichat.xyz/showthread.php?t=80124)

Дикс 08.08.2008 09:49

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

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 реагирует на регистр

Isis 08.08.2008 10:38

str_ireplace - Регситро-независимый вариант функции str_replace..
Ты бы нашел ошибку если бы разложил все по строкам..

Дикс 08.08.2008 12:10

Цитата:

хотелось бы понять, почему ireplace реагирует на регистр
..

NOmeR1 08.08.2008 12:43

Код:

<?php
$pages=glob('files/*');
foreach($pages as $page)
        if(!strpos($page, 'index.php'))
                file_put_contents($page, preg_replace('~(?<=ал)ь(?=теа)~i', '', file_get_contents($page)));

Только убирает мягкий знак.

Дикс 08.08.2008 13:22

Гуд. Но регулярка в цикле для каждого из 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)));


life96 08.08.2008 14:14

Дикс у меня проблемы с str_ireplace нету
PHP код:

<?
  $data 
"Альтеа АЛЬТЕА альтеа";
  
$data str_ireplace('АЛЬТЕА''Алтеа'$data); 
  die(
$data);
?>

Цитата:

Алтеа Алтеа Алтеа
IMHO проверь настройки кодовой страницы, см. в строну setlocale()

Пиотр Тотамович 08.08.2008 21:20

Цитата:

Сообщение от Дикс
Первые две части:

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 реагирует на регистр

Знаешь, наверно трудно тебе понять что это просто невероятно нелепо создавать такие темы и гордиться двумя строчками элементарного кода на php. Поэтому даю простую рекомендацию. Скачай исходный код любого опенсурсного проекта (apache например или php да что угодно). Найди там какой-нибудь файл с исходным кодом размером эдак мегабайт или по-больше. Открой его. И долго втыкай, пока твоя самооценка не опустится до уровня Земного ядра. Потом закрой, удали нафиг этот код и больше не создавай таких тем...

Дикс 09.08.2008 07:44

если тебе неприятно читать подобные темы, то просто их не открывай. лично я тебе прочтение этого не навязывал.
а мне интересно пообщаться с людьми, которых тоже это интересует и узнать что-то новое.

Дикс 10.08.2008 07:51

насчёт str_ireplace я кажется понял:
у меня было 124 html-файла.
в большинстве из них кодировка utf-8, но были и файлы в iso-8859-1
вероятно поэтому для них не срабатывала замена.
интересно, можно как-то получить контент в нужной кодировке? или для этого надо функцию писать (mbstring?)

nerezus 10.08.2008 12:57

Цитата:

Найди там какой-нибудь файл с исходным кодом размером эдак мегабайт или по-больше. Открой его.
Ты случайно не попутал исходник с фоткой в формате Bmp? ))

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


google.com/search?q=%D0%B3%D1%83%D1%82%D0%BC%D0%B0%D0%BD%D1%8 1+PHP


Время: 02:44