PHP Sicherheitslücken <-> Python ?!?!?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Freitag 19. Oktober 2007, 15:21

Als jemand, der PHP beruflich nutzen muss, möchte ich darauf mal hoffentlich ebenfalls sachlich antworten:

Nocta hat geschrieben:Man könnte also zum Schluss kommen, dass PHP TOTAL verbuggt und unsicher ist, aber ganz so ist's ja auch wieder nicht.

Wenn man mal einige Zeit investiert, um PHP richtig zu lernen, anstatt nur Formular-to-Database und umgekehrt (was nur ein paar Befehle und vielleicht einige so extrem schwierige Konstrukte wie eine Schleife benötigt) zu schreiben, kann man da schon recht viel rausholen.

Das ist relativ unspezifisch. Was kann man wie und wo "rausholen"? PHP ist Turingvollständig, also kann man Potentiell so gut wie alles darin schreiben. Der Punkt ist nur der Aufwand. Und der lässt sich 1:1 in Geld und Nerven umrechnen. Und eben den Schätze ich als unnötig Hoch ein.

PHP ist nunmal auf Einfachheit konzipiert, das kann man leugnen wie man will, es ist nunmal so.

Vielleicht konzipiert, aber was ist daran einfach, dauernd in der Doku nachgucken zu müssen, ob needle oder haystack bei dieser funktion vorne ist, ob str_ oder str das prefix ist, oder die arrayfunktion in-place oder returnierend ist, etc? Was ist einfach an 64byte-prefixes, damit man ja keine Kollisionen mit anderen Programmen hat? Was ist einfach daran, dass ich, wenn ich ordentlich Programmiere, administrationsoptionen auslesen und rückgängig machen muss (magic_quotes z.B.) und wenn ich es nicht mache, fahrlässig handele?

Worin liegt die vielbeschworene Einfachheit von PHP?
Sorry dass das vieleicht arrogant rüberkommt, aber in meinen Augen gilt PHP nur als einfach, weil es oft genug wiederholt wird.

Aber wenn man die Sprache beherrscht, kann man das ganze ein wenig übersichtlicher halten, indem man eine Struktur reinbringt: Das ganze in Funktionen und/oder Klassen kapseln, Templatesysteme benutzen, die HTML von PHP trennen, SQL-Klassen benutzen (die man sich sehr einfach selbst schreiben kann), usw.

klingt für mich stark nach: wenn ich viel Arbeit reinstecke, kann PHP das, was ich bei anderen Sprachen ohne Arbeit kann.

Was ich an einer SQL-Klasse schätze, ist vorallem, dass man da ganz einfach bevor das Query an die Datenbank geschickt wird, die Variablen, die übergeben wurde verifizieren kann, damit keine SQL-Injections möglich sind (passiert dann eben automatisch).

SQL-Klassen sind da vielleicht nach PDO nicht mehr so das Beispiel, aber sowas stand bei Python z.B. nie zur Debatte, die DB-Api kümmert sich selbstverständlich ums escaping.

Also ich behaupte jetzt einfach mal ganz dreist:
Wenn man PHP beherrscht, kann man damit auch relativ saubere Anwendungen schreiben, die übersichtlich und sicher sind.
Man muss eben das Hintergrundwissen haben[...]


Genau deshalb ist PHP in meinen Augen schlecht: ich muss überall meine Nerven opfern für Dinge, die ich in anderen Sprachen gratis bekomme. (Dass es Handwerklich absolut Katastrophal wirkt, mal aussen vor).
Ich hab schon oft gehört "wenn man Diszipliniert Programmiert, macht man keine Fehler". Disziplin ist aber eine knappe Resource, die ich persönlich lieber in Funktionalität als Fehlervermeidung stecken würde.
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Beitragvon Nocta » Freitag 19. Oktober 2007, 15:43

keppla hat geschrieben:Als jemand, der PHP beruflich nutzen muss, möchte ich darauf mal hoffentlich ebenfalls sachlich antworten:

