
批改狀態(tài):合格
老師批語:批量上傳時, 最好將前端的大小驗證去掉, 做后端驗證就可以, 前端可以限制一一下上傳文件的數(shù)量, 這個更實用一些,你說呢?
<?php
require $_SERVER['DOCUMENT_ROOT'].'/0511/class/upload.class.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>上傳測試</title>
</head>
<body>
<!-- 上傳提交屬性必須是POST -->
<!-- multipart/form-data,它會將表單的數(shù)據(jù)處理為一條消息,以標簽為單元,用分隔符分開。既可以上傳鍵值對,也可以上傳文件。 -->
<form action="" method='POST' enctype='multipart/form-data'>
<legend>單文件上傳測試變量$_FILES;</legend>
<!-- 隱藏域限制上傳大小 類型file-->
<input type="hidden" name='MAX_FILE_SIZE' value='200000'>
<input type="file" name='pic'>
<button>上傳</button>
</form>
<hr>
<form action="" method='post' enctype="multipart/form-data">
<legend></legend>
</form>
</body>
</html>
<?php
//使用$_FILES變量來接受數(shù)據(jù)
printf('<pre>%s</pre>',print_r($_FILES,true));
// echo ini_get('upload_max_filesize');
//檢查是否有上傳
$error= $_FILES['pic']['error'];
// echo $error;
//沒有文件的函數(shù) UPLOAD_ERR_NO_FILE;
//檢查文件類型
if($_POST){
if(UPLOAD_ERR_NO_FILE === $error){
echo "沒有上傳文件<br>";
}
$fileType=$_FILES['pic']['type'];
//strstr — 查找字符串的首次出現(xiàn)(stristr忽略大小寫)
//檢查是否為POST提交
$temFile=$_FILES['pic']['tmp_name'];//臨時文件名
$sourceFile=$_FILES['pic']['name'];//源文件名
// echo $temFile.$sourceFile;
//is_uploaded_file — 判斷文件是否是通過 HTTP POST 上傳的
if(stristr($fileType,'/',true) !=='image')
{
echo "$sourceFile 非法請求!";
}elseif(is_uploaded_file($temFile)){
echo "$sourceFile 上傳成功";
}
// ini_get — 獲取一個配置選項的值
//ini_set 臨時更改php.ini上傳大小
//這里限制大小非常有必要,避免通過瀏覽器修改上傳
ini_set('upload_max_filesize','1M');
switch($error){
case 1:
echo '文件大小不符';
break;
case 2:
echo '文件大小不符';
}
}
<?php
require 'class/upload.class1.php';
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>單文件上傳$_FILES</title>
</head>
<body>
<form action="" method='POST' enctype='multipart/form-data'>
<fieldset>
<legend>單文件上傳異常處理</legend>
<input type="hidden" name='MAX_FILE_SIZE' value='200000'>
<input type="file" name='pic'>
<button>上傳</button>
</fieldset>
</form>
</body>
</html>
<?php
//單文件上傳異常類
printf('<pre>%s</pre>',print_r($_FILES,true));
//自定義上傳異常類
class UploadException extends Exception
{
//在異常類中可訪問并重寫Exception中的四個屬性。通過__toString()格式化輸出
public function __toString()
{
return <<< UPLOAD
<style>
table{border-collapse:collapse;border:1px soild #CCC;text-align:center;}
td{border:1px solid #CCC;padding:1px;}
tr:first-of-type{background:#333;}
tr:last-of-type{color:#DDD;}
</style>
<table>
<tr>
<td>代碼</td>
<td>信息</td>
<td>文件</td>
<td>行號</td>
</tr>
<tr>
<td>$this->code</td>
<td>$this->message</td>
<td>$this->file</td>
<td>$this->line</td>
</tr>
</table>
UPLOAD;
}
}
try{
//獲取文件
$errorCode= $_FILES['pic']['error'];
if($errorCode > UPLOAD_ERR_OK)
{
switch ($errorCode)
{
//case視乎不能用數(shù)字表示。
case UPLOAD_ERR_INI_SIZE:
throw new UploadException('文件過大',1);
break;
case UPLOAD_ERR_FORM_SIZE:
throw new UploadException('文件過大');
break;
case UPLOAD_ERR_PARTIAL:
throw new UploadException('文件只有部分上傳了');
break;
case UPLOAD_ERR_NO_FILE:
throw new UploadException('沒有上傳文件',4);
break;
case UPLOAD_ERR_NO_TMP_DIR:
throw new UploadException('找不到臨時文件');
break;
case UPLOAD_ERR_CANT_WRITE:
throw new UploadException('文件寫入失敗');
break;
default:
throw new UploadException('未知錯誤');
}
}
if($_POST){
$fileType=$_FILES['pic']['type'];
if(strstr($fileType,'/', true) !=='image'){
throw new UploadException('文件類型錯誤');
}
$temFile=$_FILES['pic']['tmp_name'];//臨時
// is_uploaded_file — 判斷文件是否是通過 HTTP POST 上傳的
if(is_uploaded_file($temFile)){
// 判斷是否post請求并移動到指定目錄
$sourcFile=$_FILES['pic']['name'];//原文件
//目錄路徑
$FilePath='uploads/'.md5(time().mt_rand(1,99999)).strstr($sourcFile,'.');//。加密獲取擴展名
// echo $FilePath;die;
// move_uploaded_file — 將上傳的文件移動到新位置
if(move_uploaded_file($temFile,$FilePath)){
echo " $sourcFile '上傳成功'";
echo "<img src='{$FilePath}' width='100px'>";
}
}
}
}catch(UploadException $e){
echo $e;
}
<?php
// require 'class/uploads.class.php';
//printf('<pre>%s</pre>',print_r($_FILES,true));
if($_FILES['pic'])
{
foreach($_FILES['pic']['error'] as $key=>$error) {
if($error === UPLOAD_ERR_OK){
$temFile = $_FILES['pic']['tmp_name'][$key];
$sourceFile = $_FILES['pic']['name'][$key];
$PathFile = 'uploads/'.md5(time().mt_rand(1,9999)).strstr($sourceFile,'.');
//移動文件
move_uploaded_file($temFile,$PathFile);
echo "<img src='{$PathFile}' width='100px'> ";
}
}
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>批量上傳圖片</title>
</head>
<body>
<form action="" method="POST" enctype='multipart/form-data'>
<fieldset>
<legend>批量上傳圖片</legend>
<input type="hidden" name='MAX_FILE_SIZE' value='200000'>
<!-- multiple 批量上傳屬性 -->
<input type="file" name="pic[]" multiple>
<button>上傳</button>
</fieldset>
<fieldset>
<legend>單個批量上傳圖片</legend>
<input type="hidden" name='MAX_FILE_SIZE' value='200000'>
<!-- multiple 批量上傳屬性 只是少了一個multiple屬性 -->
<input type="file" name="pic[]" >
<input type="file" name="pic[]" >
<input type="file" name="pic[]" >
<button>上傳</button>
</fieldset>
</form>
</body>
</html>
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號