【これだけ】PHPでファイルをアップロードする方法【現役エンジニアが解説】

PROGRAM

今回は、PHPでファイルをアップロードする方法について、HTML側とPHP側に分け、簡単に解説していきます。

HTML側でファイルを送り込む方法

PHPでファイルをアップロードするためには、まずHTML側でファイルを送り込む仕組みを実装する必要があります。

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

上記のHTMLのコードは、upload.phpに対し、filenameというキーの名前で選択したファイルをアップロードできるコードです。

もちろんこのupload.phpやfilenameにあたる部分は開発しているアプリケーションに合わせて自由に名前を設定することができます。

PHP側でファイルを受け取る方法

HTML側でファイルを送り込んだら、PHP側でそれを受け取る必要があります。

$buffer = file_get_contents($_FILES['filename']['tmp_name']); // 'filename'はフォームデータのname属性の値

$fp = tmpfile();
fwrite($fp, $buffer);
rewind($fp);
while ( ($row = fgetcsv($fp)) !== false) {
    // $rowを使って各行の処理を書く
}

上記のコードでは、アップロードされたファイルを受け取り、(CSVと仮定して)読み込んでいます。

PHPの場合は、アップロードファイルのパスが$_FILESの連想配列にキーの名前ごとに格納され、それをfile_get_contents関数の引数に指定することで内容を読み込むことができます。

アップロードできない場合

アップロードをしたにもかかわらず、PHP側でファイルが取得できない場合があります。

その場合には、php.iniの以下の項目の値を確認して、ファイル容量よりも下回っている場合には設定を書き変えましょう。

memory_limit=128M
post_max_size=128M
upload_max_filesize=128M

memory_limitはメモリ上限、post_max_sizeは1度のフォームデータのPOSTの総容量、upload_max_filesizeはアップロードファイルの上限サイズを設定します。