Nocta hat geschrieben:Man könnte also zum Schluss kommen, dass PHP TOTAL verbuggt und unsicher ist, aber ganz so ist's ja auch wieder nicht.

Wenn man mal einige Zeit investiert, um PHP richtig zu lernen, anstatt nur Formular-to-Database und umgekehrt (was nur ein paar Befehle und vielleicht einige so extrem schwierige Konstrukte wie eine Schleife benötigt) zu schreiben, kann man da schon recht viel rausholen.

Das ist relativ unspezifisch. Was kann man wie und wo "rausholen"? PHP ist Turingvollständig, also kann man Potentiell so gut wie alles darin schreiben. Der Punkt ist nur der Aufwand. Und der lässt sich 1:1 in Geld und Nerven umrechnen. Und eben den Schätze ich als unnötig Hoch ein.

Das lass ich mal so stehn.
keppla hat geschrieben:
PHP ist nunmal auf Einfachheit konzipiert, das kann man leugnen wie man will, es ist nunmal so.

Vielleicht konzipiert, aber was ist daran einfach, dauernd in der Doku nachgucken zu müssen, ob needle oder haystack bei dieser funktion vorne ist, ob str_ oder str das prefix ist, oder die arrayfunktion in-place oder returnierend ist, etc? Was ist einfach an 64byte-prefixes, damit man ja keine Kollisionen mit anderen Programmen hat? Was ist einfach daran, dass ich, wenn ich ordentlich Programmiere, administrationsoptionen auslesen und rückgängig machen muss (magic_quotes z.B.) und wenn ich es nicht mache, fahrlässig handele?

Worin liegt die vielbeschworene Einfachheit von PHP?
Sorry dass das vieleicht arrogant rüberkommt, aber in meinen Augen gilt PHP nur als einfach, weil es oft genug wiederholt wird.

Naja ich denke eben, es war ursprünglich so einfach geplant.
Manche Dinge, wie das einfache Auslesen und Schreiben in eine MySQL-Datenbank (andere gehen natürlich auch), sind wirklich SO verdammt einfach, dass "jeder" das mit wirklich wenig Aufwand hinbekommt.
Nur wird es aufgrunddessen, dass es so einfach konzipiert wird, zunehmend komplexer, wenn man komplexere Dinge damit machen will.
Python dagegen ist eher so konzipiziert, dass es von der Sprache her nicht komplexer wird, wenn man komplexere Anwendungen schreiben will.
Das Problem bei PHP war wahrscheinlich, dass sie zu sehr auf Einfachheit bedacht war und diese Sprache dann auf Grundlage dessen weiterentwickelt wurde.
@Doku, wenigstens ist die größtenteils vorbildlich. Ein kleiner Blick genügt dann ja auch meistens. Aber natürlich wäre es besser, wenn man nicht jede Kleinigkeit nachshcauen muss, nur weil die Sprache nicht konsequent einheitlich ist.
keppla hat geschrieben:
Aber wenn man die Sprache beherrscht, kann man das ganze ein wenig übersichtlicher halten, indem man eine Struktur reinbringt: Das ganze in Funktionen und/oder Klassen kapseln, Templatesysteme benutzen, die HTML von PHP trennen, SQL-Klassen benutzen (die man sich sehr einfach selbst schreiben kann), usw.

klingt für mich stark nach: wenn ich viel Arbeit reinstecke, kann PHP das, was ich bei anderen Sprachen ohne Arbeit kann.

Richtig. Das ist dann wohl das, was ich oben beschrieben habe, es wird zunehmend komplexer und aufwändiger, wenn das Problem komplexer wird.
Aber es ist eben durchaus möglich und es gibt genug ausgereifte Open-Source Anwendungen, die all das so einfach wie möglich machen.
keppla hat geschrieben:
Was ich an einer SQL-Klasse schätze, ist vorallem, dass man da ganz einfach bevor das Query an die Datenbank geschickt wird, die Variablen, die übergeben wurde verifizieren kann, damit keine SQL-Injections möglich sind (passiert dann eben automatisch).

