| imho.ws |
![]() |
|
|
|
# 1 |
|
Full Member
Регистрация: 29.05.2002
Сообщения: 544
![]() ![]() ![]() ![]() ![]() |
str_replace and huge strings problem(+)
пытаюсь сделать что-то вроде:
Код:
$sourceString = str_replace('placeholder', $hugeString, $sourceString);
![]() важные детали: этот код находится в методе некоторого класса. этот метод самый "прожорливый", если верить профайлеру. там сначала строчка собирается из массива в цикле, а уже затем происходит replace. так вот на рабочем компе все ок. на хостинге скрипт захлебывается. скрипт, который использует даный класс, работает по следующией схеме: 1. сначала идет запрос к бд. 2. затем на основе выборки идут еще несколько запросов(больших, несколько тыс. записей). если выборка не пуста, то создается экземпляр класса. далее при обработке(fetching). в поле класса(типа array) добавляется новый элемент, т.е. массив постоянно растет. затем после окончания обработки всех записей вызывается тот самый "прожорливый" метод, который делает единую строку из массива и вставляет ее в другую строку(см. пример выше). 3. затем результат должен записываться в файл. если заменить все это на обычную конкатенацию(т.е. сборку строки дедовских методом прямо в цикле обработки записей), то все работает нормально, а главное везде. 4. класс находится в отдельном файле от скрипта. replace - нельзя использовать для больших строк? или я концептуально ошибся?
__________________
убрано по просьбе администратора
Последний раз редактировалось Sheryld; 24.08.2004 в 17:12. |
|
|
|
|
# 2 | |
|
::VIP::
Регистрация: 27.01.2004
Адрес: Россия. Барнаул
Пол: Male
Сообщения: 417
![]() ![]() ![]() |
Цитата:
__________________
Nunc est bibendum |
|
|
|
|
|
# 5 |
|
Guest
Сообщения: n/a
|
если я правильно понял то:
сначала формируется массив(например 3 Mb), затем из массива создается одна строка (еще 3 Mb) затем $sourceString еше 3 Mb Итого: 9 Mb. (конечно если не передавать значения по ссылке) а у тебя на хостере нет ограничения на размер выполняемого скрипта? |