-
縮略的關鍵是imagecopyresampled(dst_image(目標圖-畫布), src_image(原圖), dst_x(目標圖復制起點x), dst_y(目標圖復制起點y), src_x(從原圖x起點復制), src_y(從原圖y起點復制), dst_w(目標圖復制的寬度), dst_h(目標圖復制的高度), src_w(原圖的寬度), src_h(原圖的高度)),把這個函數里面的參數都準備好,接調用,保存,銷毀就可以了
查看全部 -
<?php?
/*生成縮略圖的理念就是:從源圖片的采樣 拷貝到 新創建的畫布,然后顯示*/
//將指定圖片定義為一個變量
$filename='des_big.jpg';
//通過函數得到圖片相應屬性 ?getimagesize — 取得圖像相應屬性
list($src_w,$src_h,$imagetype)=getimagesize($filename);
//根據得到的類型$imagetype得到$mime
$mime=image_type_to_mime_type($imagetype);
//echo $mime; ?結果是image/jpeg
//根據圖片類型對應的創建新圖像的函數 ?來創建新圖像 ? ?//舉例:image/jpeg類型對應的是imagecreatefromjpeg()函數,image/gif類型對應的是imagecreatefromgif()函數,依次類推
//imagecreatefromgif/jpeg()等函數的作用是 返回一圖像標識符,代表了從給定的文件名取得的圖像。
$createFun=str_replace("/","createfrom",$mime);//str_replace — 子字符串替換 ? 這里把它寫活
//同樣,圖片類型不同對應的輸出函數也是不同,例:image/jpeg類型對應的是imagejpeg()函數,image/gif類型對應的是imagegif()函數,這里也把它寫活
$outFun=str_replace("/",null,$mime);//str_replace — 子字符串替換
//從源圖片采樣
$src_image=$createFun($filename);
//根據需求創建畫布,因為縮放后得到的新圖片 即將粘貼到這個畫布
$dst_50_image=imagecreatetruecolor(50,50);
$dst_220_image=imagecreatetruecolor(220,220);
$dst_350_image=imagecreatetruecolor(350,350);
$dst_800_image=imagecreatetruecolor(800,800);
//將縮放后的新圖片粘貼到畫布 ?即將采樣后并且處理的圖片粘貼到指定畫布 ? ?//imagecopyresampled — 重采樣圖片拷貝部分圖像并調整大小?
imagecopyresampled($dst_50_image,$src_image,0,0,0,0,50,50,$src_w,$src_h);
imagecopyresampled($dst_220_image,$src_image,0,0,0,0,220,220,$src_w,$src_h);
imagecopyresampled($dst_350_image,$src_image,0,0,0,0,350,350,$src_w,$src_h);
imagecopyresampled($dst_800_image,$src_image,0,0,0,0,800,800,$src_w,$src_h);
//顯示/輸出 拷貝后 粘貼到畫布的 新圖片, ?并且保存到指定目錄下.叫什么名字
$outFun($dst_50_image,"uploads/image_50/".$filename);
$outFun($dst_220_image,"uploads/image_220/".$filename);
$outFun($dst_350_image,"uploads/image_350/".$filename);
$outFun($dst_800_image,"uploads/image_800/".$filename);
//銷毀資源
imagedestroy($src_image);
imagedestroy($dst_50_image);
imagedestroy($dst_220_image);
imagedestroy($dst_350_image);
imagedestroy($dst_800_image);
?>
查看全部 -
老師的判定沒上傳有bug 請改成我的 //如果沒有上傳圖片退出 //傳過來的空值也是一個三維數組 所以要用如下判斷是否有文件上傳 if(empty($_FILES['myfile']['name']['0'])){ return; }查看全部
-
這是多個單文件上傳,不是多文件上傳;
查看全部 -
文件上傳:明明PHP.ini配置中已經設置upload_max_filesize來限制單個文件上傳大小的值了,這里為什么還要設置$maxSize?
因為一個服務器上的網站有好多頁面有form表單,每個頁面的表單對單個文件上傳限制大小不同,所以這里通過代碼單獨設置單個頁面的表單的單個文件上傳大小限制(一對一設置),配置里面的限制是針對整個服務器的; ?
這里單個頁面表單的大小限制$maxSize的值一定 =< PHP.ini里面的upload_max_filesize單個文件上傳大小限制的值查看全部 -
mkdir($path,0777,true); 第一個參數:必須,代表要創建的多級目錄的路徑; 第二個參數:設定目錄的權限,默認是 0777,意味著最大可能的訪問權; 第三個參數:true表示允許創建多級目錄。
查看全部 -
文件上傳需配置: 服務器端的配置(php.ini配置文件的修改) 1、file_uploads=On,支持通過HTTP POST方式上傳文件 2、upload_tmp_dir=臨時文件保存目錄 3、upload_max_filesize=2M,默認值2M,上傳文件的最大大小是2M 4、post_max_size=8M,表單以post方式發送數據的最大值,默認值是8M 注意:post_max_size的值必須大于等于upload_max_filesize的值 客戶端的配置 1、<input type='hidden' name='MAX_FILE_SIZE' value='1024'/> 2、<input type='file' name='myFile' accept='文件的MIME類型,...'/>
查看全部 -
文件上傳:已經有upload_max_fielsize來限制文件大小了,為什么還要MAX_FILE_SIZE來限制文件大?????在MAX_FILE_SIZE是在html代碼里主要目的是什么??是在客戶端限制、監督、提示用戶上傳文件的大小是否合格的,其值得大小取決于服務器端PHP.ini中upload_max_fielsize的大小;因為PHP程序是無法判斷用戶本 地文件大小的。所以等到我們的PHP來判斷文件大小的時候,那個文件其實已經上傳到服務器了。這時候再判斷超過限制了,不允許上傳??删陀悬c馬后炮了,所以MAX_FILE_SIZE是在用戶將文件上傳之前就判斷將要上傳的文件是否超過限制,超限制,則不允許用戶上傳;
不同點:
MAX_FILE_SIZE是在客戶端HTML代碼里;(客戶端容易被修改哦)upload_max_fielsize是在服務器端,PHP.ini配置文件里或者PHP代碼里;
其中,在設置的時候,post_max_size的值一定要大于upload_max_fielsize的值,因為表單一次提交可能是好幾個<input>框,意思是單次提交可能是好幾個文件;
查看全部 -
PHP獲取文件后綴名(有幾十種方法,這里提供7種方法)
1.$file = 'x.y.z.png';
echo substr(strrchr($file, '.'), 1);
解析:strrchr($file, '.') ??
?strrchr() 函數查找字符串在另一個字符串中最后一次出現的位置,并返回從該位置到字符串結尾的所有字符
2.$file = 'x.y.z.png';
echo substr($file, strrpos($file, '.')+1);
解析:strrpos($file, '.') ??
查找 "." 在字符串中最后一次出現的位置,返回位置 ? substr()從該位置開始截取
3.$file = 'x.y.z.png';
$arr=explode('.', $file);
echo $arr[count($arr)-1];
4.$file = 'x.y.z.png';
$arr=explode('.', $file);
echo end($arr); ?//end()返回數組的最后一個元素
5.$file = 'x.y.z.png';
echo strrev(explode('.', strrev($file))[0]);
6.$file = 'x.y.z.png';
echo pathinfo($file)['extension'];
解析:pathinfo() 函數以數組的形式返回文件路徑的信息。包括以下的數組元素:
[dirname]
[basename]
[extension]
7.$file = 'x.y.z.png';
echo pathinfo($file, PATHINFO_EXTENSION);
總結:字符串截取2種,數組分割3種,路徑函數2種查看全部 -
strtolower()轉換為小寫;
end()輸出數組中的當前元素和最后一個元素的值;
截取文件擴展名的方法很多;這里有兩種:strtolower(end(explode(".",$filename)));以及
strtolower(pathinfo($filename,PATHINFO_EXTENSION));查看全部 -
php.ini 配置對php上傳文件大小的影響參數有:?
配置項 可能值 功能描述?
file_uploads ON 確定服務器上的PHP腳本是否可以接受HTTP文件上傳?
memory_limit 8M 設置腳本可以分配的最大內存量,防止失控的腳本獨占服務器內存?
upload_max_filesize 2M?限制PHP處理上傳文件的最大值,此值必須小于post_max_size值?
post_max_size 8M 限制通過POST方法可以接受的信息最大量查看全部 -
文件上傳:判斷文件是否通過HTTP POST方式上傳的 ?因為move_uploaded_file()函數只能通過HTTP POST方式上傳上來的文件;//在這里檢測的是臨時文件哈 ? //move_uploaded_file()函數移動的也是臨時文件
查看全部 -
文件上傳中:
關于上傳大小,總共有三個地方的限制;
一個是PHP.ini中的upload_max_fielsize的大小,限制上傳過程中單個文件的大小,默認值2M;(服務器端的配置)第二個是PHP.ini中的post_max_size的大小,限制表單以POST的方式發送過程中單次發送的大小,默認8M;(服務器端的配置)
第三個是MAX_FILE_SIZE是在form表單中(HTML代碼里設置)<input type="hidden" name="MAX_FILE_SIZE" value="173255" />;(客戶端的配置)
MAX_FILE_SIZE是在html代碼里,是在客戶端限制、監督、提示用戶上傳文件的大小是否合格的,其值得大小取決于服務器端PHP.ini中upload_max_fielsize(限制單個文件)的大?。灰驗镻HP程序是無法判斷用戶本 地文件大小的。所以等到我們的PHP來判斷文件大小的時候,那個文件其實已經上傳到服務器了。這時候再判斷超過限制了,不允許上傳??删陀悬c馬后炮了,所以MAX_FILE_SIZE是在用戶將文件上傳之前就判斷將要上傳的文件是否超過限制,超限制,則不允許用戶上傳;
這幾個限制都可以在代碼里設置大??;寫在代碼里單位是字節;
一般內存換算是1024進制,也就是2的10次方。 1TB=1024GB? 1GB=1024MB? 1MB=1024KB? 1KB=1024Byte
其中,在設置的時候,post_max_size的值一定要大于upload_max_fielsize的值,因為表單一次提交可能是好幾個<input>框,意思是單次提交可能是好幾個文件;
另外如果啟用了內存限制,那么post_max_size的值應該小于memory_limit的值,參數是腳本運行最大的消耗內存,memory_limit 默認8M 是設置腳本可以分配的最大內存量,防止失控的腳本獨占服務器內存 ;
文件上傳的其他注意事項
在上傳大文件時,你會有上傳速度慢的感覺,當超過一定的時間,會報腳本執行超過30秒的錯誤,這是因為在php.ini配置文件中max_execution_time配置選項在作怪,其表示每個腳本最大允許執行時間(秒),0 表示沒有限制。你可以適當調整max_execution_time的值,不推薦設定為0。還有一個參數是max_input_time,每個腳本可以消耗的時間,可以了解一下;
查看全部 -
文件上傳:錯誤號對應的原因
查看全部 -
文件上傳:錯誤號對應的原因
查看全部
舉報