Avatar billede Slettet bruger
20. oktober 2005 - 21:42 Der er 19 kommentarer og
1 løsning

Problem med post_max_size

Hej!

Jeg har en upload form. Jeg kan ikke få noget fornuftigt ud af PHP hvis min fil er større end post_max_size.

Sætter jeg f.eks. upload_max_filesize til "2M" (2 MegaByte) kan jeg godt uploade filer under 2 MB, og filer mellem 2 MB og 8 MB returnerer som forventet en melding om at filen er for stor.

Der hvor filmen knækker er når min fil er f.eks. 9,7 MB. Her kommer der slet ingen fejl, og alle min POST variabler forsvinder i den blå luft.

Dette gør det ret svært for mig at få indsat en fornuftig fejlhåndtering.

Ydermere ville jeg tro at når man satte MAX_FILE_SIZE i selve formularen til 2 MB ville filer over 2 MB bare blive smidt over skulderen. Det sker ikke, PHP prøver at uploade filen, og jeg ender med en side der ikke melder fejl.

Desuden har jeg svært ved at aflæse memory_limit, de 3 linier herunder giver kun resultat for de 2 første, på HHV 8 M og 2 M:

echo ini_get("post_max_size");
echo ini_get("upload_max_filesize");
echo ini_get("memory_limit");

Jeg har virkelig brug for lidt kvalificeret hjælp :(
Avatar billede Slettet bruger
20. oktober 2005 - 21:43 #1
Min form er egentlig ret simpel, men her er starten på den:

$tilladt filstørrelse aflæser jeg fra ini_get("upload_max_filesize") og ganger med 2 x 1024.

<form name="form1" enctype="multipart/form-data" method="post" action="modul_filer.php">
<input type="hidden" name="MAX_FILE_SIZE" value="<? echo $tilladt_filstoerrelse; ?>">
Avatar billede erikjacobsen Ekspert
20. oktober 2005 - 21:47 #2
Browsere er velkomne til at ignorere en MAX_FILE_SIZE i formen.
Og reaktionen, eller mangel på samme, når uploaden er alt for stor, er velkendt.
Er det din egen server kan du øge grænserne i php.ini.
Avatar billede Slettet bruger
20. oktober 2005 - 21:50 #3
Prøv mit eksempel herunder. Smider jeg en fil afsted over 8 MB kan man ikke længere tjekke formens variabler (f.eks. navnet på send knappen)

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"
        "http://www.w3.org/TR/REC-html40/strict.dtd">

<html>
<head>
    <title>Untitled</title>
</head>

<body>
<?


ini_set("post_max_size","60M");
ini_set("upload_max_filesize","60M");
ini_set("memory_limit","60M");

echo 'post_max_size: ' . ini_get("post_max_size") . '<br>';
echo 'upload_max_filesize: ' . ini_get("upload_max_filesize") . '<br>';
echo 'memory_limit: ' . ini_get("memory_limit") . '<br>';

if(isset($_POST['MAX_FILE_SIZE'])) echo 'sendt' . '<br>';

$tilladt_filstoerrelse = '2' *1024; //Standard værdi
$ini_filstoerrelse1 = ini_get("post_max_size") * 1024 * 1024;
$ini_filstoerrelse2 = ini_get("upload_max_filesize") * 1024 * 1024;

if($ini_filstoerrelse1 < $tilladt_filstoerrelse) {
$tilladt_filstoerrelse = $ini_filstoerrelse1;
}

if($ini_filstoerrelse2 < $tilladt_filstoerrelse) {
$tilladt_filstoerrelse = $ini_filstoerrelse2;
}
?>

<form name="form1" enctype="multipart/form-data" method="post" action="filupload.php">
<input type="hidden" name="MAX_FILE_SIZE" value="<? echo $tilladt_filstoerrelse; ?>">
<input type="file" name="fil" class="file" style="width:250px">
<br>
<input type="submit" class="knap"  value="Upload valgt fil">
</form>
</body>
</html>
Avatar billede erikjacobsen Ekspert
20. oktober 2005 - 21:52 #4
ini_set giver sjældent mening. Er det din egen server, skal du fixe ting i php.ini.
Er det et webhotel, så kan det være ligemeget ;)
Avatar billede Slettet bruger
20. oktober 2005 - 21:56 #5
Jeg er græsk/katolsk om der er den ene eller den anden grænse, det kan jeg leve med. Hvad jeg ikke kan leve med er at PHP ikke returnerer noget brugbart hvis filen er større end post_max_size.

Der må da være taget højde for det... :(
Avatar billede erikjacobsen Ekspert
20. oktober 2005 - 21:58 #6
"Afkodningen" af uploadede billeder sker inden PHP-scriptet overhovedet starter.
Rammer du en grænse, tid eller hukommelse, går dit script ikke igang.
Jeg kender ingen løsning, sålænge vi snakker PHP og Apache/IIS
Avatar billede Slettet bruger
20. oktober 2005 - 22:04 #7
Øv...jeg må søge lidt vider, men tak for din tid.
Avatar billede erikjacobsen Ekspert
20. oktober 2005 - 22:05 #8
Nårsomhelst. Men lad spørgsmålet et stykke tid. Måske er der en super-løsning et sted.
Avatar billede showsource Seniormester
20. oktober 2005 - 23:14 #9
Hvis du kan bruge .htaccess er det jo også en mulighed, i stedet for ini_set

Og er PHP ver. >= 4.1 har du også
$_FILES["fil"]["error"]
at "lege" med
Avatar billede Slettet bruger
20. oktober 2005 - 23:44 #10
Jeg har PHP 4.3.11 men kan ikke få noget ud af $_FILES["fil"]["error"] når min filstørrelse overskrider post_max_size...desværre, men et godt bud!
Avatar billede showsource Seniormester
21. oktober 2005 - 06:59 #11
ehm, kan du ikke bare sætte post_max_size til en højere værdi end upload?
Så vil den jo fejle her.
Avatar billede Slettet bruger
21. oktober 2005 - 07:56 #12
Den står allerede til en højere værdi. post_max_size = 8M og max_upload_size = 2M

Og det fungerer fint  når filen er mellem 0 0g 8 MB stor. Er den under 2 MB uploades filen, er den mellem 2 -> 8MB fås en melding om at filen er for stor. Uploader jeg en 16 MB fil får jeg ingen melding overhovedet. Alle min POST variabler forsvinder bare.
Avatar billede showsource Seniormester
21. oktober 2005 - 11:47 #13
ja, den er sgutte nem.
Erik, du skriver:
"Jeg kender ingen løsning, sålænge vi snakker PHP og Apache/IIS"

Er der løsning med andet?
Avatar billede erikjacobsen Ekspert
21. oktober 2005 - 11:57 #14
Alt kan jo lade sig gøre, for den der vil. Skriv et C-program, der fungerer som webserver, og som ikke har disse begrænsninger ;)
Avatar billede Slettet bruger
21. oktober 2005 - 12:07 #15
Hehe...fredagshumor ;)
Avatar billede showsource Seniormester
21. oktober 2005 - 12:45 #16
:O) ja, ok
Men så er det vel nemmere at ændre i sourcen for php, så $_FILES["fil"]["error"] også tager post_max_size med :O]
Avatar billede erikjacobsen Ekspert
21. oktober 2005 - 13:00 #17
Hvis det bare var så nemt. Det er noget med den grundlæggende opbygning, og grænser på tid og plads. Dem der skal bruge meget upload, fx. fremkaldelse af billeder, laver det næppe i PHP.
Avatar billede Slettet bruger
21. oktober 2005 - 13:03 #18
Nej, derfor ville jeg heller ikke gøre et stort nummer ud af det. Hvis så bare PHP kunne sende en lille besked til stakkels mig om at post_max_size var overskredet ;)
Avatar billede Slettet bruger
25. november 2005 - 13:47 #19
Nåh, men tak for jeres indsats. Jeg vil gerne belønne med point så dem der vil have skal lægge et svar :)
Avatar billede Slettet bruger
20. januar 2006 - 13:11 #20
ok så
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