フォームからアップロードされたファイルをPHPで処理する

Webサイトにフォームを設置し、ローカルにあるファイルを指定してサーバーにアップロードするPHPコードを解説します。アップロード時には、エラーチェックとサーバー環境に合わせた文字コード変換処理を含めます。

【コンテンツ】

  1. フォームの作成
  2. アップロードされたファイル情報
  3. エラーのチェック
  4. ファイルの保存
  5. ファイル名文字コードの変換
  6. PHP処理部のコード

【記事執筆時の環境】
PHP 5.4.19

フォームの作成

ファイルアップロードを行うフォームを作成します。
formタグの中では、enctype属性を"multipart/form-data"として、
以下のように記述します。

フォームの表示はブラウザの種類により異なりますので注意します。

<Chromeでの表示>
Chromeでのフォーム表示画面

<IEでの表示>
IEでのフォーム表示画面

アップロードされたファイル情報

アップロードされたファイルは、サーバーの「一時ファイル置き場」に保存されます。

保存時のファイル名は本来のファイル名ではなく、ランダムな名前で保存されます。
ただし本来のファイル名も情報として持っています。

アップロードされたファイル情報は、スーパーグローバル変数「$_FILES」に格納されます。
input要素にname属性で指定した名前を"userfile"とすると、ファイル情報は以下のようになります。

変数名 説明
$_FILES["userfile"]["name"] 送信されたファイル名
$_FILES["userfile"]["type"] 送信されたファイルのMIME型
$_FILES["userfile"]["size"] ファイルサイズ(バイト)
$_FILES["userfile"]["tmp_name"] 一時ファイルのパス
$_FILES["userfile"]["error"] エラーコード

エラーのチェック

アップロード時には、エラーが発生していないかチェックし処理を分岐させます。

エラーコードとして、以下の定数が定義済みです。

UPLOAD_ERR_OK:アップロードが成功した
UPLOAD_ERR_NO_FILE:アップロードされなかった(何もファイルを指定しないで送信)

その他種々のエラー定数があります。

ファイルの保存

サーバーに一時保存されたファイルを正規の指定場所に保存します。
保存するには、move_uploaded_file()関数を使って、ファイルを一時保存先から指定場所へ移動します。

【書式】
move_uploaded_file(一時ファイルパス,移動先ファイルパス);

例えば、"uploads"というディレクトリをあらかじめ作成しておき、その中にファイルを保存するコードは以下になります。

なお一時ファイルはアップロード処理が終わると自動的に削除されますので、アップロード処理内で移動させる必要があります。

ファイル名文字コードの変換

ファイル名が日本語でつけられている場合、サーバーのOSが扱う文字コードに変換しないと、ファイル名が文字化けする可能性があります。

変換には、mb_convert_encoding()関数を使います。

【書式】
mb_convert_encoding(文字列,変換後の文字コード,変換前の文字コード);

例えばPHPの文字コードUTF-8は、WindowsではCP932に変換する必要がありますので、以下のように記述します。

PHP処理部のコード

エラーチェック、ファイル保存、文字コード変換をおり込んだPHP処理部のコード例は、以下のようになります。

スポンサーリンク

ページの先頭へ