SQL-Klassen sind da vielleicht nach PDO nicht mehr so das Beispiel, aber sowas stand bei Python z.B. nie zur Debatte, die DB-Api kümmert sich selbstverständlich ums escaping.

Okay, mag sein, gerade die Datenbankverbindung ist bei PHP etwas zu einfach gehalten. Wäre viel besser, wenn das von Anfang an objektorientiert gewesen wäre, so wie's sich gehört. Aber früher gab's ja noch kein OOP usw ... Wieder ein gutes Beispiel dafür, dass durch die Einfachhaltung im Grunde wieder alles komplexer wird, wenn die Ansprüche ein wenig steigen.
keppla hat geschrieben:
Also ich behaupte jetzt einfach mal ganz dreist:
Wenn man PHP beherrscht, kann man damit auch relativ saubere Anwendungen schreiben, die übersichtlich und sicher sind.
Man muss eben das Hintergrundwissen haben[...]


Genau deshalb ist PHP in meinen Augen schlecht: ich muss überall meine Nerven opfern für Dinge, die ich in anderen Sprachen gratis bekomme. (Dass es Handwerklich absolut Katastrophal wirkt, mal aussen vor).
Ich hab schon oft gehört "wenn man Diszipliniert Programmiert, macht man keine Fehler". Disziplin ist aber eine knappe Resource, die ich persönlich lieber in Funktionalität als Fehlervermeidung stecken würde.

Ja, da hast du recht. Es wird einfach mal Zeit, dass PHP von Grund auf neu entwickelt wird, es macht einfahc keinen Sinn mehr, die ganze Last von den ersten Versionen mitzuschleppen.
Ich hab auch nie behauptet, dass PHP optimal ist, ich wollte PHP einfach mal so weit verteidigen, wie es der Sprache gebührt. Hier in dem Thread wurde es nämlich so dargestellt, als ob PHP = unsicher ist. Ist halt alles eine Sache des Programmieres, aber es kann durchaus sein, dass PHP mehr Sicherheitslücken als Python hat, die man irgendwie ausnutzen kann und die man als Programmierer nicht verhindern kann ... Aber allgemein kann man schon relativ sichere Anwendungen in PHP schreiben.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Freitag 19. Oktober 2007, 17:44

Amen!
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Montag 22. Oktober 2007, 13:03

Zunächst mal im Prinzip Zustimmung, aber...

Nocta hat geschrieben:
keppla hat geschrieben:Worin liegt die vielbeschworene Einfachheit von PHP?
Sorry dass das vieleicht arrogant rüberkommt, aber in meinen Augen gilt PHP nur als einfach, weil es oft genug wiederholt wird.

Naja ich denke eben, es war ursprünglich so einfach geplant.
Manche Dinge, wie das einfache Auslesen und Schreiben in eine MySQL-Datenbank (andere gehen natürlich auch), sind wirklich SO verdammt einfach, dass "jeder" das mit wirklich wenig Aufwand hinbekommt.


Ok, bleiben wir bei dem Beispiel.
Hier der klassische PHP-Code, um alle Zeilen eines Queries auszugeben:

Code: Alles auswählen

$link mysql_connect&#40;'localhost')
mysql_select_db&#40;'mydb', $link)
$query "select * from mytable";
$result mysql_query&#40;$query, $link);
while &#40;$row = mysql_fetch_array($result)) {
   
print_r&#40;$row);
&#125; 


und hier die pythonvariante

Code: Alles auswählen

import MySQLdb
conn = MySQLdb.connect(host="localhost", db="mydb")
query = "select * from mytable"
cursor = conn.cursor()
cursor.execute(query)
for row in cursor.fetchall():
  print row


