簡單的php檔案上傳(執行個體)
PHP上傳類太多,這裡提供一個簡單的php檔案上傳,一個檔案就可以搞定上傳。
把下面代碼另存新檔uploads.php
複製代碼代碼如下:
?
??
??
??? ??
??? ??
??? 簡易檔案上傳 - www.jbxue.com??
??
??
??
??
??
??
??
??
function file_list($dir,$pattern=""){??
??? $arr=array();??
??? $dir_handle=opendir($dir);??
??? if($dir_handle){??
??????? while(($file=readdir($dir_handle))!==false){??
??????????? if($file==='.' || $file==='..'){??
??????????????? continue;??
??????????? }??
??????????? $tmp=realpath($dir.'/'.$file);??
??????????? if(is_dir($tmp)){??
??????????????? $retArr=file_list($tmp,$pattern);??
??????????????? if(!empty($retArr)){??
??????????????????? $arr[]=$retArr;??
??????????????? }??
??????????? } else {??
??????????????? if($pattern==="" || preg_match($pattern,$tmp)){??
??????????????????? $arr[]=$tmp;??
??????????????? }??
??????????? }??
??????? }??
??????? closedir($dir_handle);??
??? }??
??? return $arr;??
}??
$d_root = $_SERVER['DOCUMENT_ROOT'];??
$store_dir = "$d_root/uploads/";// 上傳檔案的儲存位置??
if (!is_dir($store_dir)) {??
??? mkdir($store_dir,0777,true);??
}??
$file_arr = file_list($store_dir);??
foreach ($file_arr as $v=>$k) {??
??? $d_root_no = strlen($d_root);??
??? $l = substr($k,$d_root_no);??
??? echo $v.'號檔案下載地址為:? '.$_SERVER['SERVER_ADDR'].$l.'
';??
}??
$upload_file=isset($_FILES['upload_file']['tmp_name'])?$_FILES['upload_file']['tmp_name']:'';??
$upload_file_name=isset($_FILES['upload_file']['name'])?$_FILES['upload_file']['name']:'';??
$upload_file_size=isset($_FILES['upload_file']['size'])?$_FILES['upload_file']['size']:'';??
if($upload_file){??
??? $file_size_max = 1000*1000*200;// 200M限制檔案上傳最大容量(bytes)??
??? if (!is_dir($store_dir)) { ?// www.jbxue.com
??????? mkdir($store_dir,0777,true);??
??? }??
??? $accept_overwrite = 1;//是否允許覆蓋相同檔案??
??? // 檢查檔案大小??
??? if ($upload_file_size > $file_size_max) {??
??????? echo "對不起,你的檔案容量大於規定";??
??????? exit;??
??? }??
??? // 檢查讀寫檔案??
??? if (file_exists($store_dir . $upload_file_name) && !$accept_overwrite) {??
??????? echo "存在相同檔案名稱的檔案";??
??????? exit;??
??? }??
??? //複製檔案到指定目錄??
??? if (!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) {??
??????? echo "複製檔案失敗";??
??????? exit;??
??? }??
}??
if (isset($_FILES['upload_file'])) {??
??? echo "
你上傳了檔案:";??
??? echo isset($_FILES['upload_file']['name'])?$_FILES['upload_file']['name']:'';??
??? echo "
";??
??? //用戶端機器檔案的原名稱。??
??? echo "檔案的 MIME 類型為:";??
??? echo isset($_FILES['upload_file']['type'])?$_FILES['upload_file']['type']:'';??
??? //檔案的 MIME 類型,需要瀏覽器提供該資訊的支援,例如“image/gif”。??
??? echo "
";??
??? echo "上傳檔案大小:";??
??? echo isset($_FILES['upload_file']['size'])?$_FILES['upload_file']['size']:'';??
??? //已上傳檔案的大小,單位為位元組。??
??? echo "
";??
??? echo "檔案上傳後被臨時儲存為:";??
??? echo isset($_FILES['upload_file']['tmp_name'])?$_FILES['upload_file']['tmp_name']:'';??
??? //檔案被上傳後在服務端儲存的臨時檔案名稱。??
??? $erroe = isset($_FILES['upload_file']['error'])?$_FILES['upload_file']['error']:'';??
??? switch($erroe){??
??? case 0:??
??????? echo "上傳成功"; break;??
??? case 1:??
??????? echo "上傳的檔案超過了 php.ini 中 upload_max_filesize 選項限制的值."; break;??
??? case 2:??
??????? echo "上傳檔案的大小超過了 HTML 表單中 MAX_FILE_SIZE 選項指定的值。"; break;??
??? case 3:??
??????? echo "檔案只有部分被上傳"; break;??
??? case 4:??
??????? echo "沒有檔案被上傳"; break;??
??? case 6:??
??????? echo "沒有緩衝目錄"; break;??
??? case 7:??
??????? echo "上傳目錄不可讀"; break;??
??? case 8:??
??????? echo "上傳停止"; break;??
??? default :??
??????? echo "沒有選擇上傳檔案"; break;??
??? }??
??? echo "";??
}??
?>??
??
?