| |
| Ajouter le : 17-02-2007 04:14 |
Par : yac |
Niveau :  |
| Categorie : PHP /
article |
| Description : Créer un script php de base pour permettre à des utilisateurs de télecharger des images sur votre site Web. |
Accueil / Tutoriaux / PHP / article / Upload une image
Upload une image
Introduction :
Permettre des téléchargements de dossier avec PHP est réellement très simple, les choses importantes que vous devez considérer si vous allez permettre au grand public de télécharger des images à votre serveur êtes :
Les types de dossiers vous allez laisser - vous ne voulez pas des personnes téléchargeant les dossiers exécutables par exemple.
:arrow: La limite de taille - même les images énormes ne prendront pas de grandes places mais si les gens vont lier aux images téléchargées à votre emplacement sur les emplacements ou les forum occupés alors de grandes images peuvent manger l'alot de la largeur de bande.
:arrow: Les dimensions - pas aussi importantes, mais si vous allez montrer les images quelque part sur votre emplacement puis vous ne voulez pas les papiers peints 1280x1024 se cassant vers le haut de vos pages.
:idea: Il y a l'autre substance à penser à aussi mais je pense qu'ils seraient les points principaux
La forme (Formulaire)
D'abord nous créerons une forme de base pour que l'utilisateur télécharge leur image :
<form name="uploader" method="post" action="" enctype="multipart/form-data">
<input type="file" name="image" style="width:300px;cursor:pointer" />
<input type="submit" name="upload" value="Upload Image" />
</form>
C'est tout que vous avez besoin vraiment.
Noter la présente partie enctype="multipart/form-data" c'est important pour des téléchargements de dossier, l'enctype définit le contenu qui sera signalé par la forme, la valeur par défaut est application/x-www-form-urlencoded qui est très bien pour presque n'importe quel autre type de contenu, excepté des téléchargements de dossier, ainsi n'oublie pas ceci sous votre forme.
Deuxièmement il y a type= " dossier " que c'est le type d'entrée nous devons permettre à des personnes de passer en revue leur PC pour le dossier ils veulent télécharger, je suis sûrs que vous avez vu ces derniers beaucoup de fois.
Maintenant nous avons une forme qu'il faut que les personnes choisissent leur image, nous devons l'obtenir téléchargée. Premièrement vous devez décider où les images vont être stockées.
Il est le meilleur pour créer un nouvel direction pour ces derniers, vous avez besoin alors de CHMOD que l'direction à 777 ainsi dossiers peut être téléchargé, si vous n'êtes pas sûr comment à faire ceci que vous devez rechercher ou « CHMOD » ou les « permissions de dossier » dans les documents d'aide de votre client de ftp, l'annuaire d'exemple j'emploierai est des « téléchargements »
Vérification des erreurs
Après, comme avec n'importe quel manuscrit forme-basé, vous voulez s'assurer que la forme a été soumise réellement avant que vous commenciez à courir le code, il est assez facile :
if($_POST['upload']) #form has been submitted
C'est le premier point que nous emploierons la variable de $_FILES pour vérifier s'il y a un nom de fichier soumis avec la forme
if($_POST['upload']) {
if($_FILES['image']['name'] == "")
{
#there's no file name return an error
echo "Please select a file to upload!\n";
exit;
}
#we have a filename, continue
}
La prochaine chose que nous ferons est de définir deux variables, l'direction nous voulons télécharger les dossiers à, et nous emploierons également ce point pour faire une rangée des types de dossier que nous voulons permettre :
$uploads = '/home/user/public_html/uploads';
$types_array = array('image/gif','image/pjpeg','image/x-png');
J'utilise le plein chemin de serveur à l'direction de téléchargements, juste des « téléchargements » travaillerais très bien si le manuscrit va reposer un niveau au-dessous de cet direction, à l'aide du plein chemin de serveur signifie juste que le manuscrit fonctionnera toujours si nous le déplaçons autour. Se rappeler de s'assurer que votre annuaire a les permissions correctes de te permettre de télécharger des dossiers, il doit être writeable.
Les types de dossier que nous allons permettre sont .gif .jpg et .png incluent d'autres si vous aimez.
Onto some more error checking, now that we know what types of files we're going to allow, lets check that the file being submitted is one of those using PHP's in_array() function.
#directory to upload to
$uploads = '/home/user/public_html/uploads';
#allowed file types
$types_array = array('image/gif','image/pjpeg','image/x-png');
if(!in_array($_FILES['image']['type'], $types_array))
{
#the type of the file is not in the list we want to allow
echo "That file type is not allowed!\n";
exit;
}
Après, les deux autres contrôles que nous avons mentionnés au début, d'abord de toute taille des images, penser à ce que vous voulez permettre, vous ne devrait pas vraiment devoir laisser plus que 500kb pour des images générales, bien que les screenshots et les papiers peints aient besoin peu d'un plus que cela.
La vérification du volume de fichier est facile, immobile en utilisant le $_FILES variable et la « taille » pour renvoyer la taille en bytes.
Laisse la parole que nous voulons seulement permettre des images jusqu'à 100kb, d'abord nous devons convertir cela en bytes (100 x 1024 = 102400) alors nous définira cette valeur comme variable et contrôle si l'image étant téléchargée est plus grande que cette taille.
$max_filesize = 102400;
$max_filesize_kb = ($max_filesize / 1024);
if($_FILES['image']['size'] > $max_filesize)
{
#file is larger than the value of $max_filesize return an error
echo "You file is too large, files may be up to ".$max_filesize_kb."kb\n";
exit;
}
Et le dernier contrôle que nous ferons est pour les dimensions de l'image, vérifiant ceci est peu un différent.
La manière la plus facile est d'employer PHP getimagesize () la fonction, tellement encore, pensent à la taille que vous voulez accorder cette fois en Pixel (largeur et taille) et nous pouvons employer le suivant pour renvoyer les dimensions de l'image soumise :
$imagesize = getimagesize($_FILES['image']['tmp_name']);
#get width
$imagewidth = $imagesize[0];
#get height
$imageheight = $imagesize[1];
Noter que le changement ici $_FILES['image']['tmp_name'] 'tmp_name' est fondamentalement un chemin provisoire et est le nom qui est créé pour le dossier tandis qu'on le traite ceci ce que nous devons employer pour vérifier la taille plutôt que juste le 'name' qui renverrait 'image.gif'
Maintenant nous avons la largeur et la taille de l'image, nous pouvons définir les tailles maximum que nous voulons permettre et les vérifier les uns contre les autres, laisse la parole nous ne voulons aucun Pixel des images plus en grande partie que 250 x 250.
#allowed dimensions
$maxwidth = 250;
$maxheight = 250;
if($imagewidth > $maxwidth || $imageheight > $maxheight)
{
#one or both of the image dimensions are larger than the allowed sizes return an error
echo "You file is too large, files may be up to ".$maxwidth."px x ".$maxheight."px in size\n";
exit;
}
Télécharger le fichier :
En conclusion, nous sommes passés par toute notre vérification des erreurs, ainsi si nous obtenons à ce point tout qui est laissé est d'employer move_uploaded_file () pour déplacer le dossier de lui est endroit provisoire à l'annuaire de cible.
move_uploaded_file($_FILES['image']['tmp_name'], $uploads.'/'.$_FILES['image']['name']) or die ("Couldn't upload ".$_FILES['image']['name']." \n");
En ce moment si vous voulez à toi pourrions retitrer le dossier, ici nous avons juste employé le nom de fichier existant. Vous pouvez également alors renvoyer le chemin au dossier pour l'utilisateur avec une combinaison de $uploads et de $_FILES['image']['name']
Se rappeler cependant si $uploads est le plein chemin de serveur à l'direction qui ne sera pas beaucoup de bons pour des personnes comme un lien à leur dossier ainsi à toi pourrait vouloir définir une autre variable avec le chemin absolu comme domain.com/uploads/
Voici tout le script :
<?php
if($_POST['upload'])
{
# edit #
$maxwidth = 250;
$maxheight = 250;
$max_filesize = 102400;
$uploads = '/home/user/public_html/uploads';
$types_array = array('image/gif','image/pjpeg','image/x-png');
# end edit #
if($_FILES['image']['name'] == "")
{
echo "Please select a file to upload!\n";
exit;
}
if(!in_array($_FILES['image']['type'], $types_array))
{
echo "That file type is not allowed!\n";
exit;
}
$max_filesize_kb = ($max_filesize / 1024);
if($_FILES['image']['size'] > $max_filesize)
{
echo "You file is too large, files may be up to ".$max_filesize_kb."kb\n";
exit;
}
$imagesize = getimagesize($_FILES['image']['tmp_name']);
$imagewidth = $imagesize[0];
$imageheight = $imagesize[1];
if($imagewidth > $maxwidth || $imageheight > $maxheight)
{
echo "You file is too large, files may be up to ".$maxwidth."px x ".$maxheight."px in size\n";
exit;
}
move_uploaded_file($_FILES['image']['tmp_name'], $uploads.'/'.$_FILES['image']['name'])
or die ("Couldn't upload ".$_FILES['image']['name']."\n");
}
?>
Ce n'est pas un manuscrit parfait car il est mais c'est un début et couvre les choses importantes que vous voulez vérifier.
|
|