Use eAccelerator to accelerate PHP code
eAccelerator is really a good thing (its predecessor is truck-mmcache).
Simply speaking, it is a caching system that operates with PHP (supports PHP5), exchanging data through shared memory or disk files.
It is widely used to "encode" PHP source code (inappropriately called "encryption") and cache the intermediate code of PHP execution to speed up. There are many and detailed articles about the installation and use of eA. What I would like to recommend this time is to use it to assist in program design and cache. It provides a set of APIs as follows:
It is a very convenient and stable native cache implementation Method, currently this part of the design seems to only support shared memory, so it can only be used for Unix-Like OS, and Windows is not so lucky.
1. eaccelerator_put($key, $value, $ttl=0)
Store $value into the cache with $key as the key name (object type is supported under php4, but looking at the source code, it seems that it is not supported in zend2), $ttl is The life cycle of this cache, in seconds, omitting this parameter or specifying it as 0 means there is no time limit until the server is restarted and cleared.
2. eaccelerator_get($key)
Returns the corresponding data stored in eaccelerator_put() from the cache according to $key. If the cache has expired or does not exist, the return value is NULL
3. eaccelerator_rm($key)
According to $key Remove cache
4. eaccelerator_gc()
Remove and clean up all expired keys
5. eaccelerator_lock($key)
Add a lock operation to $key to ensure data synchronization during multi-process and multi-thread operations. You need to call eaccelerator_unlock($key) to release the lock or wait for the program to automatically release the lock when the request ends.
For example:
eaccelerator_lock("count");
eaccelerator_put("count",eaccelerator_get("count")+1));
?>
6. eaccelerator_unlock($key)
According to $key Release the lock
7. eaccelerator_cache_output($key, $eval_code, $ttl=0)
Cache the output of the $eval_code code for $ttl seconds, (the $ttl parameter is the same as eacclerator_put)
For Example:
8. eaccelerator_cache_result($key, $eval_code, $ttl=0)
Cache the execution result of the $eval_code code for $ttl seconds, ( The $ttl parameter is the same as eacclerator_put), similar to cache_output
For Example:
9. eaccelerator_cache_page($key, $ ttl=0)
Cache the current entire page for $ttl seconds.
For Example:
eaccelerator_cache_page($_SERVER['PHP_SELF'].'?GET='.serialize($_GET),30);
echo time();
phpinfo();
?&g t;
10. eaccelerator_rm_page($key)
Delete the cache executed by eaccelerator_cache_page(), the parameter is also $key
______________________________________________
(A simple example to see its power, note that it may not be valid in cli mode!)
class test_cache {
var $pro = 'hello';
function test_cache() {
echo "Object Created!
n";
}
function func() {
echo ', the world!';
}
function now($t) {
echo date('Y-m-d H:i:s', $t);
}
}
$tt = eaccelerator_get("test_tt");
if (!$tt)
{
$tt = new test_cache;
eaccelerator_put("test_tt", $tt);
echo "no cached!
n";
}
else {
echo "cached
n";
}
echo $tt->pro;
$tt->func();
$tt->now(time() + 86400);
?>
The following are the comments from netizens:
------ -------------------------------------------------- --------------------------
showsa Replied on: 2005-12-31 19:51:56 win also supports it! http://www.arnot.info/eaccelerator/
Albatross replied on: 2006-01-04 17:17:37 There is a small bug in the latest version of eAccelerator 0.9.4-rc1, which appears as /var/log/httpd/error_log A large number of [warn] (32) Broken pipe: write pipe_of_death error messages appear. Solution: Modify the debug.c file --------------------------- -------------------- /** * Close the debug system. */ void ea_debug_shutdown () { fflush (F_fp); // Source statement, file handle is not detected when closing the file //fclose (F_fp); //Change to if (F_fp != stderr) fclose (F_fp); F_fp = NULL; }
soichiro replied to: 2006-01-10 22:01:21eAccelerator/truck-mmcache is too scary , I now have two highly loaded systems, one based on Drupal and the other based on PostNuke. After using eAccelerator, the speed of Drual increased by 100 times and PostNuke increased by 10 times. The reason why PostNuke improved less is because it is very fast.
wangyih replied at: 2006-04-08 10:48:11 How does it compare with using squid
showsa Replied at: 2006-04-08 23:23:44 How does it compare with squid? The difference is that squid caches pages If the running results are not displayed in real time, Squid will definitely be better. But for forums and the like, Squid will not work. Using eaccelerator /memcache can greatly improve efficiency
Yarco replied to: 2006-04-09 10:00:43 But it is said There is a conflict with the encoded code... I wonder how compatible it is with zend now?
The above has introduced the purpose of translateaccelerator to use eAccelerator to accelerate PHP code, including the content of translateaccelerator. I hope it will be helpful to friends who are interested in PHP tutorials.