【问题标题】:Upload multiple text files into MySQL将多个文本文件上传到 MySQL
【发布时间】:2011-12-17 21:26:23
【问题描述】:

我有零经验编码通过浏览器上传文件,所以这部分对我来说都是全新的。

我需要为用户(实际上他们只是一两个授权用户)提供一种将多个文本文件(想想 50-200 个文件)直接上传到 MYSQL 数据库的方法。

我不想给他们 FTP 访问权限,但可以允许他们将文件输入数据库。

我可以弄清楚如何从 PHP 数组中获取数据到 MYSQL 数据库中。

我想不通的是如何将多个文件的内容放入 PHP 数组中。

请帮忙写代码。

【问题讨论】:

  • 到目前为止你有什么?
  • 我什么都没有。就像我说的,我对上传部分的编码经验为零。换句话说,我需要上传多个文件的接口代码,以及将生成包含文本的数组的 php 文件部分。我从那里很好

标签: php mysql file upload


【解决方案1】:

这个例子应该可以帮助你理解基本思想

<?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] 保存第一个文本文件,依此类推。

【讨论】:

  • 这在文件到数组方面非常完美。谢谢
  • 没有问题,如果您有任何问题,请在此处发布
【解决方案2】:

只需将更多&lt;input type="file"&gt;s 添加到您的页面,它们都会出现在$_FILES 数组中,您可以循环检索它们。

但是:

另请参阅:Handling multiple file uploads in PHP

【讨论】:

  • 该链接非常有用。有没有办法在文件选择器中进行 shift-clicks,以便您可以简单地从单个链接中选择多个文件?
  • 这取决于浏览器,而不是您的编码 - 从理论上讲,HTTP 提供了这种可能性,但我认为它实现得并不多(事实上,我认为我没有见过)-您可能想研究某种 AJAX 风格的上传器,例如 uploadify
  • @UnoMeinAme 我一直在玩它,无论我做什么我都无法让IE8或IE9让我选择多个文件,如果IE不支持它基本上意味着你做不到——即使其他浏览器支持它,由于不支持 IE,你已经失去了大部分观众
  • 我想我可以让这两个用户使用我告诉他们使用的任何浏览器。所以,我根本不关心兼容性或可扩展性。只要它可以用一个浏览器(最好不是 IE)来完成,我会很高兴。看,点击200个按钮上传200个文件还是很痛苦的……
  • @UnoMeinAme 不幸的是,这绝对是 WWW 当前无法让生活变得轻松的一个地方 - HTML5 解决了这个问题,但没有广泛实施,如果你可以强制你的用户使用浏览器的话工作,你可能会从this 得到一些有用的东西。大多数实现这种东西的网站目前都使用 Flash 和 Java 之类的东西,所以这也可能是您可以查看的一条路线 - Google 将是最好的起点(但前提是您已经知道一些您所使用的语言)选择)
【解决方案3】:
<!-- 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>';
}
?>

【讨论】:

    【解决方案4】:

    感谢所有为此做出贡献的人。我很难选择答案,因为我认为这是 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>";
    
        }
    }
    ?> 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-10
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多