Avatar billede encorez Nybegynder
26. juni 2003 - 09:53 Der er 15 kommentarer og
2 løsninger

Fejl ved fopen

Hej

Jeg har lavet et lille script der henter/læser en fil på en server via internettet. Problemet er at jeg bruger fopen og denne kode helst skal stå inde i bodyen. Men hvis denne fil er utilgængelig bliver der udskrevet masse af fejlkode på. Fejl: "failed to open stream: HTTP request failed! HTTP/1.1 404 Object Not Found "

Og så skriver kommer der selvfølgelig også fejl på de efterfølgende liniekoder, fordi arbejde videre på det er skulle være blevet hentet.

Og det er jo ikke pænt. Så hvordan undgår man det.
Avatar billede erikjacobsen Ekspert
26. juni 2003 - 09:55 #1
if (@fopen("http://........")) {
  // koden den læser din fil
} else {
  print "Sorry";
}
Avatar billede erikjacobsen Ekspert
26. juni 2003 - 09:55 #2
if ($f=@fopen("http://........")) {      // ;)
Avatar billede jakoba Nybegynder
26. juni 2003 - 10:01 #3
du kan teste:

$fp = @fopen( "filnavn.xxx", "r" );  // prøv at åbne filen
        // @ foran funktionskaldet under trykker en evt fejlmelding

if ( $fp ) {  // hvis $fp fik en værdie
    // det lykkedes at åbne filen, så her skriver du din kode der bruger dataene fra den fil
    // ...
    fclose( $fp );    // luk filen igen
} else {
    // det lykkedes ikke at åbne filen. skrive noget andet.
    echo "Desværre, data fra 'filnavn.xxx' er ikke tilgængelige, men her er et billede af min hund:<br><img src='fido.jpg'>";
}
// og efter if sætningen fortsåtter du så med de dele af siden der ikke behøver data fra den fil.

mvh JakobA
Avatar billede xyborx Nybegynder
26. juni 2003 - 10:25 #4
Du kunne evt lade scriptet gemme filen lokalt, så hvis serveren i den anden ende bliver utilgængelig, så kan du indlæse backup'en istedet for. Så slipper du for at lade den anden server give dig nedetid :)
Avatar billede encorez Nybegynder
26. juni 2003 - 10:40 #5
jeg er lige begyndt at arbejde med disse funktioner, så jeg var ikke klar over at @ foran funktionen undertrykkede fejl. Så dem havde jeg fjernet, da jeg ikke så det gjorde nogen forskel. Men nu har jeg sat dem på, og nu kommer der inden fejlmeddellelser, selv om filen stadig er utilgængelig. Så egentlig synes jeg mit problem er løst, med mindre I siger at det så skaber andre problemer?
Avatar billede jakoba Nybegynder
26. juni 2003 - 10:43 #6
det er altid lidt risikabelt at undertykke fejl. så gør det ikke medmindre du VED der duer der du gør det.
Avatar billede erikjacobsen Ekspert
26. juni 2003 - 10:52 #7
Der er ingen grund til at lade en almindelig bruger se disse
beskedder. Har du en "if" på som vi siger, så er der vel ikke
flere problemer?

Senere versioner af PHP vil gøre dette lidt mere elegant.
Avatar billede encorez Nybegynder
26. juni 2003 - 11:11 #8
Dette er min kode:

$open = @fopen("http://www.fdsfdsf.dk/ad.asp?id=vers","r");    
    $read = @fread($open,15000);
    @fclose($open);
    $vers = urldecode($read);
    $open = @fopen("http://www.fjdsfdsf.dk/asdsa.asp?id=bog","r");
    $read = @fread($open,15000);
    @fclose($open);
    $bog = urldecode($read);

Og umiddelbart er det nok at sætte @ foran. Jeg kan godt se at hvis jeg havde mere kode der skulle udføres efter jeg havde brugt fopen på fil, så ville det blive nødvendigt med en if(){} eller hvis det nødvendigt med en anden fejlmeddelse
Avatar billede jakoba Nybegynder
26. juni 2003 - 11:18 #9
Jeg ville nok kalde det 'pænere' at bruge en if sætning. Så vil if sætningens struktur fortælle hvad det er der bliver udeladt når det ikke lykkes at åbne filen. uden den skal man lede dernedad for at finde ud af det.

PS: er det foreestne ikke to forskellige fopen kald, der hver for sig kan gå galt.
Avatar billede encorez Nybegynder
26. juni 2003 - 11:20 #10
det har du ret i. Jeg bør nok bruge en if.

jo, det er to forskellige kald, men det er meningen de skal tilgå den samme fil, bare med forskellige parametre, da de hente to forskellige tekster
Avatar billede erikjacobsen Ekspert
26. juni 2003 - 11:21 #11
Du skal vel foretage dig noget andet, hvis filen ikke kan åbnes: derfor "if"
Avatar billede encorez Nybegynder
26. juni 2003 - 11:29 #12
ja, det har du ret i. Jeg bør skrive noget andet tekst i variablen, hvis ikke filen kan åbnes.
Erik, du var først med hele if-tingen, læg et svar, så får du pointene.
Også tak til jakoba, som sædvanlig gode indlæg
Avatar billede erikjacobsen Ekspert
26. juni 2003 - 11:32 #13
Jokaba har nu da også bidraget ...
Avatar billede encorez Nybegynder
26. juni 2003 - 11:37 #14
rigtigt, men du var først med et rigtigt svar. Jeg hader at uddele point når der er flere der kommer med rigtige svar, hvad er fair???
Avatar billede erikjacobsen Ekspert
26. juni 2003 - 11:41 #15
Aner det ikke. Du kan afvise mit, og give dem til jakoba. Points er
inderligt ligegyldige, men når du nu hader at give dem til flere...
Avatar billede encorez Nybegynder
26. juni 2003 - 11:44 #16
Jakoba, smid et svar, så deler I de symbolske point
Avatar billede jakoba Nybegynder
26. juni 2003 - 15:48 #17
Ja lad os få en symbolsk deling :-))
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester