我有ZERO體驗,通過瀏覽器上傳文件,所以這部分對我來說都是非常新的。將多個文本文件上傳到MySQL
我需要給用戶(實際上他們將只有一兩個授權用戶)上傳多個文本文件(認爲50-200文件)直接進入MYSQL數據庫的方式。
我不想讓他們FTP訪問,但我確定允許他們輸入文件到數據庫中。
我可以弄清楚如何從一個PHP數組中獲取數據到MYSQL數據庫中。
我不明白的是如何獲取多個文件的內容到PHP數組中。
請幫忙拿出代碼。
我有ZERO體驗,通過瀏覽器上傳文件,所以這部分對我來說都是非常新的。將多個文本文件上傳到MySQL
我需要給用戶(實際上他們將只有一兩個授權用戶)上傳多個文本文件(認爲50-200文件)直接進入MYSQL數據庫的方式。
我不想讓他們FTP訪問,但我確定允許他們輸入文件到數據庫中。
我可以弄清楚如何從一個PHP數組中獲取數據到MYSQL數據庫中。
我不明白的是如何獲取多個文件的內容到PHP數組中。
請幫忙拿出代碼。
這個例子會幫助你理解基本概念
<?php
$fileContents = Array();
if(count($_FILES) != 0){
foreach($_FILES as $file){
$fp = fopen($file["tmp_name"], "r");
array_push($fileContents, fread($fp, $file["size"]));
fclose($fp);
}
//$fileContents now holds all of the text of every file uploaded
}
?>
<html>
<head>
</head>
<body>
<form action="test.php" method="post" enctype="multipart/form-data">
<input type="file" name="file1" id="file" />
<input type="file" name="file2" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
它首先檢查是否存在已發佈到自己的文件。 如果存在文件,則循環遍歷每個文件並在它們處於其臨時文件狀態時打開它們。 之後,它使用與它一起發送的size屬性一次讀取所有內容(請注意這一點)。 同時,它將內容推入名爲$ fileContents的數組中。 因此,$ fileContents [0]包含第一個文本文件等。
WOW。這看起來很酷。讓我嘗試一下。 – 2011-12-17 21:46:31
這在文件到數組方面是完美的。謝謝你 – 2011-12-17 21:57:24
沒有問題,如果你有任何問題只是在這裏發表 – John 2011-12-17 22:09:20
只需將更多<input type="file">
s添加到您的頁面,它們將全都出現在$_FILES
數組中,您可以循環檢索它們。
但是:
$_FILES
陣列的結構略有不合邏輯的,當涉及到多個文件 - 確保你read the manual小心,這是一個有點反直覺的。該鏈接是超級有用的。有沒有辦法在文件選擇器中進行shift-clicks,以便您可以簡單地從單個鏈接中選擇多個文件? – 2011-12-17 21:45:42
這將歸結於瀏覽器,而不是你的編碼 - 理論上,HTTP提供了這種可能性,但我沒有看到它實現得太多(實際上,我認爲我從未見過它) - 你可能會想要像[uploadify](http://www.uploadify.com/)那樣查看某種AJAX風格的上傳器。 – DaveRandom 2011-12-17 21:53:16
@UnoMeinAme我一直在玩它,我不能讓IE8或IE9讓我選擇多個文件,不管我做什麼,如果IE不支持它,基本上意味着你不能做到這一點 - 即使其他瀏覽器支持它,通過不支持IE,你已經失去了大部分觀衆 – DaveRandom 2011-12-17 21:57:47
<!-- FORM -->
<form method="post" enctype="multipart/form-data">
<?php
for($i=1;$i<=10;$i++) //change 10 to any number for more upload fields
{
echo '<input type="file" name="files[]" /><br />';
}
?>
<input type="submit" name="submit" value="Submit" />
</form>
<?php
//Processor
if(isset($_POST['submit']))
{
foreach($_FILES['files']['tmp_name'] as $tmp_name)
{
if(!empty($tmp_name))
{
$filecontent[] = file_get_contents($tmp_name);
}
}
//Test
echo '<pre>';
print_r($filecontent);
echo '</pre>';
}
?>
謝謝大家對此有所貢獻的人。我很難選擇答案,因爲我認爲這是John和DaveRandom的50/50努力。
如果有人想看到最終產品在這裏它是:
HTML:
<html>
<head>
</head>
<body>
<form method="post" action="test.php" enctype="multipart/form-data">
<input name="filesToUpload[]" id="filesToUpload" type="file" multiple="" />
<input type="submit" name="submit" value="Submit" />
</form>
</body>
</html>
PHP:
<?php
function rearrange($arr){
foreach($arr as $key => $all){
foreach($all as $i => $val){
$new[$i][$key] = $val;
}
}
return $new;
}
$fileContents = Array();
if(count($_FILES['filesToUpload'])) {
$realfiles=rearrange($_FILES['filesToUpload']);
foreach ($realfiles as $file) {
$fp = fopen($file["tmp_name"], "r");
array_push($fileContents, fread($fp, $file["size"]));
fclose($fp);
}
foreach ($fileContents as $thisone) {
echo "<textarea wrap='off'>\n";
echo $thisone;
echo "</textarea>\n";
echo "<br>----<br>";
}
}
?>
你有什麼這麼遠嗎? – 2011-12-17 21:27:46
我什麼都沒有。就像我說的,我沒有編碼上傳部分的經驗。換句話說,我需要接口的代碼來上傳多個文件,以及可以用文本生成數組的PHP文件的一部分。我從那裏很好 – 2011-12-17 21:35:43