Forum: PC-Programmierung Merkwürdiger php-Fehler


von Uhu U. (uhu)


Angehängte Dateien:

Lesenswert?

Was ist die Ursache für diesen merkwürdigen Syntaxfehler:
1
[error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected $end
2
  in /home/www/dokuwiki/lib/plugins/smallcaps/syntax/syntax.php on line 74,
3
  referer: http://localhost/dokuwiki/doku.php?id=start&do=edit&rev=0

Wenn ich die auskommentierte Zeile 40:
1
 // $this->Lexer->addSpecialPattern('<smallcaps.*?>', $mode, 'plugin_smallcaps_syntax');

lösche, ist der Fehler weg.

Wie das?

: Verschoben durch User
von Peter II (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Wie das?

in der syntax.php scheint das ende zu fehlen, dafür steht eine VIM zeile 
drin.

wenn eine Datei mit

<?php

anfängt, sollte sie auch mit

?>

enden.

von Patrick (Gast)


Lesenswert?

Ich vermute mal, dass sich der Interpreter am ?> in Zeile 40 
verschluckt. Bin schon seit Jahren raus aus PHP; erscheint allerdings 
schon seltsam.
Probier mal sowas: ...?'.'>'

von Uhu U. (uhu)


Lesenswert?

Das Skelett ist mit dem Plugin-Wizard von Dokuwiki erzeugt - die 
fehlende ?> - Klammer ist  original so. Sie einzufügen verschiebt nur 
die Zeilennummer, auf der php auf die Schnauze fällt.

Das Weglassen der ?> - Klammer scheint ihm egal zu sein. Ich habe heute 
ein anderes kleines Plugin gebaut, ebenfalls mit generiertem Skelett und 
fehlenden Klammern in zwei Quellfeils - das funktioniert prächtig...

von Uhu U. (uhu)


Lesenswert?

Patrick schrieb:
> Ich vermute mal, dass sich der Interpreter am ?> in Zeile 40
> verschluckt.

Die Vermutung war gut. Wenn man eins von beiden Zeichen raus nimmt, oder 
ein Blank dazwischen packt, ists weg.

Sowas habe ich in 40 Jahren Programmiererei nicht erlebt. Was ist das 
für eine elende Schrottsprache...

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Hat jemand PHP 5.4 oder 5.5 greifbar und kann mal probieren, ob die 
Gurke damit auch auftritt?

Für die 5.3, die ich hier auf Ubuntu 12.04 habe, nehmen sie keine 
Bugreports mehr an.

Es reicht schon, diese Zeile irgendwo einzufügen:
1
// $this->Lexer->addSpecialPattern('<smallcaps.*?>', $mode, 'plugin_smallcaps_syntax');

von Peter II (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Hat jemand PHP 5.4 oder 5.5 greifbar und kann mal probieren, ob die
> Gurke damit auch auftritt?

IN PHP Version 5.5.7-2 geht es auch nicht.

von Uhu U. (uhu)


Lesenswert?

Super... Ich mach einen Bugreport.

Das Ganze läßt tief blicken, wie die ganze Kiste zusammengehackt ist. 
Kein Wunder, daß PHP bei Ganoven so beliebt ist. Auf den Logs meines 
Servers finden sich Seitenweise Einbruchsversuche gegen phpmyadmin.

von Peter II (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Super... Ich mach einen Bugreport.

hatte ich wegen einem SQL Fehler auch schon mal gemacht, wurde nie 
gelöst weil es eventuell nicht mehr abwärtskompatiblen ist.

von Uhu U. (uhu)


Lesenswert?

Die Kerle haben tatsächlich die Stirn, das als "not a bug" mit Verweis 
auf die Dokumentation abzuweisen.

Wirklich unglaublich.

von Vn N. (wefwef_s)


Lesenswert?

Uhu Uhuhu schrieb:
> Wirklich unglaublich.

Nun, wenn es tatsächlich so in der Dokumentation steht, ist es nicht 
unglaubich, sondern die einzig logische Konsequenz, dich auf jene zu 
verweisen. Dass man diese implementierung für Unschön erachten kann, ist 
natürlich eine andere Geschichte.

von Uhu U. (uhu)


Lesenswert?

vn nn schrieb:
> Nun, wenn es tatsächlich so in der Dokumentation steht, ist es nicht
> unglaubich, sondern die einzig logische Konsequenz, dich auf jene zu
> verweisen.

Ist das die neuste Bugfix-Technologie? So kann man alles abbügeln und 
hinterher wundern sich die Leute, warum in der Gebrauchsanweisung zur 
Mikrowelle steht, daß man keine nassen Katzen damit trocknen darf...

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Uhu Uhuhu schrieb:
> Die Vermutung war gut. Wenn man eins von beiden Zeichen raus nimmt, oder
> ein Blank dazwischen packt, ists weg.

Hast du denn mal
1
$this->Lexer->addSpecialPattern('<smallcaps.*?'.'>', $mode, 'plugin_smallcaps_syntax');
Probiert?

Uhu Uhuhu schrieb:
> Was ist das für eine elende Schrottsprache...

Ja C ist auch so eine Schrottsprache, nicht mal Helloworld klappt da ;-P
1
printf("\helloworld\");
Mein Bugreport wurde frecherweise abgelehnt!

Uhu Uhuhu schrieb:
> phpmyadmin

Was hat ein Userprogramm den nun wieder mit der Sprache zu tun...

Nachtrag:
gedit unter Linux hebt das sogar derart hervor, dass man den "Fehler" 
sogar optisch hervorgehoben sieht.

Uhu Uhuhu schrieb:
> warum in der Gebrauchsanweisung

Ja weil die ständig Bugreports bekommen "Katze lässt sich nicht 
trocknen" schreiben die Das einfach in die Doku anstelle das mal zu 
"fixen"... komische Logik.

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Läubi .. schrieb:
> Was hat ein Userprogramm den nun wieder mit der Sprache zu tun...

Ganz einfach: mit einer Schrottsprache, wie PHP, muß man die 
Programmierer nicht extra dazu anhalten, irgend welchen Mist zu 
programmieren - die Sprache legt ihn einfach nahe.

Die Folge sind Programme mit Sicherheitslücken im Dutzend billiger und 
die Ganove freuen sich...

Läubi .. schrieb:
> Uhu Uhuhu schrieb:
>> warum in der Gebrauchsanweisung
>
> Ja weil die ständig Bugreports bekommen "Katze lässt sich nicht
> trocknen" schreiben die Das einfach in die Doku anstelle das mal zu
> "fixen"... komische Logik.

Da hast du einfach etwas zu kurz gedacht:
Die Folge der Methode "Der letzte Schrott ist schon in Ordnung, wenn er 
nur irgendwo im Kleingedruckten erwähnt ist" sind letztendlich 
Gebrauchsanleitungen der genannten Art. Gesunder Menschenverstand? Wo 
kämen wir denn hin, wenn jeder verlangen würde, die Hose nicht mit der 
Kneifzange anzuziehen...

: Bearbeitet durch User
von PHP-Freund (Gast)


Lesenswert?

Und was genau ist daran Schrott?
Wenn ich einen Parser mit nicht eindeutigen Zeichenketten füttere muss 
ich mich auch nicht wundern wenn er das macht was er vorgesetzt bekommt.
Dummerweise muss man da auch mal Zeichen oder Zeichenketten maskieren. 
Das ist nun mal so.

...Die Folge sind Programme mit Sicherheitslücken im Dutzend billiger 
und
die Ganove freuen sich...

Bloß weil die Nutzer irgendwelche Scripte zusammenklöppeln die irgendwie 
laufen, aber unsicher wie Sau sind liegt das nicht an der Sprache die 
dazu benutzt wird. Wer darüber schimpft das er selber unsicher 
programmiert hat soviel Hirn wie ein Spatz Fleisch an der Kniescheibe.

Einer der weiterhin PHP programmiert.

von Εrnst B. (ernst)


Lesenswert?

PHP-Freund schrieb:
> Und was genau ist daran Schrott?
> Wenn ich einen Parser mit nicht eindeutigen Zeichenketten füttere muss

Da hast du das Problem genau erkannt.
PHP hatte (zumindest urprünglich) keinen Parser. Sondern ein "wir 
frickeln uns per String-Suche irgendwas ausführbares zusammen"-Chaos.
Und später musste es halt immer kompatibel bleiben.
Der Rest ist, wie man so schön sagt, Geschichte.

Deshalb wird PHP in Informatik/Compilerbau-Vorlesungen gerne als 
Negativ-Beispiel genommen, weil bei PHP so ziemlich alles falsch gemacht 
worden ist, was sich auch nur irgendwie falsch machen lässt.

Man muss PHP aber zugute halten, dass es sich viel Mühe gibt, das vor 
den Anwendern zu verstecken.


Disclaimer: Fühl dich nicht angegriffen. PHP selbst ist sch****, nicht 
das was PHP-Freunde damit programmieren.

von Uhu U. (uhu)


Lesenswert?

@Ernst: Du hast es auf den Punkt gebracht.

von Vn N. (wefwef_s)


Lesenswert?

Uhu Uhuhu schrieb:
> Ist das die neuste Bugfix-Technologie? So kann man alles abbügeln und
> hinterher wundern sich die Leute, warum in der Gebrauchsanweisung zur
> Mikrowelle steht, daß man keine nassen Katzen damit trocknen darf...

Bitte was? Dein hinkender Vergleich ändert auch nix dran, dass Dinge, 
die laut Doku so gedacht sind, offensichtlich keine Fehler sind 
(andernfalls würden sie ja nicht in der Doku vermerkt sein).

Uhu Uhuhu schrieb:
> Ganz einfach: mit einer Schrottsprache, wie PHP, muß man die
> Programmierer nicht extra dazu anhalten, irgend welchen Mist zu
> programmieren - die Sprache legt ihn einfach nahe.

Süß.

Uhu Uhuhu schrieb:
> Da hast du einfach etwas zu kurz gedacht:
> Die Folge der Methode "Der letzte Schrott ist schon in Ordnung, wenn er
> nur irgendwo im Kleingedruckten erwähnt ist" sind letztendlich
> Gebrauchsanleitungen der genannten Art. Gesunder Menschenverstand? Wo
> kämen wir denn hin, wenn jeder verlangen würde, die Hose nicht mit der
> Kneifzange anzuziehen...

Nun geht der Zusammenhang deines Geschwafles mit der Problemstellung 
endgültig verloren.

Εrnst B✶ schrieb:
> Da hast du das Problem genau erkannt.
> PHP hatte (zumindest urprünglich) keinen Parser. Sondern ein "wir
> frickeln uns per String-Suche irgendwas ausführbares zusammen"-Chaos.
> Und später musste es halt immer kompatibel bleiben.
> Der Rest ist, wie man so schön sagt, Geschichte.
>
> Deshalb wird PHP in Informatik/Compilerbau-Vorlesungen gerne als
> Negativ-Beispiel genommen, weil bei PHP so ziemlich alles falsch gemacht
> worden ist, was sich auch nur irgendwie falsch machen lässt.
>
> Man muss PHP aber zugute halten, dass es sich viel Mühe gibt, das vor
> den Anwendern zu verstecken.

Bestreitet ja auch keiner (siehe mein erstes Posting). Aber sich zu 
beschweren, dass sie etwas als "not a bug" ablehnen, was so in der Doku 
erwähnt ist (und somit offensichtlich kein Bug ist, wenn auch nicht 
gerade elegant), ist echt lächerlich. Das ganze dann damit zu 
vergleichen, dass man auch keine Katze in die Mikrowelle steckt, setzt 
dem ganzen nur de Krone auf.

von Uhu U. (uhu)


Lesenswert?

vn nn schrieb:
> Nun geht der Zusammenhang deines Geschwafles mit der Problemstellung
> endgültig verloren.

Nicht alles, was DU nicht verstehst, ist Unsinn...

vn nn schrieb:
> Bestreitet ja auch keiner (siehe mein erstes Posting). Aber sich zu
> beschweren, dass sie etwas als "not a bug" ablehnen, was so in der Doku
> erwähnt ist (und somit offensichtlich kein Bug ist, wenn auch nicht
> gerade elegant), ist echt lächerlich.

Na ja, was soll man da noch sagen. Den Kadavergehorsam mit Schöpflöffeln 
gefressen und das dann auch noch von anderen verlangen...

vn nn schrieb:
> Das ganze dann damit zu
> vergleichen, dass man auch keine Katze in die Mikrowelle steckt, setzt
> dem ganzen nur de Krone auf.

Daß du von Vergleich schafelst, zeigt nur, daß du nix begriffen 
hast... Ist aber bei der Grundhaltung auch nicht anders zu erwarten.

: Bearbeitet durch User
von Mark B. (markbrandis)


Lesenswert?

Ich teile durchaus die Ansicht, dass PHP keine besonders gute 
Programmiersprache ist.

Nur, wenn man sie so dermaßen nicht leiden kann - warum benutzt man sie 
dann? Ist ja nicht so, dass es keine geeigneten Alternativen gäbe. Zum 
Beispiel Python, Ruby on Rails, Scala zusammen mit dem Lift Framework, 
...

Auch zur Software DokuWiki gibt es genügend Alternativen:
http://de.wikipedia.org/wiki/Liste_von_Wiki-Software

: Bearbeitet durch User
von Uhu U. (uhu)


Angehängte Dateien:

Lesenswert?

Mark Brandis schrieb:
> Nur, wenn man sie so dermaßen nicht leiden kann - warum benutzt man sie
> dann? Ist ja nicht so, dass es keine geeigneten Alternativen gäbe. Zum
> Beispiel Python, Ruby on Rails, Scala zusammen mit dem Lift Framework,

Ja muß man denn eine Programmiersprache, die man - aus welchen Gründen 
auch immer - gerade benutzt, deswegen gleich super-gut finden? Wenn du 
mal mit einem alten rostigen Klepper von Fahrrad unterwegs bist, weil du 
gerade kein anderes hast, lobst du das Vehikel doch auch nicht in den 7. 
Himmel...

PHP ist definitiv der mit weitem Abstand übelste Hack, der mir in 
Jahrzehnten Softwareentwicklung untergekommen ist. Da wird man doch wohl 
noch "ein gewisses Erstaunen", auch in etwas drastischerer Art, äußern 
dürfen.

Ich konnte mir bis vor einigen Tagen, als ich mit gutem Grund damit 
anfing, schlicht nicht vorstellen, daß es möglich ist, eine derartige 
Anhäufung von gröbsten Designfehlern als weidlich genutztes Werkzeug zu 
etablieren. Ich bin überzeugt, daß sehr viele Internetschwachstellen auf 
diesen Murks zurückzuführen ist - die seitenlangen Logs von 
Einbruchsversuchen gegen phpmyadmin auf meinem Server sprechen da eine 
sehr klare Sprache -, der auch mit den raffiniertesten nachgeschobenen 
Hacks niemals eine Struktur bekommen wird, die die ganze Kiste immer 
vorhersehbar reagieren läßt.

Und was ich besonders übel finde: Mit diesem Scheißdreck werden 
Millionen unbedarfter Programmierer regelrecht verdorben, weil sie damit 
nur konditioniert, aber nicht in klar strukturiertem Denken geschult 
werden.

Die PHP-Strategie, die irreparablen Schwächen mit irgendwelchen Flicken 
zu verbrämen, halte ich für grundsätzlich falsch. Der einzig sinnvolle 
Weg wäre ein Versionskonzept, mit dem alte Software weiter betrieben 
werden kann, aber Neuentwicklungen auf ein Konzept geleitet werden, das 
dem Stand der Technik zumindest sehr deutlich näher kommt, als das 
heutige PHP.

: Bearbeitet durch User
von Mark B. (markbrandis)


Lesenswert?

Uhu Uhuhu schrieb:
> Ich konnte mir bis vor einigen Tagen, als ich mit gutem Grund damit
> anfing, schlicht nicht vorstellen, daß es möglich ist, eine derartige
> Anhäufung von gröbsten Designfehlern als weidlich genutztes Werkzeug zu
> etablieren.

Doch, das geht ;-)

Die Zahl der Websites, die PHP kritisieren, ist Legion:

Why PHP sucks
http://webonastick.com/php.html

PHP: a fractal of bad design
http://me.veekun.com/blog/2012/04/09/php-a-fractal-of-bad-design/

PHP Must Die
http://www.steike.com/code/php-must-die/

Problems with PHP
http://toykeeper.net/soapbox/php_problems/

I’m sorry, but PHP sucks
https://maurus.net/resources/programming-languages/php/

What I don't like about PHP
http://www.bitstorm.org/edwin/en/php/

Experiences of Using PHP in Large Websites
http://www.ukuug.org/events/linux2002/papers/html/php/index.html

und das sind bestimmt nicht alle ;-)

von Karl Käfer (Gast)


Lesenswert?

Hallo PHP-Freund,

PHP-Freund schrieb:
> Und was genau ist daran Schrott?

Der Parser.

> Wenn ich einen Parser mit nicht eindeutigen Zeichenketten füttere muss
> ich mich auch nicht wundern wenn er das macht was er vorgesetzt bekommt.

Das stimmt. In diesem Falle ist die Zeichenkette aber absolut eindeutig. 
Offensichtlich ist PHP dämlich genug, Kommentare zu parsen statt sie zu 
ignorieren -- und parst das, was es gar nicht parsen sollte, dann auch 
noch falsch.

> Bloß weil die Nutzer irgendwelche Scripte zusammenklöppeln die irgendwie
> laufen, aber unsicher wie Sau sind liegt das nicht an der Sprache die
> dazu benutzt wird.

Wenn eine Sprache mehrere tausend Funktionen in den globalen Namensraum 
klöppelt, diese Funktionen inkonsistent benamst und parametriert sind 
(explode() und implode(), um nur ein Beispiel zu nennen) und obendrein 
etliche ähnliche, aber doch nicht gleiche Funktionen existieren, dann 
verführt die Sprache den Nutzer zu Fehlern und ist schrottig designt.

Daß PHP bis vor Kurzem keine Namensräume konnte und jetzt die mit 
Abstand häßlichste Lösung aller Zeiten als Namensraumtrenner benutzt, 
liegt zudem nur daran, daß die PHP-Core-Entwickler ihren eigenen 
flex-basierten Parser nicht mehr verstehen. Wie man auf die Idee kommen 
kann, sichere Software auf so einer unverstandenen Basis zu 
implementieren, bleibt schleierhaft.

Beste Grüße,
Karl

von Karl Käfer (Gast)


Lesenswert?

Hallo vn,

vn nn schrieb:
> Uhu Uhuhu schrieb:
>> Ist das die neuste Bugfix-Technologie? So kann man alles abbügeln und
>> hinterher wundern sich die Leute, warum in der Gebrauchsanweisung zur
>> Mikrowelle steht, daß man keine nassen Katzen damit trocknen darf...
>
> Bitte was? Dein hinkender Vergleich ändert auch nix dran, dass Dinge,
> die laut Doku so gedacht sind, offensichtlich keine Fehler sind
> (andernfalls würden sie ja nicht in der Doku vermerkt sein).

Genau das hat Uhu doch bemängelt. Das erinnert mich an einen alten Witz:

  Wieviele Microsoft-Programmierer braucht man, um eine Glühbirne zu
  wechseln? Antwort: keine, Dunkelheit wird zum Standard erklärt.

Genauso machen es die PHP-Entwickler auch: anstatt den Fehler zu 
beheben, wird er dokumentiert und künftig auf die Dokumentation 
verwiesen. Aber wenn ein Interpreter einen Kommentar falsch 
interpretiert, dann ist das ein Fehler, und zwar ungeachtet der Frage, 
ob dieser dokumentiert ist.

Beste Grüße,
Karl

von Εrnst B. (ernst)


Lesenswert?

Karl Käfer schrieb:
> liegt zudem nur daran, daß die PHP-Core-Entwickler ihren eigenen
> flex-basierten Parser nicht mehr verstehen.

Richtig flex-basiert ist er auch nicht durchgängig :)

Zahlen werden nicht (ganz) vom Flex gelesen, sondern flex sammelt alle 
chars zusammen, die zu einer Zahl gehören könnten, und dann wird das 
ganz einfach an strtol (o.ä) übergeben.
Ohne Check, ob sich die beiden über die Anzahl der verwerteten Bytes 
einig sind.

Netter Effekt:
1
print 01234567;
2
print 012345678;

geben beide dasselbe aus. Ohne Warnung, ohne Fehlermeldung.

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Ich hatte auch noch so eine Merkwürdigkeit:
1
class ... {
2
   const MODULE_PREFIX = 'syntax_variables_";
3
4
   public function handle() {
5
      ...
6
      p_set_metadata($ID, array(MODULE_PREFIX."state" => $data));
7
      ...
8
   }
9
}

Als Tag für $data im Array würde ich syntax_variables_state erwarten.

Tatsächlich stand in den Metadaten von Dokuwiki aber
1
array (
2
   [MODULE_PREFIXstate] => array(...)
3
)

Wenn man
1
   print_r MODULE_PREFIX."state"
ausführt, erhält man syntax_variables_state

Nach solchem Scheißdreck kann man sich einen Wolf suchen...

: Bearbeitet durch User
von Kaj (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Nach solchem Scheißdreck kann man sich einen Wolf suchen...
Wie wärs einfach mal mit Doku lesen oder sich mal ein Buch dazu zu 
kaufen?!
http://www.php.net/manual/de/language.constants.php

Uhu Uhuhu schrieb:
> MODULE_PREFIX = 'syntax_variables_";
Abgeschrieben oder Copy&Paste? Wenn das Copy&Paste ist, kein Wunder das 
das alles nicht so Funktioniert, wie du das gerne hättest.

von Uhu U. (uhu)


Lesenswert?

Kaj schrieb:
> Wie wärs einfach mal mit Doku lesen oder sich mal ein Buch dazu zu
> kaufen?!
> http://www.php.net/manual/de/language.constants.php

Ehe du hier groß das Maul aufreißt, lies selber die Doku: 
http://de3.php.net/manual/de/language.oop5.constants.php

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Uhu auch wenn das möglicherweise frustrierend ist muß hier nicht der 
Thread zu einer Schimpftriade ausarten!

Der Verweis war insofern korrekt, als das du (wenn auch unbeabsichtigt) 
solche eine Konstante genutzt hast, und höchstwahrscheinlich sogar eine 
Warnung darüber im log finden wirst (oder in deinem Output falls du das 
nun aktiviert hast) obwohl du eine Klassenkonstante nutzen wolltest.

Daher nochmal von mir der Tipp, das Error Reporting hochzustellen und 
alle Warnungen zu beheben!

Also bitte sachlich bleiben.

von A. B. (funky)


Lesenswert?

Defintiv nur mit error_reporting E_ALL entwickeln!
Das erspart später viel Ärger


Aber das  const MODULE_PREFIX = 'syntax_variables_";
 keine Fehlermeldung liefert verwundert mich gerade doch ein wenig?!

Auch das mit dem parsen der Kommentare war bei mir bisher kein Problem. 
Zumindest bin ich über das Verhalten nie gestolpert.
Es scheint aber tatsächlich so zu sein, dass das "?>" auch in 
Kommentaren geparsed wird
http://www.php.net/manual/en/language.basic-syntax.comments.php

von Εrnst B. (ernst)


Lesenswert?

A. B. schrieb:
> Defintiv nur mit error_reporting E_ALL entwickeln!
> Das erspart später viel Ärger

Besser:

error_reporting(-1);

E_ALL ist (Je nach PHP-Version) nicht "Alles", auch wenn der Name das 
suggeriert.

von Uhu U. (uhu)


Lesenswert?

A. B. schrieb:
> Auch das mit dem parsen der Kommentare war bei mir bisher kein Problem.
> Zumindest bin ich über das Verhalten nie gestolpert.

Patternmatching und html-Tags - da rennt man ganz schnell in die Falle, 
wenn man das nicht weiß.


Εrnst B✶ schrieb:
> E_ALL ist (Je nach PHP-Version) nicht "Alles", auch wenn der Name das
> suggeriert.

PHP wäre nicht PHP, wenn es anders wäre...

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Phpmyamin scheint für die Hacker wirklich unwiderstehlich zu sein. Ich 
hatte einen Angriffsversuch, der innerhalb von 4 Sekunden 1534 Anfragen 
nach irgend welchen Namen/Pfaden niederprasseln ließ, hinter denen sie 
phpmyadmin erhoffen. Sowas geht schon in Richtung Denial of Service.

: Bearbeitet durch User
von A. B. (funky)


Lesenswert?

ohje...aber das mit dem E_ALL steht ja auch in der Doku :D

von Uhu U. (uhu)


Lesenswert?

Ich denke, man muß PHP mit Humor und bei Bedarf gewürzt mit einer 
ordentlichen Priese Spott nehmen. Einen Verein, an dem 50 Jahre 
Informatik spurlos vorbei gegangen sind, muß man nicht ernst nehmen.

Bleibt also der mehr als ärgerliche Aspekt, daß PHP wohl zu einem 
erheblichen Teil die Grundlage für die Sicherheitprobleme im Web bildet.

: Bearbeitet durch User
von dadada (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Ich denke, man muß PHP mit Humor und bei Bedarf gewürzt mit einer
> ordentlichen Priese Spott nehmen. Einen Verein, an dem 50 Jahre
> Informatik spurlos vorbei gegangen sind, muß man nicht ernst nehmen.
>
> Bleibt also der mehr als ärgerliche Aspekt, daß PHP wohl zu einem
> erheblichen Teil die Grundlage für die Sicherheitprobleme im Web bildet.

Ich mag auch kein PHP und ja, Serversicherheit ist durch PHP nicht 
optimal. Aber das Problem des Buffer Overflow mitdem auch aus dem Web 
die Computer angegriffem werden ist ein klassischer C designfehler.

von Mark B. (markbrandis)


Lesenswert?

dadada schrieb:
> Ich mag auch kein PHP und ja, Serversicherheit ist durch PHP nicht
> optimal. Aber das Problem des Buffer Overflow mitdem auch aus dem Web
> die Computer angegriffem werden ist ein klassischer C designfehler.

Den man vermeiden kann, indem man:
-nicht einfach sofort drauflosschreibt, sondern erst prüft wieviele 
Bytes denn geschrieben werden sollen (in ein Array etc.)
-statische Codeanalyse durchführt
-statt sprintf snprintf verwendet usw.

von Uhu U. (uhu)


Lesenswert?

dadada schrieb:
> Ich mag auch kein PHP und ja, Serversicherheit ist durch PHP nicht
> optimal.

Das ist sehr freundlich ausgedrückt. Ich würde sagen, daß in diesem 
Bereich des Softwareuniversums - man könnte ihn auch Softwarehölle 
nennen - der Begriff "Optimum" noch so weit unter dem Horizont ist, daß 
man darüber weder reden kann, noch muß...

> Aber das Problem des Buffer Overflow mitdem auch aus dem Web
> die Computer angegriffem werden ist ein klassischer C designfehler.

Du weißt, wie alt diese "klassische" Herangehensweise von C ist? Anfang 
der 1970-er Jahre wurde es entwickelt. Und seither wurde C stetig 
weiterentwickelt, um diese alten Schwächen zu entschärfen und die 
Sprache handlicher zu machen. Und dabei hat man sie noch weitgehend 
kompatibel zu älteren Versionen gehalten - deswegen kann man noch heute 
mit den alten Funktionen den alten Mist machen, erhält aber von den 
meisten Compilern eindringliche Warnungen, die nicht in irgend welchen 
Serverlogs verschwinden.

(Diese simplen Funktionen waren übrigens nicht reiner Übermut, sondern 
der Leistungsfähigkeit damaliger Computer geschuldet. Diese Kisten 
liefen z.T. noch im kHz-Bereich der Taktfrequenzen und ein einziges 
Speicherbit kostete einen deutlichen Dollar-Betrag.)

Im Gegensatz dazu PHP: entstanden ist es als Hack, um die mühsame 
HTML-Programmiererei etwas zu erleichtern, gebastelt von Leuten, die von 
Compilerbau keinen blassen Dunst hatten. Seither gab man sich 
hemmungslos der Featuritis ohne Perspektive, Weit- und Überblick hin und 
Macken, die ruchbar wurden, wurden notdürftig mit irgend welchen alten 
Putzlumpen gestopft.


Sprachentwicklung ist halt doch etwas mehr, als ein neues Dutzend 
Funktionen in die Bibliothek reinzuwurschteln, immer ängstlich darauf 
bedacht, den Nutzer nicht durch zu viel Gleichförmigkeit in den 
Interfaces zu langweilen...

: Bearbeitet durch User
von Uhu U. (uhu)


Lesenswert?

Behauptete da nicht jemand, bei PHP gäbe es keinen "Compiler"?
1
Warnung
2
3
Der Großteil der E_STRICT Fehler werden zur Compile-Zeit generiert und
4
werden somit nicht angezeigt, wenn E_STRICT zur Laufzeit zu error_reporting
5
hinzugefügt wird (und auch andersrum).

Quelle: http://php.net/manual/de/function.error-reporting.php

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Behauptete da nicht jemand, bei PHP gäbe es keinen Compiler?

nein, hat nie jemand behauptet.

Es wurde nur behauptet das ein Interpreter kein Compiler ist. Du hast 
behauptet das ein Interpreter Maschinencode erzeugt und das stimmt nun 
mal nicht.

von Uhu U. (uhu)


Lesenswert?

Peter II schrieb:
> Du hast
> behauptet das ein Interpreter Maschinencode erzeugt und das stimmt nun
> mal nicht.

Habe ich nicht. Der Unterschied zwischen einem Comiler und einem 
Interpreter ist im Wesentlichen nur, was mit dem vom Compile-Paß 
erzeugten Code passiert:

Der Compiler konserviert ihn zu späterer, vielfacher Ausführung in einer 
Datei, während ein Interpreter seinen Zwischencode auf einer realen 
Maschine ausführt - also letztlich Befehle für die reale CPU daraus 
macht, die sofort ausgeführt werden.

Die Übergänge sind jedoch fließend: Compiler können alles von einem der 
Quellsprache sehr ähnlichen Zwischencode - z.B. tokenised text -, bis zu 
echtem Maschinencode erzeugen.

Wo man die jeweilige Ausgabesprache ansiedelt, ist meist das Ergebnis 
von Effizienzüberlegungen.

Interpreter können fest mit dem Comiler verbunden sein - so bei PHP - 
oder eine vom Compler getrennt erzeugte Zwischencodedatei einlesen - 
Java, Python.

Bei Java gibt es noch eine Spezialvariante: der Compiler erzeugt einen 
maschinen-unabhängigen Zwischencode, der von einem Compiler-Paß im 
Interpreter - oft sogar "just in time" - in Maschinencode der 
Zielmaschine umgesetzt wird, der sogar zur Wiederverwendung aufgehoben 
werden kann.

Und zuguterletzt ist eine CPU auch nur ein Interpreter in Hardware, der 
aus dem Maschinencode Schaltwerke/Netze zusammenschaltet und so die 
Ausgaben erzeugt, mit denen die ganze Kiste überhaupt erst mit der 
Umwelt in Interaktion treten kann.

von Peter II (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> also letztlich Befehle für die reale CPU daraus
> macht, die sofort ausgeführt werden

du hast es immer noch nicht verstanden. Ein Interpreter macht keinen 
code.

Er interpretiert den Code und abhängig davon führt er einen Befehl aus. 
Es wird dabei aber kein Code erzeugt. Der Code ist also schon immer 
vorhanden.

von Peter II (Gast)


Lesenswert?

Nachtrag:

Beispiel µC Atmel. Der Code liegt dort im Flash (also erstmal Readonly) 
damit kann man also keinen Compiler auf so einen System schreiben der 
etwas ausführt. Einen Interpreter kann man aber schreiben.

von Stryker_2k (Gast)


Lesenswert?

Also der Fehler ist eigendlich wirklich eindeutig. Nach

$this->Lexer->addSpecialPattern('<smallcaps.*

ist für den Interpreter Schluss und da fehlt ihm halt wenigstens ein ');
Was jetzt die Geschichte von PHP damit zu tun hat (die ich auch nicht 
optimal finde) verstehe ich jedoch nicht.

Man muss sich halt klar machen, was PHP ist und wie der Code 
abgearbeitet wird. Hier wird natürlich erstmal der zu interpretierende 
Code gesucht. Und dieser alleine betrachtet ist halt falsch.

Da finde ich die inkonsistente Namensgebung oder Parameteranordnung in 
PHP eher problematisch... man kann dennoch in einem abgesteckten Rahmen 
damit Enterprise Lösungen herstellen.

Ps: Da ich mein Geld mit PHP verdiene sehe ich das ganze aber vielleicht 
auch nicht wie jemand anders. Es ist halt auch nur ein Werkzeug. Hammer 
<=> Schraube

von Uhu U. (uhu)


Lesenswert?

Peter II schrieb:
> du hast es immer noch nicht verstanden.
Oh Mann...

> Ein Interpreter macht keinen code.

Er füttert die CPU mit einem Codestrom, der dem Programm entspricht (und 
zusätzlich mit dem Code, den der Interpreter "für sich selbst" braucht). 
Ob der Strom aus einem ROM kommt, oder sonst woher, ist für die Logik 
völlig egal. Interpretation aus Sicht des Interpreters bedeutet, der CPU 
Laufzeitroutinen und Parameter zum Fraß vorzuwerfen - diesen "Fraß" 
könnte man in ein riesiges RAM sequentiell so abspeichern, wie sie vom 
Befehlsdecodierer der CPU gesehen werden - das ist der Codestrom, den 
der Interpreter erzeugt.

> Der Code ist also schon immer vorhanden.

Ja und? Der Code, den ein Compiler erzeugen kann, steht mit Definition 
der Sprache und seiner Implementierung fest und ist - auch wenn die 
Menge riesig, auf einer realen Maschine ist sie endlich - sozusagen auch 
schon vorhanden und ein konkreter Quelltext macht aus dieser Riesenmenge 
nur eine Auswahl. Aus dieser Perspektive ist der Compiler eine 
Suchmaschine, die aus dem (virtuellen) Fundus entsprechend dem Quelltext 
das Richtige raussucht.

von Uhu U. (uhu)


Lesenswert?

Stryker_2k schrieb:
> Ps: Da ich mein Geld mit PHP verdiene sehe ich das ganze aber vielleicht
> auch nicht wie jemand anders. Es ist halt auch nur ein Werkzeug. Hammer
> <=> Schraube

Das ist ja auch richtig so. Aber du hast dich womöglich auch schon über 
einen vermurksten Seitenschneider, oder einen wackligen Hammer geärgert.

von Uhu U. (uhu)


Lesenswert?

Uhu Uhuhu schrieb:
> Aus dieser Perspektive ist der Compiler eine
> Suchmaschine, die aus dem (virtuellen) Fundus entsprechend dem Quelltext
> das Richtige raussucht.

Nachtrag: Das ist das alte Informatikspielchen "Zeit gegen Speicher".

von Johnny B. (johnnyb)


Lesenswert?

Fakt ist, PHP ist inzwischen so verbreitet, dass es sich noch viele 
Jahre halten wird.
Da gibts wirklich nur die Variante, damit zu leben oder eine andere 
Sprache zu nehmen.

Man muss auch mal die Vorteile sehen; es geht mit PHP schon sehr 
einfach, Daten aus einer Datenbank abzufragen und dann eine HTML-Ausgabe 
zu generieren.

von Peter II (Gast)


Lesenswert?

Johnny B. schrieb:
> Man muss auch mal die Vorteile sehen; es geht mit PHP schon sehr
> einfach, Daten aus einer Datenbank abzufragen und dann eine HTML-Ausgabe
> zu generieren.

mit welcher Websprache geht es denn nicht einfach?

Perl
Java
ASP
Pyton

Ich denke nicht, das es bei diesen sprachen aufwendiger ist.

von Mladen G. (Gast)


Lesenswert?

Peter II schrieb:
> Ich denke nicht, das es bei diesen sprachen aufwendiger ist.

Naja, wenn man PHP "sauber" schreibt und Frameworks nutzt, dann ist es 
nicht mehr viel einfacher bzw. wengier aufwaendig.. aber schnell 
"hinrotzten" geht offensichtlich sehr schnell mit PHP, kein Wunder dass 
es die verbreiteste Sprache fuer dyn. Webseiten ist.

Boese Zungen behaupten, PHP waere keine Programmiersprache, sondern nur 
eine Ansammlung von schlechten Praktiken aus anderen 
Programmiersprachen.
Andere wiederum sagen, PHP waere ein Aprilsscherz... naja, jedem das 
seine, meines wird PHP nie.

von A. B. (funky)


Lesenswert?

Es gibt auch so etwas wie Compiler für PHP: siehe 
http://en.wikipedia.org/wiki/HipHop_for_PHP zum Beispiel, aber das nur 
am Rande um es noch ein wenig verworrener zu machen ;)

Ich habe länger nichts mehr mit PHP gemacht und Beginne gerade wieder, 
aber was mir da auffält: die Sprache ist ziemlich im Wandel. Vieles was 
vor 3 Jahren ging ist mittlerweile abgekündigt, entfernt oder wird in 
einem der nächsten Releases entfernt

von Stefan R. (srand)


Lesenswert?

Uhu Uhuhu schrieb:
>> E_ALL ist (Je nach PHP-Version) nicht "Alles", auch wenn der Name das
>> suggeriert.
>
> PHP wäre nicht PHP, wenn es anders wäre...

So wie in C, nämlich -Wall beim gcc...

von Uhu U. (uhu)


Lesenswert?

Stefan Rand schrieb:
> So wie in C, nämlich -Wall beim gcc...

Das ist gcc, nicht C. Für C gibt es viele Compiler, PHP dagegen ist 
einmalig und es findet sich auch garantiert keiner, nichtmal ein 
Verrückter, der dieses Chaos nachimplementiert...

: Bearbeitet durch User
von Karl Käfer (Gast)


Lesenswert?

Hallo Mladen,

Mladen G. schrieb:
> Naja, wenn man PHP "sauber" schreibt und Frameworks nutzt, dann ist es
> nicht mehr viel einfacher bzw. wengier aufwaendig.. aber schnell
> "hinrotzten" geht offensichtlich sehr schnell mit PHP, kein Wunder dass
> es die verbreiteste Sprache fuer dyn. Webseiten ist.

Die Verbreitung erklärt sich nicht mit der Sprache, sondern mit dem 
Ausführungsmodell und der Verfügbarkeit. Um CGI-Programme zu schreiben, 
muß man sie in einen bestimmten Ordner (cgi-bin) packen und 
Ausführrechte setzen. Das ist für viele (auch angeblich professionelle) 
PHP-Benutzer schon viel zu kompliziert. PHP ist da einfacher: einfach 
eine Datei mit der entsprechenden Dateinamenerweiterung hochladen, schon 
läufts. Das ist kein Verdienst der Sprache PHP, sondern ein Verdienst 
der Tatsache, daß es zu Anfang als eine Art "erweitertes SSI" angesehen 
und deswegen von allen möglichen Webhostern standardmäßig installiert 
wurde.

Liebe Grüße,
Karl

von Michael K. (Gast)


Lesenswert?

PHP-Freund schrieb:
> Und was genau ist daran Schrott?
> Wenn ich einen Parser mit nicht eindeutigen Zeichenketten füttere muss
> ich mich auch nicht wundern wenn er das macht was er vorgesetzt bekommt.
> Dummerweise muss man da auch mal Zeichen oder Zeichenketten maskieren.

Vielleicht bin ich doof, aber was ist an "Der Scheiß, der jetzt kommt 
hat Dich nicht zu interessieren, das ist ein verfickter Kommentar!" 
uneindeutig?

42m

von Michael K. (Gast)


Lesenswert?

Peter II schrieb:
> du hast es immer noch nicht verstanden. Ein Interpreter macht
> keinen code.
>
> Er interpretiert den Code und abhängig davon führt er einen Befehl aus.
> Es wird dabei aber kein Code erzeugt. Der Code ist also schon immer
> vorhanden.

> Nachtrag:
>
> Beispiel µC Atmel. Der Code liegt dort im Flash (also erstmal Readonly)
> damit kann man also keinen Compiler auf so einen System schreiben der
> etwas ausführt. Einen Interpreter kann man aber schreiben.

Öh, also macht ein Compiler Code (Maschinencode), der dann von der 
Maschine abgearbeitet wird.
Und der Interpreter macht aus dem interpretierten Code ... auch 
irgendwie Maschinencode.

Ist demnach ein Interpreter nicht auch ein Compiler? Ich würde ja sagen, 
ein Interpreter ist ein Laufzeitcompiler.

42m

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Michael Krauth schrieb:
> Vielleicht bin ich doof, aber

und was ist so schwer daran zu kapieren, das PHP kein perfektes PHP 
formatiertes File sondern ein eher recht als schlecht zusammengehacktes 
HTML bekommt und dort alles was zwischen <?php ?> steht, ungeachtet von 
Zeilenumbrüchen etc verarbeiten muss/soll/darf/....

Es ist halt so. In nahezu jeder Programiersprache ist es nicht möglich 
innerhalb eines Block-Kommentars das Kommentarendezeichen zu verwenden, 
trotzdem stört sich da niemand sondern empfindet das als "normal".

Es ist doch müßig sich über solche Sachen zu echauffieren, die Lösung 
liegt doch auf der Hand:
a) Alternative Sprache nutzen die "besser" ist
b) sich sein eigenes PHP kompilieren was diesen "Bug" nicht hat

Karl Käfer schrieb:
> einfach eine Datei mit der entsprechenden Dateinamenerweiterung
> hochladen, schon läuft

Quatsch, auch das muss aktiv sein, ebenso wie man den Server 
konfigurieren muss ein oder alle Verzeichnisse für CGI zuzulassen. Der 
Unterschied ist nur, das CGI muss für den Server passend kompiliert 
werden, PHP kann ich "einfach" überall laufen lassen wo PHP zur 
Verfügung steht.

Karl Käfer schrieb:
> eine Art "erweitertes SSI" angesehen

ist es doch auch, PHP ist im prinzip nur interpretiertes HTML und ganz 
stark daran ausgerichtet, was halt nicht unbedingt zum Vorteil von PHP 
gereicht.

von Stefan R. (srand)


Lesenswert?

Uhu Uhuhu schrieb:
> PHP dagegen ist einmalig

Phalanger. HipHop.

von Uhu U. (uhu)


Lesenswert?

Läubi .. schrieb:
> Es ist halt so. In nahezu jeder Programiersprache ist es nicht möglich
> innerhalb eines Block-Kommentars das Kommentarendezeichen zu verwenden,
> trotzdem stört sich da niemand sondern empfindet das als "normal".

Nicht alles, was hinkt, ist ein Vergleich. ?> ist kein 
Kommentarendezeichen. Auch in PHP nicht.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Uhu Uhuhu schrieb:
> Nicht alles, was hinkt, ist ein Vergleich. ?> ist kein
> Kommentarendezeichen. Auch in PHP nicht.

Doch, im Prinzip schon. Es ist das Zeichen, welches den PHP von dem 
"HTML-Mode" in der "Interpreter-Mode" schaltet, ebenso wie ein Compiler 
vom "Parser-Mode" in den "Kommentar-Mode" schaltet.
Auch wenn ich langsam denke du willst das garnicht verstehen sondern 
einfach nur deinen Frust loswerden, PHP hat nicht als Input ein "plain 
php skript" sondern ein Textfile (idr. HTML) welches keine, eine oder 
mehrere <?php ?> (und in bestimmten Modi sogar <% %> und <? ?>) 
enthalten kann.
Außerhalb wird alles 1:1 durchgereicht und innerhalb halt als PHP 
interpretiert, um um dieses inlining zu unterstützen wird halt auch kein 
extra Umbruch eingefügt, und auch nicht Umbrüche benötigt.

Das das jetzt in ganz speziellen Sonderfällen zu Problemen führt ist 
halt so und lässt sich aber (s.o.) relativ einfach umgehen indem man 
diese Steuerzeichenfolge "aufbricht".

von Uhu U. (uhu)


Lesenswert?

Läubi .. schrieb:
> Doch, im Prinzip schon. Es ist das Zeichen, welches den PHP von dem
> "HTML-Mode" in der "Interpreter-Mode" schaltet, ebenso wie ein Compiler
> vom "Parser-Mode" in den "Kommentar-Mode" schaltet.

Daß es das tut, ist offensichtlich. Daß das Ganze ein kapitaler 
Design-Fehler ist, aber auch...

> Auch wenn ich langsam denke du willst das garnicht verstehen sondern
> einfach nur deinen Frust loswerden

Frust? Nein, ich amüsiere mich darüber nur noch. Dazu muß man sich 
wirklich nicht in den geistigen Morast derer begeben, die diesen Unsinn 
verbrochen haben. Es reicht, die gröbsten Schoten zu kennen, um relativ 
schnell auf die Idee zu kommen, daß bei dieser Sprache sowieso alles 
anders ist, als man denket.

Ohne Sinn und Verstand irgendwas zusammenzuwursteln ist keine Kunst und 
gutes Design¹ zeichnet sich dadurch aus, daß es den für den Anwender 
notwendigen Regelsatz klein und konsistent hält. Das Auswendiglernen von 
Konvoluten von Qualität und Umfang eines Großstadt-Telefonbuchs ist 
ziemlich ineffizient und lenkt vor allem von dem ab, was man eigentlich 
vor hat.

-----------------

¹) Yukihiro Matsumoto hat mal irgendwo sehr schön beschrieben, dass es 
ihm sehr wichtig ist, Ruby möglichst intuitiv zu gestalten. Dazu wird 
experimentiert und vor allem viel nachgedacht. Im Suff mal eben wieder 3 
Dutzend "Neuerungen" über über der werten Anwenderschaft auszukippen, 
geht einfach nicht...

: Bearbeitet durch User
von Mark B. (markbrandis)


Lesenswert?

Wie gesagt, PHP kann man verwenden, muss man aber nicht.

von Uhu U. (uhu)


Lesenswert?

Mark Brandis schrieb:
> Wie gesagt, PHP kann man verwenden, muss man aber nicht.

Du irrst. Wenn man für Dokuwiki Plugins schreiben will, hat man kaum 
eine andere Wahl...

von Mark B. (markbrandis)


Lesenswert?

Uhu Uhuhu schrieb:
> Wenn man für Dokuwiki Plugins schreiben will, hat man kaum
> eine andere Wahl...

Ja nun, auch zu Dokuwiki gibt es Alternativen.

Wenn es beruflich ist und vom Arbeitgeber so vorgegeben dass PHP benutzt 
werden muss, nun gut. Dann macht man es halt.

von Uhu U. (uhu)


Lesenswert?

Mark Brandis schrieb:
> Ja nun, auch zu Dokuwiki gibt es Alternativen.

Wenn man jeden Morgen aufs neue vor dem Nichts steht, mag das stimmen...

: Bearbeitet durch User
von gaast (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Läubi .. schrieb:
>> Doch, im Prinzip schon. Es ist das Zeichen, welches den PHP von dem
>> "HTML-Mode" in der "Interpreter-Mode" schaltet, ebenso wie ein Compiler
>> vom "Parser-Mode" in den "Kommentar-Mode" schaltet.
>
> Daß es das tut, ist offensichtlich. Daß das Ganze ein kapitaler
> Design-Fehler ist, aber auch...

In dem Moment, wo PHP die HTML-Datei nach den Tags <? und ?> durchsucht, 
wird noch kein PHP geparst, ganz einfach.

von Uhu U. (uhu)


Lesenswert?

gaast schrieb:
> In dem Moment, wo PHP die HTML-Datei nach den Tags <? und ?> durchsucht,
> wird noch kein PHP geparst, ganz einfach.

Du must nich versuchen, den Mist zu entschuldigen. Der ist 
unentschuldbar...

von gaast (Gast)


Lesenswert?

Hatte ich auch nicht. Von dir verlangt ja auch keiner, dass du dich 
dafür entschuldigst, dass du nicht begreifst dass der Parser in dem 
Moment, in dem er HTML durchsucht, noch gar kein PHP parst, weil das 
wiederum andere Seiteneffekte haben könnte.

von Uhu U. (uhu)


Lesenswert?

gaast schrieb:
> weil das wiederum andere Seiteneffekte haben könnte.

Tja, das hätte man sich als allererstes überlegen müssen, als PHP 
konzipiert wurde...

Da aber nichts konzipiert wurde, sondern einfauch drauflos gefrickelt, 
konnte halt nicht viel Gescheites dabei rauskommen. Daß der Frickler von 
Compilerbau nicht den Schimmer von einer Ahnung hatte, ist 
Voraussetzung.

von Karl H. (kbuchegg)


Lesenswert?

gaast schrieb:
> Hatte ich auch nicht. Von dir verlangt ja auch keiner, dass du dich
> dafür entschuldigst, dass du nicht begreifst dass der Parser in dem
> Moment, in dem er HTML durchsucht, noch gar kein PHP parst, weil das
> wiederum andere Seiteneffekte haben könnte.

Mag ja sein.
Allerdings ist die Bezeichnung 'Parser' etwas sehr hoch gegriffen, wenn 
er in
1
// $this->Lexer->addSpecialPattern('<smallcaps.*?>', $mode, 'plugin_smallcaps_syntax');
ein in einem String stehendes ?> als sein Ende Zeichen erkennt, das zu 
allem Überfluss auch noch auskommentiert ist.
'Parser' würde ich sowas nun wirklich nicht nennen wollen. Murx schon 
eher.

: Bearbeitet durch User
von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Nun fang du auch noch an! :-P
Der PHP "Parser" kommt doch zu dem Zeitpunkt noch überhaupt nicht ins 
Spiel! Es gibt da auch noch keine Kommentare... Das ganze wird 
vermutlich einfach als Stream gelesen und wenn das "php-anfang" Zeichen 
kommt dem Parser gereicht und beim "phph-ende" Zeichen beendet... 
Fertig.

Das ist nurn wirklich ein dermaßen seltener Spezialfall, das die meisten 
PHP Entwickler nie in ihrem Leben nur in die Verlegenheit kommen das 
wissen zu müssen.
Und selbst wenn werden diese dann wohl einfach den Workaround dafür 
nutzen anstatt da nun tagelang drüber zu lamentieren und sich 
aufzuspielen man selber hätte das ja alles viel besser gemacht.

Nachtrag: Um mal zu seigen was man alles "böses" mit PHP machen kann:
http://www.onlamp.com/pub/a/php/2001/05/03/php_foundations.html
besonders der letzte teil mit den gesplitteten if/for Bedingungen 
innerhalb eines HTML Dokumentes! Praktisch kann das alles sein, XML, 
Text, CSS, theoretisch würde vermutlich sogar eingeschränkt Binärdaten 
funktionieren.

Man muss sich einfach mal davon verabschieden, das PHP "nur" PHP Skript 
zu Gesicht bekommt.

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Läubi .. schrieb:
> Nun fang du auch noch an! :-P

:-)
Ich wusste von all dem nichts.
Aber als ich die weiter oben verlinkten 'Warum PHP Murks ist' Seiten 
angefangen habe zu lesen, da sind mir ehrlich die Grausbirnen 
aufgestiegen. Den letzten Rest gaben mir dann noch einige Zitat, die ich 
vom Erfinder von PHP gelesen habe. Der könnte sich nahtlos in so manche 
Arduino Fraktion hier einreihen (Tschuldigung, das soll kein neues 
Arduino-Bashing werden)

> Der PHP "Parser" kommt doch zu dem Zeitpunkt noch überhaupt nicht ins
> Spiel! Es gibt da auch noch keine Kommentare... Das ganze wird
> vermutlich einfach als Stream gelesen und wenn das "php-anfang" Zeichen
> kommt dem Parser gereicht und beim "phph-ende" Zeichen beendet...
> Fertig.

So wirds wahrscheinlich sein. Aber selbst der C-Präprozessor, der nun 
wirklich nicht so wahnsinnig viel von C versteht, ist immerhin soweit, 
dass er aus Strings die Nase raushält.
Auf jeden Fall hab ich jetzt gute Argumente, wenn ich in die nächste 
"PHP ist super, C ist Scheisse" Konfrontation gehe. :-)

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Karl Heinz schrieb:
> "PHP ist super, C ist Scheisse"

Was soll das den sein? Jedes Werkzeug für seinen Zweck. PHP und C haben 
nun doch ganz andere Einsatzgebiete...

von Uhu U. (uhu)


Lesenswert?

Läubi .. schrieb:
> Jedes Werkzeug für seinen Zweck.

Ja, PHP zur Produktion von Schwachstellen im Internet, damit Mafia und 
ihr legal-schattiger Arm immer genug Gelegenheiten finden, "ihren Job zu 
machen"...

von A. B. (funky)


Lesenswert?

Naja, also "dos and donts" gibt es in jeder Programmiersprache.

Auch in C kann ich z.B. mit goto rumfuhrwerken, wobei man auch in jedem 
Programmierlehrbuch liest, das man dies tunlichst lassen soll.
Und hier mit Beispielen von 2001 anzukommen ist da auch nicht wirklich 
fair.
Heute würde sowas niemand mehr machen, da man versucht Code und HTML zu 
trennen indem man Template Systeme verwendet.

Jedem Neuling hier wird in den Arsch geblasen er solle doch gefälligst 
ein C Buch lesen. Das gleiche könnte man für PHP ja auch empfehlen. 
Sicher gibts bei PHP viel Murks, was ich auch überhaupt nicht schönreden 
will, aber das sich hier nun jeder als PHP Crack empfindet nur weil er 
zwei Links zu PHP überflogen hat, finde ich schon etwas sehr 
überheblich.

Der grosse Vorteil der geringen Einstiegshürde von PHP ist gleichzeitig 
auch der grösste Nachteil, da jeder 08/15 Mist zusammenhacken und online 
stellen kann. Mit C Pufferüberläufe, Crashs und sonstigen Scheiss zu 
produzieren ist auch überhaupt kein Problem, nur bekommt davon der Rest 
der Welt eben nix mit.

von Uhu U. (uhu)


Lesenswert?

So, jetzt kommt die Stunde der PHP-Cracks:

Warum schmeißt PHP den Löffel, wenn es diese Zeile siht:
1
$this->Lexer->addSpecialPattern('<smallcaps.*?>', $mode, 'plugin_smallcaps_syntax');

aber nicht, wenn es diese sieht:
1
$this->Lexer->addEntryPattern('<variables.*?>(?=.*?</variables>)', $mode, 'plugin_variables_syntax');

von Kaj (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
> Warum schmeißt PHP den Löffel
Sagst du uns auch noch welche PHP-Version?

von Uhu U. (uhu)


Lesenswert?

Kaj schrieb:
> Sagst du uns auch noch welche PHP-Version?

5.3

von A. B. (funky)


Lesenswert?

http://xref.dokuwiki.org/reference/dokuwiki/nav.html?_functions/addspecialpattern.html

"Perl style regex. Must be UTF-8 encoded. ..."
Dann kodiere deine SearchPatterns doch mal entsprechend. Steht alles in 
der Doku ;)

Und was bedeutet "gibt den Löffel ab"? Fehlermeldung? Errorlogs?



Und gewöhn dich einfach daran, das "?>" ne spezielle Bedeutung hat und 
verschwende nicht deine Zeit mit irgendwelchen Patterns die nun den 
"Grenzbereich" ausloten.
Genausogut kannst du "?" mit "{0,1}" ersetzen und hast das problem nicht 
mehr. Aber das wäre wahrscheinlich zu einfach und zu langweilig und man 
könnte sich nicht über das beschissene PHP aufregen

siehe auch:
http://stackoverflow.com/questions/15219815/convert-php-closing-tag-into-comment

von Uhu U. (uhu)


Lesenswert?

A. B. schrieb:
> "Perl style regex. Must be UTF-8 encoded. ..."

Sind sie. Zudem ist die Codierung von '<smallcaps.*?>' in ansi und UTF-8 
gleich.

> Und was bedeutet "gibt den Löffel ab"?

PHP beendet einfach die Bearbeitung der Seite, wenn es ?> sieht - egal, 
ob in einem String, oder gar einem auskommentiertzen String, oder 
sonstwo. Aber offenbar auch nicht immer.

Die stackoverflow-Seite ist lustig - zu jedem Hack den passenden 
Gegenhack und die Welt ist wieder in Ordnung...

von A. B. (funky)


Lesenswert?

Was passiert wenn du
1
$this->Lexer->addSpecialPattern("<smallcaps.*?>", $mode, "plugin_smallcaps_syntax");
verwendest? Ändert das etwas?

"PHP only honours the ?> tag outside a string context. Putting it in a 
string just works as expected. In other words, you cannot break out of 
PHP mode from inside a string literal."

PHP unterscheidet ja zwischen single und double quoted und nur double 
quoted sind "richtige" Strings.

von Uhu U. (uhu)


Lesenswert?

A. B. schrieb:
> Ändert das etwas?

Nichts - alles schon ausprobiert.

> PHP unterscheidet ja zwischen single und double quoted und nur double
> quoted sind "richtige" Strings.

Strings in "" werden interpoliert, Strings in '' nicht - wie in der 
Shell, und bei ruby. Von "richtigen" und "nicht richtigen" Strings würde 
ich da nicht sprechen. Beide haben ihre Berechtigung und die '' sind 
sicherlich etwas effizienter zu behandeln, weil sie nicht durchsucht 
werden müssen.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Uhu Uhuhu schrieb:
> Ja, PHP zur Produktion von Schwachstellen im Internet, damit Mafia und
> ihr legal-schattiger Arm immer genug Gelegenheiten finden, "ihren Job zu
> machen"...

Uhu das ist doch Quatsch... Ja es gibt unsichere Skripte. Genauso wie es 
Million und abermillionen unsicher anderer Software gibt, da kann aber 
die Verwendete Sprache nix für.

Und ja es gibt/gab einige besonders Problematische Funktionen und 
Configparameter, wie es z.B. auch im C Standard problematische 
Funktionen gibt die heute nicht mehr empfohlen werden zu nutzen.

Das es häufiger Exploits für bekannte PHP Skripte gibt, liegt einfach an 
der Verbreitung und dem Erfolg.

Und wie gesagt, niemand hält dich davon ab dir ein "besseres" PHP zu 
kompilieren, du müsstest dann halt nur die nicht mehr gewährleistete 
Rückwärtzkompatibilität ggf. in den von dir verwendeten Skripten halt 
kurz ausgleichen. Für einen derart versierten Entwickler der sich anmaßt 
die Arbeit und de Erfolg anderer derart herabzuwürdigen sollte das ja 
kein Problem sein.

von Uhu U. (uhu)


Lesenswert?

Läubi .. schrieb:
> Für einen derart versierten Entwickler der sich anmaßt die Arbeit und de
> Erfolg anderer derart herabzuwürdigen sollte das ja kein Problem sein.

Au Mann... Es geht mir nicht darum, irgendwelche "Erfolge" 
herabzuwürdigen. Es gibt längst Besseres, um PHP zu ersetzen, das schon 
bei seiner "Entwicklung" Lichtjahre hinter dem Stand der Technik 
herwatschelte, ohne ihn auch nur zur Kenntnis genommen zu haben.

Der Teufel scheißt bekanntlich immer auf den größten Haufen und Naivität 
und Trägheit läßt es ihm die Leute nachmachen.

Aber wer sagt, daß der Kaiser nackt da steht, ist natürlich böse, wie 
immer...

von A. B. (funky)


Lesenswert?

Phyton gabs z.B. schon früher als PHP. Ruby ist zu einem ähnlichen 
Zeitpunkt wie PHP entwickelt wurden.
Wieso haben die sich dann nicht durchgesetzt wenn sie so viel besser 
sind?
Das sind jetzt mal die einzigen beiden Alternativen die mir da fürs Web 
einfallen auf die schnelle. Java ist mit deutlich mehr Aufwand 
verbunden.

Oder was kommt dir als Alternative in den Sinn?

von Fred (Gast)


Lesenswert?

Weil Ruby erst Jahre später außerhalb Japans bekanntgeworden ist.

Ruby ist ja bis heute noch extrem japanisch durchsetzt. Ja, die 
Haupt-Entwickler haben mittlerweile zugesagt, sich um englische 
Kommunikation zu bemühen.

von Uhu U. (uhu)


Lesenswert?

Fred schrieb:
> Ruby ist ja bis heute noch extrem japanisch durchsetzt. Ja, die
> Haupt-Entwickler haben mittlerweile zugesagt, sich um englische
> Kommunikation zu bemühen.

Ich habe vor ein paar Jahren ein Projekt mit Rails gemacht. Über 
Probleme mit Japanischen Texten kann ich mich nicht beklagen; die ganze 
Dokumentation liegt in Englisch vor.

A. B. schrieb:
> Oder was kommt dir als Alternative in den Sinn?

Python. Rails hat einen zu komplizierten Ansatz mit seinen vielen 
Automatismen, kann aber auf der anderen Seite die Produktivität bei 
anspruchsvolleren Projekten gehörig steigern.

: Bearbeitet durch User
von A. B. (funky)


Lesenswert?

Mich schrecken bei Python die fehlenden Klammern ab. Ich finde das 
hochgradig beschissen, darüber mein Programm strukturieren zu müssen.
Wie funktioniert das so im Programmieralltag? Oder ist das im Endeffekt 
gar kein so grosses Ding, wie es mir erscheint?

von Uhu U. (uhu)


Lesenswert?

Ich mag es auch nicht sonderlich, aber es man kann sich durchaus daran 
gewöhnen.

Vorteil von Python ist seine Mächtigkeit und Effizienz.

von Mark B. (markbrandis)


Lesenswert?

A. B. schrieb:
> Mich schrecken bei Python die fehlenden Klammern ab. Ich finde das
> hochgradig beschissen, darüber mein Programm strukturieren zu müssen.

Du meinst über die Einrückung zu Beginn einer Programmzeile? Ja, das 
nervt echt kolossal an Python. So toll die Sprache ansonsten auch sein 
mag, aber das halte ich IMHO für einen Designfehler.

von Fred (Gast)


Lesenswert?

Uhu Uhuhu schrieb:
>> Ruby ist ja bis heute noch extrem japanisch durchsetzt. Ja, die
>> Haupt-Entwickler haben mittlerweile zugesagt, sich um englische
>> Kommunikation zu bemühen.
>
> Ich habe vor ein paar Jahren ein Projekt mit Rails gemacht. Über
> Probleme mit Japanischen Texten kann ich mich nicht beklagen; die ganze
> Dokumentation liegt in Englisch vor.

Davon redet niemand.

Die Ruby-Entwicklung fand ausschließlich auf japanischsprachigen MLs 
statt.

von Uhu U. (uhu)


Lesenswert?

Fred schrieb:
> Die Ruby-Entwicklung fand ausschließlich auf japanischsprachigen MLs
> statt.

Und was ist daran jetzt schlecht?

von Fred (Gast)


Lesenswert?

Tut mir leid, aber mit Ihnen möchte ich mich nicht weiter unterhalten.

von Uhu U. (uhu)


Lesenswert?

Ach, so einer bist du...

von A. B. (funky)


Lesenswert?

xD

von Kaj (Gast)


Lesenswert?

Mark Brandis schrieb:
> A. B. schrieb:
>> Mich schrecken bei Python die fehlenden Klammern ab. Ich finde das
>> hochgradig beschissen, darüber mein Programm strukturieren zu müssen.
>
> Du meinst über die Einrückung zu Beginn einer Programmzeile? Ja, das
> nervt echt kolossal an Python. So toll die Sprache ansonsten auch sein
> mag, aber das halte ich IMHO für einen Designfehler.
Das ist doch blödsinn. Ich weiß ja nicht wie ihr so Programmiert, aber 
ich rücke meinen Code eh immer ein (C/C++, PHP, .NET oder was auch 
immer). Also, wo sollte da jetzt das Problem sein? Ob der Code nun 
zwischen klammern steht und dann eingerückt wird, oder ohne Klammern 
eingerückt wird...
Wer jetzt mit " Ja aber wenn die einrückung nicht stimmt..." kommt...
Ja, das ist genau das selbe Problem, als wenn du die Klammer falsch 
setzt!

Das Strukturieren des Codes über die Einrückungen ist meiner Meinung 
nach das beste überhaupt. Da lernen die Leute ihren Code mal vernünftig 
einzurücken, und nicht solche "1000 Zeilen Code und das alles ohne 
Einrückung"-Dateien zu fabrizieren.

Andere Sprache -> Andere Syntax ganz einfach.

Grüße

von Mark B. (markbrandis)


Lesenswert?

Kaj schrieb:
> Das ist doch blödsinn. Ich weiß ja nicht wie ihr so Programmiert, aber
> ich rücke meinen Code eh immer ein (C/C++, PHP, .NET oder was auch
> immer). Also, wo sollte da jetzt das Problem sein? Ob der Code nun
> zwischen klammern steht und dann eingerückt wird, oder ohne Klammern
> eingerückt wird...

Natürlich rückt man seinen Code ein. Aber der Grund dafür ist die 
Lesbarkeit für den Menschen, und eben nicht dass man damit etwas über 
den Kontrollfluss aussagen will. Da hat der Guido van Rossum etwas 
missverstanden. ;-)

Außerdem gibt es für C, C++, Java, JavaScript, C# und viele andere 
Sprachen auch Beautifier-Tools, die das Einrücken automatisch richtig 
machen. Bitte zeig mir so ein Tool für Python. :-)

von Mark B. (markbrandis)


Lesenswert?

Wie ich gerade sehe, hat man dies von Python 2 auf Python 3 verbessert 
(man kann nicht mehr Spaces und Tabs mischen), was nichts anderes 
bedeutet als dass es in Python 2 schrottig war. ;-)

http://regebro.wordpress.com/2008/05/30/python-indendation-rocks-and-sucks-a-little-bit/

von Uhu U. (uhu)


Lesenswert?

Mark Brandis schrieb:
> Bitte zeig mir so ein Tool für Python. :-)

Braucht man ja auch nicht ;-)

von Uhu U. (uhu)


Lesenswert?

A. B. schrieb:
> Auch in C kann ich z.B. mit goto rumfuhrwerken, wobei man auch in jedem
> Programmierlehrbuch liest, das man dies tunlichst lassen soll.

Das ist zu kurz gedacht. Ein "guter" Anwendungsfall ist das Abbrechen 
eines verschachtelten Schleifenkonstruktes mit einem Sprung hinter die 
äußere Schleife.

Man könnte das natürlich auch dadurch dadurch lösen, daß man die 
Schleifen in eine Funktion verpackt und mit return verläßt, wenn man 
ein break ganz raus haben will. Ob das aber immer der Übersichtlichkeit 
dient, möchte ich bezweifeln.

Eine nette Lösung für das Problem, mit der sich kein Schindluder wie mit 
goto treiben läßt, hatte Burroughs in seiner Sprache SDL, in der v.a 
Betriebssysteme geschrieben wurden:
1
do outerloop forever
2
   do forever
3
      do forever
4
         ...
5
         undo outerloop
6
         ...
7
      end
8
      ...
9
    end
10
end

outerloop ist der (frei wählbare) Name der Schleife, die durch undo 
beendet wird und forever heißt, daß es sich um eine Schleife ohne 
Endekriterium im Schleifenkonstrukt handelt - entspricht while(true) in 
C.

goto gab es nicht und do ... end war ein einfacher Block, wie { } in C.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.