1、FORM標籤enctype屬性
2、$_FILES 系統函數
3、move_uploaded_file函數
4、is_uploaded_file 函數
表單中enctype="multipart/form-data"的意思,是設定表單的MIME編碼。預設情況,
這個編碼格式是application/x-www-form-urlencoded,不能用於檔案上傳;
只有使用了multipart/form-data,才能完整的傳遞檔案資料
<form enctype="multipart/form-data" method="post" name="upform">
input標籤 type 屬性中的 "file"
<input name="upfile" type="file">
$_FILES 系統函數
$_FILES['myFile']['name'] 用戶端檔案的原名稱。
$_FILES['myFile']['type'] 檔案的 MIME 類型,例如"image/gif"。
$_FILES['myFile']['size'] 已上傳檔案的大小,單位為位元組。
$_FILES['myFile']['tmp_name'] 儲存的臨時檔案名稱,一般是系統預設。
$_FILES['myFile']['error'] 該檔案上傳相關的錯誤碼。
$_FILES['myFile']['type'] 包含
image/jpg
image/jpeg
image/png
image/pjpeg
image/gif
image/bmp
image/x-png
application/x-zip-compressed
...
$_FILES['myFile']['error']
0; 檔案上傳成功。
1; 超過了檔案大小php.ini中。
2; 超過了檔案大小
MAX_FILE_SIZE 選項指定的值。
3; 檔案只有部分被上傳。
4; 沒有檔案被上傳。
5; 上傳檔案大小為0。
move_uploaded_file函數
上傳後移動檔案到目標位置的函數
move_uploaded_file(臨時檔案,目標位置和檔案名稱);
is_uploaded_file 函數
如果 filename 所給出的檔案是通過 HTTP POST 上傳的則返回 TRUE。這可以用來確保惡意的使用者無法欺騙指令碼去訪問本不能訪問的檔案,例如 /etc/passwd。
<?php</p><p>/*<br /> * Programmer : Msn/QQ haowubai@hotmail.com (925939)<br /> * www.php100.com Develop a project PHP - MySQL - Apache<br /> * Window 2003 - Preferences - PHPeclipse - PHP - Code Templates<br /> */</p><p>if (is_uploaded_file($_FILES['upfile']['tmp_name'])){</p><p>$upfile=$_FILES["upfile"];<br />$name = $upfile["name"];<br />$type = $upfile["type"];<br />$size = $upfile["size"];<br />$tmp_name = $upfile["tmp_name"];<br />$error = $upfile["error"];</p><p>switch ($type) {<br />case 'image/pjpeg' : $ok=1;<br />break;<br />case 'image/jpeg' : $ok=1;<br />break;<br />case 'image/gif' : $ok=1;<br />break;<br />case 'image/png' : $ok=1;<br />break;<br />}</p><p>if($ok && $error=='0'){<br /> move_uploaded_file($tmp_name,'up/'.$name);<br /> echo "上傳成功";<br />}<br />}</p><p>?></p><p><form action="" enctype="multipart/form-data" method="post" name="upform"><br /> 上傳檔案:<br /> <input name="upfile" type="file"><br /> <input type="submit" value="上傳"><br><br /> </form><br />
一個教完整的例子
<?php<br />/******************************************************************************</p><p>參數說明:<br />$max_file_size : 上傳檔案大小限制, 單位BYTE<br />$destination_folder : 上傳檔案路徑<br />$watermark : 是否附加浮水印(1為加浮水印,其他為不加浮水印);</p><p>使用說明:<br />1. 將PHP.INI檔案裡面的"extension=php_gd2.dll"一行前面的;號去掉,因為我們要用到GD庫;<br />2. 將extension_dir =改為你的php_gd2.dll所在目錄;<br />******************************************************************************/</p><p>//上傳檔案類型列表<br />$uptypes=array(<br /> 'image/jpg',<br /> 'image/jpeg',<br /> 'image/png',<br /> 'image/pjpeg',<br /> 'image/gif',<br /> 'image/bmp',<br /> 'image/x-png'<br />);</p><p>$max_file_size=2000000; //上傳檔案大小限制, 單位BYTE<br />$destination_folder="uploadimg/"; //上傳檔案路徑<br />$watermark=1; //是否附加浮水印(1為加浮水印,其他為不加浮水印);<br />$watertype=1; //浮水印類型(1為文字,2為圖片)<br />$waterposition=1; //浮水印位置(1為左下角,2為右下角,3為左上方,4為右上方,5為置中);<br />$waterstring="http://www.cnpeng.org/"; //浮水印字串<br />$waterimg="xplore.gif"; //浮水印圖片<br />$imgpreview=1; //是否產生預覽圖(1為產生,其他為不產生);<br />$imgpreviewsize=1/2; //縮圖比例<br />?><br /><html><br /><head><br /><title>ZwelL圖片上傳程式</title><br /><mce:style type="text/css"><!--<br />body<br />{<br /> font-size: 9pt;<br />}<br />input<br />{<br /> background-color: #66CCFF;<br /> border: 1px inset #CCCCCC;<br />}<br />--></mce:style><style type="text/css" mce_bogus="1">body<br />{<br /> font-size: 9pt;<br />}<br />input<br />{<br /> background-color: #66CCFF;<br /> border: 1px inset #CCCCCC;<br />}</style><br /></head></p><p><body><br /><form enctype="multipart/form-data" method="post" name="upform"><br /> 上傳檔案:<br /> <input name="upfile" type="file"><br /> <input type="submit" value="上傳"><br><br /> 允許上傳的檔案類型為:<?=implode(', ',$uptypes)?><br /></form></p><p><?php<br />if ($_SERVER['REQUEST_METHOD'] == 'POST')<br />{<br /> if (!is_uploaded_file($_FILES["upfile"][tmp_name]))<br /> //是否存在檔案<br /> {<br /> echo "圖片不存在!";<br /> exit;<br /> }</p><p> $file = $_FILES["upfile"];<br /> if($max_file_size < $file["size"])<br /> //檢查檔案大小<br /> {<br /> echo "檔案太大!";<br /> exit;<br /> }</p><p> if(!in_array($file["type"], $uptypes))<br /> //檢查檔案類型<br /> {<br /> echo "檔案類型不符!".$file["type"];<br /> exit;<br /> }</p><p> if(!file_exists($destination_folder))<br /> {<br /> mkdir($destination_folder);<br /> }</p><p> $filename=$file["tmp_name"];<br /> $image_size = getimagesize($filename);<br /> $pinfo=pathinfo($file["name"]);<br /> $ftype=$pinfo['extension'];<br /> $destination = $destination_folder.time().".".$ftype;<br /> if (file_exists($destination) && $overwrite != true)<br /> {<br /> echo "同名檔案已經存在了";<br /> exit;<br /> }</p><p> if(!move_uploaded_file ($filename, $destination))<br /> {<br /> echo "移動檔案出錯";<br /> exit;<br /> }</p><p> $pinfo=pathinfo($destination);<br /> $fname=$pinfo[basename];<br /> echo " <font color=red>已經成功上傳</font><br>檔案名稱: <font color=blue>".$destination_folder.$fname."</font><br>";<br /> echo " 寬度:".$image_size[0];<br /> echo " 長度:".$image_size[1];<br /> echo "<br> 大小:".$file["size"]." bytes";</p><p> if($watermark==1)<br /> {<br /> $iinfo=getimagesize($destination,$iinfo);<br /> $nimage=imagecreatetruecolor($image_size[0],$image_size[1]);<br /> $white=imagecolorallocate($nimage,255,255,255);<br /> $black=imagecolorallocate($nimage,0,0,0);<br /> $red=imagecolorallocate($nimage,255,0,0);<br /> imagefill($nimage,0,0,$white);<br /> switch ($iinfo[2])<br /> {<br /> case 1:<br /> $simage =imagecreatefromgif($destination);<br /> break;<br /> case 2:<br /> $simage =imagecreatefromjpeg($destination);<br /> break;<br /> case 3:<br /> $simage =imagecreatefrompng($destination);<br /> break;<br /> case 6:<br /> $simage =imagecreatefromwbmp($destination);<br /> break;<br /> default:<br /> die("不支援的檔案類型");<br /> exit;<br /> }</p><p> imagecopy($nimage,$simage,0,0,0,0,$image_size[0],$image_size[1]);<br /> imagefilledrectangle($nimage,1,$image_size[1]-15,80,$image_size[1],$white);</p><p> switch($watertype)<br /> {<br /> case 1: //加浮水印字串<br /> imagestring($nimage,2,3,$image_size[1]-15,$waterstring,$black);<br /> break;<br /> case 2: //加浮水印圖片<br /> $simage1 =imagecreatefromgif("xplore.gif");<br /> imagecopy($nimage,$simage1,0,0,0,0,85,15);<br /> imagedestroy($simage1);<br /> break;<br /> }</p><p> switch ($iinfo[2])<br /> {<br /> case 1:<br /> //imagegif($nimage, $destination);<br /> imagejpeg($nimage, $destination);<br /> break;<br /> case 2:<br /> imagejpeg($nimage, $destination);<br /> break;<br /> case 3:<br /> imagepng($nimage, $destination);<br /> break;<br /> case 6:<br /> imagewbmp($nimage, $destination);<br /> //imagejpeg($nimage, $destination);<br /> break;<br /> }</p><p> //覆蓋原上傳檔案<br /> imagedestroy($nimage);<br /> imagedestroy($simage);<br /> }</p><p> if($imgpreview==1)<br /> {<br /> echo "<br>圖片預覽:<br>";<br /> echo "<img src="/" mce_src="/""".$destination."/" width=".($image_size[0]*$imgpreviewsize)." height=".($image_size[1]*$imgpreviewsize);<br /> echo " alt=/"圖片預覽:/r檔案名稱:".$destination."/r上傳時間:/">";<br /> }<br />}<br />?><br /></body><br />