toscho.design

PHP-Funktion add_include_path()

Wenn man mit vielen PHP-Scripten arbeitet und sich zudem an das Motto »Eine Klasse – eine Datei« hält, dann muß man gut aufpassen, daß der PHP-Interpreter auch alle Verzeichnisse kennt, aus denen man per require(), include(), fopen(), file(), readfile() und file_get_contents() Inhalte nachlädt.
Dazu sieht der Interpreter in den Verzeichnissen nach, die in der Direktive include_path angegeben wurden. Diese Werte kann man zur Laufzeit mit der Funktion set_include_path() ergänzen.

Ich habe mir dazu vor Jahren eine kleine Funktion geschrieben, die verhindert daß ich Pfade doppelt setze oder gar den falschen Trenner benutze:

/**
 * Ergänzt den include_path.
 * @author Thomas Scholz <http://toscho.de>
 * @param string $path neuer Pfad
 *
 * @return void
 */
function add_include_path($path) 
{
    /* Verzeichnis ohne / oder \ am Ende. */
    $path = rtrim($path, '/\\');
	
    /* Aktuelle Pfade trennen. */
    $inc  = explode( PATH_SEPARATOR, get_include_path() );
	
    if ( in_array($path, $inc) ) 
    { /* Schon drin. Nichts zu tun. */
        return;
    }

    /* Neuen Pfad anhängen … */
    $inc[] = $path;
    /* … und setzen. */
    set_include_path( implode(PATH_SEPARATOR, $inc) );

    return;
}

In der Praxis kann das dann so aussehen:

add_include_path( dirname( realpath(__FILE__) ) );

Natürlich lohnt sich das nur bei komplexeren Anwendungen. Wenn man nur wenige Scripte verwaltet, genügt das Beispiel aus dem Handbuch:

set_include_path(get_include_path() . PATH_SEPARATOR . $path);

Drei oder vier doppelte Einträge werden die Peformance nicht spürbar senken.