現時点では、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);
}
?>