Rename files on upload

时间:2012-07-20 作者:sky67ro

我一直试图在上传时重命名我的图像,我找到的唯一一段代码是使用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);
我的php知识非常有限,我到处寻找一个使用生成的随机数而不是哈希的示例,但没有成功。我最初的想法是获取db图像id并在上传时将其用作图像文件名,但在这个过程中我的大脑被扭曲了。

无论如何,在这一点上,我会满足于某种编号系统,它会在每次上传时增加一个数字,或者如果不可能,至少会使用一些随机数,比如rand(100009999)。

非常感谢您的帮助,非常感谢

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

您可以从函数中的自定义表中读取数据吗。php并写入。我试图从表中读取计数器,将图像设置为该计数器编号,并更新数据库中的计数器。它似乎不起作用,计数器会增加,但表永远不会更新,而且无论db中的值是什么,计数器都不会使用该值,因此这意味着它也不会读取该值。我只是想知道是否有其他方法可以重命名文件,但要使用自定义表中的值。这就是我目前得到的。我在想也许我用错了钩子,但现在我有点卡住了。谢谢各位。

 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); 

3 个回复
最合适的回答,由SO网友:Milo 整理而成

无需使用自定义表、使用选项和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\' );

SO网友:fdsa

如果你按数字顺序做,你可以store them in an option 每次添加文件时,只需增加该选项。

SO网友:webvitaly

您可以检查"Filenames to latin" plugin.

它在上传时将不同语言的符号转换为拉丁字母。

这个source code of the plugin.

结束

相关推荐

Protect Uploads in Multisite

我正在使用WordPress multisite(3.3.1),并试图保护从某些博客上传的内容不被热链接和直接访问。这与How to Protect Uploads, if User is not Logged In?, 但我只想通过服务器上运行的脚本访问上传内容(即,只有服务器可以显示/提供上传服务),因此内容可以受到WordPress用户权限的保护。例如,我有一个名为40c的字段。jpg位于localhost/files/2011/07/40c。jpg;我想让文件显示出来only 在本地域上由HTML