Récupérer le chemin physique d'un fichier temporaire PHP

Publié le 25/07/2021 • Actualisé le 25/07/2021


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Dans ce bout de code, nous voyons comment récupérer le chemin physique d'un fichier temporaire PHP. Dans ce cas, nous utilisons la fonction tmpfile() pour le créer. Cette fonction retourne un objet resource. On peut ensuite utiliser la fonction stream_get_meta_data() pour récupérer toutes les méta-données qui lui sont associées. Dans le cas d'une ressource de type fichier, la clé uri contient son chemin complet.


<?php

declare(strict_types=1);

namespace App\Controller\Snippet;

/**
 * J'utilise un trait PHP afin d'isoler chaque snippet dans un fichier.
 * Ce code doit être apellé d'un contrôleur Symfony étendant AbstractController (depuis Symfony 4.2)
 * ou Symfony\Bundle\FrameworkBundle\Controller\Controller (Symfony <= 4.1).
 * Les services sont injectés dans le constructeur du contrôleur principal.
 */
trait Snippet156Trait
{
    public function snippet156(): void
    {
        $tmpFileResource = tmpfile();
        if (!\is_resource($tmpFileResource)) {
            throw new \RuntimeException('Unable to create a temporary file.');
        }

        $meta = stream_get_meta_data($tmpFileResource);
        $path = $meta['uri'];

        // Here, we are sure the uri key if the $path variable is defined and contains
        // a string that's why PHPStan throws a warning if we do this kind of test
        // if (!is_string($path)) {
        // 29     Call to function is_string() with string will always evaluate to true.
        // Excellent!

        echo pathinfo($path, PATHINFO_FILENAME); // avoid using pathinfo($path)['filename']

        fclose($tmpFileResource);

        // That's it! 😁
    }
}

 Exécuter le snippet  Plus sur Stackoverflow   Lire la doc  Snippet aléatoire

  Travaillez avec moi !