PHP url/filetype controle

Pagina: 1
Acties:
  • 416 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste Tweakers,

Ik heb een videoclips site www.clibba.com. Met allemaal flv bestanden die direct gelinkt worden naar youtube dailymotion, metacafe etc...

Gebeurt zo dat er een video in youtube of dailymotion etc. wordt verwijderd waarvan ik totaal afhankelijk bent. Mijn bezoekers zullen hierbij niet tevreden zijn met niet werkende video's. Heb wel een optie waar mijn bezoekers mij kunnen rapporteren. Maar ik zou het fijn vinden als ik het volgende ook hier beschikt.

Voor degene die niet begrijpen wat ik bedoel met het directe link naar flv bestanden zie volgende. Het directe links kunnen worden opgehaald bijvoorbeeld op www.keepvid.com

Hierbij wil ik geautomatiseerde systeempje maken waarvan mijn directe links uit mijn database worden gecontroleerd of deze nog beschikbaar zijn. Zo niet in mijn lijst voegen met niet werkende links zodat ik makkelijk en snel overzicht hebt om te verbeteren.

Google'en en zoeken naar oplossing heb ik gedaan. Ook zelf proberen scripting bedenken.
Op http://nl2.php.net/manual/nl/function.file-exists.php onderaan zijn aardige functie met url_exists() waarvan ik ook gebruik van heb gemaakt.

Het probleem is juist. Hoe kan je bepaalde pagina welke een 404 error toont, onderscheiden van de de status dat een pagina niet meer bestaat.
Het zou helemaal mooi zijn als iedereen op internet voor een niet bestaande site/pagina een 404 Not Found header meestuurde.

Dacht misschien een oplossing met filetype controleren met:
header("Content-Type: video/x-flv");
Namelijk alle links dat gecontroleerd worden heeft een content-type "video/x-flv".

Ik zocht naar oplossingen hiervoor.

Alvast Bedankt

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Afhankelijk wat je precies opvraagt kan je kijken naar de Response Code :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Je zou hier mee kunnen gaan spelen...

http://www.getid3.org/

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 19:47

TeeDee

CQB 241

Als je netjes een 404 krijgt, kan je daar op controleren. Zoals gorgi_19 aangeeft: kijk je response.code eens.

Mocht je geen 404 krijgen, zou je kunnen zoeken in de output naar bijvoorbeeld een .flv file. Staat deze er niet, kan jij ook netjes een melding geven.

Heart..pumps blood.Has nothing to do with emotion! Bored


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor snelle reactie's

Dat is het probleem juist. Het zou helemaal mooi zijn als iedereen op internet voor een niet bestaande site/pagina een 404 Not Found header meestuurde.

En de directe links eindigen niet op met .flv

Voorbeeld links dat gecontroleerd worden.

http://chi-v269.chi.youtu...ideo?video_id=qjuOi9RyLEI
http://74.125.10.20/get_video?video_id=vduw9uGrNqY
http://lax-v214.lax.youtu...ideo?video_id=ohp6IcZVTsc

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Alle links geven bij mij of een 404 of 400 terug?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Klopt had ik effe uit mijn lijst gehaald wat gerapporteerd werden door mijn bezoekers die niet werkte.

Hierbij de werkende links:
http://chi-v285.chi.youtu...ideo?video_id=j6z7A-LMmsw
http://ash-v284.ash.youtu...ideo?video_id=xsRWpK4pf90

[ Voor 26% gewijzigd door Verwijderd op 13-11-2007 11:23 ]


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 ziet het probleem niet? De niet werkende links geven een responsecode van 404 of 400 terug. Die kan je toch uit de header vissen? :?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bijvoorbeeld deze link geeft Bad request.

http://74.125.10.20/get_video?video_id=vduw9uGrNqY

Hoe moet ik dit uitvissen?

Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

gewoon een scriptje schrijven dat een HEAD-request doet naar die pagina's en dan de response code uitlezen, wanneer die begint met een 4 kan je er vanuitgaan dat de link niet meer bestaat.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Verwijderd schreef op dinsdag 13 november 2007 @ 11:47:
Bijvoorbeeld deze link geeft Bad request.

http://74.125.10.20/get_video?video_id=vduw9uGrNqY

Hoe moet ik dit uitvissen?
... je leest toch niet de HTML uit die je terugkrijgt hoop ik, maar de headers?

Daarin staat bij die link namelijk het volgende:
code:
1
2
3
4
5
6
Date: Tue, 13 Nov 2007 10:55:21 GMT
Content-Type: text/html; charset=UTF-8
Server: gvs 1.0
Content-Length: 1344

400 Bad Request

;)

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik las de html uit hoe is het mogelijk de headers uit te lezen dan?

[ Voor 77% gewijzigd door Verwijderd op 13-11-2007 11:57 ]


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Alles wat geen 200 teruggeeft niet accepteren, behalve 301/302 die je gewoon volgt. :)

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Verwijderd schreef op dinsdag 13 november 2007 @ 11:56:
Ik las de html uit hoe is het mogelijk de headers uit te lezen dan?
Sorry, maar íets meer eigen inzet mag wel. We gaan niet alles voorkauwen, zeker niet met meer dan twee miljoen hits op google op je vraag.

[ Voor 9% gewijzigd door CodeCaster op 13-11-2007 11:59 ]

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Sorry maar ik dacht dat jij headers uit las via het browser.

