php.de

Zurück   php.de > Webentwicklung > PHP-Fortgeschrittene

PHP-Fortgeschrittene Arbeiten mit PHP ohne Einschränkungen

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 07.01.2005, 14:41  
Gast
 
Beiträge: n/a
Standard [Erledigt] "Module" statisch kompilieren vs. extension

Hallo,

ich hoffe das versammelte Wissen aller kann mir bei meiner Frage weiterhelfen.

Bisher habe ich PHP immer "standard" kompiliert, d.h. alle Features die benötigt wurden "enabled" (z.b. xml, mysql, snmp, etc.) .

Ich habe aber doch auch die Möglichkeit alles als 'extension' (shared object) zu kompilieren und über die php.ini zu laden.

Kennt jemand die Vor- und Nachteile beider Varianten? Wie sieht das z.B. mit dem Speicherverbrauch aus? Wenn ich PHP "standard" kompiliere ist mein PHP5 Modul ca. 13 MB groß und jeder Apache Prozess verbraucht mind. auch soviel Speicher, oder?

Verhält sich das bei 'extensions' bzw. shared objects anders? D.h. einmal geladen und von alles Prozessen genutzt?

Hoffe Ihr konntet verstehen was ich meine^^

Danke für Euere Feedback!

Viele Grüße

Ingo
  Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 07.01.2005, 15:00  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Also erstmal zur Nomenklatur:
Extensions sind es immer, die Wahl hat man zwischen statischem und dynamischem linken.

Statisches linken produziert tendentiell ein paar Prozent schnelleren Code, aber nur wenig. Dafür spart dynamisches Linken Speicher.
Wie sich die startup-times verhalten, weiss ich jetzt nicht genau...
__________________
mod = master of disaster
Waq ist offline   Mit Zitat antworten
Alt 07.01.2005, 17:14  
Gast
 
Beiträge: n/a
Standard

da statische Bibliotheken immer in der eigentlichen executable gespeichert sind, werden sie natuerlich jedesmal wenn PHP einen neuen Prozess startet mitgeladen. Bei dynamischen Bibliotheken dagegen nur einmal, da sie erst zur Laufzeit mit deinem Programm verlinkt werden. Die 2 - 3% an Geschwindigkeitsverlust die dadurch entstehen, solltest du ruhig hinnehmen, wenn du dabei absichern kannst, das grosse Teile deines Speichers nicht auf einmal ausgelagert werden muessen, weil die PHP-Prozesse den RAM gefuellt haben, was am Ende einen viel hoeheren Geschwindigkeitsverlust bedeuten kann.
  Mit Zitat antworten
Alt 22.04.2006, 10:10  
Gast
 
Beiträge: n/a
Standard

Hola,

wenn ich nun alle Extensions statisch in mein PHP haenge und es wird eine Seite aufgerufen, die nur einen klein Teil oder sogar keine der Extensions nutzt, werden trotzdem alle Extensions bereit gehalten.
Binde ich das ganze dynamisch ein, dann werden die jeweiligen Extensions nur geladen, wenn in meinem Quellcode versucht wird auf Funktionen der dieser Extension zuzugreifen?
Die erste Methode fuehrt zu einer hoeheren Speicherbelastung, die zweite zu einem kleinen, wohl aber geringem, Geschwindigkeitsverlust.

Habe ich das soweit richtig verstanden?

Nun frage ich mich, ob es sowas wie eine Art Faustregel gibt, ob man eine Extension nun statisch oder dynamisch kompiliert?
Oder haengt das zu sehr von den Beduerfnissen des jeweiligen Benutzers und den Besonderheiten der Extension ab?
Habe nun z.B gesehen, das empfohlen wird die PDO - Erweiterung dynamisch einzubinden, damit man sie mittles PEAR unabhaengig vom restlichen PHP auf den neusten Stand bringen kann.


Bis daehnnne.
  Mit Zitat antworten
Alt 22.04.2006, 10:44  
Erfahrener Benutzer
 
Registriert seit: 21.12.2004
Beiträge: 5.234
PHP-Kenntnisse:
Fortgeschritten
mepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblickmepeisen ist ein wunderbarer Anblick
mepeisen eine Nachricht über ICQ schicken mepeisen eine Nachricht über Skype™ schicken
Standard

