Skip to main content

Fichiers

La gestion des fichiers se fait à l'aide de la classe Media qui est présent dans le dossier Modules/Media. Dans ce dossier, vous allez également retrouver l'utilitaire qui sert d'interface à la classe Media, FS.
Il existe deux possibilités pour la gestion des fichiers, soit utilisés FS, soit utiliser s3. Ici nous nous concentrerons à l'utilisation de FS car c'est ce système qui est présent par défaut dans Castopod. Mais vous pouvez modifier cela dans la variable $fileManagers du fichier Modules/Media/Config/Media.php.

La classe Media indique donc les différents emplacements d'enregistrement des fichiers. Nous avons vu auparavant que les fichiers étaient enregistrés par défaut dans le dossier public/media, mais vous pouvez modifier l'emplacement dans cette classe, ainsi que le nom des dossiers dans lesquels vont être enregistrés les documents des podcasts ou des personnes, dans la variable $folders.

Si nous regardons maintenant la classe FS, qui est utilisé par Media pour enregistrer ou supprimer des fichiers, les renommener, recupérer leur contenu, etc. Chaque fichier n'est pas identifié par son nom mais par une clé unique. Nous verrons ensuite comment Castopod lie cette clé à son nom.

Voici les fonctions principales de cette classe :

  • save() : Cette fonction va permettre d'enregistrer un fichier dans le dossier indiqué dans la classe Media. Elle attend en paramètre un objet File, et la clé du fichier.
  • delete() : Elle va permettre de supprimer un fichier grâce à la clé.
  • rename() : Cette fonction va permettre de changer une clé dans une autre clé.
  • getFileContents() : Cette fonction va retourner le contenu d'un fichier, grâce à la clé indiquée en paramètre de la fonction. Vous pouvez retrouver l'ensemble des possibilités de cette classe dans le fichier d'interface situé dans Modules/Media/FileManagers/FileManagerInterface.php.

Nous vous avons parlé de la classe File, qui est une classe écrite par CodeIgniter qui permet d'interagir avec un fichier. Elle est une classe étendue d'une classe de base de PHP, SplFileInfo, qui permet elle aussi d'interagir avec des fichiers. Nous ne nous attarderons cependant pas sur ces deux classes, pour éviter de créer des confusions et simplifier cette documentation, mais si vous souhaitez plus d'informations sur les possibilités de ces classes, nous vous redirigeons vers la page de documentation associée de CodeIgniter.

Toute la gestion de clé est gérée également par CodeIgniter, via son système de gestion des fichiers. Lorsqu'un fichier va être envoyer à CodeIgniter, lors de l'enregistrement du fichier, une fonction getRandomName() va être appelé pour générer un nom aléatoire à ce fichier. Ce nom est généré à partir du temps et d'un nombre aléatoire généré :

public function getRandomName(): string
  {
      $extension = $this->getExtension();
      $extension = empty($extension) ? '' : '.' . $extension;

      return Time::now()->getTimestamp() . '_' . bin2hex(random_bytes(10)) . $extension;
  }

Une fois ce nom généré, le fichier va pouvoir être enregistrer dans le bon dossier. Ensuite c'est au niveau de la base de données qu'il va falloir s'intéresser.

Si on prend comme expemple l'ajout d'un épisode, deux tables vont être concernés :

  • La table episodes, qui contient les informations liées à un épisode. On va retrouver dans les attributs un identifiant nommé audio_id, qui est un entier.
  • La table media, qui contient l'ensemble des fichiers audios et les images de Castopod. Là dedans, on va retrouver pour chaque fichiers une clé, qui correspond à l'emplacement du fichier (qui est la clé utilisée dans les fonctions citées précédemment), et un identifiant nommé id. C'est grâce à cette identifiant que le lien va pouvoir être fait entre l'épisode et ce fichier.