Avatar billede astalavista Nybegynder
04. januar 2003 - 14:07 Der er 7 kommentarer og
1 løsning

download billeder til mappe str. i kb

Hvordan kan vi lave det så ledes at den downloader billeder over 100 byte og under 2 mb.

<?
$remoteFile = "http://www.eksperten.dk/img/eksperten_logo.gif";
$localFile = "files/eksperten_copy.gif";

$remote = @fopen($remoteFile, "r");
$local = @fopen($localFile, "w");
if (!$remote)
    die("Filen: ".$remoteFile." eksisterer tilsyneladende ikke");
if (!is_writeable($localFile))
    die("PHP kan ikke skrive til filen: ".$localFile);
while(!feof($remote)) {
    $buffer = fread($remote, 4096);
    $out .= $buffer;
}
fclose($remote);
fwrite($local, $out);
fclose($local);
?>
Avatar billede tipsen Nybegynder
04. januar 2003 - 15:20 #1
Tror du bliver nødt til at downloade filen først for derefter at se, hvor stor den var...
Avatar billede Slettet bruger
04. januar 2003 - 18:30 #2
Det kan du nu godt. Ved at kigge på content-length headeren. For at gøre det, skal du bruge en socket forbindelse til serveren. Jeg har lavet et eksempel her:

<?
function get_file($min_size_bytes, $max_size_bytes, $remote_host, $remote_file, $locale_file) {
    $fp = fsockopen($remote_host, 80) or die("Kunne ikke forbinde til host.");
    $fp_locale = fopen($locale_file, "wb") or die("Kunne ikke åbne locale_file for skrivning");
    socket_set_timeout($fp, 2);
    fputs($fp, "GET ".$remote_file." HTTP/1.0\r\nHost: ".$remote_host."\r\n\r\n");
    $image_data_flag = false;
    $filesize = false;
    while (!feof($fp)) {
        # fgets er ikke binary-safe, så vi bruger fread, når vi har image data
        $input = $image_data_flag ? fread($fp, $filesize) :  fgets($fp, 128);
        if (!$filesize && ereg("Content-Length: ([0-9]+)", $input, $regs)) {
            if($regs[1] < $min_size_bytes || $regs[1] > $max_size_bytes) {
                fclose($fp);
                return "Fil fundet, men matcher ikke angivet størrelse. Størrelse i bytes: ".$regs[1];
            }
            $filesize = $regs[1];
        }
        if ($image_data_flag) {
            fwrite($fp_locale, $input);
            break;
        }         
        if ($input == "\r\n")
            $image_data_flag = true;
    }
    fclose($fp);
    fclose($fp_locale);
    if ($filesize == @filesize($locale_file))
        return "Fil er kopieret ialt: ".$filesize." bytes";
    else {
        @unlink($locale_file);
        return "Kunne ikke kopiere fil data. Der er ryddet op.";   
    }
}

echo get_file(100, 5000, "www.eksperten.dk", "/img/eksperten_logo.gif", "files/exp_copy.gif");
?>
Avatar billede Slettet bruger
04. januar 2003 - 18:33 #3
Hov, det var en lidt gammel version. Her er den seneste:

<?
function get_file($min_size_bytes, $max_size_bytes, $remote_host, $remote_file, $locale_file) {
    $fp = fsockopen($remote_host, 80) or die("Kunne ikke forbinde til host.");
    $fp_locale = fopen($locale_file, "wb") or die("Kunne ikke åbne locale_file for skrivning");
    socket_set_timeout($fp, 2);
    fputs($fp, "GET ".$remote_file." HTTP/1.0\r\nHost: ".$remote_host."\r\n\r\n");
    $image_data_flag = false;
    $filesize = false;
    while (!feof($fp)) {
        # fgets er ikke binary-safe, så vi bruger fread, når vi har image data
        $input = $image_data_flag ? fread($fp, $filesize) :  fgets($fp, 128);
        if (!$filesize && ereg("Content-Length: ([0-9]+)", $input, $regs)) {
            if($regs[1] < $min_size_bytes || $regs[1] > $max_size_bytes) {
                fclose($fp);
                return "Fil fundet, men matcher ikke angivet størrelse. Størrelse i bytes: ".$regs[1];
            }
            $filesize = $regs[1];
        }
        if ($image_data_flag) {
            fwrite($fp_locale, $input);
            break;
        }         
        if ($input == "\r\n")
            $image_data_flag = true;
    }
    fclose($fp);
    fclose($fp_locale);
    if (!$filesize)
        return "Remote fil kunne ikke findes";
    else if ($filesize == @filesize($locale_file))
        return "Fil er kopieret ialt: ".$filesize." bytes";
    else {
        @unlink($locale_file);
        return "Kunne ikke kopiere fil data. Der er ryddet op";   
    }
}

echo get_file(100, 5000, "www.eksperten.dk", "/img/eksperten_logo.gif", "files/exp_copy.gif");
?>
Avatar billede Slettet bruger
04. januar 2003 - 18:35 #4
Og if ($input == "\r\n") bør ændres til:

if ($filesize > 0 $input == "\r\n")

- Og nu gider jeg ikke rette mere i det :)
Avatar billede Slettet bruger
04. januar 2003 - 18:35 #5
if ($filesize > 0 && $input == "\r\n")
Avatar billede Slettet bruger
04. januar 2003 - 18:44 #6
Og SIDSTE version (jeg prøver virkeligt at lade være med at rette mere i det :):

<?
function get_file($min_size_bytes, $max_size_bytes, $remote_host, $remote_file, $locale_file) {
    $fp = fsockopen($remote_host, 80) or die("Kunne ikke forbinde til host.");
    $fp_locale = fopen($locale_file, "wb") or die("Kunne ikke åbne locale_file for skrivning");
    socket_set_timeout($fp, 2);
    fputs($fp, "GET ".$remote_file." HTTP/1.0\r\nHost: ".$remote_host."\r\n\r\n");
    $image_data_flag = false;
    $filesize = false;
    while (!feof($fp)) {
        # fgets er ikke binary-safe, så vi bruger fread, når vi har image data
        $input = $image_data_flag ? fread($fp, $filesize) :  fgets($fp, 128);
        if (!$filesize && eregi("Content-Length: ([0-9]+)", $input, $regs)) {
            if($regs[1] < $min_size_bytes || $regs[1] > $max_size_bytes) {               
                fclose($fp);
                fclose($fp_locale);
                return "Fil fundet, men matcher ikke angivet størrelse. Størrelse i bytes: ".$regs[1];
            }
            $filesize = $regs[1];
        }
        if ($image_data_flag) {
            fwrite($fp_locale, $input);
            break;
        }         
        if ($filesize > 0 && $input == "\r\n")
            $image_data_flag = true;
    }
    fclose($fp);
    fclose($fp_locale);
    if (!$filesize)
        return "Remote fil kunne ikke findes";
    else if ($filesize == @filesize($locale_file))
        return "Fil er kopieret ialt: ".$filesize." bytes";
    else {
        @unlink($locale_file);
        return "Kunne ikke kopiere fil data. Der er ryddet op";   
    }
}

echo get_file(200, 5000, "www.eksperten.dk", "/img/eksperten_logo.gif", "files/exp_copy.gif");
?>
Avatar billede Slettet bruger
13. januar 2003 - 04:22 #7
astalavista : Er du kommet videre med det?
Avatar billede astalavista Nybegynder
12. februar 2003 - 11:14 #8
Beklager den lange svar tid....
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

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