2008-04-07

[PHP] 圖檔上傳檢查


<?php
/*檢查上傳的圖片類型,並轉存成 JPG*/
if (isset ($_FILES['image'])) {
$imgFile = $_FILES['image'];
/*檔案存放路徑(目錄權限必須可寫入)*/
$imagePathDir = '/home/www/pics/';
/*上傳圖片文件類型列表 */
$uptypes = array (
'image/jpg',
'image/jpeg',
'image/pjpeg',
'image/gif',
'image/png'
);
/*產生唯一的檔案名稱*/
$imgName = md5(uniqid(rand())) . '.jpg';
/*檢查檔案大小 2Mb*/
if ($imgFile['size'] > 2097152) {
echo '檔案過大';
/*檢查文件類型 */
} elseif(in_array($imgFile['type'], $uptypes)) {
/*上傳圖片類型為jpg,pjpeg,jpeg */
if (strstr($imgFile['type'], "jp")) {
if(!($source = @ imageCreatefromjpeg($imgFile['tmp_name']))){
echo '檔案類型錯誤';
return;
}
/*上傳圖片類型為png */
}elseif(strstr($imgFile['type'], "png")) {
if(!($source = @ imagecreatefrompng($imgFile['tmp_name']))){
echo '檔案類型錯誤';
return;
}
/*上傳圖片類型為gif */
}elseif(strstr($imgFile['type'], "gif")) {
if(!($source = @ imagecreatefromgif($imgFile['tmp_name']))){
echo '檔案類型錯誤';
return;
}
/*其他例外圖片排除 */
} else {
echo '檔案類型錯誤';
return;
}
$w = imagesx($source); /*取得圖片的寬 */
$h = imagesy($source); /*取得圖片的高 */
/*檢查檔案最小尺寸 160px*160px */
if ($w < 160 || $h < 160) {
echo '檔案過小';
return;
}
/* 儲存到檔案目錄(JPG) */
imagejpeg($source, $imagePathDir . $imgName);
/* 列出檔案路徑 */
echo $imagePathDir . $imgName;
} else {
echo '檔案類型錯誤';
}
} else {
echo '其他錯誤';
}
?>

5 則留言:

  1. $uptypes = array (
    'image/jpg',
    'image/jpeg',
    'image/pjpeg',
    'image/gif',
    'image/png'
    );


    strstr($imgFile['type'], "png"))

    你上面寫的png,應該分別寫成x-png 才對吧,否則png圖應該是傳不上去,也沒辦法轉吧!!

    $uptypes = array (
    'image/jpg',
    'image/jpeg',
    'image/pjpeg',
    'image/gif',
    'image/x-png'
    );


    strstr($imgFile['type'], "x-png"))

    回覆刪除
  2. 我不是很明白你說的問題
    這程式是有些不嚴謹的地方
    但在測試上都沒什麼問題

    回覆刪除
  3. Dear Jax,

    $w = imagesx($source); /*取得圖片的寬 */
    $h = imagesy($source); /*取得圖片的高 */

    可否提供imagesx 函式?
    我無法取得圖片寬度和高度

    THANKS

    回覆刪除
  4. imagesx 是 GD 函示庫內建的函數
    你可能要檢查是否有安裝此函示庫
    http://us.php.net/manual/en/function.imagesx.php

    回覆刪除
  5. 請問如何可以自動加入水印?

    回覆刪除

你好!歡迎你在我的 Blog 上留下你寶貴的意見。