@@ -219,23 +219,40 @@ public function isSupported(): bool
219219 return extension_loaded ('memcached ' ) || extension_loaded ('memcache ' );
220220 }
221221
222- /**
223- * Reconnect to Memcached server
224- *
225- * Used by ReconnectCacheDecorator to restore connection after failure.
226- */
222+ public function ping (): bool
223+ {
224+ if (! isset ($ this ->memcached )) {
225+ return false ;
226+ }
227+
228+ $ version = $ this ->memcached ->getVersion ();
229+
230+ if ($ this ->memcached instanceof Memcached) {
231+ // Memcached extension returns array with server:port => version
232+ if (! is_array ($ version )) {
233+ return false ;
234+ }
235+
236+ $ serverKey = $ this ->config ['host ' ] . ': ' . $ this ->config ['port ' ];
237+
238+ return isset ($ version [$ serverKey ]) && $ version [$ serverKey ] !== false ;
239+ }
240+
241+ if ($ this ->memcached instanceof Memcache) {
242+ // Memcache extension returns string version
243+ return is_string ($ version ) && $ version !== false && $ version !== '' ;
244+ }
245+
246+ return false ;
247+ }
248+
227249 public function reconnect (): bool
228250 {
229- // Close existing connection to avoid resource leak
230251 if (isset ($ this ->memcached )) {
231- try {
232- if ($ this ->memcached instanceof Memcached) {
233- $ this ->memcached ->quit ();
234- } elseif ($ this ->memcached instanceof Memcache) {
235- $ this ->memcached ->close ();
236- }
237- } catch (Exception $ e ) {
238- // Connection already dead, that's fine
252+ if ($ this ->memcached instanceof Memcached) {
253+ $ this ->memcached ->quit ();
254+ } elseif ($ this ->memcached instanceof Memcache) {
255+ $ this ->memcached ->close ();
239256 }
240257 }
241258
0 commit comments