Wo ist PHP hier einfacher?
Erstens ist es versteckt objektorientiert (mysql_fetch_array ist eigentlch eine Methode von $result, mysql_select_db eine von $link), zweitens kann mir niemand erzählen, dass "while ($row = mysql_fetch...)" einfach wäre.
Hinzu kommt noch, dass, wenn man die PHP-variante nun so ergänzen würde, dass man fehler mitbekommt (auf was bei aller unterstellten Einfachheit nicht verzichtet werde kann, denn auch und gerade Newbies müssen ihren Code debuggen), nach so gut wie jeder Zeile nochmal ein "or die('something went wrong')" stehen müßte, um dass, was es bei Python gratis durch die Exceptions gibt, schlecht darzustellen.

PHP ist nicht einfach! Es WAR vielleicht mal einfach, als die Alternative PerlCGI oder J2EE hiessen (kann ich nicht beurteilen, kenne Perl nur vom davor fliehen und java nicht im Html-bereich), aber es IST schon lange nicht mehr einfach, gemessen am Stand der Technik.
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Beitragvon thelittlebug » Montag 22. Oktober 2007, 15:43

warum sollte ich mysql_error() jedesmal hinten dran schreiben?

also da ich ja öfters was mit php machen muss sieht das ganze bei mir so aus:

Code: Alles auswählen

class Database
&#123;
    
var $link null;
    var 
$qryCount 0;

    function 
__construct&#40;$host, $user, $pass, $db&#41; &#123;
        
$this->link mysqli_connect&#40;$host, $user, $pass, $db&#41;;

        
if&#40;!$this->link&#41; die&#40;'error: ' . mysqli_connect_error&#40;&#41;&#41;;
        
if&#40;!mysqli_set_charset&#40;$this->link, 'utf8'&#41;&#41; die&#40;'error: '&#41;;
    
&#125;

    
function __destruct&#40;&#41; &#123;
        
mysqli_close&#40;$this->link&#41;;
    
&#125;

    
function fetch&#40;$query, $debug=0&#41;
    
&#123;
        
if&#40;$debug == 1&#41; echo $query;

        
$result mysqli_query&#40;$this->link, $query&#41; or die&#40;'error: ' . mysqli_error&#40;$this->link&#41;&#41;;
        
$row mysqli_fetch_assoc&#40;$result&#41;;
        
mysqli_free_result&#40;$result&#41;;

        
$this->qryCount++;
        return 
$row;
    &
#125;

    
function fetchAll&#40;$query, $debug=0&#41;
    
&#123;
        
if&#40;$debug == 1&#41; echo $query;

        
$result mysqli_query&#40;$this->link, $query&#41; or die&#40;'error: ' . mysqli_error&#40;$this->link&#41;&#41;;
        
$rows = array&#40;&#41;;
        
while&#40;$row = mysqli_fetch_assoc&#40;$result&#41;&#41; &#123; $rows[] = $row; &#125;
        
mysqli_free_result&#40;$result&#41;;

        
$this->qryCount++;
        return 
$rows;
    &
#125;

    
function qry&#40;$query, $debug=0&#41;
    
&#123;
        
if&#40;$debug == 1&#41; echo $query;
        
mysqli_query&#40;$this->link, $query&#41; or die&#40;'error: ' . mysqli_error&#40;$this->link&#41;&#41;;

        
$this->qryCount++;
    &
#125;
&#125;
 


die verwendung ist dann relativ simpel:

Code: Alles auswählen


$db 
= new Database&#40;'localhost', 'meinuser', 'meinpass', 'meinedb'&#41;;
print_r&#40;$db->fetchAll&#40;'SELECT * FROM meinetabelle'&#41;&#41;;
 


damit ist das dann relativ gemütlich möglich.
meine qry's haben IMMER ein limit am ende, es gibt kaum webseiten die sich mit ergebnisslisten > 1000 einträgen benutzerfreundlich gestalten lassen :D

sobald ich mal irgendwas mit datenbanken und python zutun habe werde ich mir eine entsprechend einfache klasse dafür bauen.

mein fazit: warscheinlich in fast jeder "script" sprache ähnlich leicht lösbar

lgherby

edit:
das musst du mir erklären:
Erstens ist es versteckt objektorientiert (mysql_fetch_array ist eigentlch eine Methode von $result, mysql_select_db eine von $link)


