7.PHP pour le web

7.5.Upload de fichier

7.5.4.Stockage en base de données

rem
  • Même si cela est tout à fait possible, je déconseille de stocker en base de données le fichier lui-même (hormis éventuellement s'il s'agit d'un fichier texte). Cela aurait pour effet de rendre la base trop volumineuse et, qui plus est, cela complique les choses (inutilement).Il est donc préférable de stocker le fichier dans un espace dédié et de ne stocker dans la base que le nom du fichier (voire le chemin relatif).
Ce qui donne par exemple les scripts suivants:
<html>
  <body>
    <form enctype="multipart/form-data" action="fileupload_bd.php" method="post">
      <input type="hidden" name="MAX_FILE_SIZE" value="100000" />
      <input type="text" name="login" />
      Ma photo <input type="file" name="maphoto" />
      Mon icone <input type="file" name="monicone" />
      <input type="submit" />
    </form>
  </body>
</html>
<html>
<body>
<?php

    // connexion à la BD
    // --> Cf. Tutoriel BD

    // définition de l'espace destiné à recevoir les fichiers
    $repository = $_SERVER["DOCUMENT_ROOT"];
    $extensionsAutorisees = array("jpeg", "jpg", "gif");

    // si un fichier maphoto a bien été transféré
    if (is_uploaded_file($_FILES["maphoto"]["tmp_name"])) {
        // recupération de l'extension du fichier
        // autrement dit tout ce qu'il y a après le dernier point (inclus)
        $nomPhoto = $_FILES["maphoto"]["name"];
        $extension = substr($nomPhoto, strrpos($nomPhoto, "."));
        // Contrôle de l'extension du fichier
        if (!(in_array($extension, $extensionsAutorisees))) {
            die("Le fichier n'a pas l'extension attendue");
        }
        $cheminPhoto = $login . "_photo" . $extension;
        rename($_FILES["maphoto"]["tmp_name"], $repository.$cheminPhoto);
    }
    if (is_uploaded_file($_FILES["monicone"]["tmp_name"])) {
        // recupération de l'extension du fichier
        // autrement dit tout ce qu'il y a après le dernier point (inclus)
        $monIcone = $_FILES["monicone"]["name"];
        $extension = substr($monIcone, strrpos($monIcone,"."));
        // Contrôle de l'extension du fichier
        if (!(in_array($extension, $extensionsAutorisees))) {
            die("Le fichier n'a pas l'extension attendue");
        }
        $cheminIcone = $login . "_icone" . $extension;
        rename($_FILES["monicone"]["tmp_name"], $repository.$cheminIcone);
    }
    
// Exemple de requete de stockage en BD avec MySQL
// et une table qui aurait pu être créée par
// CREATE TABLE matable (login varchar(64), image varchar(64), icone varchar(64));
mysql_query("INSERT INTO matable (login,image,icone) VALUES (".
            "'" . addslashes($login). "','" . addslashes($cheminPhoto) . "',".
            "'" . addslashes($cheminIcone) . "')");
?>
</body>
</html>