(PECL memcache >= 0.2.0)

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


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

Memcache::connect() устанавливает соединение с сервером memcached. Соединение, открытое с помощью Memcache::connect(), автоматически закрывается по окончанию выполнения скрипта. Также вы можете закрыть соединение при помощи Memcache::close(). Также вы можете использовать функцию memcache_connect().

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


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


Определяет порт, на котором слушает memcached. Установите этот параметр равным 0, если используете сокеты Unix.

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


Значение в секундах, которое будет использовано для подключения к демону. Дважды подумайте, прежде чем изменить значение по умолчанию с 1 секунды - вы можете потерять все преимущества от кеширование, если ваше соединение очень медленное.

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

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


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


/* процедурное API */

$memcache_obj memcache_connect('memcache_host'11211);

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

$memcache = new Memcache;




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

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

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

add a note

User Contributed Notes 5 notes

geoffrey dot hoffman at gmail dot com
12 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).

/* memcache is running */
$test1 = memcache_connect('',11211);
// object
echo get_class($test1);
// Memcache

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

Notice: memcache_connect(): Server (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, 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:

= @memcache_connect('',11211);
$test3===false ){
// memcached is _probably_ not running
webysther at gmail dot com
8 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:


while ( ++$loop < 10000 ) {
    try {
$memcache = new Memcache;
$memcache->pconnect( "" , 11211 , 30 );
$loopset = 0;
$loopget = 0;
        while ( ++
$loopset < 50 ) {
            if ( @
$memcache->set( "foo" , "bar" ) === false ) {
"Fail!" . PHP_EOL;
        while ( ++
$loopget < 500 ) {
            if ( @
$memcache->get( "foo" ) === false ) {
"Fail!" . PHP_EOL;
        if (
$loop % 100 == 0 ) {
"Try: " . $loop . PHP_EOL;
    } catch (
Exception $e ) {
"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.
11 years ago
To suppress (or handle) the warning and notice thrown by a failed attempt to connect, you can use a custom error handler function, like this:

function myErrorHandler($errno, $errstr, $errfile, $errline)

    if (
E_WARNING === $errno)
Log("PHP Warning: $errstr, $errfile, $errline", Logging::WARN);
    if (
E_NOTICE === $errno)
Log("PHP Notic: $errstr, $errfile, $errline", Logging::NOTICE);

chrisn at allipo dot com
16 years ago
The behavior of Memcache::connect() is to always reinitialize the pool from scratch regardless of any previous calls to addServer().


= new Memcache()
$mmc->addServer('node1', 11211);
$mmc->addServer('node2', 11211);
$mmc->addServer('node3', 11211);

$mmc->connect('node1', 11211);

The last connect() call clears out the pool and then add and connect node1:11211 making it the only server.

If you want a pool of memcache servers, do not use the connect() function.

If you only want a single memcache server then there is no need to use the addServer() function.
tom at all dash community dot de
10 years ago
There is a not-so-obvious way to check whether or not a MemCache-Server is available.

Using ($memCache->connect() == false) will wait for a timeout if it can't connect. If you got a high-traffic site this may not be an option. So when the server is down, you may want to avoid waiting for this timeout on every request and instead try to reconnect only once every X seconds.

If so, this code may help:

= new \Memcache();
$memCache->addServer($host, $port);
$stats = @$memCache->getExtendedStats();
$available = (bool) $stats["$host:$port"];
if (
$available && @$memCache->connect($host, $port))
// MemCache is there
// go on without MemCache

The result of getExtendedStats() is an array. The information is cached and maintained by MemCache itself. If the server is not available, the result will be FALSE.

Even if the result is not false, the server may still not be available. Thus you need to check for connect() != false too, but only if the first check returns TRUE, thus avoiding the 1 second timeout in most cases.
Both getExtendedStats() and connect() issue notices/warnings if the server is not there. Thus you have to mute both calls.

Do NOT use getServerStatus() for this purpose: the result is cached on server-start and will not recognize when the connection to the server is lost (or reestablished) in between.
To Top