【技术控】wordpress实现上传文件自动重命名的两种方法

  • A+
所属分类:技术控

WordPress是一款很强大的博客程序,我们可以用wordpress还搭建各种不同的站点,CMS、博客、企业站都可以。最近无忧主机www.51php.com小编就用wordpress搭建了一个博客,可是每次我上传的文件名重复的话,就会覆盖原文件,如果文件名的有中文,就会出乱码。这个应该怎么办呢?下面小编提供两种方法参考:

第一种方法:

filename

1、  使用FTP工具连接你的php虚拟主机,找到wordpress程序的根目录下的/wp-admin/includes/file.php文件,编辑,找到以下代码,如下图所示 (你也可以使用搜索功能,搜索Move the file to the uploads dir)

// Move the file to the uploads dir
$new_file = $uploads['path'] . "/$filename";
if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) ) {
if ( 0 === strpos( $uploads['basedir'], ABSPATH ) )
$error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
else
$error_path = basename( $uploads['basedir'] ) . $uploads['subdir'];
return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) );
}

2、将上述代码替换为:(当然你也可以装上述代码注释,方便以后还原)

// Move the file to the uploads dir
// $new_file = $uploads['path'] . "/$filename";
$new_file = $uploads['path'] . "/".date("YmdHis").floor(microtime()*1000).".".$ext;
if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) ) {
if ( 0 === strpos( $uploads['basedir'], ABSPATH ) )
$error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
else
$error_path = basename( $uploads['basedir'] ) . $uploads['subdir'];
return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $error_path ) );
}

主要是将第一句替换成第二句语句即可

$new_file = $uploads['path'] . "/$filename";

$new_file = $uploads['path'] . "/".date("YmdHis").floor(microtime()*1000).".".$ext;

3、保存file.php,这样就可以实现wordpress上传图片自动重命名了。

以上代码意思就是,保存后覆盖原文件,那么上传文件就会以“年月日时分秒+千位毫秒整数”的格式重命名文件。这就再也不用担心图片文件名相同而覆盖了原文件。

第2种方法:

filename2

1、在我们wordpress网站模板目录(wp-content\themes\模块文件名\)下的functions.php中加入以下代码 ,直接放在functions.php文件的最后(注意是 ?> 之前,如下图)就可以。

function new_filename($filename) {
$info = pathinfo($filename);
$ext = empty($info['extension']) ? ” : ‘.’ . $info['extension'];
$name = basename($filename, $ext);
return substr(md5($name), 0, 20) . $ext;
}
add_filter(‘sanitize_file_name’, ‘new_filename’, 10);

2、保存functions.php,就可以了。

以上代码将文件名称在上传过程中就自动重命名了。名字规则为系统自动生成的一个32位的MD5加密文件名。(因为32位文件名有点长,所以我们在substr(md5($name), 0, 20) 中截断了将其设置为20位).

PS:两种方法各有所长,第一种方法不会因为更换模板而导致失效,第二种方法如果更换模板就需要重新加入代码。

fulidang

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: