php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2006

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.08.2006, 21:59  
Benutzer
 
Registriert seit: 27.04.2004
Beiträge: 50
guenterfrosch
Standard Zend Engine

Hallo

Kann mir jemand kurz die Aufgaben der Zend Engine in PHP aufzeigen. Auf Wikipedia war ich, aber ich erkenne den unterschied zwischen dem PHP-Interpreter und dem PHP-Compiler nicht.


Danke
guenterfrosch ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 20.08.2006, 22:12  
Gast
 
Beiträge: n/a
Standard

PHP verwendet die Zend Engine um den Quelltext zu Parsen und zu Interpretieren.
Die Quelltexte werden in einen binären Code kompiliert, welcher dann vom Interpreter ausgeführt wird. Dieser binäre code ist praktisch gesprochen eine optimierte Form des Quelltextes und lässt sich wesentlich schneller interpretieren, als wenn man den puren Quelltext Interpretieren müsste.

Bei PHP merkt man diese Zweiteilung normalerweise nicht. Aber es gibt Programme, welche diesen binären Code zwischenspeichern, so dass der Quelltext nicht jedes mal neu kompiliert werden muss.

Grob gesagt:
Die Zend Engine übernimmt das Ausführen des Quelltextes und bedient sich dabei der Funktionen die PHP definiert.
 
Alt 20.08.2006, 22:29  
da schreibt der ElePHPant
 
Benutzerbild von Flor1an
 
Registriert seit: 18.06.2008
Beiträge: 8.903
PHP-Kenntnisse:
Fortgeschritten
Flor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer AnblickFlor1an ist ein wunderbarer Anblick
Standard

PHP funktioniert ja so dass dein PHP Skript genommen wird in Maschinensprache umgewandelt wird und dann ausgeführt wird. Dies passiert bei jedem Aufruf eines PHP Skriptes.

Und die Zend Engine macht genau dies.

Und da gibt es jetzt Programme die wandeln eben den PHP Skript in Maschinensprache um und belassen diesen Teil im Cache. Wenn nun das PHP Skript öfters aufgerufen wird muss es nicht jedes mal in Maschinensprache umgewandelt werden. Ergo es ist ein Performancevorteil. Bringt bei unserem Projekt einen enormen Performanceschub! Wir verwenden den eAccelerator.
Flor1an ist offline  
Alt 20.08.2006, 23:24  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Nunja, zwei bemühte Antworten mit richtigen Ansätzen und doch voller Fehlinformationen.

Ein paar Anmerkungen vorweg:
Die letzte PHP-Version, die ein echter Interpreter war, war PHP 3.
Seit PHP 4 verfolgt man ein Interpiler-Prinzip. Kann man auch Compreter nennen. Was passiert ist folgendes: Der PHP-Code wird geparst zu zu Bytecode kompiliert. Wenn Zeit und der Zend-Optimizer vorhanden sind, wird der Bytecode auch optimiert, aber das ist nur ein Schritt von umoptimiertem Bytecode zu optimiertem Bytecode.
Was mit dem Bytecode passiert, ist dass die VM (Virtuelle Maschine) ihn ausführt. Die VM besteht natürlich aus Maschinencode und kann deswegen auf der realen Maschine laufen.

Und das einzige, was zu Maschinensprache kompiliert wird, ist das was in C/C++ geschrieben ist, also die Zend Engine und die PHP-Extensions.
Bytecode ist keine optimierte Form von irgendetwas, sondern sowas ähnliches wie Maschienensprache, nur eben für eine virtuelle Maschine.


