PHP Maniac

Das PHP Blog für PHP-Profis und alle die es werden wollen

PHP Extensions zur Laufzeit einbinden

31 Mai, 2009 (12:46) | Code-Schnipsel, Server, Tipps und Tricks | Von: PHP Maniac

Fast jeder kennt das Problem: Man benötigt eine PHP Extension, die vom eigenen Hoster aber nicht angeboten wird. Auf Nachfrage bei der Hotline erfährt man, dass hier auch grundsätzlich keine Ausnahmen gemacht werden können. Genau dieses Problem hatte ich vor einiger Zeit mit dem ionCube Loader, der für einige kommerzielle PHP Skripte benötigt wird. Nach einiger Recherche habe ich aber einen Weg gefunden um diese Extension während der Laufzeit trotzdem einbinden zu können. Diese Lösung möchte ich nun im Folgenden näher vorstellen und erklären.

Vorbereitung: Extension herrunterladen

Bevor es losgehen kann, sollte man sich zunächst das gewünschte Modul vom jeweilgen Hersteller oder Anbieter besorgen. Hierbei ist darauf zu achten, dass ihr bereits kompilierte Versionen herrunterladet, die auch für eure Serverplattform passend sind. Unter Windows-Servern sind dies .dll Dateien, bei einem Linux-Server enden sie auf .so – Hierbei muss aber auf die Kompatibilität zur eingesetzten Linux Distribution geachtet werden. Falls ihr nicht wisst welche von eurem Hoster eingesetzt wird, hilft auch der phpinfo() Befehl oder die Hotline eures Hosters hoffentlich weiter.

Extension einbinden

Nachdem ihr die Extension auf den Server geladen habt, lässt sich diese über die PHP Funktion dl() zur Laufzeit laden. Hierfür müsst ihr die Dateirechte für die Erweiterung auf 755 stellen (ausführbar). Da auch selten Zugriff auf das Standardverzeichnis für Extensions besteht, ist es wichtig, dass ihr den absoluten Pfad zur Erweiterung als Parameter anzugeben. Wollt ihr eine Extension aus dem PHP Verzeichnis laden, reicht auch die Angabe des Namens dieser.

function load_extension($name)
{
	if(!ini_get("enable_dl") || ini_get("safe_mode"))
		die("Funktion deaktiviert oder Safe-Mode on!");

	if(!is_file($name))
		die("Extension wurde nicht gefunden!");

	if(!is_excecutable($name))
		die("Extension muss ausführbar sein!");

	if(!dl($name))
		die("Fehler beim Laden der Extension!");
}

Leider lässt sich diese Methode nur anwenden, wenn euer Hoster weder die dl() Funktion deaktiviert hat, noch den Safe-Mode aktiviert. Einen Versuch ist es aber allemal wert, denn die andere Lösung ist meistens nur ein Anbieterwechsel, der viel Arbeit mit sich bringen kann.

Be Sociable, Share!

Schreibe einen Kommentar