HardBirch

WordPress 中文图片上传无法显示之解决方案二

时间:12-07-25 栏目:WP技巧分享 作者:魔豆先生 评论:0 点击: 5,816 次

WordPress 原版是不支持中文图片名的,前一篇博文《WordPress 中文图片上传无法显示之解决方案二》的时候介绍了将UTF8编码转换成GBK来实现,今天本博客打算使用 图片水印插件的时候,发现导致了之前的中文命名的图片不能显示出来,其实是这个插件对中文的编码不一致导致的。为了防止以后的类似事件再次出现给博客内容的发布带来困扰,打算自动重命名中文文件名

方案两种,都是依赖时间来命名:

方案1.时间+随机数 方式

先直接给出解决方案,打开\wp-admin\includes\file.php,至306行,可以看到代码$file['name'] = $proper_filename;,将它删除,并且改为:

$time=date(“m-d-H-i-s”);$type_change = array(‘image’=>’.');$file_type = strtr($file['type'],$type_change);
$file['name'] = $time.”".mt_rand(1,100).”".$file_type ;

保存下,上传多媒体后文件就自动重命名为2011-12-12-1253203格式,年份-月份-日期-时间和随机数字。

下面是具体的解决思路:

首先看一下一般的PHP上传照片的思路,确认类型=》多媒体重命名=》把文件上传到指定目录,成功上传后输出上传图片的预览用到的函数。

WordPress之所以不能显示中文的多媒体问题出在第二步,缺少相应的重命名重命名。我们的思路就是在Wordpress原有的上传步骤中添加一步重命名的,这里是重命名为上传时间+随机数字。

WordPress上传多媒体的代码都存放于\wp-admin\includes\file.php,打开这个文件,在304行之前(包括 304行)基本都是在对文件进行检验,305行“ // Check to see if wp_check_filetype_and_ext() determined the filename was incorrect”之后开始进入正题。

305,306行的代码如下:

if ( $proper_filename )
$file['name'] = $proper_filename;

324行的代码如下:

$filename = wp_unique_filename( $uploads['path'], $file['name'], $unique_filename_callback );

$filename的作用就是最后多媒体的文件的地址,$file['name']就是多媒体的名称,第305、306行的代码决定了最后的文件名,所以只需要在306行的代码作手脚就可以了。只需要将$file['name']赋予你想要的一个名称。

然后我们用到的是读取时间作为标题,为了各种万一起见,使用mt_rand(1,100)生成从1到100中随机数字组成新的文件名。然后通 过$file_type = strtr($file['type'],$type_change);获取图片的类型,PNG,或者GIF之类。到此,一切OK~

 

方案2:时间 精确到毫秒级

打开wp-admin/includes/file.php文件,找到第326行这段代码:

// Move the file to the uploads dir
$new_file = $uploads['path'] . "/$filename";
if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) )
return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) );

将其修改为

// Move the file to the uploads dir
$new_file = $uploads['path'] . "/".date_i18n("YmdHis").floor(microtime()*1000).".".$ext;
if ( false === @ move_uploaded_file( $file['tmp_name'], $new_file ) )
return $upload_error_handler( $file, sprintf( __('The uploaded file could not be moved to %s.' ), $uploads['path'] ) );

保存,重新上传文件。这样,新上传的文件,就会自动保存为“年月日时分秒+千位毫秒整数”的新文件名,并保存到相应的年月文件夹之下了。没错,就这么简单,测试、通过。面对欧美客户的英文外贸网站推荐使用此法。

声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: WordPress 中文图片上传无法显示之解决方案二

WordPress 中文图片上传无法显示之解决方案二:等您坐沙发呢!

发表评论


QQ群互动

Linux系统与内核学习群:194051772

WP建站技术学习交流群:194062106

魔豆之路QR

魔豆的Linux内核之路

魔豆的Linux内核之路

优秀工程师当看优秀书籍

优秀程序员,要看优秀书!

赞助商广告

友荐云推荐