Comments 42
UFO just landed and posted this here
«Блямс!», сказала бензопила — «А-а-а, блин!», сказали мужики.
Надо же, незнал. Спасибо.
Я тоже не знал. Но когда из-за этой ошибки не работал проект, то потратил не мало времени и сил, чтобы обнаружить это. Конечно, как всегда «никто ничего не трогал». Но особенно удручало, что «всё должно работать».
Поэтому теперь помню, что не все функции работают так как ожидается разработчиком.
Поэтому теперь помню, что не все функции работают так как ожидается разработчиком.
Поведайте же нам. Что вы передавали туда? :)
html страницы наверно?
Размах хороший, но стоит по немного проверять, а то так можно и длину string переплюнуть :)
А как же unit-тесты?
Веселое решение. Давайте теперь на каждую функцию php будем вешать unit test!
Ну писать на каждую функцию юнит-тест действительно бред. Писать их надо на логически завершенные части проекта, как мне кажется. Тогда бы автор не потратил много времени и сил на поиск неисправности. Локализовать было бы легче.
Дело в том, что даже при наличии тестов такие баги будут жить очень долго.
Модуль не прошел тест? — ищем ошибки в коде. До посинения.
Локализировали проблему — пишем локальный подтест. Причем нет гарантии, что тест будет проверять данные объемом 100кб (кто мог подумать...). Тест проходит успешно. И снова пошли за миноискателем.
Тесты — не панацея.
Модуль не прошел тест? — ищем ошибки в коде. До посинения.
Локализировали проблему — пишем локальный подтест. Причем нет гарантии, что тест будет проверять данные объемом 100кб (кто мог подумать...). Тест проходит успешно. И снова пошли за миноискателем.
Тесты — не панацея.
Да, действительно. По крайней мере я бы не стал писать проверочные данные объёмом больше 100КБ. Действительно кто бы мог подумать. Спасибо.
А какова она? Разве не пока выделенная память закончится?
Что за длина string?
ini_set(«pcre.backtrack_limit»,10000000);
вас спасёт
вас спасёт
Мне кажется, или за 100 кб html-кода в одном файле надо бить не файл, а разработчика?
почему это ещё? А как же например парсинг какой-нибудь выгрузки БД?
Да и 100кб html — тоже нормальная цифра для каталогов или ещё чего-нибудь
Да и 100кб html — тоже нормальная цифра для каталогов или ещё чего-нибудь
недавно хотел страницу в yahoo.pipes пропустить.
яха меня послала. страница 500 кб, а допустимо <=200 кб.
так и подумал, что убивать надо таких.
там новости одной лентой за 3 года.
ни RSS, ни страниц.
яха меня послала. страница 500 кб, а допустимо <=200 кб.
так и подумал, что убивать надо таких.
там новости одной лентой за 3 года.
ни RSS, ни страниц.
Вам наверное стоит спросить здесь.
А использовать парсер можно, например для подсветки C++/Java/PHP программ.
А использовать парсер можно, например для подсветки C++/Java/PHP программ.
как это обьяснить?:)
- Test failed
- Test passed!
- Test passed!
- Test passed!
- Test passed!
- Test passed!
- <?
- $i = 200000;
- $x = "b".str_repeat("a",$i)."b";
- if(preg_match("/^b.*?b$/",$x)){
- echo "Test passed!<br>";
- }
- else{
- echo "Test failed<br>";
- }
- $i = 200;
- $x = "b".str_repeat("a",$i)."b";
- if(preg_match("/^b.*?b$/",$x)){
- echo "Test passed!<br>";
- }
- else{
- echo "Test failed<br>";
- }
- $i = 200000;
- $x = "b".str_repeat("a",$i)."b";
- if(preg_match("/^ba*b$/",$x)){
- echo "Test passed!<br>";
- }
- else{
- echo "Test failed<br>";
- }
- $i = 200;
- $x = "b".str_repeat("a",$i)."b";
- if(preg_match("/^ba*b$/",$x)){
- echo "Test passed!<br>";
- }
- else{
- echo "Test failed<br>";
- }
- $i = 200000;
- $x = "b".str_repeat("a",$i)."b";
- if(preg_match("/^b.*b$/",$x)){
- echo "Test passed!<br>";
- }
- else{
- echo "Test failed<br>";
- }
- $i = 200;
- $x = "b".str_repeat("a",$i)."b";
- if(preg_match("/^b.*b$/",$x)){
- echo "Test passed!<br>";
- }
- else{
- echo "Test failed<br>";
- }
- highlight_file(__FILE__);
- ?>
Для парсинга есть еще такие замечательные вещи, как phpQuery ) правда, в код я не заглядывал, если честно.
Во-первых, как вам уже указали выше, это лечимо.
Во-вторых, проблема не в длине строке, а в самом выражении. Точнее в глубине рекурсии.
В своё время нарвался на эту проблему, пришлось переписывать шаблоны.
Во-вторых, проблема не в длине строке, а в самом выражении. Точнее в глубине рекурсии.
В своё время нарвался на эту проблему, пришлось переписывать шаблоны.
php.ini:
[Pcre]
pcre.recursion_limit=700000
pcre.backtrack_limit=700000
Уже сталкавался с таким, мне пока для шаблонов хватило столько :)
[Pcre]
pcre.recursion_limit=700000
pcre.backtrack_limit=700000
Уже сталкавался с таким, мне пока для шаблонов хватило столько :)
Вообще лучше не применять preg_match и подобные ей веши для прсинга больших данных.
Для больщих данных лучше что-то специфическое или свое решение.
А так для провекри правельности введенных данных с форм к примеру вполне но не более.
Для больщих данных лучше что-то специфическое или свое решение.
А так для провекри правельности введенных данных с форм к примеру вполне но не более.
Вот я помучался с такой штукой, когда писал для себя один скрипт.
Сталкивался с подобной проблемой, но вероятно не в этом было дело, задача была собирать ссылки на внутренние страницы, сайты были больших размеров, на серваке после сбора 1000 ссылок, выходила 502 ошибка, но на локалхосте все работало, подскажите в чем могла быть проблема?
Не стоит также забывать о других ограничениях описанных в www.pcre.org/pcre.txt раздел LIMITATIONS
За такую регулярку на такой длине надо наказывать. Сильно.
/a[^a]a/
/a[^a]a/
заголовок провокационный: это не тест конкретной функции пхп, а тест pcre, который один для всех.
Sign up to leave a comment.
Тест PHP-функции preg_match