Toon posts:

[PHP] GetFileSize werkt niet op bepaalde server

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben bezig met een script dat de bestandsgroote van bestanden op allerlei servers kan checken, en daarmee meteen kan kijken of die bestanden ook werkelijk bestaan... maar om een of andere reden returned een bepaalde server die ik gebruik om bestanden op op te slaan altijd een 404 bij mijn script!

probeer maar eens:
http://kerberos.gabber.or...ros-DrowninginthePool.mp3

en dan:
http://www.angelfire.com/...y/deadlock_intestines.zip

en ook:
http://c8.ameth.org/misc/...nty%20killer%20killer.mp3
want dat geeft een heel interresant resultaat...

in het script op http://kerberos.gabber.org/getfilesize.php
om er zeker van te zijn dat het niet aan de server ligt heb ik hem ook hier staan: http://www2.hku.nl/~jaap3/getfilesize.php

dan nog even de code (ja het is een zooitje sorry):

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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
<html>
<?php
if (!$send){
    echo ("<h1>Get FileSize</h1>\n
        <form action=\"$PHP_SELF\">\n
        <input type=\"text\" name=\"url\">
        <input type=\"hidden\" name=\"send\" value=\"1\">
        <input type=\"submit\" value=\"Submit\">\n
        </form>");
}

else{
    $url = urldecode($url);
    if (preg_match("/^(.*:\/\/)([^:\/]+):?([0-9]+)?(.*)/", $url)){

//some functions

    function url_live($host,$path){
        $fp = fsockopen ("$host", 80, &$errnr, &$errstr) or die("$errno: $errstr");
        fputs($fp,"GET $path HTTP/1.0\n\n");
        while (!$end){ 
            $line = fgets($fp, 1024);
            print $line;
            if (stristr($line, '200 OK')){
                $end = true;
                return true;
            }
            if (stristr($line, '404 NOT')){
                $end = true;
                return false;
            }
        } 
        fclose($fp); 
    } 

    function fileGetExtention($filename) {
        $retvalue = "";
        $tmp = explode( ".", $filename);
        if($tmp[1]) {$retvalue = $tmp[count($tmp) - 1 ];}
        else {$retvalue = -1;}
        return $retvalue;
        echo $retvalue," <- Extension";
    }

    function get_file_size ($url){
        $fp = fsockopen($url[host],80,$errno,$errstr,30);
        // Can't open a connection //
        if (! $fp){return 0;} 
        set_socket_blocking($fp, TRUE);
        fwrite($fp, "HEAD $url[path] HTTP/1.0\r\nHost: $url[host]\r\n\r\n");
        for($result = ""; !feof($fp); $result .= fread($fp, 10000000));
        fclose($fp);
        if (preg_match("/content-length:\\s?(\\d+)/i", $result, $match)){return $match[1];} 
        else{ return 0;}
    } 

    function GetSize ($sizeb) {
        $sizekb = $sizeb / 1024;
        $sizemb = $sizekb / 1024;
        $sizegb = $sizemb / 1024;
        $sizetb = $sizegb / 1024;
        $sizepb = $sizetb / 1024;
        if ($sizeb > 1) {$size = round($sizeb,2) . "b";}
        if ($sizekb > 1) {$size = round($sizekb,2) . "kb";}
        if ($sizemb > 1) {$size = round($sizemb,2) . "mb";}
        if ($sizegb > 1) {$size = round($sizegb,2) . "gb";}
        if ($sizetb > 1) {$size = round($sizetb,2) . "tb";}
        if ($sizepb > 1) {$size = round($sizepb,2) . "pb";}
        return $size;
    }

// The rest of the code

    $parsedurl = parse_url($url);
    if (!checkdnsrr($parsedurl["host"],"A")){echo "That wasn't a working URL!";}
    else {
        if (!url_live($parsedurl["host"],$parsedurl["path"])){
            echo "<br>A 404 \"Page Not Found\" error was returned.";
        }
        else {
            echo $remoteheader,"<br>";
            $filextension = fileGetExtention($url);
            if($filextension=="zip"||$filextension=="mp3"){
                $filesize = get_file_size($parsedurl);
                $filesize = GetSize($filesize);
                echo "filesize = $filesize<br>";
                echo "file-extension = $filextension";
            }
            else{echo "Only zip files and mp3's are allowed";}
        }
    }
}
}
echo "</html>";
?>

Verwijderd

Topicstarter
en het is echt heeeeel vervelend

Verwijderd

Kicken binnen vierentwintig uur wordt hier niet geaccepteerd en kan je een slotje kosten: Welkom in P&W (FAQ-19/02/2003)

Verwijderd

Topicstarter
euh, sorry maar dat was eerder toch niet zo? Ik heb netjes enkele uren gewacht, maar blijkbaar is dat tegenwoorden 24 uur... mijn excuses :)

Verwijderd

Topicstarter
mhh, vervelend

  • WouZz
  • Registratie: Mei 2000
  • Niet online

WouZz

Elvis is alive!

Jah, inderdaad heel vervelend.. :/

Ten eerste: Ik krijg bij die laatste alleen maar een 400 Bad Request..
Volgens mij komt dat omdat je je $url["path"] niet url_encoded.. Door je spatie in de bestandsnaam doe je een "HEAD /misc/knifehandchop-bounty killer killer.mp3" ipv "HEAD /misc/knifehandchop-bounty%20killer%20killer.mp3"

Ten tweede: die 404 op die c8.ameth server los je op door net zoals in je get_file_size() functie ook de Host op te geven in je GET request..

Bdw.. waarom doe je eerst een GET request om te kijken of het bestand bestaat? Waarom niet gewoon meteen een HEAD request? Als het bestand dan niet bestaat krijg je ook nog wel een 404 terug hoor..

Enneh.. "c:\>telnet host 80" is je vriend bij dit soort HTTP probleempjes...

On track


Verwijderd

Topicstarter
ok bedankt WouZz ik zal binnenkort jou suggesties uitproberen, zoals ik al zei is de code een rommeltje en kunnen er inderdaad nog wat dingen geschrapt worden :)... en aangezien dit de eerste keer is dat ik zulke "geavanceerde" dingen probeer in PHP (of uberhaupt ergens in :)) was ik hier nooit opgekomen... anyway ik ga het binnenkort proberen en dan laat ik het hier wel weten of het werkt!
Pagina: 1