Autres compléments

Upload de fichiers ou d’images de profil

Changement dans le formulaire

Premièrement, il faut changer la propriété enctype à multipart/form-data de votre formulaire pour autoriser l’envoi de fichier, et bien mettre la méthode à POST :

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

Référence : Mozilla Developer Network

Le champ permettant d’envoyer un fichier est le suivant :

<input type="file" name="nom-du-fichier">

Traitement du fichier reçu

Référence générale : PHP.net

Globalement, on récupère les informations sur le fichier reçu avec la variable $_FILES['nom-du-fichier']. Remarquez que le nom-du-fichier correspond au name de l’input précédent.

Avant toute chose, il faut vérifier que le fichier a bien été uploadé avec

if (!empty($_FILES['nom-du-fichier']) && is_uploaded_file($_FILES['nom-du-fichier']['tmp_name'])) {
   ... 
}

Le fichier est uploadé dans un dossier temporaire. Pour qu’il ne soit pas supprimé à la fin de l’exécution du script, vous devez le déplacer manuellement avec par exemple la fonction move_uploaded_file()

$name = $_FILES['nom-du-fichier']['name'];
$pic_path = ROOT . "upload/$name";
if (!move_uploaded_file($_FILES['nom-du-fichier']['tmp_name'], $pic_path)) {
  echo "La copie a échoué";
}

Attention : il faut donner les droits en écriture à Apache (utilisateur www-data) sur le dossier où vous souhaitez déplacer vos images.

On peut aussi restreindre les extensions autorisés pour le fichier avec la fonction is_uploaded_file()

$allowed_ext = array("jpg", "jpeg", "png");
$explosion = explode('.',$_FILES['nom-du-fichier']['name']);
if (!in_array(end($explosion), $allowed_ext)) {
  echo "Mauvais type de fichier !";
}