Muat naik fail mudah ke fail tempatan untuk pembangunan PHP (2)
Dalam bahagian sebelumnya, kami menerangkan cara menggunakan borang <borang> untuk memuat naik fail, dan mencipta halaman borang HTML
dan menyediakan beberapa sekatan untuk memuat naik fail.
Dalam bahagian ini kita menggunakan kod PHP untuk membuat jika penghakiman pada pelbagai syarat
Mula-mula kita perlu menentukan kaedah lulus nilai:
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { } //$_SERVER['REQUEST_METHOD']提交表單的方式,這里用POST提交。 ?>
Hakim sama ada imej itu wujud dalam direktori:
<?php if (!is_uploaded_file($_FILES["upfile"]["tmp_name"])) //判斷是否存在文件 { echo "圖片不存在!"; exit; } ?>
$_FILES["upfile"]["tmp_name"] ialah nama laluan asal imej.
Tentukan saiz fail yang dimuat naik:
<? $file = $_FILES["upfile"]; if($max_file_size < $file["size"]) //檢查文件大小 { echo "文件太大!"; exit; } ?>
$_FILES["upfile"]["size"] ialah saiz fail yang dimuat naik, dinyatakan di sini dalam bait.
Tentukan sama ada terdapat fail dengan nama yang sama dalam direktori yang sama:
<?php if(!file_exists($destination_folder)) //file_exists() 函數(shù)檢查文件或目錄是否存在。 { mkdir($destination_folder); //mkdir() 函數(shù)創(chuàng)建目錄。 } $filename = $file["tmp_name"]; $image_size = getimagesize($filename); $pinfo = pathinfo($file["name"]); //pathinfo() 函數(shù)以數(shù)組或字符串的形式返回關(guān)于文件路徑的信息。 $ftype = $pinfo['extension']; //"extension"在PHP.INI文件里面 因?yàn)槲覀円玫紾D庫 $destination = $destination_folder.time().".".$ftype; if (file_exists($destination) && $overwrite != true) //判斷是否存在同名文件 { echo "同名文件已經(jīng)存在了"; exit; } ?>
Di sini kami menambah bahagian untuk menentukan sama ada untuk menambah tera air untuk manfaat anda rujukan.
<?php if($watermark==1) //是否添加水印 { $iinfo=getimagesize($destination,$iinfo); $nimage=imagecreatetruecolor($image_size[0],$image_size[1]); $white=imagecolorallocate($nimage,255,255,255); $black=imagecolorallocate($nimage,0,0,0); $red=imagecolorallocate($nimage,255,0,0); imagefill($nimage,0,0,$white); switch ($iinfo[2]) { case 1: $simage =imagecreatefromgif($destination); break; case 2: $simage =imagecreatefromjpeg($destination); break; case 3: $simage =imagecreatefrompng($destination); break; case 6: $simage =imagecreatefromwbmp($destination); break; default: die("不支持的文件類型"); exit; } imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]); imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white); switch($watertype) { case 1: //加水印字符串 imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black); break; case 2: //加水印圖片 $simage1 =imagecreatefromgif("xplore.gif"); imagecopy($nimage,$simage1,0,0,0,0,85,15); imagedestroy($simage1); break; } switch ($iinfo[2]) { case 1: //imagegif($nimage, $destination); imagejpeg($nimage, $destination); break; case 2: imagejpeg($nimage, $destination); break; case 3: imagepng($nimage, $destination); break; case 6: imagewbmp($nimage, $destination); //imagejpeg($nimage, $destination); break; } //覆蓋原上傳文件 imagedestroy($nimage); imagedestroy($simage); } ?>
Kod contoh penuh:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <?php //上傳文件類型列表 $uptypes=array( 'image/jpg', 'image/jpeg', 'image/png', 'image/gif', 'image/bmp', ); $max_file_size=2000000; //上傳文件大小限制, 單位BYTE $destination_folder="uploadimg/"; //上傳文件路徑,默認(rèn)本地路徑 $watermark=1; //是否附加水印(1為加水印,其他為不加水印); $watertype=1; //水印類型(1為文字,2為圖片) $waterposition=1; //水印位置(1為左下角,2為右下角,3為左上角,4為右上角,5為居中); $waterstring = ""; //水印字符串 $waterimg=""; //水印圖片 $imgpreview=1; //是否生成預(yù)覽圖(1為生成,其他為不生成); $imgpreviewsize=1/2; //縮略圖比例 ?> <html> <head> <meta charset="utf-8"> <title>圖片上傳</title> <style type="text/css"> <!-- body { font-size: 16px; } input { background-color: #66CCFF; border: 1px inset #CCCCCC; } --> </style> </head> <body> <form enctype="multipart/form-data" method="post" name="upform"> 上傳文件: <input name="upfile" type="file"> <input type="submit" value="上傳"><br> 允許上傳的文件類型為:<?php echo implode(', ',$uptypes);?> </form> <?php if ($_SERVER['REQUEST_METHOD'] == 'POST') //$_SERVER['REQUEST_METHOD']提交表單的方式,這里用POST提交。 { if (!is_uploaded_file($_FILES["upfile"]["tmp_name"])) //判斷是否存在文件 { echo "圖片不存在!"; exit; } $file = $_FILES["upfile"]; if($max_file_size < $file["size"]) //檢查文件大小 { echo "文件太大!"; exit; } if(!in_array($file["type"], $uptypes)) //檢查文件類型 { echo "文件類型不符!".$file["type"]; exit; } if(!file_exists($destination_folder)) //file_exists() 函數(shù)檢查文件或目錄是否存在。 { mkdir($destination_folder); //mkdir() 函數(shù)創(chuàng)建目錄。 } $filename = $file["tmp_name"]; $image_size = getimagesize($filename); $pinfo = pathinfo($file["name"]); //pathinfo() 函數(shù)以數(shù)組或字符串的形式返回關(guān)于文件路徑的信息。 $ftype = $pinfo['extension']; //"extension"在PHP.INI文件里面 因?yàn)槲覀円玫紾D庫 $destination = $destination_folder.time().".".$ftype; if (file_exists($destination) && $overwrite != true) //判斷是否存在同名文件 { echo "同名文件已經(jīng)存在了"; exit; } if(!move_uploaded_file ($filename, $destination)) { echo "移動(dòng)文件出錯(cuò)"; exit; } $pinfo = pathinfo($destination); $fname = $pinfo["basename"]; echo " <font color=red>已經(jīng)成功上傳</font><br>文件名: <font color=blue>".$destination_folder.$fname."</font><br>"; echo " 寬度:".$image_size[0]; echo " 長度:".$image_size[1]; echo "<br> 大小:".$file["size"]." bytes"; if($watermark==1) //是否添加水印 { $iinfo=getimagesize($destination,$iinfo); $nimage=imagecreatetruecolor($image_size[0],$image_size[1]); $white=imagecolorallocate($nimage,255,255,255); $black=imagecolorallocate($nimage,0,0,0); $red=imagecolorallocate($nimage,255,0,0); imagefill($nimage,0,0,$white); switch ($iinfo[2]) { case 1: $simage =imagecreatefromgif($destination); break; case 2: $simage =imagecreatefromjpeg($destination); break; case 3: $simage =imagecreatefrompng($destination); break; case 6: $simage =imagecreatefromwbmp($destination); break; default: die("不支持的文件類型"); exit; } imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]); imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white); switch($watertype) { case 1: //加水印字符串 imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black); break; case 2: //加水印圖片 $simage1 =imagecreatefromgif("xplore.gif"); imagecopy($nimage,$simage1,0,0,0,0,85,15); imagedestroy($simage1); break; } switch ($iinfo[2]) { case 1: //imagegif($nimage, $destination); imagejpeg($nimage, $destination); break; case 2: imagejpeg($nimage, $destination); break; case 3: imagepng($nimage, $destination); break; case 6: imagewbmp($nimage, $destination); //imagejpeg($nimage, $destination); break; } //覆蓋原上傳文件 imagedestroy($nimage); imagedestroy($simage); } if($imgpreview==1) //是否預(yù)覽圖片 { echo "<br>圖片預(yù)覽:<br>"; echo "<img src=\"".$destination."\" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize); echo " alt=\"圖片預(yù)覽:\r文件名:".$destination."\r上傳時(shí)間:\">"; } } ?> </body> </html>