Upload script
Ik ben bezig geweest met mijn game clan page.
Nu ben ik een screenshot upload systeem aan het maken.
En het gaat aardig goed ik weet dat ik nog gewoon de oude php gebruik.
Alleen nu zit ik met een probleempje mijn script upload elke soort bestand.
Hoe ken ik het nu maken dat die alleen Jpg,Png, ne Gif kan uploaden ?
Andy
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
40
41
42
43
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
40
41
42
43
<?php
include_once 'config.php';
if(isset($_POST['btn-upload']))
{
$file = rand(1000,100000)."-".$_FILES['file']['name'];
$file_loc = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_type = $_FILES['file']['type'];
$folder="upload/uploads/";
// new file size in KB
$new_size = $file_size/1024;
// new file size in KB
// make file name in lower case
$new_file_name = strtolower($file);
// make file name in lower case
$final_file=str_replace(' ','-',$new_file_name);
if(move_uploaded_file($file_loc,$folder.$final_file))
{
$sql="INSERT INTO tbl_uploads(file,type,size) VALUES('$final_file','$file_type','$new_size')";
mysql_query($sql);
?>
<script>
alert('successfully uploaded');
window.location.href='index.php?success';
</script>
<?php
}
else
{
?>
<script>
alert('error while uploading file');
window.location.href='index.php?fail';
</script>
<?php
}
}
?>
include_once 'config.php';
if(isset($_POST['btn-upload']))
{
$file = rand(1000,100000)."-".$_FILES['file']['name'];
$file_loc = $_FILES['file']['tmp_name'];
$file_size = $_FILES['file']['size'];
$file_type = $_FILES['file']['type'];
$folder="upload/uploads/";
// new file size in KB
$new_size = $file_size/1024;
// new file size in KB
// make file name in lower case
$new_file_name = strtolower($file);
// make file name in lower case
$final_file=str_replace(' ','-',$new_file_name);
if(move_uploaded_file($file_loc,$folder.$final_file))
{
$sql="INSERT INTO tbl_uploads(file,type,size) VALUES('$final_file','$file_type','$new_size')";
mysql_query($sql);
?>
<script>
alert('successfully uploaded');
window.location.href='index.php?success';
</script>
<?php
}
else
{
?>
<script>
alert('error while uploading file');
window.location.href='index.php?fail';
</script>
<?php
}
}
?>
Toevoeging op 05/07/2015 11:08:09:
Mag deleted worden.
Ik heb een nieuwe gemaakt en heb daar dus de limit op kennen gooien door een tut van daniweb
Verder worden topics in het algemeen niet gesloten of verwijderd.
Je browser doet (deed voorheen?) geen intelligente checks om te kijken van wat voor type het te uploaden bestand is. Deze kijkt simpelweg naar de extensie en probeert hier een MIME-type bij te vinden die vervolgens wordt meegestuurd.
Als je een upload verwerkt, zit er een hoop informatie in $_FILES. Hier kun je gebruik van maken om een aantal elementaire checks uit te voeren.
Hieronder staan een aantal dingen die je zou kunnen doen om specifiek te controleren of je met een afbeelding van doen hebt. Je zou behalve deze controles ook nog andere controles uit moeten voeren uiteraard (bijvoorbeeld of de upload geslaagd is en/of het bestand niet te groot is etc.).
In eerste instantie zou je naar de extensie van het bestand kunnen kijken. Dit doe je door het laatste deel van de bestansnaam te vergelijken met een lijst van toegestane extensies:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
// aanname: het uploaden van het bestand zelf (afgezien van de controles) is correct verlopen
$parts = explode('.', $_FILES['upload_field']['name'][0]);
$extension = strtolower(array_pop($parts));
if (in_array($extension, array('jpg', 'png', 'gif')) === false) {
// error handling for unsupported file
}
?>
// aanname: het uploaden van het bestand zelf (afgezien van de controles) is correct verlopen
$parts = explode('.', $_FILES['upload_field']['name'][0]);
$extension = strtolower(array_pop($parts));
if (in_array($extension, array('jpg', 'png', 'gif')) === false) {
// error handling for unsupported file
}
?>
Daarnaast zou je een test kunnen uitvoeren om te kijken of het geuploade bestand zich gedraagt als een afbeelding. Een manier om dit te doen is een aanroep van getimagesize() te doen op het tijdelijke bestand. Als deze aanroep false retourneert dan heb je vrijwel zeker niet van doen met een afbeelding. Ook kan het verstandig zijn (bijvoorbeeld op een productie-omgeving) om eventuele foutmeldingen te onderdrukken, vandaar de "@". Meestal heb je toch de dimensies van een afbeelding nodig, dus hiermee sla je twee vliegen in een klap.
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// aanname: het uploaden van het bestand zelf (afgezien van de controles) is correct verlopen
if (($dimensions = @getimagesize($_FILES['upload_field']['tmp_name'][0])) === false) {
// error handling for unknown image type / dimensions
}
?>
// aanname: het uploaden van het bestand zelf (afgezien van de controles) is correct verlopen
if (($dimensions = @getimagesize($_FILES['upload_field']['tmp_name'][0])) === false) {
// error handling for unknown image type / dimensions
}
?>
Gewijzigd op 05/07/2015 12:35:04 door Thomas van den Heuvel