Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: О подгружаемого текстового файла
 
 автор: blg_sim   (07.09.2009 в 16:52)   письмо автору
 
 

Доброго времени суток, уважаемые форумчане!

Столкнулся с такой проблемой, нужно с помощью php обработаться текстовый файл общим объемом 500 МБ. Суть обработки заключается в открытии этого файла и поиска по нему необходимой информации. К сожалению воспользоваться My SQL не представляется возможным, только текстовый файлик.

Но вот значит пытаюсь его открыть с помощью команды "file()". Однако ничего не выходит... Странички грузится, грузится, а потом возвращается в предыдущие состояние.

Вот настройки php.ini:

max_execution_time = 3000000 ; Maximum execution time of each script, in seconds
max_input_time = 60 ; Maximum amount of time each script may spend parsing request data
memory_limit = 1280M ; Maximum amount of memory a script may consume (8MB)


Кто что знает, подскажите, пожалуйста, почему ничего не получается????

  Ответить  
 
 автор: cheops   (07.09.2009 в 17:13)   письмо автору
 
   для: blg_sim   (07.09.2009 в 16:52)
 

file() загружает весь объем файла в память - это не разумно, лучше воспользуйте набором функций fopen(), fgets(), fclose(), которые позволяют обрабатывать файл построчно.

  Ответить  
 
 автор: blg_sim   (07.09.2009 в 17:28)   письмо автору
 
   для: cheops   (07.09.2009 в 17:13)
 

cheops
спасибо за совет

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

Я думал, если его полностью загрузить, то он разместиться в оперативке, и время на исполнения скипта (да и нагрузка на сервер) будет меньше. На компьютере, на котором стоит сервер объем памяти 1 гиг.

PS: пробовал у себя дома, у меня этот файл обрабатывался довольно шустро, сжирал гиг оперы, при наличии четырех...

  Ответить  
 
 автор: Trianon   (07.09.2009 в 18:30)   письмо автору
 
   для: blg_sim   (07.09.2009 в 17:28)
 

>На компьютере, на котором стоит сервер объем памяти 1 гиг.

И к серверу обращаетесь только Вы?
И вся эта память выделена для php?

  Ответить  
 
 автор: cheops   (07.09.2009 в 19:14)   письмо автору
 
   для: blg_sim   (07.09.2009 в 17:28)
 

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

PS 1Gb на один скрипт это очень много, особенно на сервере, где оперативная память стоит дороже, так как зачастую эксплуатируется несколькими сайтами у каждого из которых могут быть сотни и тысячи клиентов.

  Ответить  
 
 автор: blg_sim   (08.09.2009 в 01:33)   письмо автору
 
   для: cheops   (07.09.2009 в 19:14)
 

Сервер стоит на работе и служит только для поддержки внутреннего корпоративного сайта. Правда говоря сервер, я перегнул, на самом деле это обычный комп, просто выделенный для этих целей. Более никто и ничего на этой машине не происходит. Однако настраивает его автоматизация, и просто так сидеть и ковыряться в нем, мне никто не даст. Приходиться удаленно искать ошибку....

Когда этот файл обрабатывался все остальные компоненты (скрипты, странички) работали корректо без задержек, так что можно сделать вывод, что обработка этого файла не ложет ни web-сервер, ни саму машину. Скрипт грузит файл, потом ему это все дело надоедает и он возвращает предыдущую страницу, если был "about_blank", то выкидывает откно с ошибкой, в котором говорится о том, что по указанному адресу ничего не найдено, обновите страницу и проверьте DNCP.

Да и в логах php ничего нет, видно, что я обратился к страничке, а ошибки никакой не отображено.

  Ответить  
 
 автор: Trianon   (08.09.2009 в 01:36)   письмо автору
 
   для: blg_sim   (07.09.2009 в 17:28)
 

>Я думал, если его полностью загрузить, то он разместиться в оперативке, и время на исполнения скипта (да и нагрузка на сервер) будет меньше. На компьютере, на котором стоит сервер объем памяти 1 гиг.

Считайте, что это Ваше предположение не подтвердилось.
И возвращайтесь к исходной (разумной) позиции.

  Ответить  
 
 автор: blg_sim   (08.09.2009 в 06:05)   письмо автору
 
   для: Trianon   (08.09.2009 в 01:36)
 

путем махинаций удалось увидеть ошибку:

fatal error: out of memory (allocated 262144) (tried to allocate 461764583 bytes)

у меня, плохо с английским, но похоже это приговор моим мечтам загрузить файлик целиком...

  Ответить  
 
 автор: cheops   (08.09.2009 в 12:13)   письмо автору
 
   для: blg_sim   (08.09.2009 в 06:05)
 

Да, скрипт сообщает вам, что памяти вам больше не даст.

  Ответить  
 
 автор: blg_sim   (08.09.2009 в 13:21)   письмо автору
 
   для: cheops   (08.09.2009 в 12:13)
 

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

  Ответить  
 
 автор: cheops   (08.09.2009 в 16:06)   письмо автору
 
   для: blg_sim   (08.09.2009 в 13:21)
 

Если речь идео о хостинге, то на них обычно запрещают изменение этого параметра - т.е. функция может отработать, а фактического изменения значения не происходит.

  Ответить  
 
 автор: blg_sim   (08.09.2009 в 16:17)   письмо автору
 
   для: cheops   (08.09.2009 в 16:06)
 

нет, параметр memory_limit изменен в самом php.ini, расположенном в папке C:\Windows. phpinfo(), также сообщает о том, что параметр изменен.

А что-нибудь еще может ограничивать размер подгружаемого файла?

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования