Python vs. Php

Was benutzt ihr?

  • Php

    Votes: 23 57.5%
  • Python

    Votes: 7 17.5%
  • Php und Python

    Votes: 8 20.0%
  • Sonstiges (bitte unten eintragen)

    Votes: 2 5.0%

  • Total voters
    40
Ich hab zwar keine Ahnung was du unter "lange laufen" verstehst. Wenn ~4 Tage durchgehend für dich als lange zählen kann ich dem definitiv nicht zustimmen.
Natürlich muss man dabei eher darauf achten das man nicht mehr verwendete Variablen wieder leert, nicht wie bei einer Webanwendung.
Da ich täglich mit PHP Arbeite (im Büro) setz ich auch für Private Sachen nur PHP ein, damit bin ich schnell und ich musst nicht noch extra eine andere Sprache lernen.

Am Ende kommt es glaube ich immer auf seine eigenen Vorlieben drauf an.
 
@dermarlo: Ich find es ein wenig komisch, dass du hier ein Python Framework gegenüber PHP setzt.

Ich arbeite hauptsächlich mit PHP, da ich viel mit TYPO3 und auch mit dem (sehr geilen) Framework FLOW3 unterwegs bin
 
Ich habe eigentlich nicht PHP dem Framework gegenübergestellt (zumindest sollte sich das nicht danach anhören).

Ich habe nur meine Auswahl für Python unter anderem damit begründet, dass ich Django als Framework favorisiere. Die weiteren Ausführungen dazu kamen nur auf explizite Nachfrage dazu.
 
Jede seite hat ihre 'Fanboys', andere sind damit aufgewachsen und kennen nur das und wiederum andere haben analysiert und entschieden.

Da stimme ich dir bei 99,% aller IT-Themen zu. Im Falle von PHP leider nicht. Das ist in meinen Augen keine Frage von Geschmack, sondern tatsächlich schlicht und einfach von Qualität. Die lange Liste an unmöglichen Bugs hatte ich ja oben schon. Ein wirkliches Grundproblem von PHP ist allerdings, dass man mit PHP schnell anfangen kann zu coden, es aber sehr schwer ist sicher zu coden, da es immer in die unsichere Richtung tendiert und man daher ständig alle Sicherheitsprobleme mitdenken muss. Als Anfänger kennt man diese, zum Teil sehr abstrakten, Angriffe nicht. Ich hatte das hier in einer ähnlichen Diskussion schonmal gefragt: Wer von den PHP-Codern hier sichert seine Web-Apps gegen CSRF-Angriffe? Die Folge sind leider sehr viele Web-Apps in PHP, die von Anfängern schlecht gecodet sind. Und das ist kein reines Problem der Anfänger, sondern beruht auch auf dem schlechten Design der Sprache.

Mit Rails z.B. muss man sich richtig Mühe geben, eine SQL-Injection zu bauen, während man sich mit PHP Mühe geben muss, sie zu verhindern. Und bevor jetzt alle gleich wieder mit find_by_sql kommen: Das ist eben gerade nicht der Rails-Default-Weg.
 
Ein wirkliches Grundproblem von PHP ist allerdings, dass man mit PHP schnell anfangen kann zu coden, es aber sehr schwer ist sicher zu coden
Nicht schwerer als andere Sprachen. Die Differenz zwischen Anfaenger-Code und halbwegs sicherem Code mag groesser sein als bei anderen Sprachen. Vergleicht man aber guten PHP-Code mit gutem Python-Code so kommt es wieder auf's gleiche raus.
Andere Beispiele fuer solche Sprachen sind BASIC und seine Derivate (Visual Basic, ...)

Wer von den PHP-Codern hier sichert seine Web-Apps gegen CSRF-Angriffe?
Da es ein Python-vs-PHP Thread ist: Wer von den Python-Entwickler tut es?
Und bevor jemand aus Django verweist; es gibt auch in PHP Frameworks...
Ein solcher Schutz ist uebrigens sehr simpel indem man ein md5-Hash der Session-ID als GET-Parameter anhaengt; es schuetzt gegen CSRF und gleichzeitig gegen Ablesen/Abfotografieren der URL durch andere Personen.
PHP-Beispiel:
PHP:
<?php
function papaBaer() {
   return md5(session_id());
}


session_start();
if(!isset($_GET['s']) ||papaBaer() != $_GET['s'])) {
    die("Denied!");
}

?>
<a href='http://example.org/?s=<?=papaBaer();?>'>Beispiel-Link</a>

Und das ist kein reines Problem der Anfänger, sondern beruht auch auf dem schlechten Design der Sprache.
Ein Beispiel fuer sicherheitsrelevante Defizite der Sprache waere nicht schlecht...
Alle ueblichen Loecher wie magic quotes, und register global's sind repariert.
Wenn man entscheidet, dass man ein GET-Parameter diret auf die Datenbank jagen will erlaubt die Sprache es. Warum sollte sie auch nicht?

Mit Rails z.B. muss man sich richtig Mühe geben, eine SQL-Injection zu bauen, während man sich mit PHP Mühe geben muss, sie zu verhindern
Mit Autos kann man fahren waehrend man sich mit Muehe auf einem Rad balancieren kann.
PHP ist eine Skriptsprache. RoR ist ein Framework fuer eine Skriptsprache.
Es gibt wie schon gesagt auch fuer PHP eine grosse Menge an sicheren und abstrahierten Frameworks wer sich das antun will.
 
@JoeUser: Volltreffer, die ABI-breaks in der Ruby-Welt sind einfach eine Katastrophe und der Grund, warum ich sehr ungern auf Rails setze. Ich möchte hier auch keine Lanze für Ruby oder Python oder irgendwas brechen, siehe die Aussagen zu Flamewars von d4f. Ich denke aber trotzdem, dass explizit PHP um Längen grottiger ist als der Rest.

Nicht schwerer als andere Sprachen.
Und genau das behaupte ich. In PHP muss ich wissen, dass es SQL-Injections gibt und deswegen eine entsprechende Funktion aufrufen. Vergesse ich die Funktion, habe ich eine Injection. In Rails/Python/Java/Foo kann ich nichts vergessen, weil das der Datenbank-Absraction-Layer auf einer anderen Ebene kapselt.

Ein solcher Schutz ist uebrigens sehr simpel indem man ein md5-Hash der Session-ID als GET-Parameter anhaengt;
Klar ist vieles simpel, aber ich muss es bei PHP auf dem Schirm haben und auch einbauen. Gerade Anfänger coden halt simple PHP runter und freuen sich, wenn's geht.

Ein Beispiel fuer sicherheitsrelevante Defizite der Sprache waere nicht schlecht...
Das Argument zieht meiner Meinung nach so rum nicht. Die Zeiten, in denen es eine konkrete Sicherheitslücke gab, die dann exploitet wurde, sind vorbei. Heute laufen viele Angriffe über Bande und Ecken, die man im einzelnen nie als Bedrohung sehen würde. Gerade daher ist es enorm wichtig, dass eine Sprache im Core sauber ist. Im Link weiter oben habe ich schon gepostet, welch ominöses Verhalten PHP z.T. an den Tag legt. Wenn z.B. eine simple Addition ein falsches Ergebnis liefert (und sowas kommt bei PHP leider immer wieder vor), dann ist das per se erstmal nur ärgerlich aber nicht kritisch. Wenn ich diese Addition aber einsetze, um eine Vorbedingung meiner App zu testen und es ausreicht, diese Funktion durch eine ganz bestimmte Zahl zu exploiten, dann habe ich das Loch, weil PHP im Core Mist baut. Gerüchteweise sollen ja nichtmal die Testcases vom PHP-Core sauber durchlaufen. Ich verwette meinen Allerwertesten darauf, dass in PHP noch eine Menge ungehoben Schätze liegen.

Wenn man entscheidet, dass man ein GET-Parameter diret auf die Datenbank jagen will erlaubt die Sprache es. Warum sollte sie auch nicht?
Genau mein Reden: Die Sprache sollte es erlauben. Aber es sollte nicht der unhinterfragte Default sein, weil es eben wahnsinnig gefährlich ist. Bei PHP entscheidet man nicht, einen GET-Parameter direkt auf die Datenbank zu jagen. Bei PHP vergisst man, es nicht zu tun.

Ich gebe euch aber unwiedersprochen Recht, dass es unfair ist ein Framework mit einer Scriptsprache zu vergleichen. Ich höre sofort auf damit, wenn hier jemand postet: "Ich habe mir die PHP-Quellen gezogen und alle Test-Cases laufen sauber durch" ;-)
 
Last edited by a moderator:
Dann doch mal etwas abseits der Php vs Python Debatte, welches Framework (am besten für PHP) ist denn empfehlenswert für flexible aber dennoch keine zu umfangreichen Homepages?
 
Was schmeckt am besten auf's Brötchen?

Da wirst du keine richtige oder falsche Antwort bekommen. Einfach durchprobieren und das nehmen, was dir am besten gefällt. Die schlechte Nachricht: Alle sind irgendwie irgendwo Mist und nerven. Ich hab wirklich viel durch und warte wohl bis zum jüngsten Tag, bis ich endlich einem Framework begegne, das einfach nur gut ist.

Am meisten haben mir persönlich die kleinen Frameworks gefallen. Sinatra, Perl-Dancer, ... Node.js fand ich ganz witzig zum coden. Aber alles mein ganz spezieller Geschmack und auch kein PHP.
 
Last edited by a moderator:
PHP muss ich wissen, dass es SQL-Injections gibt und deswegen eine entsprechende Funktion aufrufen.
Das musst du auch in Python oder Ruby. Alle 3 verwenden auf unterster Ebene direkte SQL-Queries wo du x-beliebigen validen, gefaehrlichen oder invaliden Code ausfuehren kannst solange Mysql es mitmacht...
Darauf basierend gibt es mehrere Abstraktions- und Absicherungs-Frameworks/-Klassen welche die Arbeit erleichtern (sollten) und Sicherheit gegen bsp. SQL-Injections bieten wollen. Man muss sie in allen 3 Sprachen gezielt und explizit verwenden.
Oder was ist der Unterschied zwischen folgenden Snippets fuer dich?
Code:
PHP:
$DB->query("INSERT INTO...");

