imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Веб-мастеру > Веб-программирование
Опции темы
Старый 24.08.2004, 16:56     # 1
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
str_replace and huge strings problem(+)

пытаюсь сделать что-то вроде:

Код:
$sourceString = str_replace('placeholder', $hugeString, $sourceString);
в качестве $hugeString выступает строчка размером в несколько мегабайт

важные детали:

этот код находится в методе некоторого класса. этот метод самый "прожорливый", если верить профайлеру.

там сначала строчка собирается из массива в цикле, а уже затем происходит replace.

так вот на рабочем компе все ок. на хостинге скрипт захлебывается.

скрипт, который использует даный класс, работает по следующией схеме:

1. сначала идет запрос к бд.

2. затем на основе выборки идут еще несколько запросов(больших, несколько тыс. записей).

если выборка не пуста, то создается экземпляр класса.

далее при обработке(fetching). в поле класса(типа array) добавляется новый элемент, т.е. массив постоянно растет.

затем после окончания обработки всех записей вызывается тот самый "прожорливый" метод, который делает единую строку из массива и вставляет ее в другую строку(см. пример выше).

3. затем результат должен записываться в файл.

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


4. класс находится в отдельном файле от скрипта.

replace - нельзя использовать для больших строк? или я концептуально ошибся?
__________________
убрано по просьбе администратора

Последний раз редактировалось Sheryld; 24.08.2004 в 17:12.
Sheryld вне форума  
Старый 25.08.2004, 11:53     # 2
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
Цитата:
Sheryld:
заменить все это на обычную конкатенацию(т.е. сборку строки дедовских методом прямо в цикле обработки записей), то все работает нормально, а главное везде.
так и заменяй... Если нет каких-то других условий, то строку можно формировать в процессе выборки записей из базы данных.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 25.08.2004, 14:17     # 3
Sheryld
Full Member
 
Регистрация: 29.05.2002
Сообщения: 544

Sheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царствеSheryld Луч света в тёмном царстве
дык, я стараюсь максимально отделить код от представляения...
__________________
убрано по просьбе администратора
Sheryld вне форума  
Старый 25.08.2004, 14:23     # 4
is_absent
::VIP::
 
Аватар для is_absent
 
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417

is_absent Молодецis_absent Молодецis_absent Молодец
если это простая конкатенация, то что тут отделять?
собрал строку -- отдал методу, который будет ее отображать. лучше по ссылке.
__________________
Nunc est bibendum
is_absent вне форума  
Старый 26.08.2004, 08:58     # 5
NarcomBAT
Guest
 
Сообщения: n/a

если я правильно понял то:

сначала формируется массив(например 3 Mb),
затем из массива создается одна строка (еще 3 Mb)
затем $sourceString еше 3 Mb
Итого: 9 Mb. (конечно если не передавать значения по ссылке)

а у тебя на хостере нет ограничения на размер выполняемого скрипта?
 

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 17:42.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.