Перейти к содержимому


- - - - -

Предел preg_match


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 7

#1 wext

wext
  • Новичок

  • Пользователь
  • 36 сообщений

Отправлено 05.04.2011 - 00:09

Нужно спарсить 1 страничку. Всё бы ничего, да вот только "не находит" нужного:
preg_match_all('/<table.*?>(.*?)<\/table>/us', $html, $res);

На сколько я понял причина в этом:
<table lalalala>
несколько тыщ строк кода <---
</table>

Можно как-то убрать этот предел?

//Проблему решил костылями, но это не вариант

Сообщение отредактировал wext: 05.04.2011 - 01:39


#2 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 05.04.2011 - 12:20

Если ты на 100% уверен в самом выражении (и в данных, которые ты ему скармливаешь - т.е. у нигде нет такого

Цитата

< table
, теги написаны именно в нижнем регистре и т.п.):
1) It is usually not possible to match more than pcre.backtrack_limit characters in ungreedy mode.
Которую ты используешь аж 2 раза
Увеличь эти настройки
Увеличь память, выделяемую для PHP.
2) Все-таки попробуй переписать выражение
3) Пересобери PCRE

#3 wext

wext
  • Новичок

  • Пользователь
  • 36 сообщений

Отправлено 05.04.2011 - 14:25

Благодарю, теперь все заработало :)

Переписать - если тока поставить [^<] вместо нежадного, хотя и так не находило.

#4 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 05.04.2011 - 15:41

А можешь написать, какие лимиты поставил и строку примерно какой длины при этом скармливаешь? Любопытства ради :)

#5 wext

wext
  • Новичок

  • Пользователь
  • 36 сообщений

Отправлено 05.04.2011 - 17:12

Поставил с запасом - pcre.backtrack_limit = 10 мильёнов (10 000 000).
Сама страничка размером 186 КБ в UTF-8 (вроде всё на английском), а данных там на 152КБ.

Сообщение отредактировал wext: 05.04.2011 - 17:13


#6 wext

wext
  • Новичок

  • Пользователь
  • 36 сообщений

Отправлено 05.04.2011 - 17:45

Кстати, интересует еще вот что:
1) $_FILES[lalala][size] задается сервером или клиентом? Т.е. верить ли этим числам?
2) Посоветуйте хороший СМС шлюз с отправкой СМС в Россию\СНГ\Забугорье (последнее в принципе не столь важно, но всё же).

#7 pahan76

pahan76
  • Консультант

  • Пользователь
  • 990 сообщений
  • Пол:Мужчина
  • Город:Химки, М.О.

Отправлено 05.04.2011 - 20:45

1) Р-р задает сервер на основании данных полученных от клиента. В простейшем случае это обязательное поле Content-Length HTTP-заголовка. Не верить? А смысл? Послать меньше действительного р-ра файла нельзя - сервер просто проигнорирует лишнее. Послать больше данных, попытавшись устроить DoS-атаку - есть куча настроек, которые ограничат это:
upload_max_filesize - максимальный р-р файла, который можно принять. Если попытаться пихнуть больше, $_FILES будет пустым
post_max_size (должно быть можно предыдущего) - максимальный р-р POST запроса
max_file_uploads - макс. число файлов, которое можно пихнуть за раз
Для загруженных серверов, медленных каналов и огромных файлов также повлияют:
max_input_time - макс. время, которое скрипт может потратить на ввод данных
max_execution_time - макс. время исполнения скрипта (без ожидания закачки файлов, запросов к БД, системных вызовов)
memory_limit
+ аналогичные ограничения в самом вэб-сервере.
2) Я только собственным модемом пользовался. Так что с этим вопросом лучше сразу на форуме поискать/новую тему открыть.

#8 wext

wext
  • Новичок

  • Пользователь
  • 36 сообщений

Отправлено 05.04.2011 - 22:31

Спасибо.




Количество пользователей, читающих эту тему: 1

0 пользователей, 1 гостей, 0 скрытых пользователей