helga: python einführung für php umsteiger

Hallo,

suche für einen PHP-Umsteiger eine gute Einführung in Python, jedoch sollten auch die Grundzüge von SSI und wie ich Python im Web verwende erlärt werden, da ich ja nur PHP gewöhnt bin, das man einfach in jeder Datei mit <?php ?> parsen/"ausführen" lassen kann.

grützi

  1. Hellihello helga,

    suche für einen PHP-Umsteiger eine gute Einführung in Python, jedoch sollten auch die Grundzüge von SSI und wie ich Python im Web verwende erlärt werden, da ich ja nur PHP gewöhnt bin, das man einfach in jeder Datei mit <?php ?> parsen/"ausführen" lassen kann.

    Geht mit python scheints auch:

      
    #!/usr/bin/env python  
    print "Content-type: text/html"  
    print ""  
    print "<html>Hello world!</html>  
    
    

    getestet in: http://html-ag.wvs-berlin.de/cgi-bin/hello_world.py (Rechte auf 755 - bei 777 gehts komischerweise nicht)

    Dank und Gruß,

    frankx

    1. Hallo,

      ja aber ich meinte die Verwendung innerhalb einer html, meinetwegen auch als php gespeichert.
      Also im HTLM-Grundgerüst irgendwoe <?php und ich kann php-code schrieben ?>

      Gruß

    2. echo $begrüßung;

      #!/usr/bin/env python
      print "Content-type: text/html"
      print ""

      Um nichts auszugeben reicht ein print ohne was dahinter. Es gibt dann nur den üblichen Zeilenumbruch, der jedem (ohne Komma endenden) print-Aufruf auf die Standardausgabe folgt.

      print "<html>Hello world!</html>

      Na, aber! *aufreg* :-) Was ist denn das für ein HTML-Dokument? Wenn es nur ein Test sein soll, nimm doch text/plain.

      getestet in: http://html-ag.wvs-berlin.de/cgi-bin/hello_world.py (Rechte auf 755 - bei 777 gehts komischerweise nicht)

      "Geht nicht" geht nicht. Wie sieht das "geht nicht" denn konkret aus?

      echo "$verabschiedung $name";

      1. Hellihello dedlfix,

        echo $begrüßung;

        #!/usr/bin/env python
        print "Content-type: text/html"
        print ""

        Um nichts auszugeben reicht ein print ohne was dahinter. Es gibt dann nur den üblichen Zeilenumbruch, der jedem (ohne Komma endenden) print-Aufruf auf die Standardausgabe folgt.

        print "<html>Hello world!</html>

        Na, aber! *aufreg* :-) Was ist denn das für ein HTML-Dokument? Wenn es nur ein Test sein soll, nimm doch text/plain.

        Ja, pfui, war so hingekliert (abkopiert aus einem rasch gefundenen Beipsiel).

        getestet in: http://html-ag.wvs-berlin.de/cgi-bin/hello_world.py (Rechte auf 755 - bei 777 gehts komischerweise nicht)

        "Geht nicht" geht nicht. Wie sieht das "geht nicht" denn konkret aus?

        "Serverfehler!

        Die Anfrage kann nicht beantwortet werden, da im Server ein interner Fehler aufgetreten ist.

        Fehlermeldung:
        Premature end of script headers: hello_world_777_test.py "...

        zu bewundern unter:

        http://html-ag.wvs-berlin.de/cgi-bin/hello_world_777_test.py

        Ich dachte, je mehr Rechte, desto besser. Ich habe _nur_ die Rechte von 755 auf 777 hochgesetzt (und das script umbenannt).

        Das passiert auch bei Shellskript, oder Perlsript oder was auch immer. Kann es an den Sicherheitseinstellungen des geplesktten virtuellen Servers liegen?

        Dank und Gruß,

        frankx

        1. echo $begrüßung;

          Premature end of script headers: hello_world_777_test.py "...

          Diese Meldung sagt aus, dass das CGI-Script keine ordentlichen HTTP-Header mitgeliefert hat.
          http://httpd.apache.org/docs/1.3/misc/FAQ-F.html#premature-script-headers

          Ursache wird sein, dass es nicht ausgeführt werden konnten, denn so einfach wie es gehalten war, konnte es sich ja nicht in seinem eigenen Code verlaufen.

          Warum es allerdings nicht ausgeführt wurde, kann ich nur mutmaßen.

          Ich dachte, je mehr Rechte, desto besser. Ich habe _nur_ die Rechte von 755 auf 777 hochgesetzt (und das script umbenannt).

          Du hast ja nur die Schreibrechte entfernt. Sehr komische Sicherheitsmaßnahme, wie mir scheint. Alle Welt darf das Script lesen und ausführen, nur reinschreiben darf nur der Owner. Damit wird wenigstens das Einschleusen von Fremdcode durch unter anderen Benutzern laufenden Prozesse unterbunden. Alle Welt darf aber immerhin den Code ansehen die möglicherweise vorhandenen Sicherheitslücken analysieren und beim Ausführen ausnutzen.

          Das passiert auch bei Shellskript, oder Perlsript oder was auch immer. Kann es an den Sicherheitseinstellungen des geplesktten virtuellen Servers liegen?

          Gut möglich.

          echo "$verabschiedung $name";

          1. Hellihello dedlfix,

            Ich dachte, je mehr Rechte, desto besser. Ich habe _nur_ die Rechte von 755 auf 777 hochgesetzt (und das script umbenannt).

            Du hast ja nur die Schreibrechte entfernt. Sehr komische Sicherheitsmaßnahme, wie mir scheint. Alle Welt darf das Script lesen und ausführen, nur reinschreiben darf nur der Owner. Damit wird wenigstens das Einschleusen von Fremdcode durch unter anderen Benutzern laufenden Prozesse unterbunden. Alle Welt darf aber immerhin den Code ansehen die möglicherweise vorhandenen Sicherheitslücken analysieren und beim Ausführen ausnutzen.

            Das passiert auch bei Shellskript, oder Perlsript oder was auch immer. Kann es an den Sicherheitseinstellungen des geplesktten virtuellen Servers liegen?

            Gut möglich.

            scheinbar was mit suexec:
            "Du hast offenbar einen Provider mit einem vernünftigen Admin.

            suexec (und phpsuexec) verbieten die Ausführung von Skripten, die in einem
            Verzeichnis liegen, welches für die jeden schreibbar sind."

            http://forum.de.selfhtml.org/archiv/2005/6/t109436/

            Dank und Gruß,

            frankx

  2. echo $begrüßung;

    suche für einen PHP-Umsteiger eine gute Einführung in Python,

    Eine grundlegende Einführung kommt prinzipiell ohne PHP-Kenntnisse aus. Es gibt da das Python-Tutorial und Dive Into Python. Eine vergleichende Übersicht zwischen PHP und Python gibt es beispielsweise in diesem PDF-Dokument: http://www.experimentierkasten.de/python_php.pdf

    jedoch sollten auch die Grundzüge von SSI und wie ich Python im Web verwende erlärt werden,

    Python ist im Gegensatz zu PHP nicht im Hinblick auf das Web entwickelt worden, ...

    da ich ja nur PHP gewöhnt bin, das man einfach in jeder Datei mit <?php ?> parsen/"ausführen" lassen kann.

    ... weswegen du so eine einfache Anbindung schnell vergessen kannst. Statt dessen kannst du unter anderem aus der folgenden unvollständigen Liste was auswählen:

    • mod_python. Dazu braucht es Zugriff auf den Webserver, denn beim (Massen-)Webhoster wird dieses Modul kaum zu finden sein.
    • Reines CGI. Python holt sich die vom Server übergebenen Daten über das CGI-Interface ab und liefert ein Dokument zurück, inklusive der HTTP-Header. Das ist nicht besonders effektiv und schnell, aber möglicherweise die einzige Möglichkeit, beim einem Hoster Python zu verwenden.
    • Eines der Python-Web-Framework verwenden, beispielsweise django. Das sollte man erst angehen, wenn man die Grundlagen der Sprache intus hat.
    • Pythons Linksammlung zur Web-Programmierung durchsehen.

    Wenn du dir vorgenommen hast, das nächste schon auf der Matte stehende Projekt mit Python zu realisieren, und dabei gleich Python zu lernen, so rate ich davon ab. Zu viel Neues kommt da auf einmal auf einen zu. Zum einen die Sprache selbst inklusive vieler anderer Paradigmen, zum anderen die Komplexität des vielleicht von dir eingesetzten Frameworks. Lieber in kleinen Schritten voranschreiten. Erst das Tutorial durcharbeiten, dann versuchen, per CGI Webseiten auszuliefern - das nur mal so zum Üben, denn das will man aufgrund des geringen Durchsatzes nicht anwenden -, mod_python kennenlernen, Frameworks anschauen. Und zwischendurch immer wieder mal auf die Nase fallen, denn die Stützräder einer PHP-Umgebung gibt es in Python nicht.

    echo "$verabschiedung $name";

    1. Hallo,

      vielen Dank.

      Naja, wenn ich das so lese überlege ich mir das nochmal mit dem Python. Mein vorhaben war nämlich genau eine Srpache zu erlernen, die auch für WEB gut geeignet ist und z.B. als CGI mir bessere Performance und Möglichkeiten bietet als PHP.

      Was gäbe es denn da sonst erwähnenswertes, dass mir eine "Steigerung" gegenüber php bietet?

      Gruß

      1. Hellihello helga,

        Hallo,

        vielen Dank.

        Naja, wenn ich das so lese überlege ich mir das nochmal mit dem Python. Mein vorhaben war nämlich genau eine Srpache zu erlernen, die auch für WEB gut geeignet ist und z.B. als CGI mir bessere Performance und Möglichkeiten bietet als PHP.

        Was gäbe es denn da sonst erwähnenswertes, dass mir eine "Steigerung" gegenüber php bietet?

        Ruby on Rails, Perl, das Zend-Framework mit PHP? Planst Du solch resourcenfressende Anwendugen mit solch hohen Besucherzahlen, dass Du performanceprobleme kommen siehst? Oder was meinst Du damit?

        Als Framework hat vermutlich Ruby on Rails die Nase vorn. Ich finde ja, dass abgesehen von Riesenprojekten (Xing, Yahoo, etc.pp.) PHP wirklich ausreichenste Möglichkeiten bietet. Vermutlich kommt es ja nicht von ungefähr, dass sich trotz Perl (zeitweilig ja quasi synonym für "cgi") bzw. aufbauend darauf noch eine weitere Sprache entwickelt wurde, die sich dann auch noch so rasant etabliert hat.

        Dank und Gruß,

        frankx

        1. Hallo,

          einfach aus Prinzip möchte man natürlich das "schnellste" außerdem möchte ich mal was neues ausporbieren.

          Also Perl ist dann für Web schon ein großer Name oder?

          Gruß

          1. Hellihello helga,

            Hallo,

            einfach aus Prinzip möchte man natürlich das "schnellste" außerdem möchte ich mal was neues ausporbieren.

            Also Perl ist dann für Web schon ein großer Name oder?

            Ich bin nicht sicher, ob dies Kategorisierung sinnvoll ist. Meines Wissens ist Perl eine komplette Programmiersprache auch für außerhalb von Webanwendungen, während PHP im wesentlichen fürs Web konzipiert wurde. Und da gab es Perl schon. Die Leute, die PHP entwickelt haben, wussten wohl schon, warum sie Perl "weiterentwickelt" bzw. "spezialisiert" haben. Mittlerweile hat Ruby on Rails als _Frame_work eine Menge zu bieten, was mittels sog. "scaffolding" einfach im Hintergrund (deshalb ja auch Framework) erledigt wird. Spart einfach Codezeilen en Masse. Aber wie dedlfix schon sagt, sollte man ein Framework erst anschauen, wenn man die Grundzüge der Sprache kapiert hat. Ich vermute mal anhand Deiner Frage, dass Du mit PHP noch lange nicht soweit bist, dass es sich aus "Perfomance"-Gründen lohnen könnte, umzusteigen auf ROR. Typo3, Joomla, Wordpress etc. pp, alles PHP. Da lässt sich schon eine Menge Menge Menge mit anfangen. NASA, Zeit u.a. machen in Python, Xing, Yahoo (?) mit Ruby on Rails.

            Dank und Gruß,

            frankx

            1. Hallo,

              also kann man PHP nicht als quälend langsame Serverseitige Skriptsprache fürs WWW beuzeichnen?

              Biete mir da Perl nicht einen Vorteil.

              Ich dachte immer PHP sei schon zu "weit weg von der hardware" und deswegen "langsam"; halt alles in Sicht eines perfektionismus, der jede millisekunde nützen möchte.

              Gruß

              1. echo $begrüßung;

                also kann man PHP nicht als quälend langsame Serverseitige Skriptsprache fürs WWW beuzeichnen?

                Welche Optimierungsmöglichkeiten für PHP kennst du denn bereits? Hast du dir schon mal APC oder die Produkte von Zend angesehen?

                echo "$verabschiedung $name";

      2. echo $begrüßung;

        Naja, wenn ich das so lese überlege ich mir das nochmal mit dem Python. Mein vorhaben war nämlich genau eine Srpache zu erlernen, die auch für WEB gut geeignet ist und z.B. als CGI mir bessere Performance und Möglichkeiten bietet als PHP.

        Dass CGI langsam ist, liegt an CGI. Der Webserver muss für jeden Request die CGI-Schnittstelle mit Daten füllen (sprich: Umgebungsvariablen erstellen), und dann das Programm aufrufen. Das dauert auch wieder, weil das Programm jedes Mal erst aufstehen muss, ins Bad rennt, die Morgentoilette erledigt, vielleicht noch frühstückt, und dann erst die POST durchGET. Bei Script-Sprachen kommt noch die Quelltextanalyse hinzu. Hier kann Python vielleicht etwas punkten, weil es vorkompilierte Dateien anlegen kann. Doch auch PHP steht nicht ohne äquivalente Möglichkeiten da.

        Um CGIs Langsamkeit etwas entgegenzusetzen, hat man FastCGI und Webserver-Module entwickelt. Beides bettet sich in den Webserver ein und lauert startbereit im Hintergrund auf Aufträge. Doch diesem fertig angezogenen Fahrradkurier musst du einen Aufenthaltsraum zur Verfügung stellen (bevorzugt im Speicher), der dauerhaft Ressourcen bindet.

        Was gäbe es denn da sonst erwähnenswertes, dass mir eine "Steigerung" gegenüber php bietet?

        Wenn die üblichen Mittel zur Performancesteigerung (Caches) nicht mehr ausreichen sollten, eine Lastverteilung auf mehrere Maschinen auch nicht in Frage kommt, dann dürfte wohl nur ein Webserver-Modul das Non-Plus-Ultra sein. Doch da muss sicher deutlich mehr Entwicklungsaufwand reingesteckt werden, als man für die andere Methoden hinlegt.

        echo "$verabschiedung $name";