Sven: Fehler im Apache Error-Log

Hallo,

ich durchforste grad meine error.log und fixe alles was ich so finde...

Dabei ist mir aufgefallen, dass zb folgende Abfrage immer als Fehler gemeldet wird:

if($_POST['name']) { ...

Es muss wohl heißen:

if(isset($_POST['name']) { ...

Funktionieren tut auch das obere Beispiel, aber es erzeugt eben einen Eintrag im Fehlerprotokoll. Inwiefern wirkt sich das aus? Wird die Abarbeitung des Scripts evtl. langsamer dadurch? Sollte ich alle meine Scripte jetzt abändern?

Lg
Sven

  1. Hallo,

    ich durchforste grad meine error.log und fixe alles was ich so finde...

    Dabei ist mir aufgefallen, dass zb folgende Abfrage immer als Fehler gemeldet wird:

    if($_POST['name']) { ...

    Es muss wohl heißen:

    if(isset($_POST['name']) { ...

    Da hast du prinzipiell recht, und schöner wäre es. PHP nimmts allerdings mit den Typen nicht so genau und wandelt auch strings in boolean um (Leerer String --> false, Nicht leerer String --> true, nachzulesen auf http://at2.php.net/manual/de/language.types.boolean.php#language.types.boolean.casting).

    Funktionieren tut auch das obere Beispiel, aber es erzeugt eben einen Eintrag im Fehlerprotokoll. Inwiefern wirkt sich das aus? Wird die Abarbeitung des Scripts evtl. langsamer dadurch? Sollte ich alle meine Scripte jetzt abändern?

    Soweit ich das verstanden habe muss PHP einen Cast durchführen, infwiefern es das Script verlangsamt weiß ich leider nicht.

    Lg
    Sven

    lg

    1. Hallo,

      if(isset($_POST['name']) { ...

      Da hast du prinzipiell recht, und schöner wäre es. PHP nimmts allerdings mit den Typen nicht so genau und wandelt auch strings in boolean um (Leerer String --> false, Nicht leerer String --> true, nachzulesen auf http://at2.php.net/manual/de/language.types.boolean.php#language.types.boolean.casting).

      Das wird hier nicht das Problem sein. Wird das Script nicht mit der angegebenen POST-Variabe 'name' abverlangt, greift $_POST['name'] ins Leere, weil es den Index 'name' nicht gibt. Das dürfte die Fehlermeldungen verursachen. Sonst stimmt, was Du schreibst.

      Gruß aus Berlin!
      eddi

      --
      "Ach! ...die größte Freud’
      ist doch die Zufriedenheit!!!"
      Wilhelm Busch und Multiple exclamation marks
  2. Hallo Sven,

    Inwiefern wirkt sich das aus?

    es wird in bestimmten Fällen eine Fehlermeldung protokolliert.

    Wird die Abarbeitung des Scripts evtl. langsamer dadurch?

    Wenn PHP per CGI operiert, ist davon auszugehen. Wir reden aber über milli oder micro Sekunden. Zu merken ist das nicht, schön ist es aber auch nicht.

    Sollte ich alle meine Scripte jetzt abändern?

    Ja; alle.

    Gruß aus Berlin!
    eddi

    --
    "Ach! ...die größte Freud’
    ist doch die Zufriedenheit!!!"
    Wilhelm Busch und Multiple exclamation marks
  3. (Hallo|Hi(ho)|Tag|Mahlzeit) Sven,

    Dabei ist mir aufgefallen, dass zb folgende Abfrage immer als Fehler gemeldet wird:
    if($_POST['name']) { ...
    Es muss wohl heißen:
    if(isset($_POST['name']) { ...

    Funktionieren tut auch das obere Beispiel, aber es erzeugt eben einen Eintrag im Fehlerprotokoll.

    Den könntest du unterdrücken, indem du den @-Operator benutzt:

      
    if (@$_POST['gibts_nicht']) {  
      //  
    }  
    
    

    Aber @ verschweigt dir nicht nur wichtige Informationen, sondern verlangsamt auch noch die Scriptausführung. Also besser nicht benutzen.

    Inwiefern wirkt sich das aus? Wird die Abarbeitung des Scripts evtl. langsamer dadurch?

    Wahrscheinlich, schließlich muss ja der Fehler irgendwohin gemeldet werden. Schlimmer finde ich aber, dass dein Error-Log zugemüllt wird.

    Sollte ich alle meine Scripte jetzt abändern?

    Da du sicher nicht nur auf die Existenz eines Eintrags im POST-Array prüfst, sondern auch noch, ob dieser Eintrag keinen Leerstring enthält, empfehle ich dir den Einsatz der "Funktion" empty():

      
    if (!empty($_POST['name'])) {  
      // $_POST['name'] existiert und  
      // ist kein Leerstring  
    }  
    else {  
      // setze einen Default-Wert ein  
      // oder was auch immer  
    }  
    
    

    MffG
    EisFuX
    --
    Nichts ist dem Zuwachs an Wissen förderlicher, als nach einer Antwort korrigiert zu werden.