InfoProGraphie Simple > Tutoriels > Programmation > Site Web > PHP/MySQL > Envoi de fichier sur le serveur

PHP/MySQL - Envoi de fichier sur le serveur

Information du tutoriel

http://infoprographiesimple.free.fr/forums/img/avatars/26.jpgAuteur: haaa11


Le formulaire d'envoi

Bon, avant d'envoyer le fichier, il faux un formulaire d'envoi :p , cela est très simple à créer;) , regarder :


Code:

<form action="stocker.php" method="post" enctype="multipart/form-data">
<input type="file" name="fichier" /><br />
<input type="submit" value="Envoyer le fichier" />
</form>

Mais c'est quoi se code hein? ?

Je vais vous l'expliquer tout de suite;) :


Code:

<form action="stocker.php" method="post" enctype="multipart/form-data">

- <form indique que c'est un formulaire.
- action="stocker.php" indique que on dois envoyer à la page stocker.php.
- method="post" indique la méthode.


Code:

<input type="file" name="fichier" />

Créer le champ "parcourir" pour sélectionner le fichier à envoyer.


Code:

<input type="submit" value="Envoyer le fichier" />

Sert à envoyer les donnés du formulaire.

Bon, une fois cela fais, il nous faut passer à la page stocker.php, pour héberger le fichier :D .

Stocker le fichier

Maintenant, il ne reste plus que à stocker le fichier et vérifier son extension, cela grâce au script PHP, que nous allons faire ensemble :p .

Comment fait-on pour héberger le fichier ?
Cela est très simple il suffit de faire:

Code:

<?php
move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename($_FILES['fichier']['name']));
$message = "le fichier à été stocker à cette adresse: http://monsite.truc/upload/".$_FILES['fichier']['name'];

echo $message;
?>

Explication du code:

- move_uploaded_file Déplace le fichier dans son dossier.
- $_FILES['fichier']['tmp_name'] On indique quel fichier déplacer (donc le fichier qui à temporairement été stocker)
- 'upload/'.basename($_FILES['fichier']['name']) nom du fichier avec son extension ($_FILES['fichier']['name'] nom du fichier avec son extension) plus l'endroit où il doit être stocker (ici dans le répertoire upload).

C'est bien joli ça, mais on ne vérifie même pas si il y a des erreurs, son poids et sa taille...

Je sais :D , un peu de patience, j'y viens.

En premier nous allons vérifier si il ne c'est produit aucune erreur, grâce à se joli if() :D :

Code:

if (isset($_FILES['fichier']) AND $_FILES['fichier']['error'] == 0)//On vérifie si un fichier à bien été choisis et qu'il n'y a pas d'erreur

Voilà ajouter se if() au code de stockage, ça vous donne cela normalement (noté que j'ai rajouter un else):

Code:

<?php
//on verifie qu'il n'y ai aucune erreur
if (isset($_FILES['fichier']) AND $_FILES['fichier']['error'] == 0){
//si oui on stock
move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename($_FILES['fichier']['name']));

$message = "le fichier à été stocker à cette adresse: http://monsite.truc/upload/".$_FILES['fichier']['name'].".";

// si non on mais le message d'erreur
}
else
{
$message = "Le formulaire n'est pas rempli ou une erreur est survenu.";
}
echo $message;
?>

Vérifier le poids

Bon maintenant vérifions le poids du fichier :D .

Il vous suffit d'ajouter à notre code ce if() (pour limiter l'envoi à 10Ko cela fais 10240 octets, car le poids est vérifier en octet);) :


Code:

if ($_FILES['fichier']['size'] <= 10240)//on regarde si la taille est en dessous ou égale à 10240 Octets(=10Ko)

Ce qui nous donne:


Code:

<?php
//On vérifie si un fichier à bien été choisis et qu'il n'y a pas d'erreur
if (isset($_FILES['fichier']) AND $_FILES['fichier']['error'] == 0){

//on regarde si la taille est en dessous ou égale à 10240 Octets(=10Ko)
if ($_FILES['fichier']['size'] <= 10240){
//on stock le fichier
move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename($_FILES['fichier']['name']));

$message = "le fichier à été stocker à cette adresse: http://monsite.truc/upload/".$_FILES['fichier']['name'].".";
}
else // si le fichier est trop gros
{
$message = "Le fichier est trop gros.";
}
}
else // si il y a eu une erreur
{
$message = "Le formulaire n'est pas rempli ou une erreur est survenu.";
}

echo $message;
?>

Vérifier l'extension

Bon, maintenant il faut vérifier son extension :) , c'est très simple :D .
Ici nous allons accepter seulement les extensions suivante:
.bmp, .png, .gif

