クリエイティブ業界の注目情報や求人情報などを発信する、クリエイターのための総合情報サイトです。
column_general_header

【PHP】フォームでファイルを添付送信する方法

HTMLフォームでファイルを送信したい時、いつものフォームだけではできません。

いつものフォームでは、【send_mail】関数などでメールに送るだけですが、ファイルを添付して送信する場合、サーバにファイルを置くという手間が加わります。

【form.html】

	<html lang"ja">
	<head>
	<meta charset"UTF-8">
	<title>HTMLフォーム:ファイル添付</title>
	</head>
	<body>
	<form action"upload.php" method"post" enctype"multipart/form-data">
	ファイル:<br>
	<input type"file" name"upfile" size"30"><br>
	<input type"submit" value"アップロード" />
	</form>
	</body>
	</html>
	

HTMLフォームからファイルを受け取る場合、【upload.php】を作成します。

【upload.php】

	<html lang"ja">
	<head>
	<meta charset=utf-8">
	<title>sample</title>
	</head>
	<body>
	<?php
	//↓uploadファイルの有り無し確認
	if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {
	//↓有効なファイルかどうかを検証し、問題なければ名前を変更しアップロード完了
	if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) {
	chmod("files/" . $_FILES["upfile"]["name"], 0644);   //パーミッション設定
	echo $_FILES["upfile"]["name"] . "をアップロードしました。";
	} else {
	echo "ファイルをアップロードできません。";
	}
	} else {
	echo "ファイルが選択されていません。";
	}
	?>
	</body>
	</html>
	

アップロードされたファイルの情報は【$_FILES】に格納されます。
【$_FILES】は【$_POST】や【$_GET】と同様、PHPが自動的に値をセットしてくれます。アップロードしたファイルは一時的にサーバー側に保存され、PHPプログラムの実行が終了すると削除されます。

入力項目の name 属性を upfile にして送信した場合、ファイルの名前は【$_FILES[“upfile”][“name”]】とすれば取得する事ができます。
また、一時的にサーバー側へ保存されたファイルの名前は【$_FILES[“upfile”][“tmp_name”]】とすれば取得する事ができます。

注意する点として、もしコピー先のファイルが既に存在する場合、上書きされてしまうので、被らないように連番などを加えると間違いないと思います。

また、upload.php と同じ場所に files フォルダを作成し、書き込み権限を与えておきます。(パーミッションを 777 に設定します。)

【is_uploaded_file】はファイルがアップロードされたかどうか調べる関数です。アップロードされていなければ「ファイルが選択されていません。」と表示しています。

また、【move_uploaded_file】はアップロードファイルを移動する関数です。
移動元のファイルは【$_FILES[“upfile”][“tmp_name”]】です。これはPHPによって一時的に作成されたアップロードファイルの名前です。
移動先は【”files/” . $_FILES[“upfile”][“name”]】です。これで files フォルダの中にオリジナルのファイル名でアップローファイルが保存されます。

chmod はパーミッションを設定する関数です。後でファイルを削除できるように、念のため 644 に設定しています。

これで【form.html】にアクセスし、アップロードボタンを押すと files フォルダ内にファイルがアップロードされます。

author

narumasa(なるまさ)

http://narumasa.com


フリーランスのWebクリエイターとして2001年から活動。
レコーディング・エンジニアとして職歴をスタートし、Webの勉強をすべくスクールに通い、デザイン会社のWebデザイナーへ。2001年に退職後、フリーランスのWebクリエイターとして活動しつつ、商品企画会社に入社し、企画プロデューサー・取締役を経て、再びフリーランスに。
現在はフリーランスのWebクリエイターとして数々の大企業のホームページから街の商店のホームページまで、1人で企画からディレクション、デザイン、コーディング、プログラミングまで全てを担当している。

関連記事