ファイルアップロード

ファイルアップロードのサンプルモジュールです。

仕様

  • 1回に3ファイル同時にアップロード可能
  • アップロード可能なファイルは画像に限る(gif/jpg/png)
  • アップロード可能なファイル容量は1ファイルにつき1MBまで

DEMO

http://lmd.root-n.com/demo/fileupload/

上記DEMOは、アプリケーションのルートディレクトリが /demo であり、モジュールグループは「fileupload」になります。

DOWNLOAD

fileupload モジュール一式をダウンロードできます。

※このモジュールは Windows に対応していません。

設置手順

  1. モジュール一式をダウンロードし、展開します。
  2. fileupload/
        +—fileupload/
        |       index.logic.php
        |       index.view.php
        |
        \—libs/
                Upload.php 

  3. ファイルを所定の位置にアップロードします。
    • モジュール
    • fileupload/* ⇒ Lambda/apps/<APP_DIR>/fileupload/*
    • ライブラリ
    • libs/Upload.php ⇒ Lambda/libs/Upload.php
  4. アップロードされたファイルを格納するディレクトリを作成します。
  5. 本モジュールでは、ディスパッチャ(index.php)と同じ階層の「upload」というディレクトリに格納する仕様になっています。

    • ディスパッチャ(index.php)がドキュメントルートにある場合
    • /path/to/<DOCUMENT_ROOT>/upload
    • ディスパッチャ(index.php)がドキュメントルートのサブディレクトリにある場合
    • /path/to/<DOCUMENT_ROOT>/<APP_DIR>/upload

    ※ 「upload」ディレクトリのパーミッションは「777」にしてください。
       ポリシーに反する場合は、WEBサーバーが書き込みできる権限を与えてください。

  6. 定数「FILEUPLOAD_DRYRUN」の設定変更
  7. Lambda/apps/<APP_DIR>/fileupload/index.logic.php

    define('FILEUPLOAD_DRYRUN', 1);
      ↓
    define('FILEUPLOAD_DRYRUN', 0);

    1 から 0 に変更することで、実際にアップロードを行う設定になります。

  8. ブラウザでアクセスして、動作確認を行います。
  9. http://<DOMAIN>/fileupload/

プログラムコードの一部抜粋

プログラムコードを一部抜粋して掲載します。
下記は、DEMOで動作している、fileupload.index ロジックモジュラーのソースコードになります。

/path/to/Lambda/apps/<APP_DIR>/fileupload/index.logic.php

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php

/*****************************************************************************
 *
 * サンプルのため、冗長なコメントになっています。
 *
 ****************************************************************************/


/**
 * サンプルのため、定数定義をこのファイル内に記述しています。
 * 本来は、Lambda/apps/<APP_DIR>/app.conf.php に定義することが推奨されます。
 */

// ドライラン: アップロードを行う = 0 | アップロードを行わない = 1
//
//   ※ サンプルのため、この定数を定義しています。本来は不要です。
//      また、ロジックとビューでこの定数を参照しているステートメントも不要になります。
define('FILEUPLOAD_DRYRUN', 1);

// アップロードされたファイルを格納するディレクトリ
define('UPL_DIR', APP_DIR.'/upload');

// アップロードを許可する最大ファイルサイズ(1ファイルにつき)(単位:MB)
define('IMAGE_MAX_SIZE', 1);

/**
 * ジャバスクリプトライブラリのロード
 *
 *   ジャバスクリプトライブラリは、Lambda/libs/Javascript.php にあります。
 *
 * [tips]
 * よく使うライブラリは、Lambda/apps/<APP_DIR>/app.init.php で事前にロードしておくとよい。
 */

Factory::import('Javascript');

if ( ! $lmd->hasHttpPost('upload')) {
    /**
     * 【アップロードする】ボタンが押されていない。
     *
     *   ⇒ デフォルト画面に遷移させる。
     *
     * ※ ガード節
     */

    return $lmd->setPrep('fileupload.index');
}

/**
 * パラメータを定義
 *
 * array('フィールドラベル', '最大ファイルサイズ', '単位', '許可するファイル拡張子の正規表現')
 */

$params = array();
$params['image'][1] = array('画像1', IMAGE_MAX_SIZE, 'MB', '/^(gif|jpe?g|png)$/i');
$params['image'][2] = array('画像2', IMAGE_MAX_SIZE, 'MB', '/^(gif|jpe?g|png)$/i');
$params['image'][3] = array('画像3', IMAGE_MAX_SIZE, 'MB', '/^(gif|jpe?g|png)$/i');

/**
 * アップロードライブラリをロード/インスタンス化して、アップロード対象ディレクトリを指定する。
 */

$upload = Factory::load('Upload')->getInstance($params)->setUploadDir(UPL_DIR);

/**
 * アップロード実行
 */

$res = true;
if ( ! FILEUPLOAD_DRYRUN) {
    $res = $upload->execute();
}
if ($res === false) {
    /**
     * アップロード失敗
     */

    Javascript::backHistory($upload->getErrMsg(), '#ffa07a');
} elseif (FILEUPLOAD_DRYRUN) {
    /**
     * ドライラン
     */

    Javascript::redirect($lmd->httpRequestDir().'/', 'サンプルのため、アップロードしません');
} else {
    /**
     * アップロード成功
     */

    $lmd->redirect($lmd->httpRequestDir().'/');
}
次ページ: データベース