Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
memcache
Manage
Activity
Members
Labels
Plan
Wiki
Custom issue tracker
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Model registry
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
GitLab community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
project
memcache
Commits
f5dbe3fb
Commit
f5dbe3fb
authored
May 22, 2007
by
Robert Douglass
Browse files
Options
Downloads
Patches
Plain Diff
refactored all dmemcache functions into separate include
parent
2f7c4147
No related branches found
No related tags found
No related merge requests found
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
dmemcache.inc
+206
-0
206 additions, 0 deletions
dmemcache.inc
memcache.db.inc
+1
-196
1 addition, 196 deletions
memcache.db.inc
memcache.inc
+1
-196
1 addition, 196 deletions
memcache.inc
memcache.module
+1
-1
1 addition, 1 deletion
memcache.module
with
209 additions
and
393 deletions
dmemcache.inc
0 → 100644
+
206
−
0
View file @
f5dbe3fb
<?php
// $Id$
/*
* Core dmemcache functions required by:
* memcache.inc
* memcache.db.inc
* session-memcache.inc
* session-memcache.db.inc
*/
global
$_memcache_statistics
;
$_memcache_statistics
=
array
(
'get'
=>
array
(),
'set'
=>
array
(),
'hit'
=>
array
());
/*
* A memcache API for Drupal.
*/
/**
* Place an item into memcache
*
* @param $key The string with with you will retrieve this item later.
* @param $value The item to be stored.
* @param $exp Parameter expire is expiration time in seconds. If it's 0, the item never expires
* (but memcached server doesn't guarantee this item to be stored all the time, it could be
* deleted from the cache to make place for other items).
* @param $bin The name of the Drupal subsystem that is making this call. Examples could be
* 'cache', 'alias', 'taxonomy term' etc. It is possible to map different $bin values to
* different memcache servers.
*
* @return bool
*/
function
dmemcache_set
(
$key
,
$value
,
$exp
=
0
,
$bin
=
'cache'
)
{
global
$_memcache_statistics
;
$_memcache_statistics
[
'set'
][]
=
$key
;
$_memcache_statistics
[
'bins'
][]
=
$bin
;
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
if
(
!
$mc
->
set
(
$full_key
,
$value
,
TRUE
,
$exp
))
{
watchdog
(
'memcache'
,
'Failed to set key: '
.
$full_key
,
WATCHDOG_ERROR
);
}
else
{
return
TRUE
;
}
}
return
FALSE
;
}
/**
* Retrieve a value from the cache.
*
* @param $key The key with which the item was stored.
* @param $bin The bin in which the item was stored.
*
* @return The item which was originally saved or FALSE
*/
function
dmemcache_get
(
$key
,
$bin
=
'cache'
)
{
global
$_memcache_statistics
;
$_memcache_statistics
[
'get'
][]
=
$key
;
$_memcache_statistics
[
'bins'
][]
=
$bin
;
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
$result
=
$mc
->
get
(
$full_key
);
if
(
$result
)
{
$_memcache_statistics
[
'hit'
][]
=
$key
;
}
return
$result
;
}
}
/**
* Deletes an item from the cache.
*
* @param $key The key with which the item was stored.
* @param $bin The bin in which the item was stored.
*
* @return Returns TRUE on success or FALSE on failure.
*/
function
dmemcache_delete
(
$key
,
$bin
=
'cache'
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
return
$mc
->
delete
(
$full_key
);
}
return
FALSE
;
}
/**
* Immediately invalidates all existing items. dmemcache_flush doesn't actually free any
* resources, it only marks all the items as expired, so occupied memory will be overwritten by
* new items.
*
* @param $bin The bin to flush. Note that this will flush all bins mapped to the same server
* as $bin. There is no way at this time to empty just one bin.
*
* @return Returns TRUE on success or FALSE on failure.
*/
function
dmemcache_flush
(
$bin
=
'cache'
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
return
$mc
->
flush
();
}
}
function
dmemcache_stats
(
$bin
=
'cache'
,
$type
=
''
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
return
$mc
->
getExtendedStats
(
$type
);
}
}
/**
* Returns an Memcache object based on the bin requested. Note that there is
* nothing preventing developers from calling this function directly to get the
* Memcache object. Do this if you need functionality not provided by this API
* or if you need to use legacy code. Otherwise, use the dmemcache (get, set,
* delete, flush) API functions provided here.
*
* @param $bin The bin which is to be used.
*
* @param $flush Rebuild the bin/server/cache mapping.
*
* @return an Memcache object or FALSE.
*/
function
dmemcache_object
(
$bin
=
NULL
,
$flush
=
FALSE
)
{
static
$memcacheCache
=
array
(),
$memcache_servers
,
$memcache_bins
;
if
(
$flush
)
{
foreach
(
$memcacheCache
as
$cluster
)
{
$cluster
->
close
();
}
$memcacheCache
=
array
();
}
if
(
empty
(
$memcacheCache
)
||
empty
(
$memcacheCache
[
$bin
]))
{
// $memcache_servers and $memcache_bins originate from settings.php.
// $memcache_servers_custom and $memcache_bins_custom get set by
// memcache.module. They are then merged into $memcache_servers and
// $memcache_bins, which are statically cached for performance.
if
(
empty
(
$memcache_servers
))
{
// Values from settings.php
$memcache_servers
=
variable_get
(
'memcache_servers'
,
array
(
'127.0.0.1:11211'
=>
'default'
));
$memcache_bins
=
variable_get
(
'memcache_bins'
,
array
(
'cache'
=>
'default'
));
}
// If there is no cluster for this bin in $memcache_bins, cluster is 'default'.
$cluster
=
empty
(
$memcache_bins
[
$bin
])
?
'default'
:
$memcache_bins
[
$bin
];
// If this bin isn't in our $memcache_bins configuration array, and the
// 'default' cluster is already initialized, map the bin to 'cache' because
// we always map the 'cache' bin to the 'default' cluster.
if
(
empty
(
$memcache_bins
[
$bin
])
&&
!
empty
(
$memcacheCache
[
'cache'
]))
{
$memcacheCache
[
$bin
]
=
&
$memcacheCache
[
'cache'
];
}
else
{
// Create a new Memcache object. Each cluster gets its own Memcache object.
$memcache
=
new
Memcache
;
// A variable to track whether we've connected to the first server.
$init
=
FALSE
;
// Link all the servers to this cluster.
foreach
(
$memcache_servers
as
$s
=>
$c
)
{
if
(
$c
==
$cluster
)
{
list
(
$host
,
$port
)
=
explode
(
':'
,
$s
);
// This is a server that belongs to this cluster.
if
(
!
$init
)
{
// First server gets the connect.
if
(
@
$memcache
->
addServer
(
$host
,
$port
))
{
// Only set init to true if a connection was made.
$init
=
TRUE
;
}
}
else
{
// Subsequent servers gett addServer.
@
$memcache
->
addServer
(
$host
,
$port
);
}
}
}
if
(
$init
)
{
// Map the current bin with the new Memcache object.
$memcacheCache
[
$bin
]
=
$memcache
;
// Now that all the servers have been mapped to this cluster, look for
// other bins that belong to the cluster and map them too.
foreach
(
$memcache_bins
as
$b
=>
$c
)
{
if
(
$c
==
$cluster
&&
$b
!=
$bin
)
{
// Map this bin and cluster by reference.
$memcacheCache
[
$b
]
=
&
$memcacheCache
[
$bin
];
}
}
}
}
}
return
empty
(
$memcacheCache
[
$bin
])
?
FALSE
:
$memcacheCache
[
$bin
];
}
function
dmemcache_key
(
$key
,
$bin
=
'cache'
)
{
static
$prefix
;
// memcache_key_prefix can be set in settings.php to support site namespaces
// in a multisite environment.
if
(
empty
(
$prefix
))
{
$prefix
=
variable_get
(
'memcache_key_prefix'
,
''
);
}
$full_key
=
(
$prefix
?
$prefix
.
'-'
:
''
)
.
$bin
.
'-'
.
$key
;
return
urlencode
(
$full_key
);
}
This diff is collapsed.
Click to expand it.
memcache.db.inc
+
1
−
196
View file @
f5dbe3fb
<?php
<?php
// $Id$
// $Id$
global
$_memcache_statistics
;
require_once
'dmemcache.inc'
;
$_memcache_statistics
=
array
(
'get'
=>
array
(),
'set'
=>
array
(),
'hit'
=>
array
());
/*
* A memcache API for Drupal.
*/
/**
* Place an item into memcache
*
* @param $key The string with with you will retrieve this item later.
* @param $value The item to be stored.
* @param $exp Parameter expire is expiration time in seconds. If it's 0, the item never expires
* (but memcached server doesn't guarantee this item to be stored all the time, it could be
* deleted from the cache to make place for other items).
* @param $bin The name of the Drupal subsystem that is making this call. Examples could be
* 'cache', 'alias', 'taxonomy term' etc. It is possible to map different $bin values to
* different memcache servers.
*
* @return bool
*/
function
dmemcache_set
(
$key
,
$value
,
$exp
=
0
,
$bin
=
'cache'
)
{
global
$_memcache_statistics
;
$_memcache_statistics
[
'set'
][]
=
$key
;
$_memcache_statistics
[
'bins'
][]
=
$bin
;
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
if
(
!
$mc
->
set
(
$full_key
,
$value
,
TRUE
,
$exp
))
{
watchdog
(
'memcache'
,
'Failed to set key: '
.
$full_key
,
WATCHDOG_ERROR
);
}
else
{
return
TRUE
;
}
}
return
FALSE
;
}
/**
* Retrieve a value from the cache.
*
* @param $key The key with which the item was stored.
* @param $bin The bin in which the item was stored.
*
* @return The item which was originally saved or FALSE
*/
function
dmemcache_get
(
$key
,
$bin
=
'cache'
)
{
global
$_memcache_statistics
;
$_memcache_statistics
[
'get'
][]
=
$key
;
$_memcache_statistics
[
'bins'
][]
=
$bin
;
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
$result
=
$mc
->
get
(
$full_key
);
if
(
$result
)
{
$_memcache_statistics
[
'hit'
][]
=
$key
;
}
return
$result
;
}
}
/**
* Deletes an item from the cache.
*
* @param $key The key with which the item was stored.
* @param $bin The bin in which the item was stored.
*
* @return Returns TRUE on success or FALSE on failure.
*/
function
dmemcache_delete
(
$key
,
$bin
=
'cache'
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
return
$mc
->
delete
(
$full_key
);
}
return
FALSE
;
}
/**
* Immediately invalidates all existing items. dmemcache_flush doesn't actually free any
* resources, it only marks all the items as expired, so occupied memory will be overwritten by
* new items.
*
* @param $bin The bin to flush. Note that this will flush all bins mapped to the same server
* as $bin. There is no way at this time to empty just one bin.
*
* @return Returns TRUE on success or FALSE on failure.
*/
function
dmemcache_flush
(
$bin
=
'cache'
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
return
$mc
->
flush
();
}
}
function
dmemcache_stats
(
$bin
=
'cache'
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
return
$mc
->
getExtendedStats
();
}
}
/**
* Returns an Memcache object based on the bin requested. Note that there is
* nothing preventing developers from calling this function directly to get the
* Memcache object. Do this if you need functionality not provided by this API
* or if you need to use legacy code. Otherwise, use the dmemcache (get, set,
* delete, flush) API functions provided here.
*
* @param $bin The bin which is to be used.
*
* @param $flush Rebuild the bin/server/cache mapping.
*
* @return an Memcache object or FALSE.
*/
function
dmemcache_object
(
$bin
=
NULL
,
$flush
=
FALSE
)
{
static
$memcacheCache
=
array
(),
$memcache_servers
,
$memcache_bins
;
if
(
$flush
)
{
foreach
(
$memcacheCache
as
$cluster
)
{
$cluster
->
close
();
}
$memcacheCache
=
array
();
}
if
(
empty
(
$memcacheCache
)
||
empty
(
$memcacheCache
[
$bin
]))
{
// $memcache_servers and $memcache_bins originate from settings.php.
// $memcache_servers_custom and $memcache_bins_custom get set by
// memcache.module. They are then merged into $memcache_servers and
// $memcache_bins, which are statically cached for performance.
if
(
empty
(
$memcache_servers
))
{
// Values from settings.php
$memcache_servers
=
variable_get
(
'memcache_servers'
,
array
(
'127.0.0.1:11211'
=>
'default'
));
$memcache_bins
=
variable_get
(
'memcache_bins'
,
array
(
'cache'
=>
'default'
));
}
// If there is no cluster for this bin in $memcache_bins, cluster is 'default'.
$cluster
=
empty
(
$memcache_bins
[
$bin
])
?
'default'
:
$memcache_bins
[
$bin
];
// If this bin isn't in our $memcache_bins configuration array, and the
// 'default' cluster is already initialized, map the bin to 'cache' because
// we always map the 'cache' bin to the 'default' cluster.
if
(
empty
(
$memcache_bins
[
$bin
])
&&
!
empty
(
$memcacheCache
[
'cache'
]))
{
$memcacheCache
[
$bin
]
=
&
$memcacheCache
[
'cache'
];
}
else
{
// Create a new Memcache object. Each cluster gets its own Memcache object.
$memcache
=
new
Memcache
;
// A variable to track whether we've connected to the first server.
$init
=
FALSE
;
// Link all the servers to this cluster.
foreach
(
$memcache_servers
as
$s
=>
$c
)
{
if
(
$c
==
$cluster
)
{
list
(
$host
,
$port
)
=
explode
(
':'
,
$s
);
// This is a server that belongs to this cluster.
if
(
!
$init
)
{
// First server gets the connect.
if
(
@
$memcache
->
addServer
(
$host
,
$port
))
{
// Only set init to true if a connection was made.
$init
=
TRUE
;
}
}
else
{
// Subsequent servers gett addServer.
@
$memcache
->
addServer
(
$host
,
$port
);
}
}
}
if
(
$init
)
{
// Map the current bin with the new Memcache object.
$memcacheCache
[
$bin
]
=
$memcache
;
// Now that all the servers have been mapped to this cluster, look for
// other bins that belong to the cluster and map them too.
foreach
(
$memcache_bins
as
$b
=>
$c
)
{
if
(
$c
==
$cluster
&&
$b
!=
$bin
)
{
// Map this bin and cluster by reference.
$memcacheCache
[
$b
]
=
&
$memcacheCache
[
$bin
];
}
}
}
}
}
return
empty
(
$memcacheCache
[
$bin
])
?
FALSE
:
$memcacheCache
[
$bin
];
}
function
dmemcache_key
(
$key
,
$bin
=
'cache'
)
{
static
$prefix
;
// memcache_key_prefix can be set in settings.php to support site namespaces
// in a multisite environment.
if
(
empty
(
$prefix
))
{
$prefix
=
variable_get
(
'memcache_key_prefix'
,
''
);
}
$full_key
=
(
$prefix
?
$prefix
.
'-'
:
''
)
.
$bin
.
'-'
.
$key
;
return
urlencode
(
$full_key
);
}
/** Implementation of cache.inc with memcache logic included **/
/** Implementation of cache.inc with memcache logic included **/
...
...
This diff is collapsed.
Click to expand it.
memcache.inc
+
1
−
196
View file @
f5dbe3fb
<?php
<?php
// $Id$
// $Id$
global
$_memcache_statistics
;
require_once
'dmemcache.inc'
;
$_memcache_statistics
=
array
(
'get'
=>
array
(),
'set'
=>
array
(),
'hit'
=>
array
());
/*
* A memcache API for Drupal.
*/
/**
* Place an item into memcache
*
* @param $key The string with with you will retrieve this item later.
* @param $value The item to be stored.
* @param $exp Parameter expire is expiration time in seconds. If it's 0, the item never expires
* (but memcached server doesn't guarantee this item to be stored all the time, it could be
* deleted from the cache to make place for other items).
* @param $bin The name of the Drupal subsystem that is making this call. Examples could be
* 'cache', 'alias', 'taxonomy term' etc. It is possible to map different $bin values to
* different memcache servers.
*
* @return bool
*/
function
dmemcache_set
(
$key
,
$value
,
$exp
=
0
,
$bin
=
'cache'
)
{
global
$_memcache_statistics
;
$_memcache_statistics
[
'set'
][]
=
$key
;
$_memcache_statistics
[
'bins'
][]
=
$bin
;
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
if
(
!
$mc
->
set
(
$full_key
,
$value
,
TRUE
,
$exp
))
{
watchdog
(
'memcache'
,
'Failed to set key: '
.
$full_key
,
WATCHDOG_ERROR
);
}
else
{
return
TRUE
;
}
}
return
FALSE
;
}
/**
* Retrieve a value from the cache.
*
* @param $key The key with which the item was stored.
* @param $bin The bin in which the item was stored.
*
* @return The item which was originally saved or FALSE
*/
function
dmemcache_get
(
$key
,
$bin
=
'cache'
)
{
global
$_memcache_statistics
;
$_memcache_statistics
[
'get'
][]
=
$key
;
$_memcache_statistics
[
'bins'
][]
=
$bin
;
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
$result
=
$mc
->
get
(
$full_key
);
if
(
$result
)
{
$_memcache_statistics
[
'hit'
][]
=
$key
;
}
return
$result
;
}
}
/**
* Deletes an item from the cache.
*
* @param $key The key with which the item was stored.
* @param $bin The bin in which the item was stored.
*
* @return Returns TRUE on success or FALSE on failure.
*/
function
dmemcache_delete
(
$key
,
$bin
=
'cache'
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
$full_key
=
dmemcache_key
(
$key
,
$bin
);
return
$mc
->
delete
(
$full_key
);
}
return
FALSE
;
}
/**
* Immediately invalidates all existing items. dmemcache_flush doesn't actually free any
* resources, it only marks all the items as expired, so occupied memory will be overwritten by
* new items.
*
* @param $bin The bin to flush. Note that this will flush all bins mapped to the same server
* as $bin. There is no way at this time to empty just one bin.
*
* @return Returns TRUE on success or FALSE on failure.
*/
function
dmemcache_flush
(
$bin
=
'cache'
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
return
$mc
->
flush
();
}
}
function
dmemcache_stats
(
$bin
=
'cache'
,
$type
=
''
)
{
if
(
$mc
=
dmemcache_object
(
$bin
))
{
return
$mc
->
getExtendedStats
(
$type
);
}
}
/**
* Returns an Memcache object based on the bin requested. Note that there is
* nothing preventing developers from calling this function directly to get the
* Memcache object. Do this if you need functionality not provided by this API
* or if you need to use legacy code. Otherwise, use the dmemcache (get, set,
* delete, flush) API functions provided here.
*
* @param $bin The bin which is to be used.
*
* @param $flush Rebuild the bin/server/cache mapping.
*
* @return an Memcache object or FALSE.
*/
function
dmemcache_object
(
$bin
=
NULL
,
$flush
=
FALSE
)
{
static
$memcacheCache
=
array
(),
$memcache_servers
,
$memcache_bins
;
if
(
$flush
)
{
foreach
(
$memcacheCache
as
$cluster
)
{
$cluster
->
close
();
}
$memcacheCache
=
array
();
}
if
(
empty
(
$memcacheCache
)
||
empty
(
$memcacheCache
[
$bin
]))
{
// $memcache_servers and $memcache_bins originate from settings.php.
// $memcache_servers_custom and $memcache_bins_custom get set by
// memcache.module. They are then merged into $memcache_servers and
// $memcache_bins, which are statically cached for performance.
if
(
empty
(
$memcache_servers
))
{
// Values from settings.php
$memcache_servers
=
variable_get
(
'memcache_servers'
,
array
(
'127.0.0.1:11211'
=>
'default'
));
$memcache_bins
=
variable_get
(
'memcache_bins'
,
array
(
'cache'
=>
'default'
));
}
// If there is no cluster for this bin in $memcache_bins, cluster is 'default'.
$cluster
=
empty
(
$memcache_bins
[
$bin
])
?
'default'
:
$memcache_bins
[
$bin
];
// If this bin isn't in our $memcache_bins configuration array, and the
// 'default' cluster is already initialized, map the bin to 'cache' because
// we always map the 'cache' bin to the 'default' cluster.
if
(
empty
(
$memcache_bins
[
$bin
])
&&
!
empty
(
$memcacheCache
[
'cache'
]))
{
$memcacheCache
[
$bin
]
=
&
$memcacheCache
[
'cache'
];
}
else
{
// Create a new Memcache object. Each cluster gets its own Memcache object.
$memcache
=
new
Memcache
;
// A variable to track whether we've connected to the first server.
$init
=
FALSE
;
// Link all the servers to this cluster.
foreach
(
$memcache_servers
as
$s
=>
$c
)
{
if
(
$c
==
$cluster
)
{
list
(
$host
,
$port
)
=
explode
(
':'
,
$s
);
// This is a server that belongs to this cluster.
if
(
!
$init
)
{
// First server gets the connect.
if
(
@
$memcache
->
addServer
(
$host
,
$port
))
{
// Only set init to true if a connection was made.
$init
=
TRUE
;
}
}
else
{
// Subsequent servers gett addServer.
@
$memcache
->
addServer
(
$host
,
$port
);
}
}
}
if
(
$init
)
{
// Map the current bin with the new Memcache object.
$memcacheCache
[
$bin
]
=
$memcache
;
// Now that all the servers have been mapped to this cluster, look for
// other bins that belong to the cluster and map them too.
foreach
(
$memcache_bins
as
$b
=>
$c
)
{
if
(
$c
==
$cluster
&&
$b
!=
$bin
)
{
// Map this bin and cluster by reference.
$memcacheCache
[
$b
]
=
&
$memcacheCache
[
$bin
];
}
}
}
}
}
return
empty
(
$memcacheCache
[
$bin
])
?
FALSE
:
$memcacheCache
[
$bin
];
}
function
dmemcache_key
(
$key
,
$bin
=
'cache'
)
{
static
$prefix
;
// memcache_key_prefix can be set in settings.php to support site namespaces
// in a multisite environment.
if
(
empty
(
$prefix
))
{
$prefix
=
variable_get
(
'memcache_key_prefix'
,
''
);
}
$full_key
=
(
$prefix
?
$prefix
.
'-'
:
''
)
.
$bin
.
'-'
.
$key
;
return
urlencode
(
$full_key
);
}
/** Implementation of cache.inc with memcache logic included **/
/** Implementation of cache.inc with memcache logic included **/
...
...
This diff is collapsed.
Click to expand it.
memcache.module
+
1
−
1
View file @
f5dbe3fb
...
@@ -40,7 +40,7 @@ function memcache_shutdown() {
...
@@ -40,7 +40,7 @@ function memcache_shutdown() {
if
(
!
empty
(
$stats
))
{
if
(
!
empty
(
$stats
))
{
$output
=
theme
(
'item_list'
,
$stats
);
$output
=
theme
(
'item_list'
,
$stats
);
// this makes sure all of the HTML is within the <body> even though this <script> is outside it
// this makes sure all of the HTML is within the <body> even though this <script> is outside it
print
'<div id="memcache-devel">'
.
$output
.
'</div>'
;
print
'<div id="memcache-devel">
<h2>'
.
t
(
'Memcache statistics'
)
.
'</h2>
'
.
$output
.
'</div>'
;
}
}
}
}
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment