![]() |
str_replace and huge strings problem(+)
пытаюсь сделать что-то вроде:
Код:
$sourceString = str_replace('placeholder', $hugeString, $sourceString);важные детали: этот код находится в методе некоторого класса. этот метод самый "прожорливый", если верить профайлеру. там сначала строчка собирается из массива в цикле, а уже затем происходит replace. так вот на рабочем компе все ок. на хостинге скрипт захлебывается. скрипт, который использует даный класс, работает по следующией схеме: 1. сначала идет запрос к бд. 2. затем на основе выборки идут еще несколько запросов(больших, несколько тыс. записей). если выборка не пуста, то создается экземпляр класса. далее при обработке(fetching). в поле класса(типа array) добавляется новый элемент, т.е. массив постоянно растет. затем после окончания обработки всех записей вызывается тот самый "прожорливый" метод, который делает единую строку из массива и вставляет ее в другую строку(см. пример выше). 3. затем результат должен записываться в файл. если заменить все это на обычную конкатенацию(т.е. сборку строки дедовских методом прямо в цикле обработки записей), то все работает нормально, а главное везде. 4. класс находится в отдельном файле от скрипта. replace - нельзя использовать для больших строк? или я концептуально ошибся? |
Цитата:
|
дык, я стараюсь максимально отделить код от представляения...
|
если это простая конкатенация, то что тут отделять?
собрал строку -- отдал методу, который будет ее отображать. лучше по ссылке. |
если я правильно понял то:
сначала формируется массив(например 3 Mb), затем из массива создается одна строка (еще 3 Mb) затем $sourceString еше 3 Mb Итого: 9 Mb. (конечно если не передавать значения по ссылке) а у тебя на хостере нет ограничения на размер выполняемого скрипта? |
| Часовой пояс GMT +4, время: 14:32. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.