2007-11-25 23:45:33 +03:00
< ? php
/*
2009-08-09 03:16:13 +04:00
* $Id $
2007-11-25 23:45:33 +03:00
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* " AS IS " AND ANY EXPRESS OR IMPLIED WARRANTIES , INCLUDING , BUT NOT
* LIMITED TO , THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED . IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT , INDIRECT , INCIDENTAL ,
* SPECIAL , EXEMPLARY , OR CONSEQUENTIAL DAMAGES ( INCLUDING , BUT NOT
* LIMITED TO , PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE ,
* DATA , OR PROFITS ; OR BUSINESS INTERRUPTION ) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY , WHETHER IN CONTRACT , STRICT LIABILITY , OR TORT
* ( INCLUDING NEGLIGENCE OR OTHERWISE ) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE , EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE .
*
* This software consists of voluntary contributions made by many individuals
* and is licensed under the LGPL . For more information , see
2009-02-04 21:03:05 +03:00
* < http :// www . doctrine - project . org >.
2007-11-25 23:45:33 +03:00
*/
2008-08-22 13:05:14 +04:00
2009-07-07 00:34:54 +04:00
namespace Doctrine\Common\Cache ;
2009-02-04 21:03:05 +03:00
2007-11-25 23:45:33 +03:00
/**
2008-09-12 12:51:56 +04:00
* Xcache cache driver .
2007-11-25 23:45:33 +03:00
*
2009-08-09 03:16:13 +04:00
* @ license http :// www . opensource . org / licenses / lgpl - license . php LGPL
* @ link www . doctrine - project . org
* @ since 2.0
* @ version $Revision : 3938 $
2010-03-31 01:14:17 +04:00
* @ author Benjamin Eberlei < kontakt @ beberlei . de >
2009-08-09 03:16:13 +04:00
* @ author Guilherme Blanco < guilhermeblanco @ hotmail . com >
* @ author Jonathan Wage < jonwage @ gmail . com >
* @ author Roman Borschel < roman @ code - factory . org >
2010-01-29 04:38:37 +03:00
* @ author David Abdemoulaie < dave @ hobodave . com >
2007-11-25 23:45:33 +03:00
*/
2009-10-23 02:19:17 +04:00
class XcacheCache extends AbstractCache
2007-11-25 23:45:33 +03:00
{
/**
2009-02-04 21:03:05 +03:00
* { @ inheritdoc }
2007-11-25 23:45:33 +03:00
*/
2010-01-29 04:38:37 +03:00
public function getIds ()
{
$this -> _checkAuth ();
$keys = array ();
for ( $i = 0 , $count = xcache_count ( XC_TYPE_VAR ); $i < $count ; $i ++ ) {
$entries = xcache_list ( XC_TYPE_VAR , $i );
if ( is_array ( $entries [ 'cache_list' ])) {
foreach ( $entries [ 'cache_list' ] as $entry ) {
$keys [] = $entry [ 'name' ];
}
}
}
return $keys ;
}
/**
* { @ inheritdoc }
*/
protected function _doFetch ( $id )
2007-11-25 23:45:33 +03:00
{
2010-02-09 23:02:43 +03:00
return $this -> _doContains ( $id ) ? unserialize ( xcache_get ( $id ) ) : false ;
2007-11-25 23:45:33 +03:00
}
/**
2009-02-04 21:03:05 +03:00
* { @ inheritdoc }
2007-11-25 23:45:33 +03:00
*/
2010-01-29 04:38:37 +03:00
protected function _doContains ( $id )
2007-11-25 23:45:33 +03:00
{
return xcache_isset ( $id );
}
/**
2009-02-04 21:03:05 +03:00
* { @ inheritdoc }
2007-11-25 23:45:33 +03:00
*/
2010-03-19 21:09:03 +03:00
protected function _doSave ( $id , $data , $lifeTime = 0 )
2007-11-25 23:45:33 +03:00
{
2010-03-19 21:09:03 +03:00
return xcache_set ( $id , serialize ( $data ), ( int ) $lifeTime );
2007-11-25 23:45:33 +03:00
}
/**
2009-02-04 21:03:05 +03:00
* { @ inheritdoc }
2007-11-25 23:45:33 +03:00
*/
2010-01-29 04:38:37 +03:00
protected function _doDelete ( $id )
{
return xcache_unset ( $id );
}
/**
* Checks that xcache . admin . enable_auth is Off
*
* @ throws \BadMethodCallException When xcache . admin . enable_auth is On
* @ return void
*/
protected function _checkAuth ()
2007-11-25 23:45:33 +03:00
{
2010-01-29 04:38:37 +03:00
if ( ini_get ( 'xcache.admin.enable_auth' )) {
throw new \BadMethodCallException ( 'To use all features of \Doctrine\Common\Cache\XcacheCache, you must set "xcache.admin.enable_auth" to "Off" in your php.ini.' );
}
2007-11-25 23:45:33 +03:00
}
}