PHP 8.5.0 Beta 1 available for testing

Memcache::connect

memcache_connect

(PECL memcache >= 0.2.0)

Memcache::connect -- memcache_connectОткрывает соединение с сервером memcached

Описание

Memcache::connect(string $host, int $port = ?, int $timeout = ?): bool
memcache_connect(string $host, int $port = ?, int $timeout = ?): Memcache

Метод Memcache::connect() устанавливает соединение с сервером memcached. Соединение, которое открыли методом Memcache::connect(), автоматически закрывается при завершении работы скрипта. Соединение закрывают методом Memcache::close().

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

host

В параметре указывается хост, на котором сервер memcached прослушивает соединения, или другие транспортные протоколы наподобие unix:///path/to/memcached.sock для соединения с сокетом Unix-домена; при соединении с сокетом для параметра port потребуется установить значение 0.

port

В параметре указывается порт, на котором сервер memcached прослушивает соединения. При соединении с сокетом Unix-домена для параметра устанавливают значение 0.

Обратите внимание: при пропуске аргумента значение параметра port становится равным значению директивы memcache.default_port. Поэтому при вызове метода лучше явно указывать порт.

timeout

Время ожидания в секундах для подключения к демону. Изменение значения по умолчанию в 1 секунду часто нивелирует преимущества кеширования на медленных соединениях.

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

Функция возвращает true, если выполнилась успешно, или false, если возникла ошибка.

Примеры

Пример #1 Пример установки соединения с memcached-сервером методом Memcache::connect()

<?php

/* Процедурный API */

$memcache_obj = memcache_connect('memcache_host', 11211);

/* Объектно-ориентированный API */

$memcache = new Memcache();
$memcache->connect('memcache_host', 11211);

?>

Примечания

Внимание

При пропуске параметра port метод извлекает значение ini-директивы PHP memcache.default_port. При изменении значения директивы в коде приложения поведение метода становится непредсказуемым. Поэтому при вызове метода лучше явно указывать порт.

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

  • Memcache::pconnect() - Открывает постоянное соединение с сервером memcached
  • Memcache::close() - Закрывает соединение с сервером memcached

Добавить

Примечания пользователей 2 notes

up
11
geoffrey dot hoffman at gmail dot com
14 years ago
If memcached is working, calling memcache_connect( ) returns an Object instance, not a boolean. If memcached is not working, calling memcache_connect( ) throws a notice AND a warning (and returns false as expected).

<?php
/* memcache is running */
$test1 = memcache_connect('127.0.0.1',11211);
echo
gettype($test1);
// object
echo get_class($test1);
// Memcache

/* memcached is stopped */
$test2 = memcache_connect('127.0.0.1',11211);

/*
Notice: memcache_connect(): Server 127.0.0.1 (tcp 11211) failed with: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
(10060) in C:\Program Files\Support Tools\- on line 1

Warning: memcache_connect(): Can't connect to 127.0.0.1:11211, A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
(10060) in C:\Program Files\Support Tools\- on line 1
*/

echo gettype($test2);
// boolean
echo $test2===false;
// 1
?>

There appears to be no way to check whether memcached is actually running without resorting to error suppression:

<?php
$test3
= @memcache_connect('127.0.0.1',11211);
if(
$test3===false ){
// memcached is _probably_ not running
}
?>
up
-5
webysther at gmail dot com
11 years ago
In describing the timeout there is a statement that is not completely correct, increase the timeout does not necessarily preclude or unfeasible memcache, only allows the system to wait for more concurrent connections, which is a large minority of the number of connections, this causes several problems and could simply be corrected if the timeout was increased and perform some tests.
To prove the concept and show that the connection does not wait if the server goes down:

<?PHP

while ( ++$loop < 10000 ) {
try {
$memcache = new Memcache;
@
$memcache->pconnect( "127.0.0.1" , 11211 , 30 );
$loopset = 0;
$loopget = 0;

while ( ++
$loopset < 50 ) {
if ( @
$memcache->set( "foo" , "bar" ) === false ) {
echo
"Fail!" . PHP_EOL;
}
}

while ( ++
$loopget < 500 ) {
if ( @
$memcache->get( "foo" ) === false ) {
echo
"Fail!" . PHP_EOL;
}
}

if (
$loop % 100 == 0 ) {
echo
"Try: " . $loop . PHP_EOL;
}
} catch (
Exception $e ) {
echo
"Fail: " . $e->getMessage() . PHP_EOL;
}
}

?>

Replace with an invalid host and test the timeout will not make a difference! It serves only for connections to the socket that are occupied.

More detail about troubleshooting timeouts in memcached google code.
To Top