久久精品水蜜桃av综合天堂,久久精品丝袜高跟鞋,精品国产肉丝袜久久,国产一区二区三区色噜噜,黑人video粗暴亚裔

PHP文件上傳處理

2024-01-26 144

PHP作為一種廣泛使用的服務(wù)端腳本語言,提供了處理文件上傳的內(nèi)置支持。本教程將詳細(xì)介紹使用PHP進(jìn)行文件上傳的不同方面,包括POST方法上傳、錯(cuò)誤信息說明、常見的缺陷、如何上傳多個(gè)文件,以及對(duì)HTTP PUT方法的支持。

一、POST方法上傳

參見《PHP POST上傳文件》。

二、錯(cuò)誤信息說明

參見《PHP錯(cuò)誤信息說明》。

三、常見缺陷

對(duì)于 PHP 中的文件上傳限制,需要注意幾個(gè)方面:

1、確保 MAX_FILE_SIZE 的值不大于 php.ini 文件中 upload_max_filesize 選項(xiàng)設(shè)置的值,否則上傳文件時(shí)會(huì)出現(xiàn)錯(cuò)誤。

2、如果啟用了內(nèi)存限制,也要確保 memory_limit 設(shè)置的足夠大,以便處理大型文件。

3、還要注意 max_execution_time 的設(shè)置,確保值足夠大,以允許腳本在上傳和處理文件時(shí)能夠完整運(yùn)行。

注意:

  • max_execution_time 僅僅影響腳本本身運(yùn)行的時(shí)間,而不包括任何其他花費(fèi)在腳本運(yùn)行之外的時(shí)間,例如系統(tǒng)調(diào)用、sleep() 函數(shù)的使用、數(shù)據(jù)庫查詢、文件上傳等。因此,在計(jì)算腳本運(yùn)行的最大時(shí)間時(shí),這些時(shí)間都不應(yīng)該被包括在內(nèi);
  • max_input_time 指定腳本接收輸入(包括文件上傳)的最長(zhǎng)時(shí)間(以秒為單位)。默認(rèn)值為 60 秒,如果文件較大或有多個(gè)文件,或者用戶的網(wǎng)絡(luò)連接速度較慢,則可能會(huì)超過默認(rèn)值。

如果 post_max_size 設(shè)置得過小,較大的文件將無法上傳。因此,請(qǐng)確保 post_max_size 的值足夠大。

max_file_uploads 配置設(shè)置可控制一次請(qǐng)求可上傳的最大文件數(shù)。如果上傳的文件超過上限,那么 $_FILES 將在達(dá)到上限時(shí)停止處理文件。例如,如果 max_file_uploads 設(shè)置為 10,那么 $_FILES 將永遠(yuǎn)不會(huì)包含超過 10 個(gè)項(xiàng)目。

  • 如果不驗(yàn)證正在處理的文件,這可能意味著用戶可以訪問其他目錄中的敏感信息。
  • 由于文件路徑的表示方法不同,因此無法保證正確處理外文文件名(尤其是包含空格的文件名)。
  • 開發(fā)人員不應(yīng)在同一表單變量中混合使用普通輸入字段和文件上傳字段(例如,兩個(gè)輸入名稱都使用 foo[])。

四、上傳多個(gè)文件

可以對(duì) input 域使用不同的 name 來上傳多個(gè)文件。

PHP 支持同時(shí)上傳多個(gè)文件并將它們的信息自動(dòng)以數(shù)組的形式組織。要完成這項(xiàng)功能,需要在 HTML 表單中對(duì)文件上傳域使用和多選框與復(fù)選框相同的數(shù)組式提交語法。

示例:

<form action="file-upload.php" method="post" enctype="multipart/form-data">
Send these files:<br />
<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />
<input type="submit" value="Send files" />
</form>

當(dāng)以上表單被提交后,數(shù)組 $_FILES[‘userfile’],$_FILES[‘userfile’][‘name’] 和 $_FILES[‘userfile’][‘size’] 將被初始化。

例如,假設(shè)名為 /home/test/review.html 和 /home/test/xwp.out 的文件被提交,則 $_FILES[‘userfile’][‘name’][0] 的值將是 review.html,而 $_FILES[‘userfile’][‘name’][1] 的值將是 xwp.out。類似的,$_FILES[‘userfile’][‘size’][0] 將包含文件 review.html 的大小,依此類推。

此外也同時(shí)設(shè)置了 $_FILES[‘userfile’][‘name’][0], $_FILES[‘userfile’][‘tmp_name’][0], $_FILES[‘userfile’][‘size’][0] 以及 $_FILES[‘userfile’][‘type’][0]。

五、對(duì)PUT方法支持

PHP 對(duì)部分客戶端具備的 HTTP PUT 方法提供了支持。PUT 請(qǐng)求比文件上傳要簡(jiǎn)單的多,它們一般的形式為:

PUT /path/filename.html HTTP/1.1

這通常意味著遠(yuǎn)程客戶端會(huì)將其中的 /path/filename.html 存儲(chǔ)到 web 目錄樹。讓 Apache 或者 PHP 自動(dòng)允許所有人覆蓋 web 目錄樹下的任何文件顯然是很不明智的。因此,要處理類似的請(qǐng)求,必須先告訴 web 服務(wù)器需要用特定的 PHP 腳本來處理該請(qǐng)求。在 Apache 下,可以用 Script 選項(xiàng)來設(shè)置。它可以被放置到 Apache 配置文件中幾乎所有的位置。通常我們把它放置在 <Directory> 區(qū)域或者 <VirtualHost> 區(qū)域。可以用如下一行來完成該設(shè)置:

Script PUT /put.php

這將告訴 Apache 將所有對(duì) URI 的 PUT 請(qǐng)求全部發(fā)送到 put.php 腳本,這些 URI 必須和 PUT 命令中的內(nèi)容相匹配。當(dāng)然,這是建立在 PHP 支持 . php 擴(kuò)展名,并且 PHP 已經(jīng)在運(yùn)行的假設(shè)之上。 對(duì)該腳本的所有 PUT 請(qǐng)求的目標(biāo)資源必須是腳本本身,而不是上傳文件的文件名。

使用 PHP 時(shí),您可以在 put.php 中執(zhí)行如下操作。這將把上傳文件的內(nèi)容復(fù)制到服務(wù)器上的 myputfile.ext 文件中。在執(zhí)行文件復(fù)制之前,您可能需要執(zhí)行一些檢查和/或驗(yàn)證用戶身份。

  • 廣告合作

  • QQ群號(hào):4114653

溫馨提示:
1、本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享網(wǎng)絡(luò)內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。郵箱:2942802716#qq.com(#改為@)。 2、本站原創(chuàng)內(nèi)容未經(jīng)允許不得轉(zhuǎn)裁,轉(zhuǎn)載請(qǐng)注明出處“站長(zhǎng)百科”和原文地址。