De volgende had ik eerst namelijk nu heb ik het stukje van 400 Bad Request ook gevoegd.
Maar het gaat ontzettend traag?
code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
    function url_exists($url){
        $url = str_replace("http://", "", $url);
        if (strstr($url, "/")) {
            $url = explode("/", $url, 2);
            $url[1] = "/".$url[1];
        } else {
            $url = array($url, "/");
        }

        $fh = fsockopen($url[0], 80);
        if ($fh) {
            fputs($fh,"GET ".$url[1]." HTTP/1.1\nHost:".$url[0]."\n\n");
            if (fread($fh, 22) == "HTTP/1.1 404 Not Found") { return FALSE; }
            elseif (fread($fh, 22) == "HTTP/1.1 400 Bad Request"){ return FALSE; }
            else { return TRUE; }

        } else { return FALSE;}
    }
?>

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Definieer traag? Een request doet er iig wel 2x zo lang over ja :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Zien jullie hier een mogelijkheid voor verbetering?

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Ehm, 2x een fread doen zorgt er in dit geval voor dat je nooit die 400 kan lezen ;)
Verder gaat het enkel om dat getal 40x, niet om de tekst die erachter staat, die mag namelijk door de webserver zelf bedacht worden. Er kan dus ook staan:
HTTP/1.1 404 Dit bestaat niet


:)

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Iedere X uur controleren middels een gepland (cron) script, en de resultaten in de database opslaan?

Ben alleen wel benieuwd of dat leuk gevonden gaat worden door de videohostingsites, als jij elk uur 200? 2000? 20.000? filmpjes gaat controleren.

Bouw anders een iets slimmer systeem, bijvoorbeeld dat alleen filmpjes die de afgelopen 24 uur zijn bekeken gecontroleerd worden.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hoe kan je 1x fread laten lopen dat beide controleer 400 - 404 oftwel 40x

Ik heb inderdaad veel videoclips stijgende ook 5.000 momenteel.
Ik had meer iets bedacht met 20 video's controleren en dan sleep() functie doen van 30 seconden.

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Doe een HEAD ipv een GET.

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

Verwijderd schreef op dinsdag 13 november 2007 @ 12:23:
Hoe kan je 1x fread laten lopen dat beide controleer 400 - 404 oftwel 40x
Dat is wel héél simpel hoor...
PHP:
1
2
3
4
$bla = fread(bla);
if (substr($bla, 0, 10) = "HTTP/1.1 4") {
 echo "error, blalala";
}

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op dinsdag 13 november 2007 @ 12:23:
Hoe kan je 1x fread laten lopen dat beide controleer 400 - 404 oftwel 40x
daar hebben ze variabele voor uitgevonden, daarmee kan je (tijdelijk) informatie in opslaan...

Acties:
  • 0 Henk 'm!

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

var_dump($info);
// kijk eens naar $info['http_codes']


zo iets... even uit het handje getikt/geplakt

Programmer - an organism that turns coffee into software.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@LuCard
Begrijp even niet hoe je het moet gebruiken wat jij heb gegeven.

Ik kwam zo uit zie mijn code hieronder
Beide resultaten geven FALSE terug terwijl 1 daar van werkende link is en dat lang duurt om een resultaat te geven.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
<?php
    function url_exists($url){
        $url = str_replace("http://", "", $url);
        if (strstr($url, "/")) {
            $url = explode("/", $url, 2);
            $url[1] = "/".$url[1];
        } else {
            $url = array($url, "/");
        }

        $fh = fsockopen($url[0], 80);
        if ($fh) {
            fputs($fh,"HEAD".$url[1]." HTTP/1.1\nHost:".$url[0]."\n\n");
            if (fread($fh, 22) == "HTTP/1.1 4") { return FALSE; }
            else { return TRUE; }

        } else { return FALSE;}
    } 
    // werkende link
    echo "<b>werkende link</b><br>";
    $starttimer = time()+microtime();
    $link = "http://chi-v285.chi.youtube.com/get_video?video_id=j6z7A-LMmsw";

    if(url_exists($link)) {

        echo "Het doet het";

    }else{

        echo "Het doet het niet!!!";

    }
    $stoptimer = time()+microtime();
    $timer = round($stoptimer-$starttimer,4);
    echo $timer;
    echo "<br><br><br>";
    // niet werkende link

    echo "<b>Niet werkende link</b><br>";
    $starttimer = time()+microtime();
    $link = "http://74.125.10.20/get_video?video_id=vduw9uGrNqY";

    if(url_exists($link)) {

        echo "Het doet het";

    }else{

        echo "Het doet het niet!!!";

    }
    $stoptimer = time()+microtime();
    $timer = round($stoptimer-$starttimer,4);
    echo $timer;

?>

Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op dinsdag 13 november 2007 @ 12:50:
@LuCard
Begrijp even niet hoe je het moet gebruiken wat jij heb gegeven.
kijk in de php manual voor curl
Ik kwam zo uit zie mijn code hieronder
Beide resultaten geven FALSE terug terwijl 1 daar van werkende link is en dat lang duurt om een resultaat te geven.

PHP:
1
            if (fread($fh, 22) == "HTTP/1.1 4") { return FALSE; }
Heb je uberhaupt ooit iets met PHP gedaan :? dit zal namelijk NOOIT "false" returnen, kijk maar in de manual bij "fread" en de ==-operator om te zien waar je denk fout zit.

Acties:
  • 0 Henk 'm!

  • CodeCaster
  • Registratie: Juni 2003
  • Niet online

CodeCaster

Can I get uhm...

PHP:
1
if (fread($fh, 22) == "HTTP/1.1 4") { return FALSE; }


Duh, "HTTP/1.1 4" zijn géén 22 tekens. Je moet écht even wat meer zelf proberen en debuggen voordat je je code hier neergooit.

https://oneerlijkewoz.nl
Op papier is hij aan het tekenen, maar in de praktijk...

Pagina: 1