Uhu Uhuhu schrieb:> Wie kommt man denn unter Linux an Compile-Fehlermeldungen von PHP5> heran?
error.log vom Apache? Oder wenn in der php.ini ein extra log angegeben
ist.
"Compile-Fehlermeldungen"
Ist php nicht lediglich ein Interpreter?!
Wenn du aber die Fehlermeldungen haben möchtest die beim einlesen und
ausführen des Skriptes kommen, kann man entweder in den oben genannten
Dateien nach gucken, oder für ENTWICKLUNGszwecke die Fehlerausgabe
aktivieren. Dann sieht man die direkt, wenn man via Browser die Seite
versucht aufzurufen
Ungläubiger schrieb:> Ist php nicht lediglich ein Interpreter?!
Ja und?
Ein Interpreter ist ein Compiler, der den erzeugten Code sofort
ausführt. Entsprechend nennt man Fehler, die in der Compilationsphase
auftreten, eben "Compile-Fehler"...
> oder für ENTWICKLUNGszwecke die Fehlerausgabe aktivieren.
Wenn das Skript Compile-Fehler produziert, wird es niemals selbst
Fehlerausgaben erzeugen können, weil der Interpreter sein Compilat nicht
ausführt, sondern wegschmeißt.
Uhu Uhuhu schrieb:> Ein Interpreter ist ein Compiler, der den erzeugten Code sofort> ausführt. Entsprechend nennt man Fehler, die in der Compilationsphase> auftreten, eben "Compile-Fehler"...
nein ist es nicht. ein Interpreter ist kein Compiler. Bei einen
Interpreter muss kein Maschinen code erzeugt werden.
Uhu Uhuhu schrieb:> Ein Interpreter ist ein Compiler, der den erzeugten Code sofort> ausführt.
Nein.
> Entsprechend nennt man Fehler, die in der Compilationsphase auftreten,> eben "Compile-Fehler"...
Außer dir tut das niemand.
Peter II schrieb:> nein ist es nicht. ein Interpreter ist kein Compiler. Bei einen> Interpreter muss kein Maschinen code erzeugt werden.
Du irrst. Natürlich erzeugt der Interpreter einen Strom von
Maschinenbefehlen - sonst würde das Skript niemals ausgeführt werden.
Aber das hatten wir schon öfter...
Der Compilationspaß eines Interpreters erzeugt aus dem Quell-Text eine
Zwischensprache¹. Erst diese Zwischensprache wird in eine Folge von
Funktionsaufrufe umgesetzt, die eine abstrakte Maschine steuern.
Die abstrakte Maschine besteht aus Funktionen, die die Befehle der
abstrakten Maschine - dynamisch - in Maschinencode der realen Maschine
umsetzten.
Das Ur-Beispiel: Niklaus Wirths Pscal-P-Maschine:
http://www.threedee.com/jcm/psystem/
--------------
¹ Die Zwischenebene führt man ein, weil die Interpretation des
Quelltextes in aller Regel zu ineffizient ist. Letztlich ist es ein
Kompromiß zwischen Compilations- und Interpretationsaufwand. Der
Interpreter einer Shell wird weniger Compilationsaufwand betreiben, als
der einer Skriptsprache, wie Perl, oder Python.
Uhu Uhuhu schrieb:> Du irrst. Natürlich erzeugt der Interpreter einen Strom von> Maschinenbefehlen - sonst würde das Skript niemals ausgeführt werden.
nein macht er nicht.
> Aber das hatten wir schon öfter...
genau und du hast es immer noch nicht verstanden.
Uhu Uhuhu schrieb:> Und wie würdest du sowas hier nennen:[Sun Jan 05 12:31:33 2014] [error]> [client 127.0.0.1] PHP Parse error:> syntax error, unexpected '@' in> /var/www/dokuwiki/lib/plugins/variables> /syntax/substitute.php on line 43, referer: http://localhost/dokuwiki> /doku.php?id=start&do=draft
steht sogar da:
PHP Parse error
da ist also überhaupt kein Compiler beteiligt.
Peter II schrieb:> nein macht er nicht.
Wird der Zwischencode auf blauem Dunst ausgeführt, oder auf einem realen
Prozessor?
> PHP Parse error>> da ist also überhaupt kein Compiler beteiligt.
Der Parser ist nun mal eine der klassischen Komponenten eines
Compilers...
> Wird der Zwischencode auf blauem Dunst ausgeführt, oder auf einem realen> Prozessor?
es gibt keinen Zwischencode, sonst währe es ja ein Compiler.
http://de.wikipedia.org/wiki/Interpreter
Ein Interpreter (im Sinne der Softwaretechnik) ist ein Computerprogramm,
das einen Programm-Quellcode im Gegensatz zu Assemblern oder Compilern
nicht in eine auf dem System direkt ausführbare Datei übersetzt, sondern
den Quellcode einliest, analysiert und ausführt.
PHP ist ein Interpreter oder auch eine Interpreter-Sprache. Ich zitiere
hier mal das Wiki dazu:
"PHP ist ein System, das PHP-Code serverseitig verarbeitet. Das
bedeutet, dass der Quelltext nicht an den Webbrowser übermittelt wird,
sondern an einen Interpreter auf dem Webserver. Erst die Ausgabe des
PHP-Interpreters wird an den Browser geschickt. In den meisten Fällen
ist das ein HTML-Dokument, wobei es mit PHP aber auch möglich ist,
andere Dateitypen, wie Bilder oder PDF-Dateien, zu generieren."
Aber, es gibt auch PHP-Compiler, wie phc:
http://www.phpcompiler.org/
Näheres s. dort oder Wiki unter "Kompilierung":
http://de.wikipedia.org/wiki/PHP
Uhu Uhuhu schrieb:> Der Compilationspaß eines Interpreters erzeugt aus dem Quell-Text eine> Zwischensprache¹. Erst diese Zwischensprache wird in eine Folge von> Funktionsaufrufe umgesetzt, die eine abstrakte Maschine steuern.
Du meinst Bytecode-Interpreter, PHP ist kein solcher. Python
beispielsweise schon, es wird vor der Ausführung in eine Zwischensprache
kompiliert, welche dann interpretiert wird.
Uhu Uhuhu schrieb:> Der Parser ist nun mal eine der klassischen Komponenten eines> Compilers...
Nicht alle roten Autos sind Feuerwehrautos.
Uhu Uhuhu schrieb:> Du irrst. Natürlich erzeugt der Interpreter einen Strom von> Maschinenbefehlen - sonst würde das Skript niemals ausgeführt werden.> Aber das hatten wir schon öfter...
1
String input = "echo \"Hallo Welt\""
2
3
if token(input, ' ', 0) == "echo":
4
print token(input, ' ', 1)
Gratuliere, der wohl erste Interpreter der Welt, der einen "echo"-Befehl
interpretieren kann, ohne eine Zwischensprache zu erzeugen. Ob ich wohl
einen Preis für diese überragende Entdeckung bekomme?
vn nn schrieb:> Gratuliere, der wohl erste Interpreter der Welt, der einen "echo"-Befehl> interpretieren kann, ohne eine Zwischensprache zu erzeugen. Ob ich wohl> einen Preis für diese überragende Entdeckung bekomme?
Hast du jetzt frei assoziiert, oder gelesen, worum es ging?
Nase schrieb:> Mittlerweile benutzt PHP aber einen Zwischencode, der dann auf einer> abstrakten Maschine ausgeführt wird.
Anders wäre PHP auch nicht im Entfernten effizient zu bekommen und z.B.
die Option S - speichern des Pattern-Compilates für weitere Verwendung -
für Pearl-Patterns wäre sinnlos.
Uhu Uhuhu schrieb:> Hast du jetzt frei assoziiert, oder gelesen, worum es ging?
Wirfst du einfach nur mit Wörtern um dich oder soll die Frage auch einen
konkreten Hintergrund haben? Oder bezieht sie sich gar tatsächlich auf
den Satz, denn du davor zitiert hast?
Uhu Uhuhu schrieb:> Nase schrieb:>> Mittlerweile benutzt PHP aber einen Zwischencode, der dann auf einer>> abstrakten Maschine ausgeführt wird.>> Anders wäre PHP auch nicht im Entfernten effizient zu bekommen und z.B.> die Option S - speichern des Pattern-Compilates für weitere Verwendung -> für Pearl-Patterns wäre sinnlos.
Gut, mein Fehler, ändert aber auch nix daran, dass der Allgemeinplatz
> Ein Interpreter ist ein Compiler, der den erzeugten Code sofort> ausführt.
schlichtweg Unfug ist.
Eure privaten Grabenkriege bitte per PN fortführen, die Frage ist ja
wohl inzwischen hinlänglich beantwortet. Sollten noch einzelne
Randpunkte als Diskussionwürdig erachtet werden bitte neuen Thread
eröffnen.