Mysql php закрыть все соединения

Как закрыть незакрытые соединения mysql?

Мой клиент-хостинг-провайдер блокирует сайт из-за слишком большого количества незакрытых соединений mysql. сайт был ранее создан кем-то, и в настоящее время я его поддерживаю. Я добавил функцию mysql_close в конце страниц. Он закрывает соединения хорошо, но все же я получаю некоторые соединения, оставленные незакрытыми. Я могу оставить некоторые, где.. Мне нужно закрыть закрытые соединения mysql на сервере, используя файл cron или что-то в этом роде. Что мне делать? Можно ли сразу закрыть все соединения? если да, то как?

Вы можете попробовать использовать mysql_pconnect , который имеет побочные эффекты, как описано в stackoverflow.com/questions/1340859/…

3 ответа

Используете ли вы постоянные соединения? ЕСЛИ нет, тогда вам действительно не стоит слишком беспокоиться о закрытии ваших соединений. Из manual

Использование mysql_close() обычно не используется необходимо, поскольку ненастоящий открытый ссылки автоматически закрываются на конец выполнения script. Видеть также освобождая ресурсы.

Вместо слишком много незакрытых соединений, не могло ли быть (что по сути является тем же самым), что у вас слишком много открытых соединений? Например, слишком много пользователей на вашем сайте сразу?

Если у вас есть постоянные соединения, не забывайте об этом:

mysql_close() не будет закрываться постоянные ссылки, созданные mysql_pconnect().

Как сказано в комментарии, маловероятно, чтобы ресурс mysql_connect() не был освобожден в конце script. С другой страницы

Освобождение ресурсов

Благодаря подсчету ссылок система с PHP 4 Zend Двигатель, ресурс не более ссылки на него обнаружены автоматически, и он освобождается уборщик мусора. По этой причине редко требуется для освобождения памяти вручную.

Примечание. Постоянные ссылки на базы данных исключение из этого правила. Они не уничтоженный сборщиком мусора. См. Раздел «Постоянные соединения» для получения дополнительной информации.

Однако может быть и побочный эффект из комментариев на странице mysql_close

По крайней мере, с PHP5.3.2 и Windows соединение по tcp, вы всегда должны используйте эту функцию mysql_close() для закрыть и освободить разъем tcp, используемый PHP. Сбор мусора после script выполнение не закрывает tcp socket самостоятельно. Сокет иначе оставалось бы в состоянии ожидания в течение приблизительно 30 секунд, и любой дополнительные страницы загрузки/соединения попытки только добавили бы к сумме количество открытых подключений tcp. Эта время ожидания не кажется настраивается с помощью настроек PHP.

Источник

Читайте также:  Формы

mysqli_close

Open non-persistent MySQL connections and result sets are automatically closed when their objects are destroyed. Explicitly closing open connections and freeing result sets is optional. However, it’s a good idea to close the connection as soon as the script finishes performing all of its database operations, if it still has a lot of processing to do after getting the results.

Parameters

Procedural style only: A mysqli object returned by mysqli_connect() or mysqli_init()

Return Values

Always returns true .

Changelog

Version Description
8.0.0 This function now always returns true . Previously it returned false on failure.

Examples

Example #1 mysqli::close() example

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = new mysqli ( «localhost» , «my_user» , «my_password» , «world» );

$result = $mysqli -> query ( «SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3» );

/* Close the connection as soon as it’s no longer needed */
$mysqli -> close ();

foreach ( $result as $row ) /* Processing of the data retrieved from the database */
>

mysqli_report ( MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT );
$mysqli = mysqli_connect ( «localhost» , «my_user» , «my_password» , «world» );

$result = mysqli_query ( $mysqli , «SELECT Name, CountryCode FROM City ORDER BY ID LIMIT 3» );

/* Close the connection as soon as it’s no longer needed */
mysqli_close ( $mysqli );

foreach ( $result as $row ) /* Processing of the data retrieved from the database */
>

Notes

Note:

mysqli_close() will not close persistent connections. For additional details, see the manual page on persistent connections.

See Also

  • mysqli::__construct() — Open a new connection to the MySQL server
  • mysqli_init() — Initializes MySQLi and returns an object for use with mysqli_real_connect()
  • mysqli_real_connect() — Opens a connection to a mysql server
  • mysqli_free_result() — Frees the memory associated with a result

User Contributed Notes

Источник

mysql_close

Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:

Описание

mysql_close() закрывает непостоянное соединение с базой данных MySQL, на которое указывает переданный дескриптор. Если параметр link_identifier не указан, закрывается последнее открытое (текущее) соединение.

В использовании mysql_close() обычно нет надобности для непостоянных соединений, т.к. они автоматически закрываются в конце скрипта. См. также высвобождение ресурсов.

Читайте также:  datetime

Список параметров

Соединение MySQL. Если не указано, то используется последнее соединение, открытое mysql_connect() . Если соединение не найдено или не установлено, то будет сгенерирована ошибка уровня E_WARNING .

