Magazine Internet

PHP : Enregistrer un fichier dans une base de données

Publié le 17 novembre 2009 par Methylbro

La classe FileFromDB

Afin de manipuler les fichiers stockées dans la base de données, je vous propose d’utiliser une classe que nous feront évoluer tout au long de ce tutoriel. Appelons la FileFromDB car chaque instance de cette classe nous permettra de manipuler un de nos fichiers.

class FileFromDB {
private $filename;
public function __construct($filename) {
$this->filename = $filename;
}
}

Le formulaire d’upload

Comme je le disait lors de l’introduction, dans notre exemple les fichiers seront envoyés par les utilisateurs. Cela nécessitera donc un petit formulaire permettant d’envoyer des fichiers.

<?php
$message = null;
if (isset($_FILES['myFile'])) {
$File = new FileFromDB($_FILES['myFile']['name']);
$File->upload($_FILES['myFile']);
$message = 'Votre fichier à bien été ajouté';
}
?>
<html>
<head>
<title>Upload</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<?php echo $message; ?>
<fieldset>
<legend>Charger un fichier</legend>
<p>
<label for="myFile">Fichier</label>
<input type="file" id="myFile" name="myFile" />
</p>
<p>
<input type="reset" value="Annuler" />
<input type="submit" value="Envoyer" />
</p>
</fieldset>
</form>
</body>
</html>

PHP : Enregistrer un fichier dans une base de données

Ce formulaire restera simple et l’on omettra toutes les vérifications d’usage en termes de sécurité. Ce n’est pas le sujet abordé.

La méthode FileFromDB::upload()

Enfin nous ajouterons à notre classe FileFromDB une méthode permettant d’enregistrer notre fichier comme un objet large binaire au sein de notre table. L’extension PDO et son système de requêtes préparées nous propose un type de paramètre parfait pour résoudre les problèmes liés : PARAM_LOB.

Ainsi nous passerons comme paramètre un flux vers le fichier que l’on souhaite envoyé à la base de données au lieu de l’intégralité du contenu lui même. En travaillant avec des flux de données nous ne consommerons pas inutilement les ressources disponibles.

public function upload($file) {
global $PDO;
$stmt = $PDO->prepare("REPLACE INTO FILE (name, type, data) VALUES (?, ?, ?)");
$stmt->bindParam(1, $this->filename);
$stmt->bindParam(2, $file['type']);
$stmt->bindParam(3, fopen($file['tmp_name'], 'rb'), PDO::PARAM_LOB);
return $stmt->execute();
}

Dans un prochain article nous verrons comment lire des fichiers enregistrés dans notre base de données.


Vous pourriez être intéressé par :

Retour à La Une de Logo Paperblog

Ces articles peuvent vous intéresser :

  • Php 5.3

    Attendue depuis longtemps, la nouvelle version de PHP5 est disponible depuis hier soir. Il s'agit de la dernière évolution majeure avant la sortie de PHP6... Lire la suite

    Par  Marie
    INTERNET, PROGRAMMATION
  • Déploiement PHP automatique avec Capistrano

    Tous les développeurs connaissent l'étape "difficile" du passage en production. Capistrano est un outil permettant d'automatiser et donc de simplifier la mise... Lire la suite

    Par  Marie
    INTERNET, PROGRAMMATION
  • PHP : Type Hinting

    La nouvelle est tombée en début de semaine. Cela fait longtemps que ce sujet fait débat au sein de la communauté PHP, voici que enfin un patch vient... Lire la suite

    Par  Methylbro
    INTERNET, PROGRAMMATION
  • PHP : Créer un client HTTP

    Créer client HTTP

    Comme j'ai pour habitude de manipuler des objets ; nous allons donc créer une nouvelle classe que nous appellerons ClientHTTP. Les prés requis technique seront... Lire la suite

    Par  Methylbro
    INTERNET, PROGRAMMATION
  • PHP-Anywhere : Un éditeur PHP en ligne

    PHPAnywhere est une web application originale. Il s'agit en fait d'un IDE embarqué directement au sein de votre navigateur. Le tout à grand coups de sauce 2.0. Lire la suite

    Par  Methylbro
    INTERNET, PROGRAMMATION
  • Traitement des images en PHP

    Parmi les morceaux de code, les fonctions ou les classes que j'utilise régulièrement lors de petits projets (au lieu de les coder moi-même) il y as la petite... Lire la suite

    Par  Methylbro
    INTERNET, PROGRAMMATION
  • PHP : La comparaison d'objets

    Comme PHP n'intègre pas (encore) de méthode pour effectuer une surcharge d'opérateur comme cela peut être le cas dans d'autres langages. Lire la suite

    Par  Methylbro
    INTERNET, PROGRAMMATION

A propos de l’auteur


Methylbro 17 partages Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte