or methode

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • or methode

    ich würde gerne fehler abfangen, mit or...

    die frage nun, bei folgender code zeile:

    PHP-Code:
    $this->tpl_data=implode("",file($settings['tpl_path'].$tpl_file)) or test(); 
    würde da erst der fehler ausgegeben, wenn implode fehlschlägt, oder nimmt er "or" und führt in diesem fall die funktion test() aus ?
    EDIT:
    oh man, wie komme ich drauf etwas zu fragen ohne es selber auszutesten

    ok, er gibt den fehler aus...

    macht es im obigen beispiel sinn, die ausgabe zu unterdrücken mittels @ ?
    Zuletzt geändert von ; 05.02.2008, 12:59.

  • #2
    ersteres. Ein Vergleich wird nur soweit ausgewertet bis sein Ergebnis feststeht.
    ich glaube

    Kommentar


    • #3
      imho wirst du, wenn du die Standardfehlermeldungen von PHP unterdrücken und mit einer eingene Fkt arbeiten willst, den Funktionen @ voranstellen müssen. Also wenn du eine "eigene" Fehlerfunktion willst wirst du die @ setzen müssen.

      Gruss

      tobi

      p.s. allenfalls wäre try-catch und die PHP Exception etwas für dein Fehlerhandling
      Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

      [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
      Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

      Kommentar


      • #4
        ok danke,
        genau das möchte ich erreichen, da ich an der stelle ja weiss, was genau schief gehen kann werde ich eine eigene fehlerroutine bauen

        Kommentar


        • #5
          Bevor du da weiterarbeitest, werf ich einfach mal Exceptions in den Raum. Immerhin kann man so langsam auch mit PHP was anfangen.

          Kommentar


          • #6
            ...werf ich einfach mal Exceptions in den Raum
            Dann haben wir die Exception zweimal im Raum
            Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

            [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
            Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

            Kommentar


            • #7
              ups!

              Kommentar


              • #8
                Dann fange ich die einfach mal mit einem Code Schnipsel

                PHP-Code:

                class MyException extends Exception
                {
                    private static 
                $error null;

                    public static function 
                handleMyError($errornr$errorstr)
                    {
                        
                self::$error $errorstr;
                    }

                    public static function 
                getMyError()
                    {
                        return 
                self::$error;
                    }
                }

                set_error_handler(array('MyException''handleMyError'), E_ALL);
                $this->tpl_data=implode("",file($settings['tpl_path'].$tpl_file));
                restore_error_handler();

                            try{

                                if (
                MyException::getMyError() !== null)
                                    throw new 
                MyException(MyException::getMyError());

                                
                // tue, was immer du tust, wenn kein Fehler auftritt

                            
                }catch(MyException $e){
                                
                // es trat ein Fehler auf, und den kannst du hier behandeln, z.B. mit
                                
                echo $e->getMessage();
                            } 

                Kommentar


                • #9
                  man könnte aber auch ganz althergebracht vorher überprüfen, ob das argument für implode ein array ist

                  Kommentar


                  • #10
                    Original geschrieben von 3DMax
                    man könnte aber auch ganz althergebracht vorher überprüfen, ob das argument für implode ein array ist
                    Ändert aber nix am Problem, weil file() als Operation an sich schon Fehlerträchtig ist.

                    Kommentar


                    • #11
                      Original geschrieben von bla$ter
                      Ändert aber nix am Problem, weil file() als Operation an sich schon Fehlerträchtig ist.
                      äh, file_exists is_readable ?
                      ich merke schon, es scheint out zu sein, im programm überprüfungen durchzuführen.

                      Kommentar


                      • #12
                        Original geschrieben von 3DMax
                        äh, file_exists is_readable ?
                        ich merke schon, es scheint out zu sein, im programm überprüfungen durchzuführen.
                        Ne, du benutzt es einfach falsch. Mit file_exists() prüfst du auf die physische Existenz auf der Platte, mit is_readable() prüfst du, ob der PHP Prozess berechtigt ist, das File zu lesen. Das würde also nur bedeuten, das Dateisystem hat nichts dagegen, das du das File liest, aber lesen dürfen und ein Handle darauf bekommen sind immer noch zwei paar Schuhe.

                        Kommentar


                        • #13
                          Original geschrieben von bla$ter
                          Das würde also nur bedeuten, das Dateisystem hat nichts dagegen, das du das File liest, aber lesen dürfen und ein Handle darauf bekommen sind immer noch zwei paar Schuhe.
                          aha - wenn schon das dateisystem nichts dagegen hat, wer könnte dann deiner meinung nach etwas dagegen haben?

                          Kommentar


                          • #14
                            Original geschrieben von 3DMax
                            aha - wenn schon das dateisystem nichts dagegen hat, wer könnte dann deiner meinung nach etwas dagegen haben?
                            Zum Beispiel der Prozess, der ein Lock auf das File hält, is_readable prüft nämlich nur die Dateirechte, ohne die Datei dabei zu öffnen. Lässt sich ganz einfach anhand der Zugriffszeiten der Dateien nachschlagen.

                            Kommentar


                            • #15
                              Original geschrieben von bla$ter
                              Zum Beispiel der Prozess, der ein Lock auf das File hält, is_readable prüft nämlich nur die Dateirechte, ohne die Datei dabei zu öffnen.
                              ganz sicher? also ich glaub's erst richtig, wenn ich es selbst überprüft habe.

                              aber irgendwie gelingt es mir nicht die datei zu sperren. eben gestestet auf windows und linux, mit identischem ergebnis.

                              PHP-Code:
                              $file 'testfile.txt';


                              function 
                              test_file($file)
                              {
                                
                              $str '<br />';
                                if(
                              file_exists($file))
                                {
                                  
                              $str .= 'Schön, die Datei existiert schon mal ...<br />';
                                }

                                if(
                              is_readable($file))
                                {
                                  
                              $str .= '... und lesbar ist sie auch noch :)<br />';
                                }
                                return  
                              $str.'-------------------<br />';
                              }

                              echo 
                              'Vorher: '.test_file($file);

                              $fp fopen($file'w+');
                              if(
                              flock($fpLOCK_EX))
                              {
                                echo 
                              'Datei ist jetzt gesperrt<br />';
                              }

                              echo 
                              'Danach: '.test_file($file);


                              echo 
                              'Und jetzt versuchen wir die Datei zu öffnen - ';
                              if(
                              fopen($file'w+'))
                              {
                                echo 
                              'OK';
                              }
                              else
                              {
                                echo 
                              'FAILED';

                              ausgabe:
                              Code:
                              Vorher: 
                              Schön, die Datei existiert schon mal ...
                              ... und lesbar ist sie auch noch :)
                              -------------------
                              Datei ist jetzt gesperrt
                              Danach: 
                              Schön, die Datei existiert schon mal ...
                              ... und lesbar ist sie auch noch :)
                              -------------------
                              Und jetzt versuchen wir die Datei zu öffnen - OK
                              irgendwie erhalte ich immer zugriff auf die datei

                              Kommentar

                              Lädt...
                              X