画像ファイルのアップロード処理(PHP)

基本

formはこんな感じ。

参照:http://php.net/manual/ja/features.file-upload.post-method.php
MAX_FILE_SIZEをinputで設定しておくと、PHPのUPLOAD_ERR_FORM_SIZEでチェックできます。「MAX_FILE_SIZE」は、必ずinput type=fileより前に記載してください。
inputのfileにあるname「upfile」の名称は、自分の好きな名称にしてください。

$_FILESの内容

$_FILES
$_FILES[‘userfile’][‘name’]クライアントマシンの元のファイル名。
$_FILES[‘userfile’][‘type’]ファイルの MIME 型。ただし、ブラウザがこの情報を提供する場合。 例えば、”image/gif” のようになります。 この MIME 型は PHP 側ではチェックされません。そのため、 この値は信用できません。
$_FILES[‘userfile’][‘size’]アップロードされたファイルのバイト単位のサイズ。
$_FILES[‘userfile’][‘tmp_name’]アップロードされたファイルがサーバー上で保存されているテンポラ リファイルの名前。
$_FILES[‘userfile’][‘error’]このファイルアップロードに関する エラーコード
参照:エラーコードはこちら

try catch

基本形 サンプル 参照:getMessageは例外メッセージを取得します。

array_search(拡張子のチェックに使います。)

配列の中に、指定した文字列があるか検索します。一致したら配列のキーを返す。(似たような機能を持つものにin_arrayがあります。) trueなら型もチェック(===)、未指定かfalseなら(==)。迷ったらtrue入れておきましょう。

サンプル1

サンプル2

glob(パス)同一ファイルが存在していないかの確認

参照:http://php.net/manual/ja/function.glob.php

返り値

①マッチしたパスを配列で返します。
②マッチするパスがなければ、「空の配列」を返します。
③失敗した場合には 「FALSE」を返します。
※複数のパターンを探すときは、GLOB_BRACEフラグを使います。

サンプル

例えば、ファイル名と一致する画像が存在するか確認する場合は または拡張子を全てにする場合は、以下のようにします。 以下のような感じで使います。if($file_check === false)のところは、要らないかもしれないですが、なんとなくemptyのほうで処理するのが気持ちが悪くて入れておきました。

全体像

まずこちらのページを一読してください。
参照:ファイルアップロードの例外処理はこれぐらいしないと気が済まない
「mime_content_type」については、
参照:【PHP】アップロードされたファイルの種類をどうやって確認するの?

サンプル

拡張子の種類?

色々と掲載してくれているページはこちらです。
https://colo-ri.jp/develop/2011/04/uploader-fileformat-detection.html

accept(html5)で拡張子チェック

以下のようにすると、imageとpdfのみアップロードできるようになります。2017/12/19時点で、iPhoneのSafariのバグで「application/pdf」にしてもpdfを読み込めないみたいです。