PHPで画像やPDFをアップロードする方法を初心者向けにやさしく解説!
生徒
「PHPを使って、自分のパソコンから画像やPDFファイルをアップロードしたいんですが、どうやればいいですか?」
先生
「はい、PHPではファイルをアップロードする機能が用意されていますよ。画像ファイルやPDFファイルなどを、サーバーに保存することができます。」
生徒
「でも、ファイルアップロードって難しそうです……」
先生
「大丈夫です!HTMLとPHPを使えば、初心者でも簡単にアップロード処理を実装できます。では、基本からゆっくり解説していきましょう!」
1. PHPでファイルアップロードとは?
ファイルアップロードとは、あなたのパソコンやスマートフォンに保存されている画像(写真)やPDF、テキストファイルなどのデータを、インターネットを通じてWebサーバーへ転送・保存することを指します。
身近な例では、SNSでプロフィール写真を設定したり、求人サイトで履歴書のPDFファイルを送信したり、ブログに記事の画像を投稿したりする際に、この「アップロード」という技術が使われています。Webアプリケーションを開発する上で、避けては通れない非常に重要で便利な機能です。
<div class="alert alert-info"> <i class="bi bi-info-circle-fill"></i> <strong>初心者向けポイント:ファイルの「預かり所」</strong>自分の手元にあるファイルを、Webサイトという窓口を通じて、サーバーという「24時間動いているコンピュータの保管庫」に預けるイメージを持つと分かりやすいですよ。 </div> <p>PHPはこのファイルアップロード処理を得意としています。ユーザーがフォームから送ったファイルの情報は、PHP側で<code>$_FILES</code>という名前の特別な変数(スーパーグローバル変数)に自動的に格納されます。</p> <p>例えば、プログラミング未経験の方が最初にイメージすべき構造は以下の通りです。PHPは「ファイルそのもの」だけでなく、「ファイルの名前」「データの種類」「ファイルサイズ」といった情報もセットで受け取ってくれるため、プログラムで細かく制御することが可能なのです。</p>
// PHPが受け取る情報のイメージ(中身を確認する際の例)
// $_FILES['名前'] の中に、ファイルの色々な情報が詰まっています
echo "ファイル名:" . $_FILES['myfile']['name'];
echo "データの種類:" . $_FILES['myfile']['type'];
このように、PHPを使えば難しい通信の仕組みを意識することなく、比較的シンプルなコードでファイルを受け取る仕組みを構築できます。
2. HTMLでアップロードフォームを作る
PHPでファイルを処理する前に、まずはユーザーが自分のパソコンからファイルを選択するための「入力窓口(フォーム)」をHTMLで作成する必要があります。初心者の方が最も間違いやすいポイントですが、ファイルを送る際はformタグに必ずenctype="multipart/form-data"というおまじないを記述してください。
この記述を忘れると、ファイルそのものではなく「ファイル名というただの文字列」しかサーバーに届かず、アップロードが失敗してしまいます。
以下が、画像やPDFを選択して送信するための最もシンプルで標準的なHTMLコードの例です。プログラミング未経験の方でも、この形をベースにすればすぐに実装できます。
<form action="upload.php" method="POST" enctype="multipart/form-data">
<div class="mb-3">
<label>アップロードするファイルを選択:</label><br>
<input type="file" name="myfile" accept=".jpg,.jpeg,.png,.pdf">
</div>
<button type="submit" class="btn btn-primary">サーバーへ送信する</button>
</form>
このコードのポイントは、inputタグのname="myfile"という部分です。ここで決めた名前が、後ほどPHP側でファイルを受け取る際の「目印(キー)」になります。また、accept属性に拡張子を指定しておくことで、ユーザーがファイルを選ぶ段階で、画像やPDF以外の無関係なファイルを表示させないようにする親切な設計になっています。
3. PHPでファイルを受け取って保存する
HTMLフォームから送信ボタンが押されると、指定したPHPファイル(今回は upload.php)へデータが届きます。PHP側では、届いたファイルをサーバー上の指定した場所へ移動させる処理を記述します。
アップロードされた直後のファイルは、サーバー内の「一時的な場所(テンポラリディレクトリ)」に仮置きされています。そのままでは消えてしまうため、
move_uploaded_file という関数を使って、私たちが用意したフォルダへ大切に移動させてあげる必要があります。
プログラミング未経験の方でも理解しやすいよう、最低限必要な処理をまとめたサンプルコードがこちらです。
// 1. フォームから「myfile」という名前でデータが届いているか確認
if (isset($_FILES['myfile'])) {
$file = $_FILES['myfile'];
// 2. サーバーに一時保存されている場所を取得
$tmp_path = $file['tmp_name'];
// 3. 元のファイル名を取得(basenameで安全な形にする)
$filename = basename($file['name']);
// 4. 保存先のフォルダとファイル名を決定
// ※あらかじめ「uploads」というフォルダを作成しておく必要があります
$upload_dir = 'uploads/';
$destination = $upload_dir . $filename;
// 5. 一時場所から、決めた保存先へファイルを移動させる
if (move_uploaded_file($tmp_path, $destination)) {
echo "<p class='text-success fw-bold'>成功:ファイル「" . $filename . "」を保存しました。</p>";
} else {
echo "<p class='text-danger'>エラー:ファイルを保存できませんでした。</p>";
}
}
このプログラムの肝は、$_FILES という変数に、ファイルの名前やサイズ、一時的な保存場所といった「荷物の送り状」のような情報がすべて自動的にまとまっている点です。この情報を1つずつ取り出して、最後に move_uploaded_file で「ヨイショ!」と指定のフォルダ(uploads/)へ運ぶイメージですね。
なお、保存先の uploads/ フォルダは、あらかじめサーバー上に作成し、PHPがファイルを書き込めるように設定(パーミッションの設定)をしておく必要があります。これを忘れると「失敗しました」と表示されるので注意しましょう。
4. セキュリティ対策もしっかりと
ファイルアップロードでは、セキュリティもとても大事です。悪意のあるファイルがアップされないように、いくつかのチェックを入れましょう。
- 拡張子のチェック(.jpg や .pdf など)
- ファイルサイズの制限
- 元のファイル名を使わず、ランダムな名前に変える
たとえば、PHPで画像かどうかを確認するには以下のようにします。
$mime = mime_content_type($tmp);
$allowed = ['image/jpeg', 'image/png', 'application/pdf'];
if (in_array($mime, $allowed)) {
// 安全なファイル形式
}
5. アップロードサイズの上限設定
PHPでは、初期状態でアップロードできるファイルサイズに上限があります。大きいファイル(例:PDFカタログなど)を扱うには、php.iniファイルで以下のように設定します。
upload_max_filesize = 10M
post_max_size = 12M
設定を変えたら、Webサーバー(ApacheやNginx)を再起動する必要があります。
6. ファイルアップロードの使いどころ例
- プロフィール画像の登録
- PDFの請求書や履歴書の送信
- アルバムに画像をアップして保存
こういった機能は、ほとんどのWebサービスに必要とされる重要な機能です。PHPを使えば、自分だけのアップロード機能を簡単に作ることができます。
まとめ
今回は、PHPを使って画像ファイルやPDFファイルをアップロードする方法について、初心者の方でも理解しやすいように解説しました。ファイルアップロード機能は、プロフィール画像の登録や履歴書・資料の提出、写真のアルバム作成など、さまざまなWebアプリケーションにおいて欠かせない要素です。
まず最初に、HTMLのフォームを作成するときは、formタグにenctype="multipart/form-data"を指定することが重要でした。これを忘れると、どんなに正しいPHPコードを書いても、ファイルは正しく送信されません。
次にPHP側では、$_FILESというスーパーグローバル変数を使ってファイルの情報を取得し、move_uploaded_file()を使ってサーバー上のフォルダに保存する基本的な手順を紹介しました。保存先ディレクトリはあらかじめ用意し、書き込み権限を設定しておくことが必要です。
また、ファイルアップロードにはセキュリティの配慮も欠かせません。拡張子チェックやMIMEタイプの確認、ファイルサイズの制限、ファイル名のランダム化など、悪意あるファイルのアップロードを防ぐための具体的な対策方法も学びました。特に、画像やPDFに限定した許可設定を行うことで、不正なスクリプトの実行を未然に防ぐことが可能です。
加えて、サーバー側で許可する最大ファイルサイズを制御するために、php.iniファイルのupload_max_filesizeとpost_max_sizeの調整方法も紹介しました。サイズ制限を適切に設定しておくことで、サーバーの負荷を減らし、意図しない大容量アップロードのリスクを回避できます。
実用面では、画像ファイルのアップロードによってプロフィール写真の管理を行ったり、PDFの送信によって契約書や書類提出を行うなど、非常に幅広い活用が可能です。Webサービスを開発するうえで、PHPでのファイルアップロード機能は基本中の基本ともいえる技術です。
アップロード処理の流れ(簡易版)
1. HTMLフォームにenctypeを設定し、fileフィールドを用意する
2. PHPで$_FILESからファイル情報を取得
3. 保存ディレクトリとファイル名を指定してmove_uploaded_fileで保存
4. 必要に応じてファイル形式やサイズのチェック処理を追加
ファイル形式チェックの例
$allowed = ['image/jpeg', 'image/png', 'application/pdf'];
$mime = mime_content_type($_FILES['myfile']['tmp_name']);
if (in_array($mime, $allowed)) {
// 安全なファイル形式と判断
}
ファイルアップロードは一見難しそうに見えますが、PHPの機能をうまく活用すれば、初心者でもしっかり実装できます。小さなアップロード機能を自分で作ってみることで、フォーム送信の仕組みやセキュリティの大切さを学ぶ良い機会にもなります。
生徒
PHPでファイルアップロードができるって知っていましたけど、思ったよりシンプルにできるんですね!
先生
そうだね。基本の流れを押さえれば、画像でもPDFでも簡単にアップロードできるようになるよ。
生徒
HTMLでformタグにenctype="multipart/form-data"をつけるのが大事ってことも、初めて知りました。
先生
そこを忘れがちなんだけど、フォームからファイルを正しく送るには欠かせないポイントなんだ。
生徒
PHP側では$_FILESを使えばいいんですね。あと、ファイルの安全性を確認する方法も勉強になりました!
先生
アップロード処理はセキュリティも大切だからね。MIMEタイプやファイルサイズのチェックをきちんと行うのが大事なんだ。
生徒
プロフィール画像のアップロードとか、実際に自分のポートフォリオにも使えそうです!
先生
その意気だね!今回の知識を活かして、少しずつWebアプリの機能を増やしていこう!