Bestandsgrootte checken voordat het geupload wordt
ik probeer (met nadruk op probeer) een groottelimiet in te stellen voor bestanden die geupload mogen worden.
Ik heb deze in php.ini op 5000M gezet, maar aangezien dat niet werkte heb ik in een .htaccess bestand de waarden op 512M gezet, waar ik ook mee door wil gaan.
Als ik nu een bestand upload wat te groot is, zal de server het zelf afkappen, met een lelijke error-message.
Om dit te voorkomen heb ik in het uploadscript al een limiet gesteld, echter zal het bestand daar logischerwijze nooit komen...
Nu heb ik dus geprobeerd om via jQuery, Javascript of wat dan ook, een check uit te voeren op het moment dat het bestand geselecteerd is, of op het moment dat de submitknop wordt ingedrukt.
Zat tutorials en code op internet gevonden (een aantal werden als voorbeeld ook op de desbetreffende site zelf gehost en werkten daar prima naar behoren), maar die willen bij mij maar niet werken...
Het schijnt namelijk wel te kunnen met de nieuwe API van HTML 5. Geen flauw idee wat dat is, ben namelijk niet bekend met API's, maar het zou dus wel moeten kunnen.
Heeft iemand een tip voor me?
Hieronder mijn originele code, zonder code van internet. Aangezien geen enkel voorbeeld werkte, heb ik alles er maar weer uitgegooid.
NB: ik heb bij een ander bestand (files.php, waar je een tabel kunt zien van bestanden adhv data in een database) een include_once gedaan voor upload.php. Ik weet niet zeker of ik de pagina apart houd, of dat ik 'm integreer in de eerdergenoemde files.php, maar ik zou niet weten waarom includen dingen stukmaakt wat op de eigen pagina wel goed zou gaan...
Upload.php:
Code (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
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
<?php
?>
<html>
<head>
<title>Upload iets naar de server!</title>
<link rel="stylesheet" type="text/css" href="upload.css" />
<link rel="stylesheet" type="text/css" href="../std.css" />
<link rel="icon" type="image/png" href="../favicon.png" />
</head>
<body>
<form action="upload_script.php" method="post" enctype="multipart/form-data">
<label for="file">Bestand: </label></td><td><input type="file" name="file" id="file"><br>
<input type="text" size=30 name="comment" value="Commentaar bij het bestand."
onfocus="(this.value=='Commentaar bij het bestand.' ? this.value='' : this.value )"
onblur="(this.value=='' ? this.value='Commentaar bij het bestand.' : this.value )"
/> <br>
<input type="submit" name="submit" value="Upload Bestand">
</form>
</body>
</html>
?>
<html>
<head>
<title>Upload iets naar de server!</title>
<link rel="stylesheet" type="text/css" href="upload.css" />
<link rel="stylesheet" type="text/css" href="../std.css" />
<link rel="icon" type="image/png" href="../favicon.png" />
</head>
<body>
<form action="upload_script.php" method="post" enctype="multipart/form-data">
<label for="file">Bestand: </label></td><td><input type="file" name="file" id="file"><br>
<input type="text" size=30 name="comment" value="Commentaar bij het bestand."
onfocus="(this.value=='Commentaar bij het bestand.' ? this.value='' : this.value )"
onblur="(this.value=='' ? this.value='Commentaar bij het bestand.' : this.value )"
/> <br>
<input type="submit" name="submit" value="Upload Bestand">
</form>
</body>
</html>
Upload_script.php:
Code (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
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
<?php
include_once('../config.php');
session_start();
IF (!isset($_SESSION['username']))
{ header('Location: "'. $homepage); }
if( !(isset($_FILES["file"])) || ($_FILES["file"]["error"] > 0) ) {
echo "Error upload: " . $_FILES["file"]["error"] . "<br>";
} else if( $_FILES['file']['size'] > (512*1024*1024) ) {
echo "file too big: max = 512 MB";
} else {
$timestamp = time();
$path = "storage/" . $_SESSION['username'] . "/" . date("Y-m-d-H-i-s", $timestamp) . "_";
include_once('customFuncs/getFileType.php');
if (! file_exists($path . $_FILES["file"]["name"])) {
move_uploaded_file($_FILES["file"]["tmp_name"], $path . $_FILES["file"]["name"]);
$con = openConnection();
$name = explode(".", $_FILES['file']['name']);
$updateDB=("
INSERT INTO FILES (Filename, Name, User, Comment, Uploaded, Size, Deleted, Type )
VALUES ('".$path . $_FILES["file"]["name"]."', '".$name[0]."', '".$_SESSION['username']."',
'".( $_POST['comment'] == "Commentaar bij het bestand." ? '' : $_POST['comment'] )."', '".date("Y-m-d H:i:s", $timestamp)."' ,
'".$_FILES["file"]["size"]."', 0, '".getFileType($_FILES["file"]["name"] )."')
");
if(!mysql_query($updateDB, $con) ) { die ("Query error: ". mysql_error() ); }
else { header('Location: files.php'); }
}
else // file exists and is present (very unlikely), or something else went wrong
{ header('Location: upload_error.php'); }
}
?>
include_once('../config.php');
session_start();
IF (!isset($_SESSION['username']))
{ header('Location: "'. $homepage); }
if( !(isset($_FILES["file"])) || ($_FILES["file"]["error"] > 0) ) {
echo "Error upload: " . $_FILES["file"]["error"] . "<br>";
} else if( $_FILES['file']['size'] > (512*1024*1024) ) {
echo "file too big: max = 512 MB";
} else {
$timestamp = time();
$path = "storage/" . $_SESSION['username'] . "/" . date("Y-m-d-H-i-s", $timestamp) . "_";
include_once('customFuncs/getFileType.php');
if (! file_exists($path . $_FILES["file"]["name"])) {
move_uploaded_file($_FILES["file"]["tmp_name"], $path . $_FILES["file"]["name"]);
$con = openConnection();
$name = explode(".", $_FILES['file']['name']);
$updateDB=("
INSERT INTO FILES (Filename, Name, User, Comment, Uploaded, Size, Deleted, Type )
VALUES ('".$path . $_FILES["file"]["name"]."', '".$name[0]."', '".$_SESSION['username']."',
'".( $_POST['comment'] == "Commentaar bij het bestand." ? '' : $_POST['comment'] )."', '".date("Y-m-d H:i:s", $timestamp)."' ,
'".$_FILES["file"]["size"]."', 0, '".getFileType($_FILES["file"]["name"] )."')
");
if(!mysql_query($updateDB, $con) ) { die ("Query error: ". mysql_error() ); }
else { header('Location: files.php'); }
}
else // file exists and is present (very unlikely), or something else went wrong
{ header('Location: upload_error.php'); }
}
?>
Gewijzigd op 01/11/2014 01:17:07 door Kevin Zegikniet
En wat laat $_FILES['file']['size'] zien? Hoe groot is het bestand?
'Het bestand' is groter dan 1 GB, het varieert een beetje want ik probeer met verschillende (zeer grote) bestanden het systeem wat te testen.
Ik ben nu een testbestand van 500MB (zie http://speedtest.tweak.nl/ )aan het downloaden, en ik zal eens zien wat dat precies uithaalt. Als het goed is, zou het namelijk klein genoeg moeten zijn om door de PHP limieten te komen...
Toevoeging op 01/11/2014 17:25:35:
Ik heb een halfuurtje geleden een bestand van 100MB (tevens via de eerder gepostte link) en 500MB geupload (twee pagina's naast elkaar), en hoewel het 20 minuten extra duurt om de resterende grofweg 400MB te uploaden, komen ze er beide doorheen.
Gewijzigd op 01/11/2014 19:44:43 door Kevin Zegikniet
http://www.matlus.com/html5-file-upload-with-progress/
En uiteraard wat PHP.
Daarnaast: kijk of je het bestand naar je server kan streamen, dan heb je geen last van een hoog geheugen-gebruik.
Moet ook met HTML alleen kunnen: En uiteraard wat PHP.
Daarnaast: kijk of je het bestand naar je server kan streamen, dan heb je geen last van een hoog geheugen-gebruik.
Eindelijk iets wat wel werkt!
(nu nog uitvogelen hoe ik dat script doorstuur naar het uploadscript en hoe ik daar de juiste variabelen uithaal, maar het is iig een start)