将多个文件上传到服务器,并写入数据库

时间:2011-11-11 01:44:20

标签: php mysql file-upload upload multiple-forms

所以目前我的html <input type="file" required required="required" name="image" multiple="">

中有以下代码

然后在我添加mutliple=""标记之前,这对我来说总是有用,

if(isset($_POST['Submit']))
{
$current_image=$_FILES['image']['name'];
$extension = substr(strrchr($current_image, '.'), 1);
if (($extension!= "png") && ($extension != "jpg")) 
{
die('Unknown extension');
}
$time = date("fYhis");
$new_image = $time . "." . $extension;
$destination="./../img/treatments/".$new_image;
$action = copy($_FILES['image']['tmp_name'], $destination);

但现在我正在尝试上传多个文件,我想我需要添加一个数组来命名它们,但我无法弄明白,如果可以的话,我不想更改我的代码。

目前img只是我数据库中的一个字段,这有多少问题?

修改

我找到了这段代码,但似乎无法弄清楚如何实现它并让它工作......

  

在尝试了几十种方法来修复$ _FILES数组的不稳定之后,我找不到任何可以使用输入名称的方法:userfile [christiaan] [] [] [is] [gaaf] [ ]

     

所以我提出了这个课程

<?php
/**
 * A class that takes the pain out of the $_FILES array
 * @author Christiaan Baartse <christiaan@baartse.nl>
 */
class UploadedFiles extends ArrayObject
{
    public function current() {
        return $this->_normalize(parent::current());
    }

    public function offsetGet($offset) {
        return $this->_normalize(parent::offsetGet($offset));
    }

    protected function _normalize($entry) {
        if(isset($entry['name']) && is_array($entry['name'])) {
            $files = array();
            foreach($entry['name'] as $k => $name) {
                $files[$k] = array(
                    'name' => $name,
                    'tmp_name' => $entry['tmp_name'][$k],
                    'size' => $entry['size'][$k],
                    'type' => $entry['type'][$k],
                    'error' => $entry['error'][$k]
                );
            }
            return new self($files);
        }
        return $entry;
    }
    }
    ?>
  

这允许您访问使用以下inputtype上载的文件   <input type="file" name="userfile[christiaan][][][is][gaaf][]" />   像

<?php
$files = new UploadedFiles($_FILES);
var_dump($files['userfile']['christiaan'][0][0]['is']['gaaf'][0]);
// or
foreach($files['userfile']['christiaan'][0][0]['is']['gaaf'] as $file) {
    var_dump($file);
}
?>

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

尝试这个(你的问题实际上似乎是完全缺少对这一切在PHP中是如何工作的理解,而不是某些特定的问题/ bug /...):

whatever.php:

<form enctype="multipart/form-data" action="<?=$_SERVER['PHP_SELF']?>">
First file: <input type="file" name="uploads[]" /><br>
Second File: <input type="file" name="uploads[]" /><br>
Multiple files at once (firefox, chrome, ... not IE < 10): <input type="file" name="uploads_multiple[]" multiple="multiple" /><br>
<input type="submit" value="Go" />
</form>
<?php
print_r($_FILES);

尝试使用不同的输入(文件大小,缺少文件,...)来查看从php中获得的内容。我认为,除了发布一些完成的代码之外,你将从这种方式中受益更多。

编辑:此外,请勿使用副本!大部分时间它都不起作用,有时它可能会产生意想不到的结果,有时候你只会打开一堆蠕虫。函数move_uploaded_file存在是有原因的 - 使用IT!