Nein. Dynamische Extensions werden auch immer bereitgehalten, wenn sie in der php.ini eingestellt werden. Zu deutsch:
- statische Extensions sind immer da
- dynamische Extensions per php.ini sind immer da
- dynamische Extensions per http://www.php.net/dl sind nur da, wenn du im Script den Befehl ausführst.

Nur Methode 3 führt zu einem kleinen Geschwindigkeitsverlust in einem Apache-Modul. Methode 1 und 2 könnte höchstens ausserhalb des Apache (CGI oder CLI) eventuell einige Unterschiede geben, ansonsten ist zur Laufzeit kein Unterschied festzustellen.

Der größte Unterschied ist auch Methode 3, da dies sowohl etwas gefährlich sein kann, als auch unsauber entwickelte Extensions leichter zu schwerwiegenden Fehlern führen können, wenn sie mittels "dl()" geladen werden. Ein Zitat von den Zend-Leutchens besagt: "dl() is evil". Ich denke das sagt alles aus

Zur zweiten Frage: Das hängt ausschliesslich von den Bedürfnissen ab. Aber in der Regel ist es besser, die einfach komplett mit dem PHP neu zu kompilieren (ob statisch oder dynamisch ist fast egal). Ohne Apache-Neustart wird man bei Methode 1 und Methode 2 Probleme kriegen, die auf den neuesten Stand zu bringen und manchmal sind die dynamischen Module nicht kompatibel zum verwendeten PHP, was dann zu unerwarteten Problemen führen kann.

Empfehlung wäre, immer neu zu kompilieren, wenn was aktualisiert wird und dann kann mans auch als statisch machen.
__________________
www.php-maven.org PHP und Maven vereint: Build/Deploy/Produktion/Konfiguration, Projekt Management, CI, PHPUnit, zahlreiche Frameworks
Twitter @ https://twitter.com/#!/mepeisen und Facebook @ http://t.co/DZnKSUih
mepeisen ist offline   Mit Zitat antworten
Alt 22.04.2006, 11:09  
Gast
 
Beiträge: n/a
Standard

Vielen Dank fuer die schnelle Antwort.

Nun bin ich um 1-2 Verwirrungen aermer und kann mich wieder ans bastlen machen

Um nochmal auf die PDO - Erweiterung zu kommen.
Hat da schon jemand praktische Erfahrungen gemacht, was das dynamische einbinden und updaten per PEAR betrifft?
Erfährt diese Erweiterung häufige Updates?


Bis daehnnne.
  Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Erstellung einer Extension mit Einbindung externer DLL Han Solo PHP Tipps 2008 15 10.04.2008 15:36
Probleme mit mbstring extension unter Debian HStev Server, Hosting und Workstations 3 30.08.2006 20:55
php5 soap extension, soap attachment zcmaster PHP-Fortgeschrittene 0 07.08.2006 16:09
PHP IMAP Extension PHP Tipps 2007 8 30.12.2005 15:22
[Erledigt] RedHat Apache kompilieren installieren Server, Hosting und Workstations 5 20.10.2005 19:29
MySQL auf vServer neu kompilieren bexxta Datenbanken 5 05.10.2005 00:03
xmlrpc-epi kompilieren [gelöst] freq.9 Server, Hosting und Workstations 4 24.07.2005 21:45
PHP extension und PHPAdmin PHP Tipps 2005 7 15.07.2005 14:26
[Erledigt] Bluetooth extension PHP-Fortgeschrittene 2 05.07.2005 21:29
Installieren der Extension php_iconv.dll MerlinderZauberer PHP Tipps 2005 1 16.04.2005 03:13
PHP5 Extension PHP Tipps 2005 1 11.01.2005 09:03
[Erledigt] SOAP/Client.php: PHP Fatal error: Method SOAP_Client::__call PHP-Fortgeschrittene 6 25.11.2004 09:48

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
faustregel speicher für apache prozess, php statisch kompilieren, dynamisch kompilieren, php extension dynamisch laden php.ini ohne dl(), php5 statisch linken, php shared vs einkompilieren, php static compelieren, extensions statisch was tun, extension versus php, apache statisch linken mysql, static link php, php static, php mysql shared object compilieren, dynamisches vs statisches linken, statisch kompilieren, php static link extension, php extension vs einkompilieren, apache2 kompilieren dynamische module, php eigene ext einkompilieren, php statisch oder dynamisch kompilieren

Alle Zeitangaben in WEZ +2. Es ist jetzt 20:10 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.