Переменную не обработать

Monah IRH

Новичок
Переменную не обработать

Считываю через сокеты некоторые страницы в интернете, с последующей их обработкой. Не было проблем. Но возникла, когда одна из страниц оказалось довольно большой. strlen её кода = 5882308 .

Вот в чём проблема. Считываю страницу с помощью функции SendStr следующим образом:
PHP:
$page = SendStr($url, $postfield);
и тут проблема. Если просто делаю
PHP:
echo $page;
или к примеру
PHP:
echo strlen($page)
всё ок и нормально работает.. если пытаюсь допустим сделать так:
PHP:
echo "<textarea cols=100 rows=25>".$page."</textarea>";
или так:
PHP:
preg_match(..., $page, $vars);
то страница тупо не открывается. Браузер выдает - Сервер не найден. При том достаточно быстро (т.е. это явно не timelimit загрузки страницы).

Кто-нибдуь сталкивался? В чём может быть проблема?
 

tony2001

TeaM PHPClub
stack overflow в PCRELib.
стандартная проблема, решается переписыванием регэкспа.

-~{}~ 05.08.08 19:06:

либо еще более банально - память закончилась, о чем PHP сообщит, если ты включишь показ ошибок.
 

Monah IRH

Новичок
просто если с локальной машины запускаю - всё ок, если на сервер выгружаю, там вот и такая байда.

стандартная проблема, решается переписыванием регэкспа.
что за зверь такой?
 

Monah IRH

Новичок
да, про регулярные ступил. не понял сокращения)
Автор оригинала: tony2001
>echo "<textarea cols=100 rows=25>".$page."</textarea>";
>preg_match(..., $page, $vars);

если И то, И то, то закончилась память.
да. и в том и в том случае результат один - Сервер не найден.
если закончилась память, какие пути решения?
 

tony2001

TeaM PHPClub
>да. и в том и в том случае результат один - Сервер не найден.

выключи вот эти глупые "человекопотятные" сообщения об ошибках.

>если закончилась память, какие пути решения?

увеличить memory_limit.
 

Monah IRH

Новичок
поговорил с теми, кто дает мне хост. memory_limit насколько понял тока в настройках сервака меняют, а они на это не идут. В итоге буду просто страницу считывать не всю целиком, а как бы динамически.. старое удалять, новоое докачивать.
Как кстати указатель каретки переводить в нужное положение и указывать до какой позиции считывать?))
 

dimagolov

Новичок
Monah IRH, все меняется, почитал бы ман по memory_limit, посмотрел бы по логу с какой ошибкой умирает php. хотя может быть ограничение на уровне процесса, но определить это не меняя memory_limit и не смотря логи нельзя.
 

Monah IRH

Новичок
Автор оригинала: tony2001
>да. и в том и в том случае результат один - Сервер не найден.

выключи вот эти глупые "человекопотятные" сообщения об ошибках.
кстати на эту тему.. скрипт ошибку то не выдает.. он тупо до неё не доходит.. просто выполнение прерывается, и пишет то, что я цитировал)
Поэтому переполняется там память или нет не понятно.. отображение ошибок включено и в .htacess и в самом скрипте.
 

dimagolov

Новичок
блин, еще один сказочник который расказывает про то, что логи молчат. ну ладно php error log найти не можешь, ну хоть лог апача, в котором будет результат обработки запроса посмотреть можно?

хотя... есть вариант, если процесс подвисает и max_execution_time = 0 и ignore_user_abort = true, то ничего в лог апача не попадет.
 

Monah IRH

Новичок
да эти логи на хосте не посмотреть. их тока хостер посмотреть и может! я не говорил что они молчат)
 

dimagolov

Новичок
но хотя бы посмотреть в чем разница в php_info на хостинге и на девелопе и привести все подозрительные настройки к виду хостинга, чтобы смоделировать ситуацию можно?
 

Monah IRH

Новичок
эмм.. ну я могу сохранить результаты обоих и выложить для сравнения)

-~{}~ 06.08.08 02:36:

в качестве тестов смотрел что да как.. сделав после
PHP:
$page = SendStr($url, $postfield);
строку
PHP:
$page = substr($page, 0, intval(strlen($page) / 4));
скрипт нормально запустился и не вылетел во время выполнения. Если с memory_limit ничего так и не выйдет видимо так и придется делить текст на 4ре части и каждую отдельно анализировать.. просто боюсь чтоб данные, которые на концах разделенных частей не посеялись..

-~{}~ 09.08.08 21:51:

В продолжении темы. Переработал алгоритм.. считываю файл частями. Части имеют какой-то N-ый размер в байтах (+- сотня байт). На 12м проходе (Размер частей не особо важен, факт в том, что опять идентичная ситуация, когда браузер тупо не грузит Php скрипт) ситуация повторяется. (Я считаю, что все-таки оказались правыми и дело в памяти, т.к. на локальной машине всё ок. Размер скачиваемого файла как я узнал около 7,02 Mb для файла, который не может обработаться и 502 kb для файла который спокойно обрабатывается и на локальной машине и на сервере)
Повсеместно в скрипте я избавляюсь от ненужных далее переменных посредствам unset, поэтому возникло два вопроса:

1. Освобождает ли unset место в памяти?
2. Можно ли как-то посмотреть какие переменные и что в себе содержат? Типа var_dump ток для всех переменных на данный момент.
 

Bu-Bu

Любитель PHP
7Мб текста - это изврат полный. Ты о пользователях подумал, прежде чем пытаться им подсунуть это? Может им и 10 кб такого текста ни к чему
 

Monah IRH

Новичок
пользователей нет. Это скрипт анализа. Текст генерируется другим скриптом, а этим я его анализирую. Текст генерируется на другом сервере и предназначен немного для других целей, поэтому приходится его скачивать. Но это не суть важно. Факт в том, что сам скрипт обработки загибается и не может обработать.
 

Monah IRH

Новичок
memory_get_usage() и memory_get_peak_usage() пробовал. Мне писало, что нет таких функций. Нашел в комментариях их аналоги, но они вообще ничего не возвращают. Тупо молчат.
 

Bu-Bu

Любитель PHP
Так что за текст на 7Мб? Это книга целая. Разве нельзя заставить скрипт, который ЭТО генерирует разбить эту книгу на главы или хотя бы на удобоваримые куски. Нужно от этого толкаться а не изобретать велосипед. А если тот скрипт недоступен, то скачивать частями и сохранять частями - через sockets это легко реализуется.
P.S. Части нужно, естественно, сохранять на диск и убирать из памяти
 
Сверху