Python:
DB.execute("INSERT INTO...")

Ruby:
DB.query("INSERT INTO...")

Klar ist vieles simpel, aber ich muss es bei PHP auf dem Schirm haben und auch einbauen.
Das musst du auch bei den anderen wenn du die eingebaute Session-Verwaltung verwenden willst. Meines Wissens haben aber weder Ruby noch Python eine implementierte Session-Verwaltung, hier muss sie also komplett von 0 auf gebaut werden. Und dabei kann man sehr viele Fehler machen...

Heute laufen viele Angriffe über Bande und Ecken, die man im einzelnen nie als Bedrohung sehen würde.
Und in aller Regel ist das Framework oder CMS Schuld an der Misere.
Dein Argument koenntest du auch so drehen dass die Sprache C Schuld dran ist, dass Windows NT Systeme bluescreenen.

Aber es sollte nicht der unhinterfragte Default sein, weil es eben wahnsinnig gefährlich ist.
Wie soll man dann einen String ausfuehren wenn nicht 'as-is'? (Mehr als einen fertigen String nehmen die Query/Execute-Funktionen fuer Mysql der einzelnen Sprachen ja nicht entgegen)

Bei PHP entscheidet man nicht, einen GET-Parameter direkt auf die Datenbank zu jagen. Bei PHP vergisst man, es nicht zu tun.
Bei {PROGRAMMIERSPRACHE} entscheidet man nicht, einen {EINGABE}-Parameter direkt auf die Datenbank zu jagen. Bei {PROGRAMMIERSPRACHE} vergisst man, es nicht zu tun.
FTFY
 
@d4f: Genau so, wie ich keine Frameworks mit einer Scriptsprache gleichsetzen kann, darfst du keine Allround-Scriptsprache mit PHP gleichsetzen. PHP ist explizit dafür da, direkt an den Apache angebunden zu werden und dynamische Websites zu generieren, während wohl die wenigsten auf die schräge Idee kommen, Python oder Ruby plain an den Webserver zu nageln. Daher hinkt dein Vergleich auf dieser Ebene (mindestens so doll wie meiner...)
 
Wenn wir mal ganz streng sein wollen, dann müssen wir PHP selbst als Framework bezeichnen, denn mehr war und ist es eigentlich nicht.

Ursprünglich bestand PHP aus ein paar Perlscripts, war also ein reines Framework beziehungsweise nur ein Templatesystem.

Aber gut, das ist Geschichte an die sich kaum noch jemand erinnert...
 
PHP ist explizit dafür da, direkt an den Apache angebunden zu werden und dynamische Websites zu generieren
Du meinst die ganzen pcntl_, stream_, posix_, socket_, stream_ Funktionen sowie zB die Cairo-Extension fuer grafische Client-Oberflaechen sind nur aus Langweile der Entwickler entstanden?

PHP ist als Webbaukasen-Skriptsprache entstanden.
Linux ist auch als Hobby-Clon von Minix entstanden welcher explizit nie Hardware-Support fuer andere Machinen als Torvald's eigene haben sollte.

Die Frage des TE war uebrigens auf Webseiten bezogen, somit hinkt der Vergleich absolut nicht. Ob Python gleichzeitig noch Pizza backen und das Auto waschen kann ist dabei wohl irrelevant.

Aber gut, das ist Geschichte an die sich kaum noch jemand erinnert...
Danke Joe... Nun fuehle ich mich alt =( Ich erinnere mich naemlich sehr gut :S
 
Last edited by a moderator:
Danke Joe... Nun fuehle ich mich alt =( Ich erinnere mich naemlich sehr gut :S
Du bist alt ;-)

Und ja, die ganzen Extensions sind oft aus Langeweile entstanden (und dem Willen Einzelner, PHPs Funktionalitäten an andere $Sprachen anzugleichen, um nicht Perl oder $Sprache lernen zu müssen). So, wie es bei jeder anderen Sprache eben auch geschieht.

Wir könnten auch wieder Alle Assembler lernen, dann bräuchten wir keine andere Sprache mehr und die Anwendungen würden wieder ressourcenschonend und schnell laufen. Da passt Linux 2.4 inklusive minimalstem Userland, httpd und ftpd gleich zweimal auf eine einzige 3,5"-Diskette.
 
@PapaBear: Dass das Geschmackssache ist, ist mir schon klar. Ein Ansatz mit welchen man in dem gewollten Bereich das Testen und Ausprobieren anfängt hilft aber ungemein ;)


@dermarlo: Vielen Dank! Sowas habe ich im Prinzip gesucht, möglichst schlank und erstmal nicht viel mitgeliefert :) Ich gucke mir das die Tage/Wochen mal genauer an.
 
Back
Top