Fehlermeldungen von PHP5?

Gast #3471748
Lesenswert?

"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
OP #3472735
Lesenswert?

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.
Gast #3472745
Lesenswert?

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.
OP #3472796
Lesenswert?

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.
OP #3472804
Lesenswert?

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...
Gast #3472815
Lesenswert?

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.
Persönliche Seite #3472824
Lesenswert?

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
Gast #3472828
Lesenswert?

> 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.
(Firma: xyz) #3556999
Lesenswert?

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
#3557027
Lesenswert?

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?
OP #3557285
Lesenswert?

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.
#3557432
Lesenswert?

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.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.