《PHP實例:PHP文件上傳、客戶端和服務器端加限制、抓取錯誤信息、完整步驟解析》要點:
本文介紹了PHP實例:PHP文件上傳、客戶端和服務器端加限制、抓取錯誤信息、完整步驟解析,希望對您有用。如果有疑問,可以聯系我們。
PHP實例文件上傳分為兩個部分,HTML顯示部分和PHP處理部分,HTML部分主要是讓用戶來選擇所要上傳的文件,然后通過PHP中的$_FILES,我們可以把文件上傳到服務器的指定目錄.
PHP實例1.客戶端頁面
PHP實例?? 客戶端的配置
PHP實例??? 1.表單頁面
PHP實例??? 2.表單發送方式為post
PHP實例??? 3.表單form中添加enctype="multipart/form-data"
PHP實例
<body>
<form action="doaction.php" method="post" enctype="multipart/form-data">
<input type="file" name="myfile">
<input type="submit" value="上傳">
</form>
</body>
PHP實例2.處理頁面doaction
PHP實例$_FILES:文件上傳變量
PHP實例print_r($_FILES);
PHP實例$_FILES:保存著上傳文件的信息
PHP實例1.name:上傳文件的名稱
PHP實例2.type:上傳文件的MIME類型
PHP實例3.tmp_name:上傳到服務器上的臨時文件名
PHP實例4.size:上傳文件的大小
PHP實例5.error:上傳文件的錯誤號
PHP實例
$filename=$_FILES['myfile']['name'];
$type=$_FILES['myfile']['type'];
$tmp_name=$_FILES['myfile']['tmp_name'];
$size=$_FILES['myfile']['size'];
$error=$_FILES['myfile']['error'];
PHP實例將服務器上的臨時文件移動到指定文件夾
PHP實例1.move_uploaded_file(臨時文件名,‘文件夾名'.$filename);?? 將服務器上的臨時文件移動到指定文件夾,叫什么名字($filename),移動成功返回true,移動失敗返回false.
PHP實例
move_uploaded_file($tmp_name,"wenjian/".$filename);
PHP實例2.copy("臨時文件名","文件名".$filename)? 將服務器上的臨時文件拷貝到指定文件夾
PHP實例文件上傳配置
PHP實例
file_uploads = on,支持HTTP上傳
upload_tmp_dir= ,臨時文件保存的目錄
upload_max_filesize=2M,允許上傳文件的最大值
max_file_uploads=20,允許一次上傳的最大文件數
post_max_size=8M,post方式發送數據的最大值
PHP實例3.錯誤信息處理
PHP實例上傳文件失敗時,判斷一下錯誤號,只有為0或者UPLOAD_ERR_OK,才沒有錯誤發生,上傳成功
PHP實例下面是抓取錯誤
PHP實例
if($error==UPLOAD_ERR_OK)
{
if(move_uploaded_file($tmp_name,"wenjian/".$filename))
{
echo "文件".$filename."上傳成功";
}else
{
echo "文件".$filename."上傳失敗";
}
}
else
{
//匹配錯誤信息
switch($error)
{
case 1:
echo "上傳文件超過了PHP配置文件中upload_max_filesize選項的值";
break;
case 2:
echo "超過了表單MAX_FILE_SIZE的限制大小";
break;
case 3:
echo "文件部分被上傳";
break;
case 4:
echo "沒有選擇上傳文件";
break;
case 6:
echo "沒有找到臨時目錄";
break;
case 7:
case 8:
echo "系統錯誤";
break;
}
}
?>
PHP實例4.上傳文件限制
PHP實例《客戶端限制:》
PHP實例通過表單隱藏域限制上傳文件的最大值
PHP實例
<input type="hidden" name="MAX_FILE_SIZE" value="字節數">
PHP實例通過accept屬性限制上傳文件的類型
PHP實例
<input type="file" name="myfile" accept="文件的MIME類型">
PHP實例《服務器端限制》
PHP實例1.限制上傳文件大小
PHP實例2.限制上傳文件類型
PHP實例3.檢測是否為真實圖片類型
PHP實例4.檢測是否為HTTP POST方式上傳
PHP實例5.判斷服務器上存儲的文件夾在不在
PHP實例6.防止重名產生覆蓋
PHP實例
<?php
$fileinfo=$_FILES["myfile"];
$maxsize=2097152; //寫最大的字節數,自己算
$allowext=array('jpeg','jpg','pnd','gif','wbmp'); //定義一下允許的上傳文件類型
//1.判斷錯誤號
if($fileinfo['error']==0)
{
//1.判斷上傳文件大小
if($fileinfo['size']>$maxsize)
{
exit('上傳文件過大');
}
//2.判斷上傳文件類型是不是在規定類型中
$ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上傳文件擴展名
if(!in_array($ext,$allowext)) // 判斷上傳文件的擴展名是不是在定義類型中
{
exit('非法文件類型');
}
//3.判斷文件是否是通過HTTP POST方式上傳上來的
if(!is_uploaded_file($fileinfo['tmp_name']))
{
exit('文件不是通過HTTP POST方式上傳上來的');
}
//4.檢測是否為真實的圖片類型,而不是認為改動的
$flag=true;
if($flag)
{
if(!getimagesize($fileinfo['tmp_name']))
{
echo "不是真實的圖片類型";
}
}
$path='uploads'; //服務器上存儲文件的文件名
//5.判斷服務器上存儲的文件夾在不在
if(!file_exists($path))
{
mkdir($path,0777,true);//不存在就創建一個目錄
chmod($path,0777);//加一個權限
}
//6.確保文件名唯一,防止重名產生覆蓋
$uniname=md5(uniqid(microtime(true),true)).'.'.$ext; //通過MD5加密等措施給文件名取名
$destination=$path.'/'.$uniname;
if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上傳文件
{
echo "文件上傳成功";
}else
{
echo "文件上傳失敗";
}
}else
{
//匹配錯誤信息
switch($error)
{
case 1:
echo "上傳文件超過了PHP配置文件中upload_max_filesize選項的值";
break;
case 2:
echo "超過了表單MAX_FILE_SIZE的限制大小";
break;
case 3:
echo "文件部分被上傳";
break;
case 4:
echo "沒有選擇上傳文件";
break;
case 6:
echo "沒有找到臨時目錄";
break;
case 7:
case 8:
echo "系統錯誤";
break;
}
}
?>
PHP實例5.完整的上傳文件步驟
PHP實例第一步:表單頁內容
PHP實例
<body>
<form action="doaction.php" method="post" enctype="multipart/form-data">
//通過表單隱藏域限制上傳文件的最大值
<input type="hidden" name="MAX_FILE_SIZE" value="字節數">
//通過accept屬性限制上傳文件的類型
<input type="file" name="myfile" accept="文件的MIME類型">
</form>
</body>
PHP實例第二步:處理界面.定義變量
PHP實例
<?php
//$_FILES:文件上傳變量
print_r($_FILES);
//$_FILES:保存著上傳文件的信息
/*1.name:上傳文件的名稱
2.type:上傳文件的MIME類型
3.tmp_name:上傳到服務器上的臨時文件名
4.size:上傳文件的大小
5.error:上傳文件的錯誤號*/
$filename=$_FILES['myfile']['name'];
$type=$_FILES['myfile']['type'];
$tmp_name=$_FILES['myfile']['tmp_name'];
$size=$_FILES['myfile']['size'];
$error=$_FILES['myfile']['error'];
PHP實例?第三步:處理頁面上服務器加限制和輸出錯誤信息
PHP實例1.限制上傳文件大小
PHP實例2.限制上傳文件類型
PHP實例3.檢測是否為真實圖片類型
PHP實例4.檢測是否為HTTP POST方式上傳
PHP實例5.判斷服務器上存儲的文件夾在不在
PHP實例6.防止重名產生覆蓋?
PHP實例
//服務器端限制
<?php
$fileinfo=$_FILES["myfile"];
$maxsize=2097152; //寫最大的字節數,自己算
$allowext=array('jpeg','jpg','pnd','gif','wbmp'); //定義一下允許的上傳文件類型
//1.判斷錯誤號
if($fileinfo['error']==0)
{
//1.判斷上傳文件大小
if($fileinfo['size']>$maxsize)
{
exit('上傳文件過大');
}
//2.判斷上傳文件類型是不是在規定類型中
$ext=strtolower(end(explode(',',$fileinfo['name'])));//截取上傳文件擴展名
if(!in_array($ext,$allowext)) // 判斷上傳文件的擴展名是不是在定義類型中
{
exit('非法文件類型');
}
//3.判斷文件是否是通過HTTP POST方式上傳上來的
if(!is_uploaded_file($fileinfo['tmp_name']))
{
exit('文件不是通過HTTP POST方式上傳上來的');
}
//4.檢測是否為真實的圖片類型,而不是認為改動的
$flag=true;
if($flag)
{
if(!getimagesize($fileinfo['tmp_name']))
{
echo "不是真實的圖片類型";
}
}
$path='uploads'; //服務器上存儲文件的文件名
//5.判斷服務器上存儲的文件夾在不在
if(!file_exists($path))
{
mkdir($path,0777,true);//不存在就創建一個目錄
chmod($path,0777);//加一個權限
}
//6.確保文件名唯一,防止重名產生覆蓋
$uniname=md5(uniqid(microtime(true),true)).'.'.$ext; //通過MD5加密等措施給文件名取名
$destination=$path.'/'.$uniname;
$destination=inocv("UTF-8","gb2312",$destination); //如果上傳的文件名中有漢字,需要轉碼一下,用inocv函數,把utf-8轉為gb2312.
if(move_uploaded_file($fileinfo['tmp_name'],$destination)) //上傳文件
{
echo "文件上傳成功";
}else
{
echo "文件上傳失敗";
}
}else
{
PHP實例第四步:匹配錯誤信息
PHP實例
switch($error)
{
case 1:
echo "上傳文件超過了PHP配置文件中upload_max_filesize選項的值";
break;
case 2:
echo "超過了表單MAX_FILE_SIZE的限制大小";
break;
case 3:
echo "文件部分被上傳";
break;
case 4:
echo "沒有選擇上傳文件";
break;
case 6:
echo "沒有找到臨時目錄";
break;
case 7:
case 8:
echo "系統錯誤";
break;
}
}
?>
PHP實例以上所述是小編給大家介紹的PHP文件上傳、客戶端和服務器端加限制、抓取錯誤信息、完整步驟,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的.在此也非常感謝大家對維易PHP網站的支持!
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/1997.html