私はを使用した単一ファイルのアップロードでこれを行った経験があります<input type="file">
。しかし、一度に複数のアップロードを行うのに問題があります。
たとえば、一連の画像を選択して、一度にサーバーにアップロードできるようにしたいと考えています。
可能であれば、単一のファイル入力コントロールを使用することをお勧めします。
誰かがこれを達成する方法を知っていますか?ありがとう!
私はを使用した単一ファイルのアップロードでこれを行った経験があります<input type="file">
。しかし、一度に複数のアップロードを行うのに問題があります。
たとえば、一連の画像を選択して、一度にサーバーにアップロードできるようにしたいと考えています。
可能であれば、単一のファイル入力コントロールを使用することをお勧めします。
誰かがこれを達成する方法を知っていますか?ありがとう!
回答:
これはHTML5で可能です。例(PHP 5.4):
<!doctype html>
<html>
<head>
<title>Test</title>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="my_file[]" multiple>
<input type="submit" value="Upload">
</form>
<?php
if (isset($_FILES['my_file'])) {
$myFile = $_FILES['my_file'];
$fileCount = count($myFile["name"]);
for ($i = 0; $i < $fileCount; $i++) {
?>
<p>File #<?= $i+1 ?>:</p>
<p>
Name: <?= $myFile["name"][$i] ?><br>
Temporary file: <?= $myFile["tmp_name"][$i] ?><br>
Type: <?= $myFile["type"][$i] ?><br>
Size: <?= $myFile["size"][$i] ?><br>
Error: <?= $myFile["error"][$i] ?><br>
</p>
<?php
}
}
?>
</body>
</html>
ファイルダイアログで2つのアイテムを選択した後のChromeの表示は次のとおりです。
「アップロード」ボタンをクリックすると、次のようになります。
これは完全に機能する答えのスケッチです。PHPでのファイルアップロードの適切で安全な処理の詳細については、PHPマニュアル:ファイルアップロードの処理を参照してください。
multiple="multiple"
か?
複数のファイルのアップロードを作成するために必要なことがいくつかありますが、実際にはかなり基本的なものです。Java、Ajax、Flashを使用する必要はありません。通常のファイルアップロードフォームを作成するだけです。
<form enctype="multipart/form-data" action="post_upload.php" method="POST">
次に成功への鍵。
<input type="file" name="file[]" multiple />
これらのブラケットを忘れないでください!post_upload.phpで以下を試してください:
<?php print_r($_FILES['file']['tmp_name']); ?>
tmp_nameデータを含む配列を取得することに注意してください。これは、ファイル 'number'の例を使用して、ブラケットの3番目のペアで各ファイルにアクセスできることを意味します。
$_FILES['file']['tmp_name'][0]
php count()を使用して、選択されたファイルの数をカウントできます。Goodluck widdit!
foreach
、アップロードされたファイルの数を知らなくても、ステートメントを使用してファイルをループすることができます...
Firefox 5の完全なソリューション:
<html>
<head>
</head>
<body>
<form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" >
<input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input>
</form>
<?php
echo "No. files uploaded : ".count($_FILES['infile']['name'])."<br>";
$uploadDir = "images/";
for ($i = 0; $i < count($_FILES['infile']['name']); $i++) {
echo "File names : ".$_FILES['infile']['name'][$i]."<br>";
$ext = substr(strrchr($_FILES['infile']['name'][$i], "."), 1);
// generate a random new file name to avoid name conflict
$fPath = md5(rand() * time()) . ".$ext";
echo "File paths : ".$_FILES['infile']['tmp_name'][$i]."<br>";
$result = move_uploaded_file($_FILES['infile']['tmp_name'][$i], $uploadDir . $fPath);
if (strlen($ext) > 0){
echo "Uploaded ". $fPath ." succefully. <br>";
}
}
echo "Upload complete.<br>";
?>
</body>
</html>
<html> <head> </head> <body> <form name="uploader" id="uploader" action="multifile.php" method="POST" enctype="multipart/form-data" > <input id="infile" name="infile[]" type="file" onBlur="submit();" multiple="true" ></input> </form>
参照を選択したときに表示されるファイルセレクターダイアログから複数のファイルを選択する場合は、ほとんどの場合、うまくいきません。Javaアプレットまたは類似のものを使用する必要があります(小さなフラッシュファイルを使用するものがあると思います。見つけたら更新します)。現在、単一のファイル入力では、単一のファイルのみを選択できます。
複数のファイル入力の使用について話している場合は、1つを使用することとそれほど大きな違いはありません。いくつかのコードを投稿してください。
更新:フラッシュを使用する単一の「参照」ボタンを使用する方法が1つあります。私はこれを個人的に使用したことはありませんが、それについてかなりの量を読みました。あなたのベストショットだと思います。
最初にあなたはこのようなフォームを作成する必要があります:
<form method="post" enctype="multipart/form-data" >
<input type="file" name="file[]" multiple id="file"/>
<input type="submit" name="ok" />
</form>
そうです。次に、このコードをフォームコードまたは任意のページに追加します
<?php
if(isset($_POST['ok']))
foreach ($_FILES['file']['name'] as $filename) {
echo $filename.'<br/>';
}
?>
簡単です...仕上げ
<form action="" method="POST" enctype="multipart/form-data">
Select image to upload:
<input type="file" name="file[]" multiple/>
<input type="submit" name="submit" value="Upload Image" />
</form>
FORループの使用
<?php
$file_dir = "uploads";
if (isset($_POST["submit"])) {
for ($x = 0; $x < count($_FILES['file']['name']); $x++) {
$file_name = $_FILES['file']['name'][$x];
$file_tmp = $_FILES['file']['tmp_name'][$x];
/* location file save */
$file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */
if (move_uploaded_file($file_tmp, $file_target)) {
echo "{$file_name} has been uploaded. <br />";
} else {
echo "Sorry, there was an error uploading {$file_name}.";
}
}
}
?>
FOREACHループの使用
<?php
$file_dir = "uploads";
if (isset($_POST["submit"])) {
foreach ($_FILES['file']['name'] as $key => $value) {
$file_name = $_FILES['file']['name'][$key];
$file_tmp = $_FILES['file']['tmp_name'][$key];
/* location file save */
$file_target = $file_dir . DIRECTORY_SEPARATOR . $file_name; /* DIRECTORY_SEPARATOR = / or \ */
if (move_uploaded_file($file_tmp, $file_target)) {
echo "{$file_name} has been uploaded. <br />";
} else {
echo "Sorry, there was an error uploading {$file_name}.";
}
}
}
?>
複数の画像をアップロードするために使用されるphp関数を作成しました。この関数は、特定のフォルダーに複数の画像をアップロードできます。また、次のコードでデータベースにレコードを保存できます$ arrayimageは、フォームのメモを通じて送信される画像の配列ですアップロードで複数を使用することはできませんが、ボタンをクリックするとファイルの出力の動的追加フィールドを設定できるので、同じ名前の異なる入力フィールドを作成する必要があります。
$ dirは画像を保存するディレクトリです$ fieldsはデータベースに保存するフィールドの名前です
データベースのフィールドは、データベースイメージストアとフィールド名(id、name、addressなど)がある場合、配列形式である必要があり、次のようなデータをポストする必要があります。
$fields=array("id"=$_POST['idfieldname'], "name"=$_POST['namefield'],"address"=$_POST['addressfield']);
そして、そのフィールドを関数$ fieldsに渡します
$ tableは、データを格納するテーブルの名前です。
function multipleImageUpload($arrayimage,$dir,$fields,$table)
{
//extracting extension of uploaded file
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $arrayimage["name"]);
$extension = end($temp);
//validating image
if ((($arrayimage["type"] == "image/gif")
|| ($arrayimage["type"] == "image/jpeg")
|| ($arrayimage["type"] == "image/jpg")
|| ($arrayimage["type"] == "image/pjpeg")
|| ($arrayimage["type"] == "image/x-png")
|| ($arrayimage["type"] == "image/png"))
//check image size
&& ($arrayimage["size"] < 20000000)
//check iamge extension in above created extension array
&& in_array($extension, $allowedExts))
{
if ($arrayimage["error"] > 0)
{
echo "Error: " . $arrayimage["error"] . "<br>";
}
else
{
echo "Upload: " . $arrayimage["name"] . "<br>";
echo "Type: " . $arrayimage["type"] . "<br>";
echo "Size: " . ($arrayimage["size"] / 1024) . " kB<br>";
echo "Stored in: ".$arrayimage['tmp_name']."<br>";
//check if file is exist in folder of not
if (file_exists($dir."/".$arrayimage["name"]))
{
echo $arrayimage['name'] . " already exists. ";
}
else
{
//extracting database fields and value
foreach($fields as $key=>$val)
{
$f[]=$key;
$v[]=$val;
$fi=implode(",",$f);
$value=implode("','",$v);
}
//dynamic sql for inserting data into any table
$sql="INSERT INTO " . $table ."(".$fi.") VALUES ('".$value."')";
//echo $sql;
$imginsquery=mysql_query($sql);
move_uploaded_file($arrayimage["tmp_name"],$dir."/".$arrayimage['name']);
echo "<br> Stored in: " .$dir ."/ Folder <br>";
}
}
}
//if file not match with extension
else
{
echo "Invalid file";
}
}
//function imageUpload ends here
}
// imageFunctionsクラスはここで終了します
このコードを試して、その拡張子を持つ複数の画像を挿入できます。この関数は、コード内の特定のファイルの拡張子リストを置き換えることができる画像ファイルをチェックするために作成されます
部分的な回答:pear HTTP_UPLOADは便利です http://pear.php.net/manual/en/package.http.http-upload.examples.php
複数のファイルの完全な例があります