PHP Doku:: Speichert eine Date im Bytecode Cache unter Umgehung aller Filter. - function.apc-compile-file.html

Verlauf / Chronik / History: (1) anzeigen

Sie sind hier:
Doku-StartseitePHP-HandbuchFunktionsreferenzDas Verhalten von PHP beeinflussenAlternativer PHP CacheAPC Funktionenapc_compile_file

Ein Service von Reinhard Neidl - Webprogrammierung.

APC Funktionen

<<apc_clear_cache

apc_dec>>

apc_compile_file

(PECL apc >= 3.0.13)

apc_compile_file Speichert eine Date im Bytecode Cache unter Umgehung aller Filter.

Beschreibung

bool apc_compile_file ( string $filename )

Speichert eine Date im Bytecode Cache unter Umgehung aller Filter.

Parameter-Liste

filename

Absoluter oder relativer Pfad zu einer PHP Datei die kompiliert und im Bytecode Cache abgelegt werden soll.

Rückgabewerte

Gibt bei Erfolg TRUE zurück. Im Fehlerfall wird FALSE zurückgegeben.


4 BenutzerBeiträge:
- Beiträge aktualisieren...
highcode at yahoo dot com
6.08.2009 13:09
if your goal is to pre-compile PHP script into bytecode and then transparently loaded the script, better use monas, its a free php extension to encode/decode PHP 4 and PHP 5. check it at http://ombudi.com, i've try using it to encode phpmyadmin and works nicely
Glen
1.04.2009 0:44
There are reasons to use this routine.  I can think of two:

- a busy website will have multiple web servers, and before one is brought online (via load balancer), the cache is built.  This prevents problems of having too many cache misses in a short period on your entire code base, which could be massive, and cause problems.

- a website where the apc.stat flag is set to zero.  That setting provides significant performance savings because no 'stat' needs to be performed on PHP code files.  But they are not automatically rebuilt when changed.  So what do you do when your code changes?  Restart Apache, or manually clearing the APC cache with apc_clear_cache() - but both will clear the entire cache.  There may be cases where it is much better to recompile select files instead.  Some sites store data (that rarely changes) in PHP code to make good use of the opcode cache, updating that file and selectively compiling it would make writes efficient too.
A.R.
22.03.2009 16:15
It should be noted, that the above suggestion to "compile your entire project", or for any web developer to ever call this apc_compile_file function at all, is superfluous, because APC will automatically compile pages for you on demand. This function does not do anything useful.

I had actually avoided installing APC for a long time because I thought it would be very complex, partly because of this manual page which tells you how to compile but doesn't tell you how to execute a compiled page.

After installing APC, you can tell if it's working, by adding this to one of your webpages:

<?php
   
echo("<pre>");
   
print_r(apc_cache_info());
    echo(
"</pre>");
?>

Run this before and after hitting a few pages on the site, to see the compiled files automatically show up in the list.

Again, there is no need to ever call apc_compile_file explicitly. This function is probably available for some sort of very advanced use.
Andrea Giammarchi
15.02.2008 16:40
This is a simple way to cache a project entirely.

<?php // apc_compile_dir.php
function apc_compile_dir($root, $recursively = true){
   
$compiled   = true;
    switch(
$recursively){
        case   
true:
            foreach(
glob($root.DIRECTORY_SEPARATOR.'*', GLOB_ONLYDIR) as $dir)
               
$compiled   = $compiled && apc_compile_dir($dir, $recursively);
        case   
false:
            foreach(
glob($root.DIRECTORY_SEPARATOR.'*.php') as $file)
               
$compiled   = $compiled && apc_compile_file($file);
            break;
    }
    return 
$compiled;
}
?>

This is an example on how to use the function to compile your project.
<?php
echo    '<pre>'.PHP_EOL;
if(
function_exists('apc_compile_file')){
   
define('APC_CLEAR_CACHE',           true);
   
define('APC_COMPILE_RECURSIVELY',   true);
   
define('APC_COMPILE_DIR',           '.');
    require
'apc_compile_dir.php';
    echo   
'APC Directory Compiler '.gmdate('Y-m-d H:i:s').PHP_EOL;
    echo   
PHP_EOL.'-------------------------'.PHP_EOL;
    if(
APC_CLEAR_CACHE){
        echo    (
apc_clear_cache() ? 'Cache Cleaned' : 'Cache Not Cleaned').PHP_EOL;
       
var_dump(apc_cache_info());
        echo   
PHP_EOL.'-------------------------'.PHP_EOL;
    }
    echo   
'Runtime Errors'.PHP_EOL;
    echo    (
apc_compile_dir(APC_COMPILE_DIR, APC_COMPILE_RECURSIVELY) ? 'Cache Created' : 'Cache Not Created').PHP_EOL;
    echo   
PHP_EOL.'-------------------------'.PHP_EOL;
   
var_dump(apc_cache_info());
}
else
    echo   
'APC is not present, nothing to do.'.PHP_EOL;
echo   
'</pre>';
?>



PHP Powered Diese Seite bei php.net
The PHP manual text and comments are covered by the Creative Commons Attribution 3.0 License © the PHP Documentation Group - Impressum - mail("TO:Reinhard Neidl",...)