Encore une foi, nous allons utilisés le if(), mais cette foi si il faux préparer des variable avant.

Comment on fait pour connaître l'extension ?

Tout d'abord il faut récupérer les informations sur le fichier, à l'aide de cette commande: pathinfo($_FILES['fichier']['name'])
Mais pour pouvoir récupérer l'extension facilement il faut stocker ses informations dans une variable, comme ceci:

Code:

$info = pathinfo($_FILES['fichier']['name']);

Maintenant, nous allons récupérer l'extension et la stocker dans une variable (vous comprendrez vers la fin du tuto pourquoi;) ):

Code:

$extension = $info['extension'];

Maintenant nous allons faire une variable avec un tableau qui contient les extensions autoriser:

Code:

$extension_autoriser = array('bmp', 'png', 'gif;);

Libre à vous d'en rajouter, de les changer, etc...;) .

Bon maintenant nous allons vérifier si le fichier à bien une des extensions autoriser de notre tableau :p :

Code:

if(in_array($extension, $extensions_autoriser))

Donc si vous avez bien suivit au final cela nous donne:
Afficher

<?php
//On vérifie si un fichier à bien été choisis et qu'il n'y a pas d'erreur
if (isset($_FILES['fichier']) AND $_FILES['fichier']['error'] == 0)
{

//on regarde si la taille est en dessous ou égale à 10240 Octets(=10Ko)
if ($_FILES['fichier']['size'] <= 10240)
{
$info = pathinfo($_FILES['fichier']['name']);
$extension = $info['extension'];
$extension_autoriser = array('bmp', 'png', 'gif;);
if(in_array($extension, $extensions_autoriser))
{
//on stock le fichier
move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename($_FILES['fichier']['name']));

$message = "le fichier à été stocker à cette adresse: http://monsite.truc/upload/".$_FILES['fichier']['name'].".";
}
else
{
$message = "Le fichier n'a pas l'extension autoriser.";
}
}
else // si le fichier est trop gros
{
$message = "Le fichier est trop gros.";
}
}
else // si il y a eu une erreur
{
$message = "Le formulaire n'est pas rempli ou une erreur est survenu.";
}

echo $message;
?>

Allez maintenant on peut passer au changement de nom du fichier :D .

Modifier le nom du fichier selon la date et l'heure

Bon, maintenant nous allons modifier le nom du fichier selon la date et l'heure qu'il est lors de l'envoi. C'est à dire le Timestamp, c'est une série de chiffre qui indique la date est l'heure au moment où on le demande, pour le récupérer on utilise tout simplement time().

Ah, ba je sais alors il me suffit juste de faire move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename("fichier".time()));, non ?

Faux :p , si vous faites cela, le fichier sera, bien sure, stocker avec le nom fichier+le timestamp, mais il n'aura pas d'extension :( , il sera illisible. !!
Il vous faux donc faire cela:

Code:

move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename("fichier".time().".".$extension));

Et oui, souvenez vous de notre variable $extension, je vous avais dit qu'elle serait utile, maintenant c'est bon le fichier a changer de nom et a une extension !

Donc, voici notre code final :p :

Afficher

<?php
//On vérifie si un fichier à bien été choisis et qu'il n'y a pas d'erreur
if (isset($_FILES['fichier']) AND $_FILES['fichier']['error'] == 0)
{

//on regarde si la taille est en dessous ou égale à 10240 Octets(=10Ko)
if ($_FILES['fichier']['size'] <= 10240)
{
$info = pathinfo($_FILES['fichier']['name']);
$extension = $info['extension'];
$extension_autoriser = array('bmp', 'png', 'gif;);
if(in_array($extension, $extensions_autoriser))
{
//on stock le fichier
move_uploaded_file($_FILES['fichier']['tmp_name'], 'upload/'.basename("fichier".time().".".$extension));

$message = "le fichier à été stocker à cette adresse: http://monsite.truc/upload/".$_FILES['fichier']['name'].".";
}
else
{
$message = "Le fichier n'a pas l'extension autoriser.";
}
}
else // si le fichier est trop gros
{
$message = "Le fichier est trop gros.";
}
}
else // si il y a eu une erreur
{
$message = "Le formulaire n'est pas rempli ou une erreur est survenu.";
}

echo $message;
?>


Et voilà c'est fini;) , c'était pas très compliquer :D .
Si vous avez besoins d'aide ou des questions allez sur le forum;) .

Les cours sont la propriété de leurs auteurs respectifs.
Toute reproduction totale ou partielle sans l'accord des auteurs est interdite.