Avatar billede Slettet bruger
27. april 2003 - 23:00 Der er 9 kommentarer og
1 løsning

Upload script tvinger serveren i knæ ved for store filer...

Hej!

Jeg bruger med succes dette script til at uploade billeder under 1 megabyte, men hvis jeg f.eks. vælger en fil på 112 MB og prøver at uploade den går serveren i selvsving og vågner ikke før de 30 sekunders max execution time.

På min localhost går den helt død.

if($_POST['send'] == 'ok') {

echo $_FILES["filer"]["size"];

if($_FILES["filer"]["size"] > 0) {

$tilladte_filer = array("image/jpeg", "image/pjpeg", "image/jpg", "image/gif"); //tilladte filtyper.
$max_stoerrelse = 1048576; //tilladt max-størrelse i bytes
$upload_bibliotek = "../../demo/usr_files";

//Læseligt tidsstempel - tilføjes senere filnavn og giver derved et unikt filnavn
$tid = date("His_dmy", time());

$fra = $_FILES["filer"]["tmp_name"];
$til = $upload_bibliotek . "/" . $tid . $_FILES["filer"]["name"];

if(!in_array($_FILES["filer"]["type"],$tilladte_filer)) {
$fejl = "Fil ikke uploadet, du kan kun uploade filer af typen<br><br>";
}

if($_FILES["filer"]["size"] > $max_stoerrelse) {
$fejl = "Fil ikke uploadet, filen er for stor<br><br>";
}

if(!isset($fejl)) {///Hvis alt er iorden
if(function_exists("move_uploaded_file")) {
move_uploaded_file($fra, $til);
$tak = "Filen <b>" . $_FILES["filer"]["name"] . "</b> blev uploadet og omdøbt til <b>" . $tid . $_FILES["filer"]["name"] . "</b><br><br>";
} else {
copy($fra, $til);
$tak = "Filen <b>" . $_FILES["filer"]["name"] . "</b> blev uploadet og omdøbt til <b>" . $tid . $_FILES["filer"]["name"] . "</b><br><br>";
}

}

}

}
echo $fejl;
?>
<br>
<span style="padding-left:10px;color:<? if(isset($fejl)) { echo "#FF0000"; } else { echo "green"; } ?>">
<?
echo $fejl;
echo $tak;
?>
</span>

<form name="form1" enctype="multipart/form-data" method="post" action="admin.php">
<input type="hidden" name="MAX_FILE_SIZE" value="1048576">
<input type="hidden" name="valg" value="filer">
<input type="hidden" name="valg2" value="upload">
<input type="hidden" name="send" value="ok">
<table align="center" style="border:1px solid #CACACA" width="100%" cellspacing="2" cellpadding="0" border="0">
<tr><td height="3"></td></tr>
<tr><td colspan="2" style="padding-left:8px">Du kan uploade 1 fil ad gangen. Filerne kan maksimalt fylde 1 MB.</td></tr>
<tr><td colspan="3" height="5" style="border-bottom:1px solid #CACACA"><img src="billeder/spacer.gif" width="1" height="1" alt="" border="0"></td></tr>
<tr><td height="3"></td></tr>

<tr><td width="180" nowrap style="padding-left:8px">Vælg fil: </td><td width="100%"><input type="file" name="filer" style="width: 100%"></td></tr>
<tr><td colspan="3" height="5" style="border-bottom:1px solid #CACACA"><img src="billeder/spacer.gif" width="1" height="1" alt="" border="0"></td></tr>
<tr><td height="3"></td></tr>

<tr>
<td></td><td>
<input type="submit" class="knap" value="Upload valgte fil">
</td>
</tr>

<tr><td height="2"></td></tr>

</form>
</table>

Hvad kan jeg gøre for at rette op på det?
Avatar billede schmidt Nybegynder
27. april 2003 - 23:11 #1
Tja! Jeg gad også vide, hvorfor man aldrig er blevet enige om (w3c) at sende oplysninger om filen når upload påbegyndes.

Den eneste løsning jeg kender til er at programmere Client Side til de browsere der skal kunnne uploade og så sende oplysningerne i en formular sammen med filen.
Avatar billede erikjacobsen Ekspert
27. april 2003 - 23:15 #2
Det er vel fordi det tager så lang tid ;)
Avatar billede Slettet bruger
27. april 2003 - 23:19 #3
Det er det nok, men det er da belastende...
Avatar billede erikjacobsen Ekspert
27. april 2003 - 23:31 #4
Ha, jeg tror serveren mener, at det er dig, der er en belastning.

Spøg til side. <input type="file" ...>  egner sig ikke til store
filer. Vedhæftede filer i emails ej heller. Så er der FTP tilbage...
Avatar billede Slettet bruger
27. april 2003 - 23:39 #5
Jeg har også rimelig styr på mine brugere da det er et CMS system, men det bliver da rart når nogen gør det muligt at tjekke filstørrelsen inden man uploader en DVD film på 4 GB til ens tmp bibliotek ;)

(ej jeg ved godt at det ikke kan lade sig gøre)
Avatar billede =maddog= Nybegynder
27. april 2003 - 23:46 #6
Browseren sender ellers en masse information med i en header. men ikke fil-størrelse af en grund. det ser ca sådan her ud om nogen skulle undre sig over hvordan en multipart request ser ud
-----------------------------7d3191316e027e
Content-Disposition: form-data; name="MAX_FILE_SIZE"

1048576
-----------------------------7d3191316e027e
Content-Disposition: form-data; name="valg"

filer
-----------------------------7d3191316e027e
Content-Disposition: form-data; name="valg2"

upload
-----------------------------7d3191316e027e
Content-Disposition: form-data; name="send"

ok
-----------------------------7d3191316e027e
Content-Disposition: form-data; name="file"; filename="C:\Documents and Settings\s1856\My Documents\berglot.gif"
Content-Type: image/gif

(En masse bytes fra billedet)
Avatar billede olebole Juniormester
29. april 2003 - 02:46 #7
<ole>

Hvis det er p.gr.a. eksekveringstiden, kan du evt. prøve at skrive:

<?
  set_time_limit(ANTAL_SEKUNDER);
  ... og resten af dit jazz ...
?>

Så adderes 'ANTAL_SEKUNDER' til din default max-eksekveringstid (normalt 30 sek) - forudsat, serveren ikke kører i safe-mode.

Du kan i øvrigt godt checke fil-størrelse inden submit, men det er kun i Win/IE - og brugeren skal acceptere brug af ActiveX.
Ellers kan du checke størrelsen med Flash, hvor du kan få lov at læse filer på HD'en.

/mvh
</bole>
Avatar billede Slettet bruger
02. maj 2003 - 12:11 #8
Tak for kommentarerne, hvis i vil være rare at svare? (hold op hvor han kan rime!)
Avatar billede Slettet bruger
07. maj 2003 - 09:28 #9
Ingen svar?
Avatar billede olebole Juniormester
07. maj 2003 - 13:13 #10
åh.så.pyt.da  ;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