計算機, 文件類型
PHP:文件上傳到服務器
通過PHP下載文件 - 一個非常有趣的案例,對此必須非常小心地靠近。 在互聯網上,你可以找到文件上傳的實施例子不勝枚舉,但不是所有的人都很好,符合安全規定。
這樣的事情需要帶一個結論,即使這需要很長的時間。 如果你在代碼中留下一個缺口,那麼你的整個服務器可能會受到影響。
安全
隨著PHP 文件上傳到服務器很容易進行。 該代碼是非常簡短。 短短幾行。 然而,這種方法是很危險的。 更多的時間和代碼遠離安全線。
危險的是,如果你不去做檢查,任何攻擊者可以上傳他們的腳本您的服務器上。 在這種情況下,將有充分的機會。 他可以做任何他想做的:
- 刪除數據庫;
- 刪除文件的網站;
- 修改文件的網站;
- 您的廣告添加到您的網站;
- 下載的病毒;
- 重定向所有用戶在其網站上;
- 和許多前來其他的事情要介意攻擊。
您應經常檢查,試圖下載文件的用戶。 例如,如果你只上傳圖片,有必要驗證該文件是一個圖像精確。 否則,你將下載任何東西。
究竟如何實現驗證,它會顯示,與直接檢查腳本上傳文件。
創建一個PHP形式
文件上傳表單是非常簡單的。 缺少瀏覽按鈕,上傳按鈕。
介紹如何創建表單不會,因為這很容易。 進一步說明假定您已經有HTML的基本概念(否則你不會尋找有關下載的PHP)。
但請注意,你需要在表格中的數據添加enctype屬性。
否則,文件處理的數據將不會被傳輸。
它應該如何運作?
之後,它會被要求接受該文件所在的路徑。
如果路徑沒有出現,再次執行該操作。
點擊下載文件處理程序後,可以給任何信息。
例如,你可以寫,指出該文件是“某某”的名字已經成功上傳到了“某某”的文件夾就行了。 當然,文件名會給出總是不同的。
通常,該信息被用來調試代碼。 因此,可以驗證該數據被發送和發生在所需的目錄寫入。 也就是說,即使文件名不顯示。 由於這些額外的信息是,用戶並不需要。
這是有道理的輸出只有當用戶下載多個文件名。 這種情況下,考慮遠一點。 讓我們不要超越自己。
調整
在PHP文件上傳到服務器需要一定的設置,應在php.ini文件來完成。 該文件包含了大量的設置。 他們都我們不需要。 我們感興趣的是三行:file_uploads,upload_tmp_dir和的upload_max_filesize。
請注意,這些設置會影響您的所有網站的服務器上,而不是任何一個。 因此,要設置基於您必須加載用戶的事實的最大尺寸。 不建議設置過大。
一旦你改變這些參數的值,則需要重新啟動服務器。 否則,設置才會生效,因為它們在服務器負載時讀取。
您可以通過SSH連接到服務器控制台做到這一點。 只需輸入命令service httpd的重啟,然後設置生效。
另一種方法 - 通過ISP面板或者通過付費面板供應商重新啟動。
數組文件
在PHP文件上傳由數組$ _FILES完成。 它包含了所有關於我們下載文件的信息。
要了解什麼信息都包含在陣列,足以在文件處理程序編寫下列英寸
選擇任一文件,然後點擊“上傳”。 在處理程序頁面將顯示存儲在$ _FILES信息。 該變量以大寫字母編寫的。 PHP - 語言敏感。
正如你所看到的,此數組中有很多領域。 所有這些都對我們非常重要。 第一個字段包含在它是您的計算機上使用的形式的文件名。
該類型列指定的文件類型。 tmp_name的值字段對應的臨時文件的名稱。 腳本結束後都將被刪除。
錯誤字段包含一個錯誤代碼。 這是一個遠一點。 大小 - 以字節為單位的大小。
錯誤
通過PHP文件上傳進行總是伴隨著一個錯誤代碼。 在“錯誤”輸入了錯誤信息。 截圖誤差為零。
考慮所有錯誤的值:
下面是一個示例形式來下載文件,其指示上載的文件的數量的限制。
PHP:文件上傳腳本
由於所有在實踐中進行? 在PHP文件上傳時拷貝命令。 如果你有興趣在如何下載文件的問題,答案很簡單禁止複製,它採用兩個參數 - 源文件和目標文件。
但是,如上所述,它不能限制出於安全原因。 例如,檢查出什麼樣的文件,我們的船,你可以數組$ _FILES中使用的字段類型。 首先,讓我們來對付檢查,然後轉移到完整的腳本
比方說,你想允許用戶上傳僅GIF,JPEG或PNG的分辨率的照片。 表明它可以是這樣的。
如果($ _ FILES ['file_upload'] ['類型']!=“圖像/ GIF”){
迴聲“對不起,我們只支持下載的Gif檔案”;
退出;
}
如果你想出貨的所有3種類型,只需添加一個附加條件,以其他類型的圖像。
複製(圖像1,圖像2):複印像這樣做。
在我們的例子中,當工作從PC到服務器的下載,你可以這樣做
副本($ _ FILES ['file_upload“] [”tmp_name的值“],”1.JPG“)
也就是說,該文件將與名稱1.JPG被複製。 這是不完全正確的。 在這種情況下,它僅是一個例子。 文件名總是需要指定不同的,並且指定擴展,根據文件。
確定擴展可能會有不同的方式。 這一切都取決於博學的開發商。 一個最快的方式(十分之一秒的差)確定擴展 - 這是下一個代碼。
$ PATH_INFO = PATHINFO($ _ FILES ['照片1'] [“名稱”]);
$ EXT = $ PATH_INFO ['延伸'];
變量$的分機,我們將存儲所需的擴展。 文件名可以隨意使用MD5進行設置。 如果你要下載大量文件,最好是將它們運送到不同的文件夾。 因此,這將更加方便。 特別是,如果要清除。
下載代碼如下。
///隨著照片
如果($ _FILES ['照片1'] ['tmp_name的值'] == NULL)
{
回波(“
<強>未知文件。強> p>
回到... P> “);
退出;
}
///。 假設你在服務器上的任何項目被允許裝載大文件(視頻),但只有圖片,用戶需要限制
如果(($ _FILES [“照片1”] [“大小”]> 1024 * 1024 * 2)
{
?>
允許的最大尺寸的 2 MB 強>
回到... P>
<?
退出;
}
//創建文件夾
//創建當月的文件夾
如果(!file_exists(“IMG /”日期(“M”)))
{
MKDIR(“IMG /”日期(“M”));
}
//創建當天的文件夾
如果(!file_exists(“IMG /”日期(“M”)。“/”。日期(“D”)))
{
MKDIR(“IMG /”日期(“M”)“/”日期(“D”)...);
}
///文件擴展名
$ PATH_INFO = PATHINFO($ _ FILES ['照片1'] [“名稱”]);
$ EXT = $ PATH_INFO ['延伸'];
///生成的文件名
$ J = MD5(日期(“年月日”));
如果(複製($ _ FILES ['照片1'] [“tmp_name的值”],“IMG /”。日期(“M”)。“/”。日期(“D”)。“/”。$ ID。$ EXT) )
{
回波(“文件上傳成功”);
}
///任何進一步的行動(條目的數據庫,等等。N.)
}
多個文件
上傳多個文件(PHP)由形式的附加字段的裝置中出現。
這種方法不是很好,因為它限制文件下載數。 此外,它被認為是在編程不好的形式。 嘗試做的一切動態。
理想的選擇 - 這是一個大量的一次文件的按一個按鈕選擇。
要做到這一點,創建一個這樣的代碼的形狀。
<形方法=“POST”行動=“鏈接到文件處理程序”名稱=“upload_form”ENCTYPE =“多部分/格式數據”>
<輸入類=“form_upload”類型=“文件”名稱=“file1的[]”多值=“概覽”>
<輸入類=“form_upload”類型=“提交”名稱=“upldFile”值=“添加”/>
P>
FORM>
請注意,多重加入字,該名稱被給定為一個數組[]。 在這種情況下,$ _FILES數組會略有不同。 您將獲得該數組的數組。
為了測試可以再次使用的var_dump($ _ FILES);
您的所有文件都會被放在這樣的數組中:
- $ _FILES [“文件1”] [“名稱”] [0]
- $ _FILES [“文件1”] [“名稱”] [1]
- 等等。
在括號中被寫入陣列中的文件編號。 從零開始計數。 我們對待他們以同樣的方式,只問了週期和上述代碼在索引中添加[$ i]的一端接觸。
$ I = 0;
而($ _FILES [“文件1”] [“名稱”] [$ i]於<>“')
{
///粘貼上述代碼
}
因此,你將不得不通過PHP文件上傳到一個週期的服務器,而無需代碼的不必要的重複發生,因為通常情況下,如果您使用的版本與文件的靜態數(最後一張照片)。
Similar articles
Trending Now