PHPで画像やPDFをアップロードする方法を初心者向けにやさしく解説!
生徒
「PHPを使って、自分のパソコンから画像やPDFファイルをアップロードしたいんですが、どうやればいいですか?」
先生
「はい、PHPではファイルをアップロードする機能が用意されていますよ。画像ファイルやPDFファイルなどを、サーバーに保存することができます。」
生徒
「でも、ファイルアップロードって難しそうです……」
先生
「大丈夫です!HTMLとPHPを使えば、初心者でも簡単にアップロード処理を実装できます。では、基本からゆっくり解説していきましょう!」
1. PHPでファイルアップロードとは?
ファイルアップロードとは、パソコンやスマホの中にある画像(写真)やPDFファイルなどを、Webサイトを通じてサーバーに送ることを意味します。
たとえば、履歴書をアップロードしたり、プロフィール画像を登録したりするときに使われます。
PHPでは$_FILESという変数を使って、アップロードされたファイルを受け取ることができます。
2. HTMLでアップロードフォームを作る
まず、アップロード用の画面(フォーム)をHTMLで作ります。ポイントは、formタグにenctype="multipart/form-data"を指定することです。これがないと、ファイルを正しく送ることができません。
<form action="upload.php" method="POST" enctype="multipart/form-data">
<label>ファイルを選んでください:</label>
<input type="file" name="myfile" accept=".jpg,.jpeg,.png,.pdf">
<button type="submit">アップロード</button>
</form>
accept属性では、画像やPDFだけを選べるように指定しています。
3. PHPでファイルを受け取って保存する
次に、フォームから送られてきたファイルをPHPで処理します。「upload.php」というファイルに以下のようなコードを書きます。
if (isset($_FILES['myfile'])) {
$file = $_FILES['myfile'];
// 一時ファイルの場所
$tmp = $file['tmp_name'];
// ファイル名を安全なものに変更
$name = basename($file['name']);
// 保存先フォルダ(存在する必要あり)
$uploadDir = 'uploads/';
$destination = $uploadDir . $name;
if (move_uploaded_file($tmp, $destination)) {
echo "ファイルのアップロードが成功しました!";
} else {
echo "アップロードに失敗しました。";
}
}
このコードでは、アップロードされたファイルをuploads/フォルダに保存しています。事前にこのフォルダを作っておき、書き込み可能にしておく必要があります。
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アプリの機能を増やしていこう!