My Photo

« PHPメモ026:ファイル関連の関数 その4 | Main | PHPメモ028:ファイルのダウンロード »

March 31, 2012

PHPメモ027:ファイルのアップロード

ファイルアップロード機能の有効化

PHPでファイルのアップロードの処理をするには、php.iniで

file_uploads = On

でなければならない。デフォルトでOnになっている。

1つのファイルのアップロード

一般的なファイルをアップロードするフォームは以下のようなものになる。

<form enctype="multipart/form-data" action="upload.php method="post">
送信ファイル:<input type="file" name="userfile" /><br />
<input type="submit" value="送信" />
</form>

上記のフォームから送信されたファイルを表示するコードは以下のようになる。
3つのif文で
・アップロードの成否
・ファイルサイズが0でないか
・画像ファイルか
をチェックして、画面に表示している。

if (FALSE !== $_FILES['userfile']['error']) {
  if (0 != $_FILES['userfile']['size']) {
    if (FALSE !== strPos($_FILES['userfile']['type'], 'image/')) {
        $base = basename($_FILES['userfile']['name']);
        copy($_FILES['userfile']['tmp_name'], $base);
        echo "<img src='" . $base . "'>";
    }
  }
}

上記のコードでは定義済み変数 $_FILES を使用している。$_FILES は配列であり、inputタグのname属性の値をキーとしてHTTP POSTでアップロードされたファイルの情報が格納されている。
この例だとアップロードされたファイルの情報は $_FILES['userfile'] に格納され、これはさらに下記表のキーを持つ配列となっている。

キー 値の意味
error アップロードの状態。成功の場合は0。
size アップロードされたファイルのサイズ。バイト単位。
name アップロードファイル名
type メディアタイプ。正しいかはアップロードしてきたクライアント次第。
tmp_name 受信したファイルの一時ファイル名

複数ファイルのアップロード

複数のファイルをアップロードする場合、フォームは以下のようになる。

<form enctype="multipart/form-data" action="upload2.php" method="post">
送信ファイル1<input type="file" name="userfile[]" /><br />
送信ファイル2<input type="file" name="userfile[]" /><br />
送信ファイル3<input type="file" name="userfile[]" /><br />
送信ファイル4<input type="file" name="userfile[]" /><br />
<input type="submit" value="送信" />
</form>

この場合、$_FILES には以下のようにアップロードされたファイルの情報が格納される。

$_FILES['userfile'][name][0]…1番目のファイルのファイル名
                         [1]…2番目のファイルのファイル名
                         [2]…3番目のファイルのファイル名
                         [3]…4番目のファイルのファイル名
$_FILES['userfile'][type][0]…1番目のファイルのファイルタイプ
                         [1]…2番目のファイルのファイルタイプ
                         [2]…3番目のファイルのファイルタイプ
                         [3]…4番目のファイルのファイルタイプ
$_FILES['userfile'][tmp_name][0]…1番目のファイルの一時ファイル名
                             [1]…2番目のファイルの一時ファイル名
                             [2]…3番目のファイルの一時ファイル名
                             [3]…4番目のファイルの一時ファイル名
$_FILES['userfile'][error][0]…1番目のファイルのエラーコード
                          [1]…2番目のファイルのエラーコード
                          [2]…3番目のファイルのエラーコード
                          [3]…4番目のファイルのエラーコード
$_FILES['userfile'][size][0]…1番目のファイルのファイルサイズ
                         [1]…2番目のファイルのファイルサイズ
                         [2]…3番目のファイルのファイルサイズ
                         [3]…4番目のファイルのファイルサイズ

よって、上記のフォームからアップロードされたファイルを処理するコードは以下のようになる。

foreach (array_keys($_FILES['userfile']['error']) as $fileEntry) {
  if (FALSE !== $_FILES['userfile']['error'][$fileEntry]
      && 0!= $_FILES['userfile']['size'][$fileEntry]) {
    if (FALSE !== strpos($_FILES['userfile']['type'][$fileEntry], 'image/')) {
      $base = basename($_FILES['userfile']['name'][$fileEntry]);
      copy($_FILES['userfile']['tmp_name'][$fileEntry], $base);
      echo "<img src='" . $base . "'>";
    }
  }
}

« PHPメモ026:ファイル関連の関数 その4 | Main | PHPメモ028:ファイルのダウンロード »

PHP」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/54351982

Listed below are links to weblogs that reference PHPメモ027:ファイルのアップロード:

« PHPメモ026:ファイル関連の関数 その4 | Main | PHPメモ028:ファイルのダウンロード »

May 2017
Sun Mon Tue Wed Thu Fri Sat
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof