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

Форум MySQL

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

 

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

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

тема: Нужно ли очищать буферные массивы при работе с базой?
 
 автор: Владимир55   (16.02.2009 в 19:19)   письмо автору
 
 

Для обращения с базой используются примерно такие конструкции:
$res = mysql_query("SELECT id FROM log_vn WHERE identif = $identif");
while($row = mysql_fetch_assoc($res)) 

Как я понимаю, здесь формируется два массива - $res и $row.

Если принять во внимание, что упомянутая пара команд используется в скрипте несколько раз, и при этом формируются массивы с одной и той же парой имен, то возникает вопрос: может быть, для надежности, перед каждой парой этих команд есть смысл удалять оба эти массива?
Что бы предыдущие записи случайно не наложились на последующие.

Надо это или нет?

  Ответить  
 
 автор: Loki   (16.02.2009 в 19:43)   письмо автору
 
   для: Владимир55   (16.02.2009 в 19:19)
 

если вы выполните print_r($res), то с удивлением обнаружите что $res никакой не массив.

Буратине дали три яблока. Два он съел. Сколько яблок осталось у Буратины? Думаете одно? Ничего подобного. Никто же не знает сколько у него уже было яблок до этого. Мораль - обнуляйте переменные!!!

  Ответить  
 
 автор: Trianon   (16.02.2009 в 19:52)   письмо автору
 
   для: Loki   (16.02.2009 в 19:43)
 

>если вы выполните print_r($res), то с удивлением обнаружите что $res никакой не массив.
Тем не менее подчас его обнулить куда полезнее чем иной из массивов. Чем тот же $row в этом примере.

  Ответить  
 
 автор: cheops   (17.02.2009 в 00:48)   письмо автору
 
   для: Владимир55   (16.02.2009 в 19:19)
 

На последующие результирующие таблицы, предыдущие не повлияют, обнулять данные хорошо бы, но это приведет к увеличению и усложнению скрипта - обычно этой возможностью пользуются если скрипту не хватает памяти (т.е. он счерпал 8, 16, 32 Мб, которые обычно под отдельный скрипт выделяют).

  Ответить  
 
 автор: Zilog   (17.02.2009 в 02:07)   письмо автору
 
   для: cheops   (17.02.2009 в 00:48)
 

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

  Ответить  
 
 автор: cheops   (17.02.2009 в 11:59)   письмо автору
 
   для: Zilog   (17.02.2009 в 02:07)
 

Да, совершенно верно. Здесь речь идет немного о другом. Дело в том, что в PHP на память выделяемую скрипту стоит ограничение - в большинстве случаев вы не можете получить в свое распоряжение больше скольки-то мегабайт (8, 16, 32 Мб - в зависимости от настроек в php.ini). Поэтому иногда возникает ситуация, что к середине работы уже насоздано массивов и ресурсов, которые в сумме превышают этот лимит. Чтобы продолжить работу с объемными данными зачастую необходимо удалять часть созданных ранее, но уже не использованных данных

  Ответить  
 
 автор: Владимир55   (17.02.2009 в 12:19)   письмо автору
 
   для: cheops   (17.02.2009 в 11:59)
 

"Чтобы продолжить работу с объемными данными зачастую необходимо удалять часть созданных ранее, но уже не использованных данных"

А если их не удалить?
Память заполнится, и что? Сервер в своп уйдет?

"в большинстве случаев вы не можете получить в свое распоряжение больше скольки-то мегабайт (8, 16, 32 Мб - в зависимости от настроек в php.ini)."

У меня установлено 8 Мб.

Всего на ВДС 192 Мб, на key_buffer отдал 16 Мб (по умолчанию было 16K).

Какие посоветуете настройки в данной ситуации?

(количество одновременно открытых файлов 512 и это я изменить не вправе).
Как вообще используется память? Восемь на скрипт плюс 16 на базу - а осталные 158 Мб не использутся что-ли?

  Ответить  
 
 автор: cheops   (17.02.2009 в 12:22)   письмо автору
 
   для: Владимир55   (17.02.2009 в 12:19)
 

Нет, просто получите ошибку вида "Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 9728 bytes) in", которая сообщит вам, что скрипт пытается урвать лишнюю память (в данном случае 9728 байт) сверх положенной ему (в данном случае 16 Мб). Однако при работае с базой данных я такой ошибки не разу не видел - при правильной организации она не должна возникать - эта ошибка удел GDLib и парсеров.

  Ответить  
 
 автор: Владимир55   (17.02.2009 в 12:24)   письмо автору
 
   для: cheops   (17.02.2009 в 12:22)
 

Так какие мне посоветуете настройки?

Сколько кому добавить?

  Ответить  
 
 автор: cheops   (17.02.2009 в 18:38)   письмо автору
 
   для: Владимир55   (17.02.2009 в 12:24)
 

Оставьте как есть, особенно если не замечаете проблем со скоростью.

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

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