Zur Frage selbst:
Wenn man auf php.net geht und PHP runterläd, besteht der Quellcode (abzüglich Beiwerk wie build-system und PEAR) aus zwei Teilen:
- den PHP-Extensions, die die PHP-Funktionen zur Verfügung stellen (also das, was im Manual in der function reference steht: http://de3.php.net/manual/en/funcref.php)
- der Zend Engine, die die Sprache an sich implementiert, also Parsen, Kompilieren zu Bytecode, ausführen des Bytecodes, dadrin sind Kontrollstrukturen, das Objektmodell, die Speicherverwaltung...
Die Aufgaben aufzulisten ist schwierig, im Prinzip halt alles ausser den Funktionen.
Waq ist offline  
Alt 21.08.2006, 14:10  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von Waq
Nunja, zwei bemühte Antworten mit richtigen Ansätzen und doch voller Fehlinformationen.
Voller Fehlinformationen finde ich etwas übertrieben Mal abgesehen davon dass RaZoR von Maschinensprache gesprochen hat, was sicher nur eine begriffliche Verwechslung ist schienen mir die beiden Posts eigentlich ganz korrekt.

Wieso sollte man Bytecode nicht als optimierte Form des Quelltextes beschreiben? Bytecode enthält die selben Informationen wie der Quelltext (abgesehen von den für die VM irrelevanten Informationen wie Kommentare o.Ä.) in einer Form die die Zend Engine schneller/effizienter verarbeiten kann (Was nunmal auf eine Maschinensprachenänliche Form hinnausläuft).

Und ob man nun von Interpretieren oder Ausführen in der Virtuellen Maschine spricht kommt auch aufs selbe hinnaus

blubber,
Dennis
 
Alt 21.08.2006, 15:12  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von xardias
Wieso sollte man Bytecode nicht als optimierte Form des Quelltextes beschreiben?
Weil man genausogut sagen könnte, Chinesisch ist eine optimierte Form von Deutsch, die ein Chinese besser versteht.

Das Wort "optimieren" hat in diesem Zusammenhang nichts verloren, es handelt sich um eine Übersetzung von einer Sprache in eine andere, nicht mehr und nicht weniger.
Die Optimierungen finden innerhalb einer Sprache statt, also in diesem Fall innerhalb des Bytecodes.

Zitat:
Zitat von xardias
Und ob man nun von Interpretieren oder Ausführen in der Virtuellen Maschine spricht kommt auch aufs selbe hinnaus
So lange man die VM nicht für einen Interpreter hält, kann man das machen.
Ein Auto fährt ja auch und ist trotzdem kein Fahrer.
__________________
mod = master of disaster
Waq ist offline  
Alt 21.08.2006, 19:01  
Benutzer
 
Registriert seit: 27.04.2004
Beiträge: 50
guenterfrosch
Standard

Zitat:
Zitat von Waq
Nunja, zwei bemühte Antworten mit richtigen Ansätzen und doch voller Fehlinformationen.

Ein paar Anmerkungen vorweg:
Die letzte PHP-Version, die ein echter Interpreter war, war PHP 3.
Seit PHP 4 verfolgt man ein Interpiler-Prinzip. Kann man auch Compreter nennen. Was passiert ist folgendes: Der PHP-Code wird geparst zu zu Bytecode kompiliert. Wenn Zeit und der Zend-Optimizer vorhanden sind, wird der Bytecode auch optimiert, aber das ist nur ein Schritt von umoptimiertem Bytecode zu optimiertem Bytecode.
Was mit dem Bytecode passiert, ist dass die VM (Virtuelle Maschine) ihn ausführt. Die VM besteht natürlich aus Maschinencode und kann deswegen auf der realen Maschine laufen.

Und das einzige, was zu Maschinensprache kompiliert wird, ist das was in C/C++ geschrieben ist, also die Zend Engine und die PHP-Extensions.
Bytecode ist keine optimierte Form von irgendetwas, sondern sowas ähnliches wie Maschienensprache, nur eben für eine virtuelle Maschine.


Zur Frage selbst:
Wenn man auf php.net geht und PHP runterläd, besteht der Quellcode (abzüglich Beiwerk wie build-system und PEAR) aus zwei Teilen:
- den PHP-Extensions, die die PHP-Funktionen zur Verfügung stellen (also das, was im Manual in der function reference steht: http://de3.php.net/manual/en/funcref.php)
- der Zend Engine, die die Sprache an sich implementiert, also Parsen, Kompilieren zu Bytecode, ausführen des Bytecodes, dadrin sind Kontrollstrukturen, das Objektmodell, die Speicherverwaltung...
Die Aufgaben aufzulisten ist schwierig, im Prinzip halt alles ausser den Funktionen.
Stimmt es also, wenn man sagt: "Die Zend-Engine parst und kompiliert den PHP-Code in Bytecode. Dieser wird dann von der VM ausgeführt."?
guenterfrosch ist offline  
Alt 21.08.2006, 23:45  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Die VM gehört auch zur Zend Engine, sonst richtig.
__________________
mod = master of disaster
Waq ist offline  
Alt 22.08.2006, 12:13  
Benutzer
 
Registriert seit: 27.04.2004
Beiträge: 50
guenterfrosch
Standard

Zitat:
Zitat von Waq
Die VM gehört auch zur Zend Engine, sonst richtig.
Um nochmals sicherstellen, dass ich es kapiert habe:
-PHP stellt nur die Funktionsbibliotheken zur Vefügung.
-Die Ausführung von PHP-Skripts wird alleine durch die Zend-Engine erledigt.

Ist das so richtig? Vielen Dank für die Bemühungen
guenterfrosch ist offline  
Alt 22.08.2006, 15:32  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Fast. Die Ausführung (incl. Parsen etc.) wird von der Zend-Engine gemacht.
Die Funktionsbibliotheken sind hingegen modular und erweiterbar, also jeder kann seine eigenen Funktionen schreiben und bei sich einbinden, oder anderen zum einkompilieren geben. Das sind die sog. PHP-Extensions. Findet man im PHP-Quellcode im Verzeichnis ext/ (schau mal rein).
In ext/standard/ findet man die "Kern"-Funktionen wie array-Kram, md5() usw.
__________________
mod = master of disaster
Waq ist offline  
 


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
Zend Studio und Projekte breaker PHP-Fortgeschrittene 0 26.05.2008 13:51
Google calendar API - ZEND? cyberholic PHP-Fortgeschrittene 5 17.04.2008 15:28
Zend Translate R4v3r PHP-Fortgeschrittene 6 04.04.2008 19:58
Zend Framework Melchior PHP-Fortgeschrittene 29 13.03.2008 21:12
Zend Optimizer - Zerstörte datei brian johnson Off-Topic Diskussionen 3 28.11.2007 15:07
Template Engine vs PHP-Includes aktionkuba PHP Tipps 2007 16 19.06.2007 23:53
Was mime_content_type übergeben dethlef14 PHP Tipps 2006 16 11.10.2006 17:35
Eclipse & Zend Debugger? freq.9 PHP Tipps 2006 5 11.10.2006 00:11
ZEND guard geschütztes script imported_dex PHP Tipps 2006 7 04.08.2006 00:58
[Erledigt] Zend Optimizer auf SUSE 9.3 server installieren Server, Hosting und Workstations 35 14.02.2006 16:55
[Erledigt] Zend Optimizer-2.5.5 unter SuSe Linux 9.0 Off-Topic Diskussionen 3 23.01.2005 09:34
[Erledigt] eAccelerator und/oder Zend Optimizer Server, Hosting und Workstations 2 12.01.2005 14:36
Alternativen zu Zend SafeGuard (Zend Optimizer) PHP Tipps 2004-2 2 15.11.2004 14:07
Mehrere Dateien gleichzeitig Download (OWL Intranet Engine) PHP Tipps 2004 0 07.10.2004 15:16
[Erledigt] Zend Studio and PEAR PHP-Fortgeschrittene 1 10.08.2004 14:36

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
zend engine, interpiler wiki, interpiler wikipedia, zend engine c, zend debugger suse linux, php bytecode ausführen, maschinensprache php, bytecode mit php ausführen, zend engine wiki, php maschinensprache, maschinensprache von php?, umlaute google kalender php zend, vsphp,zendengine, zend debugger suse, was ist zendengine, zend vm bytecode, zend gdata calendar umlaute, php interpiler, php interpiler wiki, bytecode ausführen -java

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:26 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.