PHP で複数の画像をアップロードする

Olorunfemi Akinlua 2024年2月15日
  1. PHP で複数のファイルをアップロードするためのフォーム アクションと $_FILES を理解する
  2. move_uploaded_file() を使用して PHP で複数の画像をアップロードする
PHP で複数の画像をアップロードする

PHP アプリケーション、特にユーザーベースのアプリケーションでは、複数のファイルを一度にアップロードする必要がある場合があります。 また、PHP 関数と HTML 機能を使用すると、非常に可能性が高く、簡単に行うことができます。

これを可能にするには、コードベースの構造に応じて HTML ファイルまたはセクション内でフォーム アクションを指定し、組み込み関数を使用してアクションを処理する必要があります。

この記事では、PHP で複数の画像をアップロードする方法を学習します。これにより、フォーム入力から必要なファイルを指定し、ユーザーが選択したすべてのファイルを処理し、必要な場所にアップロードまたは移動するためのコンテキストが得られます。

PHP で複数のファイルをアップロードするためのフォーム アクションと $_FILES を理解する

ユーザーが入力を HTML フォームに配置すると、POST メソッドを使用して、入力 (テキストからファイルまで) を PHP アプリケーションが存在するサーバー側に送信します。

<form method='post' action='' enctype='multipart/form-data'>

enctype='multipart/form-data' 部分は、フォーム データのエンコード方法を指定し、フォーム内でファイルのアップロードを使用するときに必要です。

ファイルのアップロードには、入力タイプ file と指定された名前 (任意の名前にすることができます)、file が必要です。

<input type="file" name="file" id="file">

複数のファイルをアップロードするには、入力タイプ file が必要ですが、別の指定された名前 file[] と追加された属性 multiple が必要です。 [] の追加は、入力フィールドが複数のファイルを処理できることを示します。

<input type="file" name="files[]" multiple/>

サーバー側では、グローバル変数 $_FILES は、HTTP POST メソッドを介してアップロードされたファイルを含む連想配列であり、ファイルを適切に処理できるようにします。

<?php

$_FILES["files"]

move_uploaded_file() を使用して PHP で複数の画像をアップロードする

基本を理解したので、複数のファイルをアップロードする必要があります。 複数の画像をアップロードするための PHP フォームを作成しましょう。

<!DOCTYPE html>
<html lang="en">

<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Multiple Image Upload</title>
</head>

<body>
	<form method="post" enctype="multipart/form-data" name="formUploadFile">
		<label>Select image(s) to upload:</label>
		<input type="file" name="files[]" multiple="multiple" />
		<input type="submit" value="Upload File" name="imgSubmit" />
	</form>
	<?php
	if (isset($_POST["imgSubmit"])) {
		$errors = [];
		$uploadedFiles = [];
		$extension = array("jpeg", "jpg", "png");
		$UploadFolder = "images";

		$counter = 0;

		foreach ($_FILES["files"]["tmp_name"] as $key => $tmp_name) {
			$temp = $_FILES["files"]["tmp_name"][$key];
			$name = $_FILES["files"]["name"][$key];

			if (empty($temp)) {
				break;
			}

			$counter++;
			$UploadOk = true;

			$ext = pathinfo($name, PATHINFO_EXTENSION);
			if (in_array($ext, $extension) == false) {
				$UploadOk = false;
				array_push($errors, $name . " isn't an image.");
			}

			if ($UploadOk == true) {
				move_uploaded_file($temp, $UploadFolder . "/" . $name);
				array_push($uploadedFiles, $name);
			}
		}

		if ($counter > 0) {
			if (count($errors) > 0) {
				echo "<b>Errors:</b>";
				echo "<br/><ul>";
				foreach ($errors as $error) {
					echo "<li>" . $error . "</li>";
				}
				echo "</ul><br/>";
			}

			if (count($uploadedFiles) > 0) {
				echo "<b>Uploaded Files:</b>";
				echo "<br/><ul>";
				foreach ($uploadedFiles as $fileName) {
					echo "<li>" . $fileName . "</li>";
				}
				echo "</ul><br/>";

				echo count($uploadedFiles) . " iamge(s) are successfully uploaded.";
			}
		} else {
			echo "Please, Select image(s) to upload.";
		}
	}
	?>
</body>

</html>

isset() 関数を使用して $_POST[] 変数が設定されているかどうかを確認し、重要な変数を開始して、ファイルのアップロードに必要な拡張子を設定します。

if (isset($_POST["imgSubmit"])) {
		$errors = [];
		$uploadedFiles = [];
		$extension = array("jpeg", "jpg", "png");
		$UploadFolder = "images";

その後、$_FILES[] 変数を介して処理された複数の画像をループし、pathinfo() を使用して拡張子を確認し、true の場合、指定されたフォルダーに画像を移動します move_uploaded_file() 関数を使用して $UploadFolder を作成し、画像の名前を $uploadedFiles 変数にプッシュします。

foreach ($_FILES["files"]["tmp_name"] as $key => $tmp_name) {
			$temp = $_FILES["files"]["tmp_name"][$key];
			$name = $_FILES["files"]["name"][$key];

			if (empty($temp)) {
				break;
			}

			$counter++;
			$UploadOk = true;

			$ext = pathinfo($name, PATHINFO_EXTENSION);
			if (in_array($ext, $extension) == false) {
				$UploadOk = false;
				array_push($errors, $name . " isn't an image.");
			}

			if ($UploadOk == true) {
				move_uploaded_file($temp, $UploadFolder . "/" . $name);
				array_push($uploadedFiles, $name);
			}
		}

最後に、存在するエラーとアップロードされたファイルを表示しました。

if ($counter > 0) {
			if (count($errors) > 0) {
				echo "<b>Errors:</b>";
				echo "<br/><ul>";
				foreach ($errors as $error) {
					echo "<li>" . $error . "</li>";
				}
				echo "</ul><br/>";
			}

			if (count($uploadedFiles) > 0) {
				echo "<b>Uploaded Files:</b>";
				echo "<br/><ul>";
				foreach ($uploadedFiles as $fileName) {
					echo "<li>" . $fileName . "</li>";
				}
				echo "</ul><br/>";

				echo count($uploadedFiles) . " image(s) are successfully uploaded.";
			}
		} else {
			echo "Please, Select image(s) to upload.";
		}

ブラウザに提供された PHP ファイル。

PHP ファイルをブラウザに提供

画像を選択し、画像をアップロードします。

アップロードする画像の選択

次に、アップロードされたファイルを表示します。

アップロードされたファイルを表示

アップロードされた画像:

アップロードされた画像

画像ではないファイルを選択すると、エラーが発生します。

エラー

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

関連記事 - PHP Upload