2019
【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 フォルダ内にファイルがアップロードされます。