Максимальное кол-во записей в массиве

Статус
В этой теме нельзя размещать новые ответы.

yeaahhh

Старатель
Регистрация
8 Май 2008
Сообщения
278
Реакции
11
Привет, друзья. Скажите, пожалуйста, какое максимальное количество записей может содержать в себе массив?
Зависит ли это от ресурсов, которые выделяет хостинг на операцию?

Парсю информацию.. Если записей ~50-100 - все ок..
Если больше возвращается пустой массив.

Проясните, пожалуйста, ситуацию и от чего она зависит. Заранее огромное спасибо!
 
Насколько оперативки хватит на столько и создать можно, вот к примеру на миллион элементов (на большинстве хостингов должно сработать) :
PHP:
var_dump(count(range(0, 1000000)));

Если RAM не хватит скрипт упадёт по Fatal error: Allowed memory size of --- bytes exhausted (tried to allocate -- bytes)

Раз массив пустой - проблема с парсингом.
 
Вас скорее всего отрезает от источника. Попробуйте вывести сорс источника при большом массиве. Парсите через Curl?
 
Парсю через curl..
страница парсится вся..
В переменной $otv - весь код страницы..
а после
Код:
preg_match_all("|<table width='100%' cellspacing='0' align='center' class='b'(.*)</td></tr></table><br>|sU", $otv, $ss);
$ss - пуст..

И это именно там, где большое кол-во записей для массива..
 
так preg_match_all в данном случае и перетирает $ss.
третий параметр это массив куда возвращаются все совпадения с шаблоном.
 
так preg_match_all в данном случае и перетирает $ss.
третий параметр это массив куда возвращаются все совпадения с шаблоном.
$otv - в данной переменной содержится код страницы.
$ss - массив, который после preg_match_all-выборки по шаблону содержит нужные данные.. Так и нужно, все верно..
 
тогда, возможно, срабатывают лимиты самого PCRE.
нужно проверить не случилось ли чего с preg_last_error().
попробовать увеличить значения pcre.backtrack_limit и pcre.recursion_limit.
еще как вариант, если это конечно позволяет структура документа, разбить поиск на несколько частей.
 
тогда, возможно, срабатывают лимиты самого PCRE.
нужно проверить не случилось ли чего с preg_last_error().
попробовать увеличить значения pcre.backtrack_limit и pcre.recursion_limit.
еще как вариант, если это конечно позволяет структура документа, разбить поиск на несколько частей.
preg_last_error() возвращает 2.. Похоже дело в pcre.backtrack_limit ?
на обычном хостинге без доступа к php.ini никак не увеличить данную директиву?)

добавил
Код:
ini_set('pcre.backtrack_limit', 1500000);
не помогло(
 
Последнее редактирование:
добавил
Код:
ini_set('pcre.backtrack_limit', 1500000);
не помогло(

Смотри, что вернул ini_set - может не получилось установить и через ini_get проверь поменялось ли значение

Приложи свой $otv атачем или через ФО, если не секретно. Может там баг в регулярке
 
preg_last_error() возвращает 2.. Похоже дело в pcre.backtrack_limit ?

именно в нем.
ну тогда тут только два варианта.
первый - как предложил latteo - отлаживать регулярку.
вот хорошее описание как отлавливать такого рода проблемы:
Для просмотра ссылки Войди или Зарегистрируйся
второй - использовать другой подход для парсинга нужных данных, например simplehtmldom.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху