php图片传入及改名代码,WordPress添加媒体中文名图片上传改名(优化版)
WordPress是國外程序,對中文命名的圖片不友好,所以上傳后就會出現錯誤。但是我們有時候保存在桌面或者其他地方的圖片就是中文命名,現在要上傳到WordPress多媒體中,或者上傳到文章中,我們改怎么辦?
俗話說:“功夫不負苦心人呢”,問題還是被我給發現了,原來編碼的問題如果我們上傳的圖片名稱是中文的那么wp的縮略圖機制處理不了于是就出現了我這樣的問題。
在wp-admin/includes/file.php文件中有這么一段代碼其中第2行控制著我們上傳圖片的命名:
//?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?)?);
}
既然定位到了問題所在當然就是趕緊解決掉好讓圖片正常顯示了!
處理方法匯總
問題既然浮出了水面,按照一個度娘的忠實粉絲當然是先上百度去找答案,下面是百度查找到的3種答案。
第一種:修改wp的程序文件file.php
在file.php中查找下面這段代碼
$new_file?=?$uploads[‘path’]?.?“/$filename”;
把上述代碼修改成
$new_file?=?$uploads[‘path’]?.?“/”.date(“YmdHis”).floor(microtime()*1000).“.”.$ext;
顯示的結果是以“年月日時分秒+千位毫秒整數”這樣的格式命名的。
這 種方法弊端很大:第一上傳的圖片全部都會重命名;第二wp更新到新版本還要重新修改代碼。
第二種:在主題functions.php中添加代碼
function?wpyou_rename_upload_file_prefilter($file){
$time=date(“Y-m-d”);
$file[‘name’]?=?$time.“”.mt_rand(1,100).“.”.pathinfo($file[‘name’]?,?PATHINFO_EXTENSION);
return?$file;
}
add_filter(‘wp_handle_upload_prefilter’,?‘wpyou_rename_upload_file_prefilter’);
實現的效果和第一種的結果是一樣的,這樣每次更新wp都不用再反復修改程序文件了,但是弊端還是有就是上傳的圖片全部都會重命名。
完美的解決方法
如果按照上面的方法修改的話我上傳的圖片都要被重命名對于我這種用云盤來存儲圖片的用戶來說是個麻煩,于是只能自己動手了。下面給出一種完美的解決方案,當你上傳圖片時,主題會檢測圖片名中是否包含中文字符,如果包含就執行重命名的機制,如果不包含那么直接用上傳的名稱作為圖片名,直接添加下面這段代碼到主題的functions.php文件中即可。
通過上面的代碼片段中文圖片不能顯示縮略圖的問題終于完美解決了。看來以后還是要研究一下wp程序的一些功能呀!今天把這種方法寫到這里希望可以幫助到遇到跟我一樣問題的朋友!
/* 中文名圖片上傳改名 /* ——————- */ function tin_custom_upload_name($file){ if(preg_match(‘/[一-龥]/u’,$file[‘name’])): $ext=ltrim(strrchr($file[‘name’],’.’),’.’); $file[‘name’]=preg_replace(‘#^www.#’, ”, strtolower($_SERVER[‘SERVER_NAME’])).’_’.date(‘Y-m-d_H-i-s’).’.’.$ext; endif; return $file; } add_filter(‘wp_handle_upload_prefilter’,’tin_custom_upload_name’,5,1);
如果上面的不行可以試試下面的這個自用的,感覺可以(優化版)
//WordPress上傳中文字體圖片自動轉換為域名日期時間
function tin_custom_upload_name($file){
if(preg_match('/[一-龥]/u',$file['name'])):
$ext=ltrim(strrchr($file['name'],'.'),'.');
$file['name']=preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME'])).'_'.date('Y-m-d_H-i-s').'.'.$ext;
endif;
return $file;}
add_filter('wp_handle_upload_prefilter','tin_custom_upload_name',5,1);
WordPress添加媒體上傳圖片的時候,我們有時候選擇的圖片是中文名,由于WordPress是國外程序,對中文命名的圖片不友好,所以上傳后就會出現錯誤。但是我們有時候保存在桌面或者其他地方的圖片就是中文命名,現在要上傳到WordPress多媒體中,或者上傳到文章中,我們改怎么辦?
俗話說:“功夫不負苦心人呢”,問題還是被我給發現了,原來編碼的問題如果我們上傳的圖片名稱是中文的那么wp的縮略圖機制處理不了于是就出現了我這樣的問題。
在wp-admin/includes/file.php文件中有這么一段代碼其中第2行控制著我們上傳圖片的命名:
//?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?)?);
}
既然定位到了問題所在當然就是趕緊解決掉好讓圖片正常顯示了!
處理方法匯總
問題既然浮出了水面,按照一個度娘的忠實粉絲當然是先上百度去找答案,下面是百度查找到的3種答案。
第一種:修改wp的程序文件file.php
在file.php中查找下面這段代碼
$new_file?=?$uploads[‘path’]?.?“/$filename”;
把上述代碼修改成
$new_file?=?$uploads[‘path’]?.?“/”.date(“YmdHis”).floor(microtime()*1000).“.”.$ext;
顯示的結果是以“年月日時分秒+千位毫秒整數”這樣的格式命名的。
這 種方法弊端很大:第一上傳的圖片全部都會重命名;第二wp更新到新版本還要重新修改代碼。
第二種:在主題functions.php中添加代碼
function?wpyou_rename_upload_file_prefilter($file){
$time=date(“Y-m-d”);
$file[‘name’]?=?$time.“”.mt_rand(1,100).“.”.pathinfo($file[‘name’]?,?PATHINFO_EXTENSION);
return?$file;
}
add_filter(‘wp_handle_upload_prefilter’,?‘wpyou_rename_upload_file_prefilter’);
實現的效果和第一種的結果是一樣的,這樣每次更新wp都不用再反復修改程序文件了,但是弊端還是有就是上傳的圖片全部都會重命名。
完美的解決方法
如果按照上面的方法修改的話我上傳的圖片都要被重命名對于我這種用云盤來存儲圖片的用戶來說是個麻煩,于是只能自己動手了。下面給出一種完美的解決方案,當你上傳圖片時,主題會檢測圖片名中是否包含中文字符,如果包含就執行重命名的機制,如果不包含那么直接用上傳的名稱作為圖片名,直接添加下面這段代碼到主題的functions.php文件中即可。
通過上面的代碼片段中文圖片不能顯示縮略圖的問題終于完美解決了。看來以后還是要研究一下wp程序的一些功能呀!今天把這種方法寫到這里希望可以幫助到遇到跟我一樣問題的朋友!
/* 中文名圖片上傳改名 /* ——————- */ function tin_custom_upload_name($file){ if(preg_match(‘/[一-龥]/u’,$file[‘name’])): $ext=ltrim(strrchr($file[‘name’],’.’),’.’); $file[‘name’]=preg_replace(‘#^www.#’, ”, strtolower($_SERVER[‘SERVER_NAME’])).’_’.date(‘Y-m-d_H-i-s’).’.’.$ext; endif; return $file; } add_filter(‘wp_handle_upload_prefilter’,’tin_custom_upload_name’,5,1);
總結
以上是生活随笔為你收集整理的php图片传入及改名代码,WordPress添加媒体中文名图片上传改名(优化版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab变量代替语句,MATLAB只
- 下一篇: php新浪api,php调用新浪短链接A