ファイル・画像をアップロードする最低限のサンプルコード(コピペ用テンプレ)

はじめに

フレームワークなどを使わない生のPHPで、写真などのファイルをサーバにアップロードするための最低限のコードを置いておきます。

ファイルアップロードの仕様は、作るものによって大きく変わります。そのため、余計なものをなるべく削ぎ落とした最低限のコードをベースに、必要なものを肉付けしていきたいと思ったりします。そういう時用です。

そのままコピペでファイルのアップロード機能が実装できます。

注意点

セキュリティやバリデーション、ユーザビリティなどはまったく考えられていません。

サンプルコード

アップロードページ

index.html

<!DOCTYPE html>
<html lang="ja">

<head>
    <title>ファイルアップロード</title>
</head>

<body>

    <form action="upload.php" method="post" enctype="multipart/form-data">
        <input type="file" name="upload_file">
        <input type="submit" value="アップロード">
    </form>

</body>
</html>

補足

actionにはPOST先のPHPファイル名を入れます。

enctype=”multipart/form-data”はファイルをPOSTするのに必須な属性です。

<input>nameは任意の名前です。upload.php側で受け取る時に使用します。

POSTされる側

upload.php

<?php
$saveDir = './';
$savePath = $saveDir . $_FILES['upload_file']['name'];

if (move_uploaded_file($_FILES['upload_file']['tmp_name'], $savePath)) {
    // 成功時
} else {
    // 失敗時
}

// アップロードページに戻る
header('Location: ./index.html');
exit;

補足

$saveDirでアップロードされたファイルの保存先を指定しています。「./」だと直下に保存されます。フォルダに保存したい場合は「./data/」などとしてください(その場合は「data」フォルダをあらかじめ用意しておかないとエラーになります)

アップロードされたファイルは一時的に別の場所に保存されています。move_uploaded_file()関数で指定した場所に保存(移動)します。成功するとtrue、失敗するとfalseを返します。

$_FILES[‘upload_file’]の「upload_file」はアップロードフォームで指定した名前です。これにはいくつかの値が入っています。
・「name」元のファイル名
・「tmp_name」一時的に保存されたファイル名
・「type」ファイルのMIMEタイプ
・「size」ファイルのサイズ(単位はバイト)
・「error」アップロードに関する エラーコード
・「full_path」元ファイルのフルパス(PHP 8.1.0 以降で利用可能。正確でない場合あり)

まとめ

以上、ファイルをサーバにアップロードするための最低限のコードでした。

実際には、アップロードされたファイルのタイプやサイズでバリデーションが必要だったり、ファイル名もそのまま保存するのではなく、変更した方がセキュリティ的には良いかもしれませんね。

ぜひ、お好きなようにカスタマイズして使ってください。