計算機文件類型

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文件上傳進行總是伴隨著一個錯誤代碼。 在“錯誤”輸入了錯誤信息。 截圖誤差為零。

考慮所有錯誤的值:

據上述有關可在通常的HTML被指定的參數說。

下面是一個示例形式來下載文件,其指示上載的文件的數量的限制。

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)

{

回波(“

<強>未知文件。

回到... “);

退出;

}

///。 假設你在服務器上的任何項目被允許裝載大文件(視頻),但只有圖片,用戶需要限制

如果(($ _FILES [“照片1”] [“大小”]> 1024 * 1024 * 2)

{

?>

允許的最大尺寸的 2 MB

回到...

<?

退出;

}

//創建文件夾

//創建當月的文件夾

如果(!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”值=“添加”/>

請注意,多重加入字,該名稱被給定為一個數組[]。 在這種情況下,$ _FILES數組會略有不同。 您將獲得該數組的數組。

為了測試可以再次使用的var_dump($ _ FILES);

您的所有文件都會被放在這樣的數組中:

  1. $ _FILES [“文件1”] [“名稱”] [0]
  2. $ _FILES [“文件1”] [“名稱”] [1]
  3. 等等。

在括號中被寫入陣列中的文件編號。 從零開始計數。 我們對待他們以同樣的方式,只問了週期和上述代碼在索引中添加[$ i]的一端接觸。

$ I = 0;

而($ _FILES [“文件1”] [“名稱”] [$ i]於<>“')

{

///粘貼上述代碼

}

因此,你將不得不通過PHP文件上傳到一個週期的服務器,而無需代碼的不必要的重複發生,因為通常情況下,如果您使用的版本與文件的靜態數(最後一張照片)。

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 zhtw.birmiss.com. Theme powered by WordPress.