Avatar billede nothingaqua Nybegynder
08. december 2006 - 23:05 Der er 4 kommentarer

Tjek om en fil på nettet er et html-dokument under en hvis str.

Hej Alle,

Jeg er ved at udbygge et PHP script der skal kunne crawle data fra en række websider.

Af og til forsøger den at hente pdf-filer, exe-filer, iso-filer, musik og film osv. Med det resultat at hele scriptet går i stå, og den sluger alt RAM.

Jeg vil ikke hente de filer ned, så jeg skal finde en løsning, hvor den nøjes med at kigge på html og ttxttdokumenter, under en hvis størrelse.

Jeg tror ikke en løsning er holdbar, hvis den kun kigger på filendelsen, da man har mulighed for at lave en .html-fil, med nogle andre header...


Nogen forslag?
Avatar billede coderdk Praktikant
09. december 2006 - 17:01 #1
Du skal kigge på content-type... Mao kan du ikke bruge file_get_contents eller lignende, men er nødt til at bruge cURL eller fsockopen og lave dine requests "råt" så at sige...
Avatar billede coderdk Praktikant
09. december 2006 - 17:02 #2
(og måske kigge på Content-Length også, hvis den da er der)
Avatar billede nothingaqua Nybegynder
16. december 2006 - 12:19 #3
Jeg fik ikke lige fat i den første, besked.

Coderdk mit problem er at jeg skal lave en forespørgsål på en side, som gør at jeg kun får headeren retur.

Se et eksempel fra min browser

GET /stream.php HTTP/1.1
Host: 127.0.0.1
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://127.0.0.1/
Cookie: __utma=96992031.327575513.1166266906.1166266906.1166266906.1; __utmb=96992031; __utmc=96992031; __utmz=96992031.1166266906.1.1.utmccn=(direct)|utmcsr=(direct)|utmcmd=(none); AJSTAT_ok_pages=2; AJSTAT_ok_times=1
Cache-Control: max-age=0

Det er så det her jeg kun vil have retur.

HTTP/1.x 200 OK
Date: Sat, 16 Dec 2006 11:13:27 GMT
Server: Apache/2.2.3 (Win32) PHP/5.2.0RC7-dev
X-Powered-By: PHP/5.1.6
Content-Length: 440
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html


SÅ dte jeg skal have brygget sammen er en funktion hvor jeg angiver en url, og så får headeren retur. Anyway jeg beder dig ikke om at lave funktionen :) Jeg skal bare finde måde at hive retur headeren ud :) Gav det mening?
Avatar billede coderdk Praktikant
17. december 2006 - 04:27 #4
Se dette eksempel:

<?php

    if ( $fp = fsockopen( "www.google.dk", 80, $ern, $ers, 3 ) )
    {
        $request = "HEAD /intl/en_com/images/logo_plain.png HTTP/1.1\n"
                  ."Host: www.google.dk\nConnection: Close\n\n";
        fwrite( $fp, $request );
        $res = "";
        while ( !feof( $fp ) )
        {
            $res .= fread( $fp, 1024 );
        }
        echo "<pre>$res</pre>";
    }
    else
    {
        echo "Fandt intet... $ern: $ers";
    }

?>

Den bruger HEAD i stedet for POST/GET og giver dig vist det du skal have :)
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