70 votes

Obtenir un nom de fichier (ou supprimer un fichier) à l'aide de son descripteur

Est-il possible d'obtenir un nom de fichier à partir d'un descripteur de fichier? Ou comment puis-je supprimer un fichier n'ayant qu'un pseudo?

138voto

lion.vollnhals Points 609

Il y a stream_get_meta_data . Cela fonctionne pour un flux que vous obtenez de tmpfile (). Si vous l'appelez avec un pointeur de fichier normal, vous ne pouvez obtenir que le nom de base.

 $meta_data = stream_get_meta_data($stream_or_file_pointer);
$filename = $meta_data["uri"];
echo $filename;
 

Exemple pour tmpfile ():

 "/private/var/folders/v3/n54x13jx5v7610fw9dm0wcxm0000gn/T/phpCJvevP"
 

Exemple pour fopen ("somefile", "r"):

 "test"
 

8voto

Gordon Points 156415

Nyes. Après tout, PHP ne fonctionne pas directement avec cela. Mais sur Linux, vous pouvez faire

 $fp = fopen('somefile', 'r');
$stat = fstat($fp);
$inode = $stat['ino'];
system("find -inum $inode", $result);
echo $result;
 

Ceci n’a pas été testé, il pourrait donc être nécessaire de le peaufiner.

EDIT Apparemment, il existe une solution plus simple .

3voto

Greg Points 8483

Pour ce faire, vous devrez créer un wrapper contenant le nom du fichier. Un descripteur de fichier n'a pas de contexte du nom de fichier à partir duquel il a été créé.

-4voto

diyism Points 1191

Une méthode propre à utiliser un fichier temporaire:

 <?
$tmp=array_search('uri', @array_flip(stream_get_meta_data($GLOBALS[mt_rand()]=tmpfile())));
file_put_contents($tmp, 'hello');
echo file_get_contents($tmp);
?>
 

sans avoir à fermer le fichier tmp, il sera supprimé jusqu'à la fin du php.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X