Bestandsgrootte checken voordat het geupload wordt

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kevin Zegikniet

Kevin Zegikniet

01/11/2014 01:08:49
Quote Anchor link
Hoi,

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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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>


Upload_script.php:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
PHP hulp

PHP hulp

06/11/2024 00:45:54
 
Obelix Idefix

Obelix Idefix

01/11/2014 11:23:54
Quote Anchor link
En wat laat $_FILES['file']['size'] zien? Hoe groot is het bestand?
 
Kevin Zegikniet

Kevin Zegikniet

01/11/2014 11:41:57
Quote Anchor link
Dat laat de bestandsgrootte in bytes zien, wat ik namelijk ook in de database zet.

'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
 
Eddy E

Eddy E

01/11/2014 22:06:36
Quote Anchor link
Moet ook met HTML alleen kunnen: 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.
 
Kevin Zegikniet

Kevin Zegikniet

01/11/2014 22:22:55
Quote Anchor link
Eddy, bedankt!
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)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.