PHP で複数のファイルをアップロードする
-
PHP で
multiple
タグ、フォームのinput
属性のname
タグの配列、およびmove_uploaded_file()
関数を使用して複数のファイルをアップロードする - PHP で PDO を使用してデータベース内の複数のファイルをアップロードする
input
タグの name
属性を配列として指定し、multiple
属性を使用して、PHP で複数のファイルをアップロードする方法を紹介します。form
タグの enctype
属性の値は multipart/form-data
です。このメソッドは、データベース接続に mysqli
を使用します。
また、PDO を使用して PHP で複数のファイルをアップロードする別の方法を紹介します。ファイルをフォルダーにアップロードしてから、データベースにアップロードします。この方法は、実装の点で最初の方法と似ています。
PHP で multiple
タグ、フォームの input
属性の name
タグの配列、および move_uploaded_file()
関数を使用して複数のファイルをアップロードする
input
タグの name
属性を配列として指定して、複数のファイルをアップロードできます。input
タグは、アップロード中に複数のファイルを選択できる multiple
キーワードを使用します。enctype
属性のエンコーディング multipart/form-data
を記述して、フォームの送信中にフォームデータをエンコードする方法を指定できます。mysqli
を使用してデータベースに接続できます。move_uploaded_file()
関数は、アップロードされたファイルをサーバーの一時的な場所から目的の場所に移動します。INSERT
SQL ステートメントを使用して、選択したファイルをデータベースにアップロードできます。
たとえば、mysqli
オブジェクトとのデータベース接続を設定し、その値を $db
変数に割り当てます。POST
メソッドとエンコードタイプを multipart/form-data
として HTML フォームを作成し、ファイルをアップロードします。input
タグの type
属性を file
として指定し、name
属性を file
として指定します。input
タグを閉じる前に、属性 multiple
を書くことを忘れないでください。input
タグを書き込んでフォームを送信します。
isset()
関数を使用してフォームが送信されているかどうかを確認してください。count
関数を使用して、アップロードされたファイルの数をカウントします。$_FILES['file']['name']
を count
関数のパラメーターとして取り、それを変数 $countfiles
に割り当てます。for
ループを使用して、アップロードされたファイルをループします。ループ内で、変数 $filename
を作成し、$_FILES['file']['name'][$i]
として割り当てます。ルートディレクトリに upload
という名前のフォルダを作成します。move_upload_file()
関数を使用してファイルを移動します。一時名のファイルである最初のパラメーターとして、$_FILES['file']['tmp_name'][$i]
を使用します。アップロードされたファイルを保存するファイル名と場所である 2 番目のパラメーターとして'upload/'.$filename
を使用します。
SQL INSERT
クエリを実行して、ファイルをデータベースに挿入します。変数 $filename
を id
と name
の両方としてデータベースの fileup
テーブルに挿入します。$db
変数を使用して、クエリを実行するためのパラメータとして $sql
変数を使用して query()
関数を呼び出します。
サンプルコード:
# php 7.*
<?php
if(isset($_POST['submit'])){
$countfiles = count($_FILES['file']['name']);
for($i=0;$i<$countfiles;$i++){
$filename = $_FILES['file']['name'][$i];
$sql = "INSERT INTO fileup(id,name) VALUES ('$filename','$filename')";
$db->query($sql);
move_uploaded_file($_FILES['file']['tmp_name'][$i],'upload/'.$filename);
}
}
?>
<form method='post' action='' enctype='multipart/form-data'>
<input type="file" name="file[]" id="file" multiple>
<input type='submit' name='submit' value='Upload'>
</form>
?>
出力:
SELECT * FROM `fileup`
id name
1 cfc.jpg
2 hills.jpg
PHP で PDO を使用してデータベース内の複数のファイルをアップロードする
PDO を使用して、PHP で複数のファイルをアップロードできます。PDO オブジェクトを使用して、データベースへの接続を作成できます。プリペアドステートメントを使用して、ファイルをデータベースに挿入します。この方法は、データベース接続の点で最初の方法とのみ異なります。このメソッドにも正確な HTML フォームを使用できます。フォルダとデータベースに 2つの jpg ファイルをアップロードすることにより、この方法を示します。
たとえば、new
キーワードを使用して PDO データベース接続を確立し、それを $conn
変数に割り当てます。isset()
関数を使用してフォームが送信されているかどうかを確認してください。上記の count
関数を使用してファイルをカウントします。次に、$query
変数にクエリを記述して、id
と name
を挿入します。プレースホルダーを書く ?
クエリの値。prepare()
関数を使用してクエリを準備し、$statement
変数に値を割り当てます。move_uploaded_file()
関数を使用して、各ファイルを uplaod
フォルダーに移動します。execute()
関数を使用してクエリを実行します。関数のパラメーターとして $filename
と $target_file
を配列に指定します。
以下の例では、ユーザーは 2つの jpg ファイルをアップロードします。まず、ファイルが upload
フォルダーにアップロードされ、次にデータベースにアップロードされます。データベースにはテーブル fileup
が含まれ、列 id
と name
があります。move_uploaded_files()
関数の詳細については、PHP マニュアルを参照してください。
サンプルコード:
#php 7.x
<?php
$conn = new PDO("mysql:host=$server;dbname=$dbname","$username","$password");
$conn->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
if(isset($_POST['submit'])){
$countfiles = count($_FILES['file']['name']);
$query = "INSERT INTO fileup (id, name) VALUES(?,?)";
$statement = $conn->prepare($query);
for($i=0;$i<$countfiles;$i++){
$filename = $_FILES['file']['name'][$i];
$target_file = 'upload/'.$filename;
move_uploaded_file($_FILES['file']['tmp_name'][$i],$target_file);
$statement->execute(array($filename,$target_file));
}
}
?>
出力:
SELECT * FROM `fileup`
id name
1 upload/cfc.jpg
2+ upload/count.jpg
Subodh is a proactive software engineer, specialized in fintech industry and a writer who loves to express his software development learnings and set of skills through blogs and articles.
LinkedIn