這篇文章將為大家詳細(xì)講解有關(guān)PHP在圖片上傳時(shí)改變圖片后綴為jpg的方法,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

PHP在圖片上傳時(shí)改變圖片后綴為jpg的方法:首先獲取上傳的圖片后綴,并獲取圖片在電腦上的臨時(shí)存儲(chǔ)位置;然后獲取臨時(shí)存儲(chǔ)文件的后綴;最后實(shí)現(xiàn)后綴轉(zhuǎn)換,代碼為【case 'image/jpg'】。
PHP在圖片上傳時(shí)改變圖片后綴為jpg的方法:
1、為了統(tǒng)一圖片部分的后綴,方面通過(guò)拼接地址的方式找到它。
比如只給個(gè)md5(id)的值,要通過(guò)它去找到對(duì)應(yīng)的圖片,如果圖片后綴多種多樣的話,不方便找到和管理它
2、也是為了安全。
就算別人上傳可執(zhí)行文件到服務(wù)器或者在圖片上動(dòng)手腳,我們可以在轉(zhuǎn)換的時(shí)候全部改成圖片資源再重新保存,規(guī)避掉這方面的攻擊。
3、具體轉(zhuǎn)換實(shí)現(xiàn)
主要是使用php的GD庫(kù)以及相關(guān)的函數(shù)來(lái)轉(zhuǎn)換:
if(!file_exists($file_path)) { //不存在才上傳,存在的話,就直接用,不用再上傳了
$ext = $arr['type']; //獲取上傳的圖片后綴
$filePath = $arr["tmp_name"]; //獲取圖片在電腦上的臨時(shí)存儲(chǔ)位置
$filePath_suffix = substr($filePath,strripos($filePath,".")+1); //獲取臨時(shí)存儲(chǔ)文件的后綴
if($filePath_suffix == 'tmp'){ // 如果讀取的臨時(shí)文件是tmp結(jié)尾,無(wú)法打開(kāi)圖片資源,則直接使用move_uploaded_file函數(shù)
//這部分需要的是一個(gè)圖片資源,所以使用fopen和file_get_contents包括直接修改tmp文件的后綴名都失敗了,所以選擇上傳
$result = move_uploaded_file($filePath, $file_path);
}else {
switch ($ext) {
case 'image/png':
$im = imagecreatefrompng($filePath);
break;
case 'image/gif':
$im = imagecreatefromgif($filePath);
break;
case 'image/jpeg':
$im = imagecreatefromjpeg($filePath);
break;
case 'image/jpg':
$im = imagecreatefromjpeg($filePath);
break;
default:
exit("上傳文件格式不正確");
break;
}
$result = imagejpeg($im, $file_path);
imagedestroy($im);
}
}具體的可以看看注釋
4、關(guān)于上傳圖片的臨時(shí)文件后綴是.tmp的問(wèn)題
博主在上傳的時(shí)候,發(fā)現(xiàn)報(bào)錯(cuò):
"imagecreatefrompng(): 'C:\\Users\\ZY\\AppData\\Local\\Temp\\php9A06.tmp' is not a valid PNG file
經(jīng)過(guò)打印發(fā)現(xiàn),$_FILES['tem_name']可能會(huì)返回123.tmp文件,如果是這種文件的話,是無(wú)法通過(guò)自帶的打開(kāi)圖片資源函數(shù)打開(kāi)。這種情況下,tmp文件只是生成的臨時(shí)文件,可以用fopen,file_get_contents等打開(kāi),但是打開(kāi)的資源不是圖片資源因此采用:move_uploaded_file($filePath, $file_path); 直接保存。
5、關(guān)于$_FILES[‘tmp_name’]解釋
(1) $_FILES['excel']['tmp_name'] 表示的就是上傳臨時(shí)文件的絕對(duì)路徑
(2) 上傳臨時(shí)文件的生存周期與處理上傳的php程序相同(即程序結(jié)束,臨時(shí)文件消失)
(3) move_uploaded_file 函數(shù)可使臨時(shí)文件提前消失
6、獲取圖片后綴的問(wèn)題
通過(guò)$_FILES獲取的后綴名是image/png這樣的,如果只是想要png的后綴,需要進(jìn)行截取等操作,其實(shí)不用這么麻煩的,可以使用:
(1) getimagesize()函數(shù),
(2)pathinfo函數(shù)
$fileParts = pathinfo($_FILES['images']['name']); var_dump($fileParts['extension']); //獲取后綴名
關(guān)于PHP在圖片上傳時(shí)改變圖片后綴為jpg的方法就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
當(dāng)前題目:PHP在圖片上傳時(shí)改變圖片后綴為jpg的方法-創(chuàng)新互聯(lián)
文章出自:http://chinadenli.net/article4/pisoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、品牌網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、網(wǎng)站策劃、動(dòng)態(tài)網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)