• MeinPHP: Wer baut das fieseste Skript?

    von am 10. August 2009

    Am letzten Freitag ging was schief mit unseren Blogartikel. Wir hatten ausversehen zwei an einem Tag veröffentlicht und eigentlich machen wir das ja nicht. Aus diesem Grund habe ich diesen Artikel hier auch wieder rausgenommen und auf heute verschoben. Wundert euch also nicht, wenn er euch bekannt vorkommt.

    Wir hatten im Dezember ja schon mal eine Folge MeinPHP auf die Leser losgelassen. Bei MeinPHP geht es eigentlich darum eine Aufgabe, die wir stellen möglichst elegant zu lösen und in seinem Forum, Blog oder woanders zu Posten. Ich habe lange überlegt, was man als nächste Herausforderung machen könnte. Und heute kam mir endlich die Idee.

    PHP ist meine bevorzugte Sprache, wir ihr ja vielleicht wisst, nichtsdestotrotz kann man echt fiese Sachen damit bauen und das schlimmste daran ist, man findet diese fiesen Sachen immer wieder in produktiv eingesetzten Tools. Und warum? Weil man es kann! (Danke Olaf für die Aussage). Aus diesem Grund möchte ich heute einen kleinen Contest ausschreiben. Wer kann das fieseste Skript basteln?

    Meine Theorie ist ja, dass in einem wirklich schrecklichen Programm mindesten ein goto, ein catchable fatal error, ein class_alias, ein $$ und vielleicht ein wenig Reflection dabei sein muss. PHP 5.3 hat echt ein paar schöne “Monster” mitgebracht, die in den falschen Händen schon ganz schön Schaden anrichten können. Ich selbst werde mich auch daran probieren, habe da auch schon ein paar Ideen.

    Anders als beim letzen Mal werden wir keine konkrete Aufgabe aussuchen, seid also kreativ und versucht euch selbst zu schocken. Ich denke mal, dass so zwei Wochen reichen sollten, um was wirklich gemeines zu zaubern. Solange habt ihr also Zeit euch was auszudenken. Wem was eingefallen ist, der kann es mir gerne per E-Mail schicken oder am besten einfach bei sich im Blog zu posten. Nach dem Ablauf der Frist werden wir dann das beste schrecklichste Skript kühren und den Titel “PHP Teufel” verleihen.

    Oft hilft es übrigens auch sich den eigenen alten Code anzuschauen. Zumindest bei mir. Viel Spaß also mit der Aufgabe, ich werde ihn haben.

    Nils Langner

    Auch wenn Ihr es mir nicht glauben werdet, aber ich habe nichts gegen PHP. Ich rege mich einfach nur gerne auf. Ok so schlimm ist es auch nicht. Eigentlich wollte ich schon immer einen Blog haben und da ...

    Zum Profil von Nils Langner

    22 Kommentare »


    • Bonzei
      am 7. August 2009 um 09:49 Uhr

      Wenn ich mein alten Code anschaue bekomme ich entweder eine Gänsehaut oder einen Brechreiz.

      Des öfteren schmeis ich mich auch in die Ecke und krümme mich vor Schmerzen, die Lachmuskeln tun nach ner Stunde immer so weh.

      Und so ab und an fange ich an wild rumzuzucken.

      Ihr seht es ist nicht ganz ungefährlich. Drum , bevor Ihr euren alten Code anschaut, 5 wichtige und weniger wichtige Regeln:

      1) Immer in Begleitung eines Erwachsenen, den Code niemals alleine anschauen

      2) Stellt sich der Zappelfillip ein ist das ein Anzeichen für eine Überhitzung der Synapsen beim Versuch den Code zu verstehen. Abhilfe: Kopf in die Kloschüssel und kräftig spülen

      3) Fängt der Code an nach einer zweiten Chance zu betteln: Sofort delete taste drücken

      4) Beim einschleichen des Gedankens, der Code sei doch gar nicht sooo schlecht, ein kleines Refactoring und der is wieder frisch…. Renn so schnell du kannst

      5) Bist du in der Arbeit überlege dir schon mal ein paar Ausreden für den Fall das der Chef vorbeikommt und dich an die letzte Gehaltserhöhung erinnert

      Und nun steht dem Titel “PHP Teufel” nichts mehr im Weg.


    • maren
      am 10. August 2009 um 09:42 Uhr

      Ich glaub, das schlimmste was ich bisher gesehen habe war xml gepaart mit eval(). Mann sollte ja im xml php verwenden können. *schauder*


    • Nils Langner
      am 10. August 2009 um 09:44 Uhr

      @maren Bei dem yml Parser von Symfony geht das ja ohne Probleme out-of-the-box … Finde yml aber eh schrecklich.


    • Nils Langner
      am 10. August 2009 um 09:45 Uhr

      @Bonzei: Danke für die Anleitung. Gleich heute bei der Arbeit mal befolgen.


    • Dominik Bonsch
      am 10. August 2009 um 13:04 Uhr

      Geht fieser als eval( $_POST['evil'] ); ? :-)
      Klassiker wäre noch mysql_query( $_GET['sql'] );


    • Nils Langner
      am 10. August 2009 um 13:13 Uhr

      @Dominik: Oja ich glaube da geht es noch viel fieser :) Obwohl eval() schon auch auf der Liste der gefährlichen Ausdrücke steht. Das Zweite kann man ja in fast jeder Sprache verbocken, oder?


    • maren
      am 10. August 2009 um 13:43 Uhr

      ich hätte da noch include($_GET['file']); – natürlich nur als Idee und Gott sei dank noch nicht gelesen.


    • Nils Langner
      am 10. August 2009 um 13:55 Uhr

      Ich finde das Bsp. von Manuel Pichler auch wunderbar: http://manuel-pichler.de/archives/60-Why-I-love-PHP.html


    • Marcel
      am 10. August 2009 um 15:11 Uhr

      Hier mal eins (nicht getestet, sollte aber leider funktionieren)

      http://dev.trancefish.de/test.html


    • LudwigR
      am 10. August 2009 um 15:18 Uhr

      Nils, meinst du fies im sinne von mach alles falsch was geht und es funktioniert trotzdem ?

      Oder fies im sinne von “You are not expected to understand the following code”.

      Was letzteres angeht hat manual mit seiner variablen variablen variablen variable sicher den vogel abgeschossen :-)

      Ludwig


    • Nils Langner
      am 10. August 2009 um 15:32 Uhr

      @Ludwig: Also den gefährlichsten Code wollte ich eigentlich nicht. Hatte mir schon so etwas wie aus der Feder von Manuel gewünscht.


    • antpaw
      am 10. August 2009 um 19:16 Uhr

      das ist doch gar nicht mal schlecht oder?
      http://nopaste.php-quake.net/250155
      hab das mal bei irgendeinem blog mit dem selben thema gelesen und gespeichert :)

      define(TRUE, false) ist auch lustig, weiß aber nicht ob das in php geht.


    • Ulf
      am 11. August 2009 um 05:06 Uhr

      Wer ein bisschen Zeit hat, kann sich mal diesen Link durchlesen: http://mindprod.com/jgloss/unmain.html. Zwar nicht unbedingt PHP, aber trotzdem sehr, sehr witzig. :)


    • Cem Derin
      am 11. August 2009 um 11:23 Uhr

      Was ist an Reflection schlimm?


    • David Thalmann
      am 11. August 2009 um 14:11 Uhr

      @Cem Derin: Reflections an sich sind cool, vor allem im Bereich Unit-Testing sehr gut zu gebrauchen! Aber man kann auch ne ganze Klassenstruktur über den haufen werfen:

      class C {
      private $__privateVar = 'v';
      private function __privateMethod() { return 'm'; }
      }
      $c = new C();

      // echo $c->__privateVar; oder
      // echo $c->__privateMethod();
      // geht natürlich aus guten gründen nicht

      $p = new ReflectionProperty('C', '__privateVar');
      $p->setAccessible();
      echo $c->__privateVar;

      Das ganze ist ja nicht sooo schlim auf den ersten Blick. Wenn du aber bedenkst, dass man so in seinen alten Klassen (die vielleicht etwas “schlechter” gecodet sind) rumpfuschen und rummurksen kann, wird das ganze ziemlich hässlich =)


    • David Thalmann
      am 11. August 2009 um 14:12 Uhr

      Ups sorry, das ganze “__privateMethod” Zeugs kommt raus, schlechtes refactoring von Beispielcode ;)


    • Nils Langner
      am 11. August 2009 um 14:32 Uhr

      @Cem: Ich wüsste kein Anwendungsfall, in dem Reflektion Sinn macht, außer man will Annotations implementieren oder CodeAnalyse betreiben. Aber vll. hast du ja ein Bsp.


    • Cem Derin
      am 12. August 2009 um 11:20 Uhr

      Das man mit Reflection auch Mist bauen kann rührt in erster Linie daher, dass man mit jedem Sprachkonstrukt Mist bauen kann ;)

      Es gibt nicht erst seit gestern den Ansatz reflexiver Programmierung was ich insbesondere in Bezug auf Metaprogrammierung (im Sinne von sich selbst erstellender Programme) höchst interessant finde.

      Aber selbst wenn es nur für Unit-Testing verwendet wird und auch nur diesen Zweck hätte, warum wird es in Zusammenhang mit “schlechtem Code” erwähnt? Das war meine ursprüngliche Frage …


    • Alter Code und das Grausen at PHP Gangsta
      am 12. August 2009 um 19:54 Uhr

      [...] Nils in seinem Blog dazu aufgerufen hat, “fiesen Code” zu publizieren, will ich mich daran beteiligen. Die Frage ist, wie “fies” zu definieren ist. Die [...]


    • ITWS
      am 14. August 2009 um 12:25 Uhr

      [PHP] Fiese PHP Skripte: Obscurity Code…

      Nils hat zum Verfassen von fiesen PHP Skripten aufgerufen. Dem bin ich natürlich gefolgt.

      Zuerst die Frage: Was meint er denn überhaupt? Da ich mir nicht ganz im Klaren war, was Nils mit "fies" meint, habe ich mir überlegt ….


    • Marek Luthardt
      am 11. September 2009 um 09:14 Uhr

      Nur ein kleines Fragment aus Code, den hier jemand 1:1 aus COBOL portiert hat:

      try {
      # diverse Datenbankzugriffe via Propel-basierter Klassen
      # ca. 30 Zeilen
      } catch (MyOwnException $exception) {}

      Das sieht mir nach einem klaren Exceptions-als-GOTO-Ersatz aus …


    • BuzzEins
      am 15. Oktober 2009 um 13:39 Uhr

      class A {}
      class B extends A {
      public function __construct() {
      $args = func_get_args();
      call_user_func_array(array($this, “parent::__construct”), $args);
      }
      }
      class C extends B {}
      $instance = new C();

    RSS Feed für Kommentare zu diesem Artikel. TrackBack URL

    Hinterlasse einen Kommentar

    Werbung
    PHP Magazin
    Ausgabe 02/2010

    Dieses Mal mit Artikeln zu den Themen OpenSocial und Apache Shindig, Graphentheorie, Smarty3

    t3n
    Ausgabe 19

    Social Media (R)evolution. Weitere Themen sind noSQL, Crowdsourcing ...

    PHP Journal
    Ausgabe 2/2010

    PHP & Windows optimal nutzen, die besten PHP-CMS im Überblick, Google-API mit Zend Framework nutzen.

    Wir wurden schon öfters gefragt, ob man uns nicht irgendwie unterstützen kann. Die Antwort war immer einfach: Klar! Am einfachsten ist es eure nächsten Einkäufe bei Amazon über unsere Link abzuwickeln. Damit würdet ihr uns schon sehr helfen. Über Co-Autoren freuen wir uns aber noch mehr.