phpday 2025 - Call For Papers

Memcache::connect

(PECL memcache >= 0.2.0)

Memcache::connectAbre una conexión al servidor memcached

Descripción

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

Memcache::connect() establece una conexión al servidor memcached. La conexión, que fue abierta usando Memcache::connect() será automáticamente cerrada al finalizar la ejecucción del script. También se puede cerrar con Memcache::close(). También puede usar la función memcache_connect().

Parámetros

host

El host donde el memcached está esperando conexiones. En este parámetro también se puede especificar otros transporte como unix:///path/to/memcached.sock para usar UNIX domain sockets. En este caso port debe ser establecido a 0.

port

El puerto donde memcached está esperando conexiones. Establezca este parámetro a 0 cuando se usan UNIX domain sockets.

Por favor note: port será por defecto memcache.default_port en caso de no especificarse. Por esta razón, se recomienda especificar el puerto explícitamente en la llamada a este método.

timeout

Valor en segundos que se utilizarán para conectarse al demonio. Piensa dos veces antes de cambiar el valor por defecto de 1 segundo, puedes perder todas la ventajas del caché si tus conexiones son muy lentas.

Notas

Advertencia

Cuando no se especifica port, este método usará el valor establecido en la directiva ini memcache.default_port de PHP. Si este valor se cambiara en cualquier lugar de la aplicación podría conducir a resultados inesperados; por esta razón, es prudente especificar el puerto explícitamente en la llamada a este método.

Valores devueltos

Devuelve true en caso de éxito o false en caso de error.

Ejemplos

Ejemplo #1 Memcache::connect() example

<?php

/* procedural API */

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

/* OO API */

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

?>

Ver también

add a note

User Contributed Notes 2 notes

up
10
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
-4
webysther at gmail dot com
10 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