wie kommst du darauf?
http://www.php.net/mysql_fetch_array
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Montag 22. Oktober 2007, 16:28

Erstmal möchte ich den Kontext der Codeschnipsel betonen, um Missverständnissen vorzubeugen:

Es wurde gesagt, dass Datenbankabfragen in PHP besonders einfach wären.

Klar kann man sich Wrapper schreiben, aber die bieten auch erst nach einigem Aufwand dass, was man in anderen Sprachen gratis bekommt (dein Wrapper z.B. hat kein escaping, Daten kommen als string zurück und er ist mysql_spezifisch), und sind somit immer noch nicht einfach.

Dass man anstatt Wrapper zu schreiben PDO nutzen sollte, ist noch einmal ein anderes Thema, was ich hier aufgrund der Behauptung, dass PHP einfach sei, nicht Anreisse (PDO ist nicht einfacher als das gezeigte Beispiel, imho).

thelittlebug hat geschrieben:warum sollte ich mysql_error() jedesmal hinten dran schreiben?

Um das Beispiel vergleichbar zu halten. Wir können natürlich auch deine Wrapperklasse den 7 Zeilen Python gegenüberstellen, dann sieht PHP noch schlechter aus.

mysqli_connect($host, $user, $pass, $db);

danke für den hinweis, hiermit kann man eine Zeile PHP sparen. Das ändert für mich aber nichts daran, dass die PHP-Lösung nicht einfacher ist.

sobald ich mal irgendwas mit datenbanken und python zutun habe werde ich mir eine entsprechend einfache klasse dafür bauen.


Wozu? all das, was dein Beispiel kann (ausser vielleicht das querylogging) kann die python-db-api schon, Ausserdem kann sie noch einiges, was dein Wrapper nicht kann.

Erstens ist es versteckt objektorientiert (mysql_fetch_array ist eigentlch eine Methode von $result, mysql_select_db eine von $link)

wie kommst du darauf?


Objektorientiertheit ist keine Syntaxsache, es muss sich nicht in . oder -> ausdrücken. In Smalltalk sieht das nochmal ganz anders aus.

Was macht mysql_select_db? es ändert den zustand von $link, und hat sonst keine nebeneffekte. Genau das wäre eine (nichtvirtuelle) Methode.
Gleicher Spass bei mysql_fetch_array: diese Funktion ändert den Zustand von $result, und hat sonst keine nebeneffekte.
Ob ich nun f(o) oder o.f() schreibe ist hier nur Syntaxzucker.

mein fazit: warscheinlich in fast jeder "script" sprache ähnlich leicht lösbar

1. Wenn dem so ist, würde das imho meinen Standpunkt belegen, weil dann eben PHP NICHT besonders einfach, sondern allerhöchstens vergleichbar einfach wäre.
2. Dein Wrapper ist "ähnlich leicht" wie die 7 Zeilen python? Ich bleibe dabei, PHP stellt sich hier eher schlechter als besser an.

Nochmal: ich bezweifele nicht, dass man in PHP durchaus funktionierende Programme schreiben kann, da das ist das mindeste, was man von einer Sprache erwarten kann, ist. Ich bezweifele die immer wieder zitierte Einfachheit, die in jeder Diskussion um PHP als Argument genutzt wird, die mir aber bisher niemand belegen konnte.
thelittlebug
User
Beiträge: 188
Registriert: Donnerstag 20. Juli 2006, 20:46
Wohnort: Wien
Kontaktdaten:

Beitragvon thelittlebug » Montag 22. Oktober 2007, 17:02

dein Wrapper z.B. hat kein escaping, Daten kommen als string zurück und er ist mysql_spezifisch

ich mag kein escaping im wrapper. die meisten daten die ich aus einer db hole sind in meinem fall nun mal strings und ich verwende in dem projekt in dem dieser wrapper verwendet wird nun mal mysql, oder wolltest du mich auf etwas anderes aufmerksam machen?

Dass man anstatt Wrapper zu schreiben PDO nutzen sollte

