Avatar billede kpdk Nybegynder
01. marts 2010 - 01:28 Der er 2 kommentarer

Håndtering / hindring af fopen() warnings

Jeg har gennem det sidste stykke tid arbejdet på et script som læser en given URI og parser dens XML.

Mit problem er at nu og da kommer fopen() med en warning som denne:

Warning: fopen(http://url.com) [function.fopen]: failed to open stream: HTTP request failed! in /path/to/file.php on line XXX

Min kode der rent faktisk åbner URL'en er således (udsnit af det, der rent faktisk gør noget):

[...]
$fhandle = fopen($uri, "r");
$data = "";

if ($fhandle !== false) {
    while (!@feof($fhandle)) {
        $data .= fread($fhandle, 81920);
    }
}
[...]

Og i 19 ud af 20 gange virker det glimrende, men der er bare nogle gange hvor at PHP kaster en warning.

Mit primære spørgsmål er - kan ovenstående kode laves bedre eller beror denne fejl på, som lidt er min grimme mistanke, timeout el. lign. ved connection til URL'en.
Avatar billede showsource Seniormester
01. marts 2010 - 04:56 #1
Den simple er nok:

$data = "";

if ($fhandle = @fopen($uri, "r")) {
    while (!@feof($fhandle)) {
        $data .= fread($fhandle, 81920);
    }
}
Avatar billede repox Seniormester
01. marts 2010 - 09:50 #2
Og den avancerede/pæne er noget ala:
<?php

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $uri);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // kan drille med safe_mode=On; slet linien hvis det er tilfældet.
   
    $data = curl_exec($ch);   

?>
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