Renommer correctement un fichier uploadé conforme à une URL

Eléphant du PHP | 91 Messages

01 févr. 2024, 17:30

Bonjour,
Je voudrai recommer le nom d'un fichier uploadé afin que celui-ci soit conforme à une URL, donc pas d'accent, ni d'espace etc.
Dans mon script les lettres avec accent sont supprimées, je n'arrive pas à trouver mon problème.
Merci de votre aide.

Code : Tout sélectionner

$nouv_photo = strtr($photo,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $nouv_photo = preg_replace('/([^.a-z0-9]+)/i', '-', $photo); if ( move_uploaded_file( $tmp_file1, $rep_photo . $nouv_photo ) ) {}

Mammouth du PHP | 1967 Messages

01 févr. 2024, 18:16

Salut
regarde le nom de tes variables et pose toi la question de savoir si tu utilise la bonne à chaque ligne
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphant du PHP | 91 Messages

01 févr. 2024, 18:49

Je donne mon code détaillé, je ne suis pâs expert et je ne comprends pas tout désolé

Code : Tout sélectionner

$photo = $_FILES[ 'photo' ][ 'name' ]; $tmp_file1 = $_FILES[ 'photo' ][ 'tmp_name' ]; $file1 = $_FILES[ 'photo' ][ 'type' ]; $file_type1 = $photo; $file_type_length1 = strlen( $file_type1 ) - 3; $file_type1 = substr( $file_type1, $file_type_length1 ); $file_type1 = strtolower( $file_type1 ); $nouv_photo = strtr($photo,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $nouv_photo = preg_replace('/([^.a-z0-9]+)/i', '-', $photo);

Avatar du membre
Mammouth du PHP | 1564 Messages

01 févr. 2024, 23:11

Tu attribut deux fois quelque chose à la variable $nouv_photo.

$nouv_photo = preg_replace('/([^.a-z0-9]+)/i', '-', $photo);
$nouv_photo = preg_replace('/([^.a-z0-9]+)/i', '-', $nouv_photo);

Sinon, je te propose ce script pour renommer le nom d'un fichier uploadé.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

02 févr. 2024, 00:04

Moi j'utilise la fonction suivante qui fait une translitération quelque soit la langue et les caractères utilisés, puis derrière le trim(preg_replace() permet de sécuriser le tout pour être sûr de n'avoir que des chiffres et des lettres au final :
<?php
function slugify(string $str, string $sep = '-'): string{
    return trim(
        preg_replace('/[^a-z0-9]+/', $sep, 
           \transliterator_transliterate("Any-Latin; Latin-ASCII; Lower()", $str)
       ), $sep);
}

echo slugify("@Pierre est complètement dingue d'œuf ! #egg En Suédois : ø æ ; En japonais : 字");
// affiche pierre-est-completement-dingue-d-oeuf-egg-en-suedois-o-ae-en-japonais-zi
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Mammouth du PHP | 1564 Messages

02 févr. 2024, 00:07

Trop bien ! Merci pour le partage :)

Eléphant du PHP | 91 Messages

02 févr. 2024, 10:50

Super, merci pour votre aide ;-)