ich bin der letzte der unausgereifte features in der praxis betatestet :D
außerdem haben mir meine performancetests ergeben das pdo noch um einiges langsamer zu sein scheint als mein minimaler wrapper. doch selbst da kann man nichts allgemeines sagen, nur so viel: auf meinem entwicklungsrechner, mit meiner php version wurde mein wrapper meinem pdo code gegenübergestellt und als zu langsam befunden.

zwischendurch ne frage: warum so aggresiv? ich hab zu nichts wirklich stellung bezogen und nicht behauptet das php einfacher wäre, eher meine bereits gesagte vermutung: "mein fazit: warscheinlich in fast jeder "script" sprache ähnlich leicht lösbar"

1. Wenn dem so ist, würde das imho meinen Standpunkt belegen, weil dann eben PHP NICHT besonders einfach, sondern allerhöchstens vergleichbar einfach wäre.
2. Dein Wrapper ist "ähnlich leicht" wie die 7 Zeilen python? Ich bleibe dabei, PHP stellt sich hier eher schlechter als besser an.

sry, aber äpfel mit birnen vergleichen und mir das dann noch präsentieren, da musst dir schon nen anderen suchen :)
warum sollte der gesamte wrapper einfacher sein als die 7 zeilen python? wo hat das irgendjemand behauptet? aber sieh dir die verwendung des wrappers an, vergleich mal damit ;)

und wenn dir der gedanke nicht gefällt selbst hand anzulegen könntest du ja auch bestehende libs zugreifen, in python stört dich das ja auch nicht, warum ist das dann in php so ein großes problem für dich?

Wozu? all das, was dein Beispiel kann (ausser vielleicht das querylogging) kann die python-db-api schon, Ausserdem kann sie noch einiges, was dein Wrapper nicht kann

wann hat der schw**zvergleich begonnen? rennt das oktoberfest noch?
ich hab nie behauptet das mein wrapper alles kann, hungersnöte beseitigen, klimakatastropenschutz, du siehst schon, ich hab da noch viel dran zu arbeiten ;)

aber wenn ich mir das ansehe wie du mit mir schreibst, ärgere ich mich den hinweis vom birkenfeld ("amen") nicht vorher schon verstanden zu haben :D
ich werde in zukunft birkenfelds beiträge einfach nicht mehr überlesen ;)

für alle anderen: und daweil bin ich ja sogar, zumindest zum teil, auf seiner seite :D


kurz:
und bitte zeige mir wo ich irgendwo irgendwas über die einfachheit von php behaupte oder lobe. ganz im ernst, ich finds einfach nicht richtig das du mich hier für etwas anfährst das du irgendwo anders aufgeschnappt hast, ich bin nicht dein feindbild nr1 ;)
aber ich glaub wir schaffen das, solltest mal in wien sein lad ich dich gern auf ein getränk ein und lass mir das mit der versteckten oo sache erklären ;)

lg herby
Nocta
User
Beiträge: 290
Registriert: Freitag 22. Juni 2007, 14:13

Beitragvon Nocta » Montag 22. Oktober 2007, 18:06

Auch wenn hier bald jemand ein ganzes Kloster gründen wird, um uns mit vereinten Kräften der Mönche (nein keine Nonnen :p) mit ihrem "Amen" zum schweigen zu bringen ...

