2013-09-30 121 views
5

我們正在嘗試創建一個用於壁紙的網站,以便以某種方式創建大文件(2mb-5mb),因此我們需要將這些圖像存儲在磁盤空間而不是數據庫中,而只存儲數據庫的路徑。因此,如果您可以提供一些關於如何做到這一點的想法(我們現在知道的方法是創建一個帶有上傳功能的PHP腳本,並且手動從PC上選擇要上傳的圖像),除非你們有其他建議。教程將非常感謝。非常感謝!如何將圖像存儲到文件系統(在互聯網上)並將路徑存儲到數據庫?

這是爲管理員添加圖像不是爲用戶。 注意:我們還沒有開發任何腳本,所以這是爲了從你們那裏得到一些關於我們可以使用這些的想法,如果沒有人猜測我們只會用php腳本。

+1

你試過沒有?谷歌搜索教程?寫一些線?嘗試創建腳手架,以便我們可以幫助您找到合適的解決方案。 –

+0

你應該按照你的建議去做。如果遇到問題,請回來尋求幫助,然後請包括一個代碼示例。 – Sven

+0

所以是上傳文件的最佳方法? –

回答

4

您的形式,

<form action="PHP_FILE_PATH.php" method="post" enctype="multipart/form-data"> 
<input type="file" name="image" /> 
<input type="submit" name="submit" value="Upload" /> 
</form> 

PHP的一部分

<?php 
if($_FILES['image']['name']) 
{ 
    $save_path="FOLDER_PATH_TO_SAVE_UPLOADED_IMAGE"; // Folder where you wanna move the file. 
    $myname = strtolower($_FILES['image']['tmp_name']); //You are renaming the file here 
    move_uploaded_file($_FILES['image']['tmp_name'], $save_path.$myname); // Move the uploaded file to the desired folder 
} 

$inser_into_db="INSERT INTO `database`.`table` (`folder_name`, `file_name`) VALUES('$save_path', '$myname'))"; 

?> 
+0

。謝謝! –

+2

而@Paul在另一個答案中說這裏確保你在一些邏輯上爲你自己的每個文件生成名字,例如PHP microtime,並在'$ myname'變量中使用它。我在這裏輸入的答案只是一個簡單的例子。 –

6

對於上傳的每個文件,生成一個UUID並將其用於磁盤上的文件名。這避免了衝突,消除文件名和路徑遍歷漏洞。

您將擁有一個如下表格:(id, description, filename),其值爲(1, "Green field", "0D729DCD-5116-4480-81CE-90A0380B557A.png")

接下來,您要避免在一個文件夾中存在太多文件的問題 - 您將遇到許多FS的文件系統限制。

要解決此問題,請根據文件名的前幾個字母創建目錄。對於0D729DCD-5116-4480-81CE-90A0380B557A.png,您可以將其存儲在/0/D/7/0D729DCD-5116-4480-81CE-90A0380B557A.png中。

+0

非常感謝@Paul,我想我可以按月或類似的方式使用文件夾名稱,而不是第一個字母,但是很好的建議。實際上是 –

相關問題