Téléchargement simple de fichiers vers un fichier local pour le développement PHP (2)
Dans la section précédente, nous avons expliqué comment utiliser le formulaire <form> pour télécharger des fichiers, créé une page de formulaire HTML
et fourni certaines restrictions sur le téléchargement de fichiers.
Dans cette section, nous utilisons du code PHP pour faire des jugements if sur diverses conditions
Nous devons d'abord déterminer la méthode de transmission de valeur?:
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST') { } //$_SERVER['REQUEST_METHOD']提交表單的方式,這里用POST提交。 ?>
Juger si l'image existe dans le répertoire?:
<?php if (!is_uploaded_file($_FILES["upfile"]["tmp_name"])) //判斷是否存在文件 { echo "圖片不存在!"; exit; } ?>
$_FILES["upfile"]["tmp_name"] est le nom de chemin d'origine de l'image.
Déterminez la taille du fichier téléchargé :
<? $file = $_FILES["upfile"]; if($max_file_size < $file["size"]) //檢查文件大小 { echo "文件太大!"; exit; } ?>
$_FILES["upfile"]["size"] est la taille du fichier téléchargé, exprimée ici en octets.
Déterminer s'il y a des fichiers du même nom dans le même répertoire?:
<?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; } ?>
Ici, nous ajoutons une section pour déterminer s'il faut ajouter un filigrane pour votre bénéfice.
<?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); } ?>
Exemple de code complet?:
<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>