PDA

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


Дикс
08.08.2008, 09:49
Первые две части:

0. о перфекционизме и проститутках (https://forum.antichat.ru/thread76751.html)

1. random image viewer- минифицируем код? (https://forum.antichat.ru/thread79405.html)

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


рабочий вариант

<?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);
}


нерабочий

foreach(glob("files/*") as $page)
file_put_contents($page, str_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

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 />';


Добавим до кучи короткий тег (<?)

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

<? foreach(glob('files/*') as $p) file_put_contents($p, str_ireplace('Альтеа', 'Алтеа', file_get_contents($p)));

Итого, NOmeR1, ты предложил лишь фикс проблемы, являющийся неоптимизированной заплаткой.

Полная минификация:
скрипт для замены подстрок во всех указанных файлах.
укладываемся в 107 байт, если учесть что исходная подстрока = 'текст1', а заменяющая - 'текст2'
<?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 нету

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


Алтеа Алтеа Алтеа


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

Пиотр Тотамович
08.08.2008, 21:20
Первые две части:

0. о перфекционизме и проститутках (https://forum.antichat.ru/thread76751.html)

1. random image viewer- минифицируем код? (https://forum.antichat.ru/thread79405.html)

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


рабочий вариант

<?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);
}


нерабочий

foreach(glob("files/*") as $page)
file_put_contents($page, str_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