web-dev-qa-db-fra.com

Comment puis-je changer l'extension d'un fichier en utilisant PHP?

Comment puis-je changer l'extension d'un fichier en utilisant PHP?

Ex: photo.jpg en photo.exe

22
PHLAK

Dans les systèmes d'exploitation modernes, les noms de fichiers peuvent très bien contenir des périodes bien avant l'extension du fichier, par exemple:

my.file.name.jpg

PHP fournit un moyen de trouver le nom de fichier sans l'extension qui en tient compte, puis ajoutez simplement la nouvelle extension:

function replace_extension($filename, $new_extension) {
    $info = pathinfo($filename);
    return $info['filename'] . '.' . $new_extension;
}
38
Tony Maro
substr_replace($file , 'png', strrpos($file , '.') +1)

Changera n'importe quelle extension à ce que vous voulez. Remplacez png par l’extension souhaitée.

20
Matt

Remplacer l'extension, conserver les informations sur le chemin

function replace_extension($filename, $new_extension) {
    $info = pathinfo($filename);
    return ($info['dirname'] ? $info['dirname'] . DIRECTORY_SEPARATOR : '') 
        . $info['filename'] 
        . '.' 
        . $new_extension;
}
10
Alex

Une fois que vous avez le nom de fichier dans une chaîne, utilisez d’abord regex pour remplacer l’extension par une extension de votre choix. Voici une petite fonction qui fera ça:

function replace_extension($filename, $new_extension) {
    return preg_replace('/\..+$/', '.' . $new_extension, $filename);
}

Ensuite, utilisez la fonction rename () pour renommer le fichier avec le nouveau nom de fichier.

8
Jeremy Ruten
7
Galen

Il suffit de le remplacer par l'expression rationnelle:

$filename = preg_replace('"\.bmp$"', '.jpg', $filename);

Vous pouvez également étendre ce code pour supprimer d'autres extensions d'image, pas seulement bmp:

$filename = preg_replace('"\.(bmp|gif)$"', '.jpg', $filename);
3
niksmac

Meilleure façon:

substr($filename, 0, -strlen(pathinfo($filename, PATHINFO_EXTENSION))).$new_extension

Les modifications apportées uniquement sur la partie extension. Laisse les autres informations inchangées.

C'est sur.

3
Enyby

Pour les fans de regex, La version modifiée de la solution 'preg_replace' de Thanh Trung, qui contiendra toujours la nouvelle extension (de sorte que si vous écrivez un programme de conversion de fichier, vous n'écraserez pas accidentellement le fichier source avec le résultat). être:

preg_replace('/\.[^.]+$/', '.', $file) . $extension
1
chadi

Vous pouvez utiliser basename () :

$oldname = 'path/photo.jpg';
$newname = (dirname($oldname) ? dirname($oldname) . DIRECTORY_SEPARATOR  : '') . basename($oldname, 'jpg') . 'exe';

Ou pour toutes les extensions:

$newname = (dirname($oldname) ? dirname($oldname) . DIRECTORY_SEPARATOR  : '') . basename($oldname, pathinfo($path, PATHINFO_EXTENSION)) . 'exe';

Enfin, utilisez rename () :

rename($oldname, $newname);
1
mgutt

Beaucoup de bonnes réponses ont été suggérées. J'ai pensé qu'il serait utile d'évaluer et de comparer leurs performances . Voici les résultats:

  • la réponse de Tony Maro (pathinfo) a pris 0.000031040740966797 secondes. Note: Il y a l'inconvénient de ne pas inclure le chemin complet.
  • answer by Matt (substr_replace) a pris 0.000010013580322266 secondes.
  • answer by Jeremy Ruten (preg_replace) a pris 0.00070095062255859 secondes.

Par conséquent, je suggérerais substr_replace, car il est plus simple et plus rapide que d’autres.

Juste pour noter, il y a aussi la solution suivante qui a pris 0,000014066696166992 secondes. Je ne pouvais toujours pas battre substr_replace:

$parts = explode('.', $inpath);
$parts[count( $parts ) - 1] = 'exe';
$outpath = implode('.', $parts);
0
Moradnejad