PHP文件上傳及其突破上傳文件大小限制 __veblen
文件上傳在實際開發(fā)場景里較為常見舵匾,例如:上傳頭像、上傳相冊荐操、百度云盤等等诅妹!接下來罚勾,一塊了解一下PHP如何處理前端文件上傳。
1. 創(chuàng)建一個文件上傳表單
<html>
<head>
<meta charset="utf-8">
<title>清風筆記</title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">頭像:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="上傳">
</form>
</body>
</html>
<
form
> 標簽的enctype
屬性規(guī)定了在提交表單時要使用哪種內(nèi)容類型吭狡。在表單需要二進制數(shù)據(jù)時尖殃,比如文件內(nèi)容,請使用multipart/form-data
划煮。<
input
> 標簽的type="file"
屬性規(guī)定了應該把輸入作為文件來處理送丰。舉例來說,當在瀏覽器中預覽時弛秋,會看到輸入框旁邊有一個瀏覽按鈕器躏。
通過使用 PHP 的全局數(shù)組 $_FILES
俐载,你可以從客戶計算機向遠程服務器上傳文件。 第一個參數(shù)是表單的input name
登失,第二個下標可以是 "name"
遏佣、"type"
、"size"
壁畸、"tmp_name"
或 "error"
。如下所示:
-
$_FILES["file"]["name"]
- 上傳文件的名稱 -
$_FILES["file"]["type"]
- 上傳文件的類型 -
$_FILES["file"]["size"]
- 上傳文件的大小茅茂,以字節(jié)計 -
$_FILES["file"]["tmp_name"]
- 存儲在服務器的文件的臨時副本的名稱 -
$_FILES["file"]["error"]
- 由文件上傳導致的錯誤代碼
上傳限制
有時我們需要對用戶上傳的文件類型進行限制捏萍,代碼如下:
<?php
//png且體積小于200kb
if( $_FILES["file"]["type"] == "image/png" && $_FILES["file"]["size"] < 204800){
if($_FILES["file"]["error"] > 0){
echo "錯誤: ".$_FILES["file"]["error"]."<br>";
}else{
echo "上傳文件名: ".$_FILES["file"]["name"]."<br>";
echo "文件類型: ".$_FILES["file"]["type"]."<br>";
echo "文件大小: ".($_FILES["file"]["size"] / 1024)." kB<br>";
echo "文件臨時存儲的位置: ".$_FILES["file"]["tmp_name"];
}
}else{
echo "非法的文件格式";
}
?>
保存被上傳的文件
上面的實例在服務器的 PHP 臨時文件夾中創(chuàng)建了一個被上傳文件的臨時副本。 這個臨時的副本文件會在腳本結(jié)束時消失空闲。要保存被上傳的文件令杈,我們需要把它拷貝到另外的位置:
核心代碼:
// 判斷當期目錄下的 upload 目錄是否存在該文件
if(file_exists("upload/".$_FILES["file"]["name"])){
echo $_FILES["file"]["name"]." 文件已經(jīng)存在。 ";
}else{
// 如果 upload 目錄不存在該文件則將文件上傳到 upload 目錄下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
echo "文件存儲在: "."upload/".$_FILES["file"]["name"];
}
解除PHP對文件大小限制:
php.ini中的參數(shù):
file_uploads //是否允許上傳文件碴倾,默認ON
upload_tmp_dir //上傳文件防止的臨時目錄逗噩,未指定則使用系統(tǒng)默認位置
upload_max_filesize //允許上傳文件的大小的最大值,默認為2M
post_max_size //控制采用POST方法進行一次表單提交中PHP所能接受的最大數(shù)據(jù)量跌榔,如果希望用PHP文件上傳异雁,則此值要改為比upload_max_filesize要大
max_input_time //以秒為單位對通過POST/GET/PUT方式接受數(shù)據(jù)時間進行限制。
memory_limit //為了避免正在運行的腳本大量使用系統(tǒng)內(nèi)存僧须,PHP允許定義內(nèi)存使用限額纲刀。通過設(shè)置此參數(shù)來制定單個腳本程序可以使用的最大內(nèi)存容量,應適當大于post_max_size值
max_execution_time //用來設(shè)置在強制終止腳本前PHP等待腳本執(zhí)行完畢的時間担平,單位秒示绊。次選項可限制死循環(huán)腳本,但當存在一個長時間的合法活動時(如:上傳大文件)暂论,這項功能也會導致操作失敗面褐。這樣情況下必須考慮將此變量增加。
至此取胎,PHP文件上傳已經(jīng)介紹完畢展哭,熟悉整套操作流程,方法不是問題闻蛀,加油摄杂!