|
|
|
| Доброго времени суток, уважаемые форумчане!
Столкнулся с такой проблемой, нужно с помощью 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)
Кто что знает, подскажите, пожалуйста, почему ничего не получается???? | |
|
|
|
|
|
|
|
для: blg_sim
(07.09.2009 в 16:52)
| | file() загружает весь объем файла в память - это не разумно, лучше воспользуйте набором функций fopen(), fgets(), fclose(), которые позволяют обрабатывать файл построчно. | |
|
|
|
|
|
|
|
для: cheops
(07.09.2009 в 17:13)
| | cheops
спасибо за совет
проблема в том, что по ходу исполнения скрипта этот файл надо будет просканировать на наличие инфы ни один раз.
Я думал, если его полностью загрузить, то он разместиться в оперативке, и время на исполнения скипта (да и нагрузка на сервер) будет меньше. На компьютере, на котором стоит сервер объем памяти 1 гиг.
PS: пробовал у себя дома, у меня этот файл обрабатывался довольно шустро, сжирал гиг оперы, при наличии четырех... | |
|
|
|
|
|
|
|
для: blg_sim
(07.09.2009 в 17:28)
| | >На компьютере, на котором стоит сервер объем памяти 1 гиг.
И к серверу обращаетесь только Вы?
И вся эта память выделена для php? | |
|
|
|
|
|
|
|
для: blg_sim
(07.09.2009 в 17:28)
| | А вам вся информация из него нужна? Нельзя ли в процессе сканирования подготовить меньший объем данных, которые потом использовать вместо повторных сканирований?
PS 1Gb на один скрипт это очень много, особенно на сервере, где оперативная память стоит дороже, так как зачастую эксплуатируется несколькими сайтами у каждого из которых могут быть сотни и тысячи клиентов. | |
|
|
|
|
|
|
|
для: cheops
(07.09.2009 в 19:14)
| | Сервер стоит на работе и служит только для поддержки внутреннего корпоративного сайта. Правда говоря сервер, я перегнул, на самом деле это обычный комп, просто выделенный для этих целей. Более никто и ничего на этой машине не происходит. Однако настраивает его автоматизация, и просто так сидеть и ковыряться в нем, мне никто не даст. Приходиться удаленно искать ошибку....
Когда этот файл обрабатывался все остальные компоненты (скрипты, странички) работали корректо без задержек, так что можно сделать вывод, что обработка этого файла не ложет ни web-сервер, ни саму машину. Скрипт грузит файл, потом ему это все дело надоедает и он возвращает предыдущую страницу, если был "about_blank", то выкидывает откно с ошибкой, в котором говорится о том, что по указанному адресу ничего не найдено, обновите страницу и проверьте DNCP.
Да и в логах php ничего нет, видно, что я обратился к страничке, а ошибки никакой не отображено. | |
|
|
|
|
|
|
|
для: blg_sim
(07.09.2009 в 17:28)
| | >Я думал, если его полностью загрузить, то он разместиться в оперативке, и время на исполнения скипта (да и нагрузка на сервер) будет меньше. На компьютере, на котором стоит сервер объем памяти 1 гиг.
Считайте, что это Ваше предположение не подтвердилось.
И возвращайтесь к исходной (разумной) позиции. | |
|
|
|
|
|
|
|
для: Trianon
(08.09.2009 в 01:36)
| | путем махинаций удалось увидеть ошибку:
fatal error: out of memory (allocated 262144) (tried to allocate 461764583 bytes)
у меня, плохо с английским, но похоже это приговор моим мечтам загрузить файлик целиком... | |
|
|
|
|
|
|
|
для: blg_sim
(08.09.2009 в 06:05)
| | Да, скрипт сообщает вам, что памяти вам больше не даст. | |
|
|
|
|
|
|
|
для: cheops
(08.09.2009 в 12:13)
| | а как с ним договориться, чтобы по больше давал?Вроде memory_limit выставил.... | |
|
|
|
|
|
|
|
для: blg_sim
(08.09.2009 в 13:21)
| | Если речь идео о хостинге, то на них обычно запрещают изменение этого параметра - т.е. функция может отработать, а фактического изменения значения не происходит. | |
|
|
|
|
|
|
|
для: cheops
(08.09.2009 в 16:06)
| | нет, параметр memory_limit изменен в самом php.ini, расположенном в папке C:\Windows. phpinfo(), также сообщает о том, что параметр изменен.
А что-нибудь еще может ограничивать размер подгружаемого файла? | |
|
|
|