Возвращаемые значения

Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.

Примеры

Пример #1 Пример использования mysql_close()

$link = mysql_connect ( ‘localhost’ , ‘mysql_user’ , ‘mysql_password’ );
if (! $link ) die( ‘Ошибка соединения: ‘ . mysql_error ());
>
echo ‘Успешно соединились’ ;
mysql_close ( $link );
?>

Результат выполнения данного примера:

Примечания

Замечание:

mysql_close() не закрывает постоянные соединения, созданные функцией mysql_pconnect() .

Смотрите также

Источник

Как закрыть незакрытые соединения mysql?

Хостинг-провайдер моих клиентов блокирует сайт из-за слишком большого количества незакрытых соединений mysql. сайт был ранее кем-то создан, и в настоящее время я поддерживаю его. Я добавил функцию mysql_close в конце страниц. Это закрывает соединения, но все же некоторые связи остаются незакрытыми. Я могу кое-где уехать .. Что мне нужно, так это закрыть незакрытые соединения mysql на сервере с помощью файла cron или чего-то еще .. Что мне нужно сделать? Можно ли закрыть сразу все подключения? если да, то как?

вы можете попробовать использовать mysql_pconnect , который имеет побочные эффекты, хотя, как описано в stackoverflow.com/questions/1340859/ — person konsolenfreddy &nbsp schedule 12.06.2011

как закрыть соединение, открытое в mysql_pconnect, попробуем .. — person Jagadeesan &nbsp schedule 12.06.2011

Ответы (3)

Вы используете постоянные соединения? ЕСЛИ нет, то вам действительно не стоит слишком беспокоиться о закрытии ваших соединений. Из руководства

Использование mysql_close() обычно не требуется, поскольку непостоянные открытые ссылки автоматически закрываются в конце выполнения скрипта. См. Также освобождение ресурсов.

Может быть, вместо too_much незакрытых соединений (что, по сути, одно и то же) у вас слишком много открытых соединений? Например, на вашем сайте одновременно слишком много пользователей? Если у вас есть постоянные соединения, не забывайте об этом:

Как сказано в комментарии, очень маловероятно, что ресурс mysql_connect() не будет освобожден в конце скрипта. С другой страницы руководства

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

По крайней мере, с PHP5.3.2 и Windows, соединяющимися через tcp, вы всегда должны использовать эту функцию mysql_close () для закрытия и освобождения сокета tcp, используемого PHP. Сборка мусора после выполнения скрипта сама по себе не закрывает TCP-сокет. В противном случае сокет оставался бы в состоянии ожидания примерно 30 секунд, и любые дополнительные загрузки страниц / попытки подключения только добавили бы к общему количеству открытых TCP-подключений. Это время ожидания не может быть изменено с помощью настроек PHP.

соединения, кажется, открываются только с помощью mysql_connect () .. как закрыть открытое даже в mysql_pconnect, давайте попробуем это .. — person Jagadeesan; 12.06.2011

Читайте также:  Как понять html код

Но чтобы быть уверенным: вам не нужно закрывать каждое соединение в конце ваших файлов: оно будет закрыто автоматически там. Вам нужно только закрыть его, если вы хотите сделать это на полпути, чтобы освободить ресурсы. Не тратьте время и силы, добавляя mysql_close во все ваши скрипты: D. Если вы не используете pconnect , вам, конечно, не нужно беспокоиться о закрытии этих — person Nanne; 12.06.2011

Маловероятно, что они не закрываются. ЧРЕЗВЫЧАЙНО даже. Если страница перестает работать, соединение закрывается. Ваша проблема может заключаться в том, что страница не перестает работать, одновременно работает слишком много страниц, вы используете pconnect и т. Д. И т. Д., Но вероятность того, что у вас есть нормальный скрипт php с mysql_connect() , который не закрывает свое соединение в конце кажется мне нулевым. Вы бы нашли неизвестную ошибку в php. — person Nanne; 12.06.2011

mysql_connect вернет идентификатор фактического соединения, который вы можете использовать в своем вызове mysql_close.

$conn1 = mysql_connect(. ); mysql_close($conn1); 

Вам нужно использовать идентификатор, если сама страница открывает более одного соединения, потому что в противном случае mysql_close () закроет только последнее открытое соединение. Но, как сказала Нанне, PHP обычно очищает соединения после себя после выполнения страницы, поэтому вопрос в том, не закрываете ли вы их или открываете слишком много одновременно. Обычно для каждого запроса требуется только одно соединение, если вы не открываете и не просматриваете несколько наборов результатов одновременно.

Если у вас есть незакрытые соединения, есть вероятность, что вы пропустили некоторые страницы, возможно, через include и т. Д. Или функции, вызывающие «exit», чтобы вы не достигли своего закрытого кода. Я не верю, что вы можете загружать другие соединения из mysql с помощью cron.

Источник

Оцените статью