X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Allowed memory size
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 25.1.2010, 5:03; Ответить: Letmetouchyou
Сообщение #1


на локальном компьютере все работате отлично.
когда халил на хост такой еррор:
Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 71 bytes) in /var/www/nutekkkk/data/www/pokerology.ru/gps/gomap.php on line 27

первый раз такое вижу )

суть скрипта : берет файт, которй может содержать до 150 000 сторк ( ето цифровые карты ), и обрабатывает его, ищет опредленные слова, загоняет в массивы значения и т.д.

единственно решение вижу - ето загнать все ети файлы в БД.
но тутже вопрос: справиться ли база (MySql) с таким объемом?
Файлов этих порядка 1000, может больше :)
или как рещить проблему с memry size?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
UncleM
UncleM
сообщение 25.1.2010, 5:25; Ответить: UncleM
Сообщение #2


Есть пару вариантов навскидку:

1. читать файлы построчно, а не целиком;
2. оптимизировать код: убрать лишние переменные, следить за расходом памяти и т.д.

Даже с гигабайтовыми файлами можно справиться довольно эффективно. Чем больше объем обрабатываемой информации, тем "умнее" должен быть код. А считать весь файл в массив - это самый простой и неэффективный подход.


--------------------
Осторожно! Вы можете получить огромный заряд позитива!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 25.1.2010, 12:09; Ответить: Letmetouchyou
Сообщение #3


Mike, лишних переменных вапше нету )
и файл считываеться посторочно )
ееш вопрос:
как следить за расходом помяти? и как узнать время рабоыт скрипта ? ( если ли таймер какойнибудь)?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
UncleM
UncleM
сообщение 25.1.2010, 19:35; Ответить: UncleM
Сообщение #4


http://php.net/manual/en/function.memory-get-usage.php

http://www.compdoc.ru/internet/php/phptime/

Самые простые запросы, на которые в гугле первая строчка является ответом. :)


--------------------
Осторожно! Вы можете получить огромный заряд позитива!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 25.1.2010, 22:21; Ответить: Letmetouchyou
Сообщение #5


Mike, я заодно с постом задал вопрос :Р
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
UncleM
UncleM
сообщение 25.1.2010, 23:54; Ответить: UncleM
Сообщение #6


Если про MySQL, то да, конечно, такой поиск будет быстрее. Особенно если есть поддержка FULLTEXT. MySQL сделана для хранения и поиска информация, так что тут без вопросов.
База данных справится с любым объемом информации, тут уже дело в аккуратно написанных запросах.

Что касается увеличения памяти, то тут есть варианты.
1. в php.ini прописать: memory_limit = 16M
2. в php скрипте: ini_set('memory_limit', '16M');
3. в .htaccess: php_value memory_limit 16M

Эти вопросы? Я сразу их пропустил, так как найти ответы очень легко в гугле. Это все основы, и материала на эту тему куча.


--------------------
Осторожно! Вы можете получить огромный заряд позитива!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 26.1.2010, 0:20; Ответить: Letmetouchyou
Сообщение #7


Mike, php.ini отпадает т.к. на локальном все отлично,а на хотсинге еррор.
причом только с одним документом.
с остальными 30 ( короые успел проверить ) все хорошо )
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
UncleM
UncleM
сообщение 26.1.2010, 0:36; Ответить: UncleM
Сообщение #8


(Letmetouchyou @ 26.1.2010, 02:20) *
с остальными 30 ( короые успел проверить ) все хорошо )


B)
30 чего? не понял...

Если скрипт жрет столько памяти при одном запуске, то что будет, когда его начнут юзать другие люди? Если он не предназначен для других юзеров, то можно все на локалке сделать.


--------------------
Осторожно! Вы можете получить огромный заряд позитива!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Letmetouchyou
Letmetouchyou
Topic Starter сообщение 26.1.2010, 0:52; Ответить: Letmetouchyou
Сообщение #9


Mike, 30 файлов. ето цифровы карты.
я просто не пойм в чем соль.

файл читаеться так
[PHP]while (!feof($file)) {
$line = fgets($file);
for ($i=0;$i<sizeof($line_destroyed);$i++)
{
switch ($line_destroyed[$i]){
.....[/PHP]
в кадм кейсе новые перменные. тоесть ничего глобального там созавать не может. а ерроер как раз на строку с explode.
а сама строчка файла не превышает 30 символов
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
UncleM
UncleM
сообщение 26.1.2010, 1:42; Ответить: UncleM
Сообщение #10


explode создает массив. Может быть, там массивы создаются новые каждый раз? В конце концов, на новый просто не хватает памяти.
Использование explode внутри цикла всегда вызывает подозрения.


--------------------
Осторожно! Вы можете получить огромный заряд позитива!
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Взрыв мозга background-size
4 Андрей Ефимов 3601 17.4.2014, 13:08
автор: -Андрей Ефимов-


 



RSS Текстовая версия Сейчас: 28.3.2024, 19:29
Дизайн