PHPを使ってWebサイトにファイルアップロード機能を実装することで、ユーザーが画像や書類などをアップロードできる便利な機能を提供できます。本記事では、基本的な実装方法から、セキュリティ対策のポイントまで丁寧に解説します。
HTMLフォームの作成
まずは、ユーザーがファイルを選択して送信するためのフォームを作成します。重要なのは、formタグにenctype=”multipart/form-data”を指定することです。
<form action="upload.php" method="POST" enctype="multipart/form-data">
<label>ファイルを選択:</label>
<input type="file" name="upload_file">
<input type="submit" value="アップロード">
</form>
PHPでアップロード処理を記述
続いて、upload.phpというファイルにアップロード処理を記述します。アップロードされたファイルは$_FILES変数で取得できます。
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_FILES['upload_file']) && $_FILES['upload_file']['error'] === UPLOAD_ERR_OK) {
$fileTmpPath = $_FILES['upload_file']['tmp_name'];
$fileName = $_FILES['upload_file']['name'];
$fileSize = $_FILES['upload_file']['size'];
$fileType = $_FILES['upload_file']['type'];
$uploadDir = './uploads/';
if (!file_exists($uploadDir)) {
mkdir($uploadDir, 0777, true);
}
$destPath = $uploadDir . basename($fileName);
if (move_uploaded_file($fileTmpPath, $destPath)) {
echo 'ファイルが正常にアップロードされました。';
} else {
echo 'ファイルの保存に失敗しました。';
}
} else {
echo 'ファイルのアップロードに失敗しました。エラーコード:' . $_FILES['upload_file']['error'];
}
}
?>
セキュリティ対策のポイント
ファイルアップロードにはセキュリティリスクも伴うため、以下のような対策が必要です。
ファイルの種類を制限する
許可するファイルタイプ(例:画像)を明示的に制限します。
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($fileType, $allowedTypes)) {
exit('許可されていないファイルタイプです。');
}
ファイル名を安全に処理する
不正なファイル名による影響を避けるため、サニタイズ処理を行います。
$safeFileName = preg_replace("/[^a-zA-Z0-9.]/", "_", $fileName);
ファイルサイズを制限する
サーバーに過度な負荷をかけないように、サイズ制限を設けましょう。
if ($fileSize > 2 * 1024 * 1024) { // 2MBまで
exit('ファイルサイズが大きすぎます。');
}
まとめ
PHPでファイルのアップロード機能を実装するには、以下のステップを踏むことで実現できます。
- フォームにenctype=”multipart/form-data”を指定
- $_FILESを使ってファイルを取得・保存
- セキュリティの観点から、ファイルの種類やサイズを制限
基本の実装をしっかり押さえておけば、複数ファイルのアップロードや画像の自動リサイズなどへの拡張も容易です。まずはシンプルな形から始めて、ニーズに応じてカスタマイズしてみましょう。