@keppla, du hast vollkommen recht mit deinem Vergleich PHP vs Python im DB-Bereich.
Da war ich wohl etwas voreilig ;)
Aber ich denke man kann schon sagen, dass PHP einfach ist.
Das gründet daher, dass jeder Anfänger seine Programme mit sehr wenig Grundwissen und auch nicht allzu viel Code schreiben kann, die dann Daten in die DB ein/auslesen und weiß ich was alles damit anstellen.
Nur ist es dann ein total unsicheres Programm, aber einfach ;)
Da haben sie doch etwas viel rumgefrickelt, um das ganze auf das Python-Niveau zu bringen sind schon einige Klassen nötig, wovon es aber auch genug zur Auswahl gibt, wenn man sie sich nicht selbst schreiben will.
Theoretisch wäre das ja auch nichts anderes, als - wie in Python - auf Module zurückzugreifen ...
Mit den entsprechenden zusätzlichen Klassen kann man den Code schon fast auf eine Ebene mit Python heben, was einen nur einmaligen Aufwand bedeutet, nämlich den des schreibens des Moduls/der Klasse.
In Python ist das ja auch nicht anders, wobei da die Entwicklung des Moduls wiederum einfacher wäre, was aber, wenn man die Tatsache im Auge behält, dass es nur ein einmaliger Aufwand ist, nicht so extrem schlimm ist.
Und um jetzt nochmal auf den Vergleich zurückzukommen: Sogesehen ist die MySQL-Klasse dann auch nur ein zusätzliches Modul, welches du nicht gegen die 7 Zeilen Python abwägen darfst, sondern du dürftest nur die 7 Zeilen PHP und die 7 Zeilen Python vergleichen.

Irgendwie komm ich mir grad komisch vor, weil ich PHP gerade mit halbwegs plausiblen Argumenten so gut darstehen lassen kann, obwohl das eigentlich auch gegen meine ursprüngliche Meinung ist, ich bin selbst fast überrascht :D Irgendwo ist da eine Lücke, findet sie und schlagt mich tot ;)

Also ich würde sagen, Python kann mehr (wenn man das jetzt auf Webentwicklung beschränkt, ansonsten würde da ein "viel viel..." fehlen :p) in der "Standardversion" als PHP und ist auch deutlich leichter, da vorallem logisch besser nachvollziehbar und konsequenter, wobei PHP viele unnötige kompliziertheiten aufweist.
Wahrscheinlich liegt das alles daran, dass es am Anfang von PHP noch keine OOP-Unterstützung gab, wie auch immer, ist ja auch egal, Python > PHP :p Meine Meinung.
Aber um's nochmal korrekterweise zusammenzufassen: PHP kann so gut sein wie Python, aber Python ist es in jedem Fall ;)
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Montag 22. Oktober 2007, 20:40

Nocta hat geschrieben:PHP kann so gut sein wie Python, aber Python ist es in jedem Fall ;)


Zumindest ist es Turing-vollständig.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Beitragvon keppla » Montag 22. Oktober 2007, 23:10

Es tut mir leid, wenn mein Beitrag beleidigend rüberkam, das war definitv nicht so gemeint. Ich war der Meinung, dass ich sachlich aber fordernd gewesen bin.
zwischendurch ne frage: warum so aggresiv?

Ich bitte um Entschuldigung.

Ich wollte auch deinen Wrapper nicht schlechtmachen, wenn du ihn benutzt, wird er für deine Zwecke geeignet sein. Die Fragen waren ernst als Fragen gemeint.

Ich wollte nur endlich mal eine Antwort auf die Frage erhalten, wo PHP einfach ist. Ich bin etwas enttäuscht von den immer wieder auftretenden behauptungen, dass es einfach sei, die dann auf Nachfrage nie untermauert werden können, und dann aber unüberprüft das nächste mal einfach wiederholt werden.

1. Wenn dem so ist, würde das imho meinen Standpunkt belegen, weil dann eben PHP NICHT besonders einfach, sondern allerhöchstens vergleichbar einfach wäre.
2. Dein Wrapper ist "ähnlich leicht" wie die 7 Zeilen python? Ich bleibe dabei, PHP stellt sich hier eher schlechter als besser an.

sry, aber äpfel mit birnen vergleichen und mir das dann noch präsentieren, da musst dir schon nen anderen suchen :)


Ich habe den Vergleich hier nicht angestellt. Du hast (in meinen Augen) in etwa gesagt: "Dass der PHPcode im Beispiel kein Fehlerbehandlung hat, kann durch etwas wie meinen Wrapper umgangen werden", womit du den Vergleich getätigt hast.

