Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Тексты > Максимальная длина строки PHP |
Автор: WolfAlone 4.10.2009, 17:51 | ||
Доброго всем времени суток! Возник следующий вопрос: имеет ли PHP5 ограничение на длинну строки? Например:
P.S. Всем спасибо за внимание! |
Автор: Ипатьев 4.10.2009, 17:55 |
А можно поинтересоваться, откуда возник такой странный вопрос? |
Автор: WolfAlone 4.10.2009, 19:22 |
Да, конечно. Передомной стоит задача, правки кода малоизвестного "самопального" "движка", разработанного видимо, студентом первого курса. ![]() При инициализации некоторых объектов - в качетве параметров им передаются переменные, которые содержат целые блоки текста (вместе с HTML-тегами), которые впоследствии служат содержимым этих самых блоков. Вот я и подумал, а не могут ли возникать глюки при передаче ооочень большого блока текста, который пытаются запихать в переменную (одну, не массив!)? |
Автор: Ипатьев 4.10.2009, 19:49 |
Ооочень большой блок - это сколько? 50 мегабайт? 500? Я правильно понимаю, что код работает без сбоев, а вы на ровном месте придумали себе вопрос? Послушайте доброго совета: не забивайте себе голову. Исправляйте только те проблемы, которые есть в реальности. |
Автор: WolfAlone 4.10.2009, 19:59 |
В реальности я имею систему, которая может дать сбой (а может и не дать). Очень большой блок текста - это на мой взгляд, допустим 3-5Мб. В переменной $x (описана выше), может содержатья 3-5Мб. текста без ошибок? (*Если оперативка хостера позволяет) |
Автор: Ипатьев 4.10.2009, 20:12 |
Вы понимаете, что этот ваш подход годится только для анекдота? Я так понимаю, что речь идет не о размере переменной, а о строках, прописанных в тексте программы? И что - там действительно есть блоки по несколько мегабайт? |
Автор: Ипатьев 4.10.2009, 20:33 |
"передается" или прописан в скрипте в виде $x="qwerty..."; ? |
Автор: WolfAlone 4.10.2009, 20:45 | ||
Есть некая процедура, например, ShowText, в качестве параметров которой указывается переменная, которую она выводит, примерно вот так:
Передаваться может и пару сотен байт текста и примерно 1Мб, а в последствии и пяток (5) Мб, текста (HTML теги + непосредственно текст)... |
Автор: Ипатьев 4.10.2009, 20:56 |
Короче, не морочьте себе голову. Не надо выдумывать проблемы на ровном месте. При объявлении функции showText желательно писать (&$x). Это будет экономить память. Однако к выдуманной вами проблеме про размер переменных это не имеет никакого отношения. Постарайтесь умерить свою фантазию - это сбережет вам очень много времени. |
Автор: WolfAlone 4.10.2009, 21:07 |
Уважаемый Ипатьев! Из выше сказанного я понял, что работать вся эта "бадяга" будет нормально? |
Автор: Ипатьев 4.10.2009, 21:13 |
Никаких гарантий нормальности работы "этой бадяги" я дать не могу. Однако ваши страхи по поводу глюков, происходящих от размера переменных, совершенно беспочвенны. Кроме общей нехватки памяти скрипту, о которой вам и так известно. |
Автор: WolfAlone 4.10.2009, 21:30 |
Уважаемый Ипатьев! Благодарю Вас за активное участие! Буду следовать вашему совету! ![]() Даст Бог, будет работать! Ещё раз спасибо! |
Автор: sTa1kEr 5.10.2009, 13:04 | ||||
На самом деле это заблуждение, я уже не раз в этом форуме приводил http://derickrethans.nl/files/phparch-php-variables-article.pdf ссылку . В PHP передача по ссылке не только не экономит память, но и наоборот может потребовать ее в два раза больше. Если в двух словах, то дело в том, что в PHP в момент передачи любых данных по значению само значение не копирует, вместо этого он увеличивает внутренний счетчик ссылок переменных с этим значением. Однако, если передать по ссылке значение указывающие на более, чем одну переменную, то PHP придется создать полную копию этого значения.
По этому я не рекомендовал бы использовать "&", кроме тех случаев для которых он предназначен и где без него не обойтись. |
Автор: NewDima 5.10.2009, 14:32 | ||||
sTa1kEr, Все ваши посты заставляют меня задуматься, этот не исключение. Вижу необъективность в вашем тесте. Вы измеряете используемую память в каждый данный момент. Позвольте привести тест, который отслеживает изменения использования памяти
ответ:
|
Автор: sTa1kEr 5.10.2009, 15:05 | ||||||
Вы не учли У вас же: одна переменная - одно значение. Вот если бы у вас было
Тогда бы все 4 переменных указывали на одно значение и что бы передать одну из них по ссылке PHP пришлось бы скопировать значение. Немного другой пример, демонстрирующий обратное действие:
Здесь переменная сразу передается по ссылке, но при попытке вывести ее она будет скопирована, т.к. _print принимает параметр не по ссылке. Если бы функция test1 тоже принимала параметр по значению, то переменную не пришлось бы копировать и памяти было бы затрачено столько же int(10600736)
Добавлено @ 15:10 Этого достаточно, т.к. строка возвращаемая функцией str_repeat очевидно занимает значительно больше памяти, чем любые накладные расходы теста. |
Автор: NewDima 5.10.2009, 15:45 | ||||
Обратите, пожалуйста, внимание на последнее значение Добавлено через 8 минут и 22 секунды NewDima, что-то я подзапутался |
Автор: sTa1kEr 5.10.2009, 15:59 |
ЧТД. Именно про это я и говорил. |
Автор: NewDima 5.10.2009, 17:31 | ||||
Если кому интересно, составил табличку сравнения![]() Левый столбец - при существующей ЕДИНСТВЕННОЙ ссылке значение
Правый столбец - при двух ссылках, одна из которых не используется вообще
|
Автор: Gro577 2.3.2017, 08:26 |
Уважаемый Ипатьев. Немогу не заметить вашу ценность ваших ответов. Они не имеют ни малейшего отношения к вопросу, описанному в теме. У админов прошу прощения за флуд. Просто крик отчаяния уже от подобных комментаторов. |