Avatar billede avminarm Juniormester
28. marts 2004 - 22:03 Der er 9 kommentarer og
1 løsning

Finde størrelse på fil inden upload

Jeg sidder og roder med et uploadscript, hvor man skal kunne uploade diverse filer, men der skal naturligvis være et MAX størrelse på filerne.

Mit problem er at hvis man f.eks forsøger sig med en fil på 3 MB så bremser PHP's upload_max_filesize = 2M (standard opsætningen) og spydter en fejlmedd. up på skærmen:

Warning: upload_max_filesize of 2097152 bytes exceeded - file [upfile[]=G:\Apache\Apache2\htdocs\materiale\3D.jpg] not saved in Unknown on line 0

Jeg har prøvet med:

if($_FILES['upfile']['size'][$i] > $max){
    echo "et af billederne er for store";
}

og med filesize()

Jeg vil gerne undgå at PHP spydter denne fejlbesked ud (og løsningen kan ikke være at ændre PHP.ini)
Avatar billede Slettet bruger
28. marts 2004 - 22:08 #1
Det kan du ikke. Du kan med PHP ikke finde størrelsen på en fil før den er uploadet.
Avatar billede coderdk Praktikant
29. marts 2004 - 00:58 #2
I din uploadform skal du have:

<input type="hidden" name="MAX_FILE_SIZE" value="2097152">

Vær dog opmærksom på, at det ikke er alle browsere der tager hensyn til det.
Avatar billede coderdk Praktikant
29. marts 2004 - 01:00 #3
Hmm, se:

http://dk.php.net/manual/en/features.file-upload.php

Feltet skal ydermere være FØR din uploadfelt!
Avatar billede coderdk Praktikant
29. marts 2004 - 01:01 #4
Mere endnu, du kan give din egen fejlmeddelelse ved at checke om der var fejl på $_FILES['upfile']['error'] - værdien vil være forskellig fra 0.
Avatar billede sukos Juniormester
29. marts 2004 - 01:27 #5
Dette virker her hos mig:

<?php

//the path to dir where uploaded files will be stored, change to fit your needs
$dist = $_SERVER["DOCUMENT_ROOT"] ."/uploadeng/";


if (isset($_FILES["upfile"])) {

$antal = 0;

//Find number of post fields
for($i = 0; $i < count($_FILES["upfile"]["name"]); $i++) {

    if ($_FILES["upfile"]["name"][$i] !="") {
    //Læg en til $antal for hver fil.
    $antal++;

        if(is_uploaded_file($_FILES["upfile"]["tmp_name"][$i])) {

    if(move_uploaded_file($_FILES["upfile"]["tmp_name"][$i], $dist . $_FILES["upfile"]["name"][$i])) {

    // Get som info about the files
    $str1 = $_FILES["upfile"]["name"][$i];
    $str2 = $_FILES["upfile"]["size"][$i];
    $str3 = $_FILES["upfile"]["type"][$i];

    echo "<b>Name:</b> ". $str1 .", <b> size:</b> ". $str2 ." bytes, <b>filetype:</b> ". $str3 ."<br>\n";
    }else{
    echo"Upload didn't succed! (move)";
    }
        }else{

    echo"Upload didn't succed! ". $_FILES["upfile"]["name"][$i] ." is to big or is not a file";

            }
        }
    }

if($antal < 1) { //No files has been choosen
echo"Choose one or more files to upload! ";
    }
echo" <a href=\"uploadform.php\">back</a>";

}
?>

Men det er jo også et spm. om den tid der bruges til upload.
Avatar billede avminarm Juniormester
29. marts 2004 - 09:37 #6
coderdk>> den med [error] duer ikke for fejlen kommer allerede inden uploadscriptet kører og MAX_FILE_SIZE vil jeg gerne undgå netop pga browserne.

sukos>> har du prøvet med en fil på f.eks 3 mb - for det der virker også fint hos mig, med mindre filen er over 3 mb
Avatar billede sukos Juniormester
29. marts 2004 - 12:06 #7
jahh, hvis filen er for stor, får jeg en beskeden:
echo"Upload didn't succed! ". $_FILES["upfile"]["name"][$i] ." is to big or is not a file";

Men som sagt, hvis scriptet når at "time-out" vil der jo også komme fjlmeddelser.
Avatar billede avminarm Juniormester
29. marts 2004 - 13:08 #8
sukos>> også selvom den er større end hvad der er defineret i din php.ini ??, mystisk - fpr det er det eneste problem på min test pc
Avatar billede avminarm Juniormester
15. juni 2004 - 08:48 #9
smider i lige et svar hvis i vil have points - jeg gik over til at smide de uploadede filer over i en DB i stedet for
Avatar billede avminarm Juniormester
02. juli 2004 - 09:12 #10
coder får så bare det hele ;o)
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