0

現時点では、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 はデータベースの 1 つのフィールドにすぎませんが、これはどの程度の問題ですか?

編集

このコードを見つけましたが、それを実装して機能させる方法がわかりません...

$_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;
    }
    }
    ?>

<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);
}
?>
4

2 に答える 2

0

これを試してください(実際、あなたの問題は、特定の問題/バグ/...ではなく、これがすべてphpでどのように機能するかを完全に理解していないようです):

何でも.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 が存在するのには理由があります - それを使用してください!

于 2013-05-12T18:50:47.050 に答える
0

私はあなたのためにこれを見つけました
http://php.net/manual/en/features.file-upload.multiple.php

于 2011-11-11T03:10:05.857 に答える