gibs sowas wie on error resume next ?

Alles, was PHP betrifft, kann hier besprochen werden.

gibs sowas wie on error resume next ?

Postby Heini_net » 19. March 2004 23:11

Hi Leutz..

ich verwend so nen Status indicator was ich mit php auswerten lassen will.

Da ich zum includen einen port ansprechen muss und es manchmal beim status indicator der auf dem jeweiligen port ist zu fehlern kommt, meldet php natürlich auch fehlern und rümpelt die phperror.log voll z.b hier paar entrys:


[19-Mar-2004 23:01:47] PHP Warning: main(): php_network_getaddresses: gethostbyname failed in C:\webpages\osi\index.php on line 11

[19-Mar-2004 23:01:47] PHP Warning: main(http://...@hotmail.com): failed to open stream: No error in C:\webpages\osi\index.php on line 11

[19-Mar-2004 23:01:47] PHP Fatal error: main(): Failed opening required 'http://...@hotmail.com' (include_path='.;\xampp\php\pear\') in C:\webpages\osi\index.php on line 11


Drum frage ich ob es eine abfang methode gibt die die Prozedur abbricht sobald das ergebnis fehlerhaft ist ?

mfg. Heini
User avatar
Heini_net
 
Posts: 520
Joined: 25. July 2003 15:43
Location: hier

Re: gibs sowas wie on error resume next ?

Postby Wiedmann » 20. March 2004 00:47

Heini_net wrote:Drum frage ich ob es eine abfang methode gibt die die Prozedur abbricht sobald das ergebnis fehlerhaft ist ?


Im Prinzip wie in jeder anderen Sprache auch:
1. Man deaktiviert die Fehlerbehandlung für den 1. Befehl auf den weiteren Aufbauen ==> @
2. Man überprüft das Ergebnis und verfährt dementsprechend ==> if / if not

Code: Select all
<?php
    $verbindung = @fopen('http://www.server.de:80/', 'r');
    if (!$verbindung) {
        die 'Server nicht erreichbar!';
    }
   ....
?>
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Heini_net » 20. March 2004 07:59

der fopen befehl den ich wenn die verbindung stimmt mit echo ausgebe, funktioniert nicht..

statt der eigentliche code (biddatei) kommt nur sowas wie Resource id #3
raus.

Mfg. Heini
User avatar
Heini_net
 
Posts: 520
Joined: 25. July 2003 15:43
Location: hier

Postby Heini_net » 20. March 2004 08:40

hab einfach ein @ beim alten code gesetzt sodass wenn evtl. mal nen fehler kommen sollte nicht geloggt wird da es kein php fehler ist.

Mfg. Heini
User avatar
Heini_net
 
Posts: 520
Joined: 25. July 2003 15:43
Location: hier

Postby Wiedmann » 20. March 2004 12:19

der fopen befehl den ich wenn die verbindung stimmt mit echo ausgebe, funktioniert nicht..
statt der eigentliche code (biddatei) kommt nur sowas wie Resource id #3
raus.

Was macht der fopen() - Befehl ? Schon mal ins PHP-Handbuch geschaut??? ;-)

Mit fopen() besorgst du dir nur einen Handler (Ressource-ID) für die URL/Datei/oder was immer du geöffnet hast, über die du die Ressource bei weiteren Befehlen ansprichst.

Ein echo fopen() gibt dir dann halt diese ID aus. Wenn fopen() nicht funktioniert hat (Ressource nicht erreichbar), liefert es FALSE zurück.

Und das kannst du ja dann testen.
- Ressource mit fopen() öffnen und Fehlerausgabe mit @ verhindern
- Weitermachen im Code nur wenn die zurückgelieferte ID nicht FALSE ist.

:idea:

PS: Das Bild bekomst du ja dann erst mit einem Befehl wie fgets()/fread() o.ä. Und die greifen dann auf die Ressource anhand der ID zu. Sprich: Wenn du keine ID hast, läßt du diese Befehle erst gar nicht ausführen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Heini_net » 20. March 2004 12:30

hi..

ja danke für die detailreichen Informationen... hatte die ganze zeit auf der php.net seite nach den funktionen geguckt aber nix gefunden mit dem ich was anfangen könnte.. hab anscheinend was übersehen..

aber habs ja inzwischen lösen können indem ich das @ zeichen vor dem include oder require setze.

Mfg. heini
User avatar
Heini_net
 
Posts: 520
Joined: 25. July 2003 15:43
Location: hier

Postby Wiedmann » 20. March 2004 12:56

Schön das es geklappt hat. :-)

Dafür hab ich eines jetzt verstanden. Der Code mit fopen() usw. liegt gar nicht bei dir auf dem Server, sondern auf einem anderen. Du machst also einen Include() auf den fremden Code, und kannst deshalb den besagten Code auch nicht verändern. Da hätte es natürlich gereicht beim Include einen @ davor zumachen.

Hmm. Irgendwas wird der Code ja zurückliefern, gerade das Bild oder eine gesetzte Variable. Das kannst du ja Abfragen und weißt dann auch in deinem Code ob der Include funktioniert hat. Oder du testest vor dem Include() ob der Server erreichbar ist (grad mit fopen) und führst den Include nur aus, wenn das funktioniert hat.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Heini_net » 20. March 2004 13:10

hi..

Ich weiss das der Server erreichbar ist da es nur ein Softwareserver ist wie Apache nur halt etwas anderes und es sitzt auf einem Localhost Port.

Nur manchmal liefert das Teil falsche ergebnisse oder gar keins und deswegen kommt in php so ne fehlermeldung.. und die will ich ignorieren da das Teil nämlich sonst immer funktioniert und ich über php nix machen kann.

Mfg. Heini
User avatar
Heini_net
 
Posts: 520
Joined: 25. July 2003 15:43
Location: hier

Postby Wiedmann » 20. March 2004 13:19

Dann versteh ich es doch nicht richtig *grübel*

Mit Include importierst du ja PHP-Code aus einer Datei in deinen Code und wird dann bei dir an der Stelle eingebunden und ausgeführt wo das Include steht...

Mit einem @ vor dem Include kannst du also nur einen Fehler beim "Includen" an sich abfangen... Was rufst du denn von dem anderen Server ab? Wenn das keine php-Datei ist, ist Include auf jedenfall der falsche Befehl.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Heini_net » 20. March 2004 13:39

hi..

ich verwende statt include eigentlich require..

ich versuchs mal mit dem anderen Server zu erklären.

Ich wähle ein Port an was nur über localhost anzusprechen geht da es von aussen gesperrt is z.b port 8080

z.b require 'http://localhost:8080/die werte die übergeben werden';

die ausgabe ist im normalfall immer eine Bilddatei und wenn der server einen falschen wert ausgibt dann isses z.b nix.

mir fiehl kein anderer befehl ausser include und requiere ein um dies abzufragen da mir fopen zu umständlich und überflüssig mit den id's ist..

Mfg. Heini
User avatar
Heini_net
 
Posts: 520
Joined: 25. July 2003 15:43
Location: hier

Postby Wiedmann » 20. March 2004 14:04

Selbst mit Require kannst du nur eine externe php-datei in deinen Code einbinden.... Oder das Ergebsiss von einem Script, falls dieser schon auf dem Zielserver geparsed wird. Da hast du recht. Da kannst du ja dann das Ergebnis überprüfen. (Falls dich in deinem weiteren Code überhaupt interessiert wie das Ergebniss war)

Nachtrag:
Ist in dem Fall zwar nicht mehr so wichtig:
Es gäbe da ja auch noch die Funktion "set_error_handler"....
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests