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

Форум MySQL

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

 

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

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

тема: Как влияет mysql_close на работу скрипта?
 
 автор: Владимир55   (26.02.2009 в 20:37)   письмо автору
 
 

Скрипт, состоящий из нескольких файлов, регистрирует показы рекламы и клики. В начале каждого файла, использующего базу, я пишу
    // Соединяемся с сервером базы данных
    $dbcnx = @mysql_connect($dblocation, $dbuser, $dbpasswd);
    if(!$dbcnx) return;

    // Выбираем базу данных
    if(!@mysql_select_db($dbname,$dbcnx)) exit();

Скрипт отлажен и, вроде бы, нормально работает.

Но тут я вспомнил, что надо разрывать соединение с базой после того, как надобность в ней отпадает. И потому в самом конце каждого файла сделал дополнение
mysql_close ($dbcnx);

Каково же было мое удивление, когда я увидел, что работа скрипта существенно ухудшилась!

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

Что бы это могло быть?

Как функционирует mysql_close? Как тривиальный выключатель или как-то сложнее?

Можно ли вообще обойтись без этой коменды?

  Ответить  
 
 автор: ddhvvn   (26.02.2009 в 20:53)   письмо автору
 
   для: Владимир55   (26.02.2009 в 20:37)
 

Можно ли вообще обойтись без этой коменды?
Обойтись можно ). Соединение автоматически закрывается при завершении работы скрипта.

Только странновато как-то... насчет "ухудшения работы..."

  Ответить  
 
 автор: Владимир55   (26.02.2009 в 22:38)   письмо автору
 
   для: ddhvvn   (26.02.2009 в 20:53)
 

"Соединение автоматически закрывается при завершении работы скрипта"

А когда работа скрипта завершается?
Если я открыл страницу администратора и читаю ее целый день, скрипт завершен или исполняется?

  Ответить  
 
 автор: root   (26.02.2009 в 22:46)   письмо автору
 
   для: Владимир55   (26.02.2009 в 22:38)
 

Скрипт выполняется на сервере и высылает вам ответ (response).
А читаете Вы "на клиенте".
Считайте что последний ?> завершает скрипт.

  Ответить  
 
 автор: Axxil   (26.02.2009 в 23:17)   письмо автору
 
   для: Владимир55   (26.02.2009 в 22:38)
 

Тут аналогия простая. С утра вы попросили секретаршу сделать отчёт. Секретарша отчёт сделала, принесла вам и отпросилась к стоматологу.

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

  Ответить  
 
 автор: Trianon   (26.02.2009 в 23:39)   письмо автору
 
   для: Владимир55   (26.02.2009 в 20:37)
 

структура include'ов сложная?

  Ответить  
 
 автор: Владимир55   (27.02.2009 в 00:07)   письмо автору
 
   для: Trianon   (26.02.2009 в 23:39)
 

"структура include'ов сложная?"
Нет, я взял за правило избегать цепочки include'ов.

"Считайте что последний ?> завершает скрипт"
Это мне было бы очень кстати. Это точно?

  Ответить  
 
 автор: BinLaden   (27.02.2009 в 00:16)   письмо автору
 
   для: Владимир55   (27.02.2009 в 00:07)
 

> Это мне было бы очень кстати. Это точно?
* sigh * Да, считайте, что так.

  Ответить  
 
 автор: Владимир55   (27.02.2009 в 01:19)   письмо автору
 
   для: BinLaden   (27.02.2009 в 00:16)
 

В таком случае код
<?php

    
die ();

?>
будет выполняться вечно!
(Старт кнопкой).

  Ответить  
 
 автор: Root   (27.02.2009 в 11:41)   письмо автору
 
   для: Владимир55   (27.02.2009 в 01:19)
 

Владимир, а что делает функция die()?

  Ответить  
 
 автор: Владимир55   (27.02.2009 в 13:57)   письмо автору
 
   для: Root   (27.02.2009 в 11:41)
 

У меня этот оператор используется при вводе. Например, так:
$forma = '<form method="post"> 
<input type="text" name="pass"> 
<input type="submit" value="Ввести пароль."> 
</form>'; 

$pass = $_POST['pass']; 
if (!$pass) 

  echo "<br>$forma"; 
  die();        // Остановка скрипта 
}


А ещё у меня есть такая привычка.
По мере создания сайта те промежуточные варианты кода, которые не нашли своего применения, постепенно сползают вниз страницы, и я отделяю их от рабочей части посредством die(). Словно отчеркиваю на листе бумаги.

По уму, нужно бы их закомментировать, если уж не хочется удалять, но вот сложилось как то так.

Сейчас пришлось всё это почистить.

  Ответить  
 
 автор: Root   (27.02.2009 в 14:11)   письмо автору
 
   для: Владимир55   (27.02.2009 в 13:57)
 

Интересная привычка, у меня привычка наооборот: die() не использовать.

Одним словом, если Вы насильно не завершаете скрипт посредством die() или exit, он завершится сам как сказано выше.
Кроме того, если скрипт не закончил работу через 30 секунд (в большинстве случаев), вы увидете "fatal error".

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

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