web-dev-qa-db-fra.com

Renommer des fichiers lors du téléchargement

J'essayais de renommer mes images en téléchargement et le seul élément de code que j'ai trouvé était celui qui utilise un hachage 32char.

function make_filename_hash($filename) {
   $info = pathinfo($filename);
   $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
   $name = basename($filename, $ext);
   return md5($name) . $ext;
}
add_filter('sanitize_file_name', 'make_filename_hash', 10);

Mes connaissances en php sont très limitées et je cherchais partout un exemple qui utilise un nombre aléatoire généré au lieu d’un hachage, sans succès. Mon idée de départ était d'obtenir l'id de l'image de la base de données et de l'utiliser comme nom de fichier image lors du téléchargement, mais mon cerveau a été tordu au cours du processus.

Quoi qu’il en soit, à ce stade, je me contenterais d’une sorte de système de numérotation qui augmenterait d’un chiffre à chaque téléchargement ou, s’il n’est pas possible, d’au moins un nombre aléatoire en utilisant une plage, comme Rand (10 000 99999).

Toute aide serait très appréciée merci beaucoup

=============================================== ========

Pouvez-vous lire les données d'une table personnalisée dans functions.php et y écrire? J'essaie de lire un compteur d'une table. Réglez l'image sur ce numéro de compteur et mettez le compteur à jour dans la base de données. Cela ne semble pas fonctionner, le compteur augmente, mais la table n'est jamais mise à jour et quelle que soit la valeur de la base de données, le compteur n'utilise pas cette valeur. Cela signifie donc qu'il ne lit pas cette valeur non plus. Je veux juste savoir s'il existe un autre moyen de renommer des fichiers, mais avec une valeur de ma table personnalisée. C'est ce que j'ai eu jusqu'à présent. Je pensais que j'utilisais peut-être le mauvais crochet mais à ce stade, je suis un peu coincé. Merci les gars.

 function make_filename_counter($filename) {      
   $qry;
   $fcnt = 0;
   $sql = ("SELECT counter FROM bwbps_filenamecounter WHERE id = 1");
   $cnt = mysql_query($sql);
   foreach($cnt as $cnt) {
      $fcnt = $cnt->counter;
   }
   $fcnt = $fcnt + 1;
   $info = pathinfo($filename);
   $ext  = empty($info['extension']) ? '' : '.' . $info['extension'];
   $sql = "UPDATE bwbps_filenamecounter SET counter = " . $fcnt . " WHERE id = 1";
   $qry = mysql_query($sql);
   $fcnt = 0;
  return $fcnt . $ext;
}
add_filter('sanitize_file_name', 'make_filename_counter', 10); 
4
sky67ro

pas besoin d'utiliser une table personnalisée, utilisez une option et le hook add_attachment:

function wpa59168_rename_attachment( $post_ID ) {

    $post = get_post( $post_ID );
    $file = get_attached_file( $post_ID );
    $path = pathinfo( $file );

    $count = get_option( 'wpa59168_counter', 1 );

    // change to $new_name = $count; if you want just the count as filename
    $new_name = $path['filename'] . '_' . $count;
    $new_file = $path['dirname'] . '/' . $new_name . '.' . $path['extension'];
    rename( $file, $new_file );    
    update_attached_file( $post_ID, $new_file );

    update_option( 'wpa59168_counter', $count + 1 );

}
add_action( 'add_attachment', 'wpa59168_rename_attachment' );
3
Milo

Si vous les effectuez dans l'ordre numérique, vous pouvez simplement les stocker dans une option et simplement augmenter cette option chaque fois que vous ajoutez un fichier.

0
fdsa

Vous pouvez vérifier le code du plugin" Noms de fichier en latin ".

Il convertit les symboles de différentes langues en lettres latines lors du téléchargement.

Le code source du plugin .

0
webvitaly