und wenn dir der gedanke nicht gefällt selbst hand anzulegen könntest du ja auch bestehende libs zugreifen, in python stört dich das ja auch nicht, warum ist das dann in php so ein großes problem für dich?

Auf bestehende Libs zuzugreifen ist was anderes als sie selber zu schreiben. Ich habe selber einen ganzen haufen bibliotheken mit- oder selbst geschrieben, die diverse unzulänglichkeiten von PHP versuchen zu kompensieren.
Aber für den Punkt, dass PHP einfach ist, kann das neuschreiben von Bibliotheken kein Argument sein.

Wozu? all das, was dein Beispiel kann (ausser vielleicht das querylogging) kann die python-db-api schon, Ausserdem kann sie noch einiges, was dein Wrapper nicht kann

wann hat der schw**zvergleich begonnen?

Fass das bitte nicht als Beleidigung, sondern als Frage auf. Welche Funktionen würdest du da reinprogrammieren wollen?
Bitte bedenke, dass Post, auf das du antwortetest bezog sich ausdrücklich auf die Behauptung PHP wäre einfach (von nocta).

und bitte zeige mir wo ich irgendwo irgendwas über die einfachheit von php behaupte oder lobe.


S.O., das habe ich angenommen, da du dich direkt auf mein Post bezogst., und gegenargumente brachtest. Das finde ich auch jetzt nicht so aus der Luft geholt.

aber ich glaub wir schaffen das, solltest mal in wien sein lad ich dich gern auf ein getränk ein und lass mir das mit der versteckten oo sache erklären ;)

Werd ich gerne annehmen, allerdings sollte ich wohl die Getränke bezahlen, um meine (unbeabsichtigte) Unhöflichkeit auszugleichen.

Und um jetzt nochmal auf den Vergleich zurückzukommen: Sogesehen ist die MySQL-Klasse dann auch nur ein zusätzliches Modul, welches du nicht gegen die 7 Zeilen Python abwägen darfst, sondern du dürftest nur die 7 Zeilen PHP und die 7 Zeilen Python vergleichen.

Genau das war mein ürsprünglicher Vergleich, und da ging es mir weniger um die Zeilen (da liegt PHP mit 6 Zeilen vorne), sondern eben um die Einfachheit.
Ich bin mir ziemlich sicher (da ich das schon diversen Programmierneulingen erklärt hab), dass z.B. ein "for row in cursor.fetchall()" einfacher, sowohl vom verstehen als auch vom lesen ist, als ein "while ($row = mysql_fetch_array($result)) ist. Gleiches gilt für die handles $link und $result, die zu verstehen neulinge meist Probleme haben, und immer durcheinandergeraten was das $result, was die $rows sind.
Ich habe sogar gegenteilig den Eindruch, dass der PHP-Code so kompliziert ist, dass die meisten ihn nur als gottgegebenes Snippet behandeln, und ohne zu verstehen in ihre applikationen Kopieren.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 23. Oktober 2007, 11:48

keppla hat geschrieben:Ich bezweifele die immer wieder zitierte Einfachheit, die in jeder Diskussion um PHP als Argument genutzt wird, die mir aber bisher niemand belegen konnte.


Vielleicht ist die Auffassung damit zu begründen, das es im Netz viel mehr Beispiele in PHP gibt. Wenn man schneller ein passendes Code-Stückchen für sein Problem findet, kommt einen die Sprache einfacher vor. Das hat aber nichts damit zu tun ob bestimmte Dinge einfacher und schöner zu Implementieren sind.

Man muss eingestehen das man im Netz einfach viel mehr Informationen über PHP findet, als für Python. Das ist sehr schade...

Noch was anderes: Eines der wichtigsten Punkte für mich, Python statt PHP zu nutzten, ist die Flexibilität von Python. Mit Python kann man auch außerhalb des Webs was anfangen und das Plattform unabhängig. PHP ist eigentlich nur fürs Web gedacht, auch wenn man es für andere Dinge missbrauchen kann. Python ist halt eine Sprache für alles. Das ist für mich das k.o. Kriterium für PHP.

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]