Wie kommt man denn unter Linux an Compile-Fehlermeldungen von PHP5 heran?
:
Gesperrt durch User
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.
:
Bearbeitet durch User
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.
Stefan Rand schrieb: > Außer dir tut das niemand. Und wie würdest du sowas hier nennen:
1 | [Sun Jan 05 12:31:33 2014] [error] [client 127.0.0.1] PHP Parse error: |
2 | syntax error, unexpected '@' in /var/www/dokuwiki/lib/plugins/variables |
3 | /syntax/substitute.php on line 43, referer: http://localhost/dokuwiki |
4 | /doku.php?id=start&do=draft |
Stammt aus dem error.log des Apatchen...
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...
:
Bearbeitet durch User
Uhu Uhuhu schrieb: > Und wie würdest du sowas hier nennen Wie auch immer man das nennt (PHP nennt es einen Parse Error) so kann man sich diese Fehler per Setting in der php.ini (und per PHP Skript angepasst) trotzdem im Browser als simple Textseite zurückliefern lassen. http://www.php.net/manual/de/errorfunc.configuration.php#ini.display-errors http://www.php.net/manual/de/function.error-reporting.php
> 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.
Grüß den Wald schön von mir, wenn du ihn vor lauter Bäumen irgendwann mal sehen solltest...
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
:
Bearbeitet durch User
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?
:
Bearbeitet durch User
Mittlerweile benutzt PHP aber einen Zwischencode, der dann auf einer abstrakten Maschine ausgeführt wird.
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.
:
Bearbeitet durch User
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.