設定ファイル

位置

webmanの設定ファイルはconfig/ディレクトリにあり、プロジェクト内ではconfig()関数を通じて対応する設定を取得できます。

設定の取得

すべての設定を取得

config();

config/app.php内のすべての設定を取得

config('app');

config/app.php内のdebug設定を取得

config('app.debug');

設定が配列の場合は、.を使用して配列内の要素の値を取得できます。例えば

config('file.key1.key2');

デフォルト値

config($key, $default);

configは第二引数でデフォルト値を渡します。設定が存在しない場合、デフォルト値を返します。
設定が存在せず、デフォルト値も設定されていない場合はnullを返します。

カスタム設定

開発者はconfig/ディレクトリに自分の設定ファイルを追加できます。例えば、

config/payment.php

<?php
return [
    'key' => '...',
    'secret' => '...'
];

設定取得時の使用例

config('payment');
config('payment.key');
config('payment.key');

設定の変更

webmanは設定の動的変更をサポートしていません。すべての設定は手動で対応する設定ファイルを変更し、reloadまたはrestartで再起動する必要があります。

注意
サーバー設定config/server.phpおよびプロセス設定config/process.phpはreloadをサポートしておらず、再起動する必要があります。

特別なお知らせ

configのサブディレクトリに設定ファイルを作成して読み取る場合、例えば:config/order/status.phpconfig/orderディレクトリ内にはapp.phpファイルが必要です。内容は以下の通りです。

<?php
return [
    'enable' => true,
];

enabletrueであることは、フレームワークがこのディレクトリの設定を読み取ることを意味します。
最終的な設定ファイルのディレクトリツリーは以下のようになります。

├── config
│   ├── order
│   │   ├── app.php
│   │   └── status.php

これにより、config.order.statusを通じてstatus.php内で返される配列または特定のkeyデータを読むことができます。

設定ファイルの説明

server.php

return [
    'listen' => 'http://0.0.0.0:8787', // リスニングポート(1.6.0バージョンから削除、config/process.phpに設定)
    'transport' => 'tcp', // トランスポート層プロトコル(1.6.0バージョンから削除、config/process.phpに設定)
    'context' => [], // sslなどの設定(1.6.0バージョンから削除、config/process.phpに設定)
    'name' => 'webman', // プロセス名(1.6.0バージョンから削除、config/process.phpに設定)
    'count' => cpu_count() * 4, // プロセス数(1.6.0バージョンから削除、config/process.phpに設定)
    'user' => '', // ユーザー(1.6.0バージョンから削除、config/process.phpに設定)
    'group' => '', // ユーザーグループ(1.6.0バージョンから削除、config/process.phpに設定)
    'reusePort' => false, // ポートの再利用を有効にするか(1.6.0バージョンから削除、config/process.phpに設定)
    'event_loop' => '',  // イベントループクラス、デフォルトで自動選択
    'stop_timeout' => 2, // stop/restart/reload信号を受け取ったときの処理完了までの最大待機時間。この時間を超えた場合、プロセスが終了しないと強制的に終了します。
    'pid_file' => runtime_path() . '/webman.pid', // pidファイルの保存場所
    'status_file' => runtime_path() . '/webman.status', // statusファイルの保存場所
    'stdout_file' => runtime_path() . '/logs/stdout.log', // 標準出力ファイルの場所、webman起動後はすべての出力がこのファイルに書き込まれます
    'log_file' => runtime_path() . '/logs/workerman.log', // workermanログファイルの場所
    'max_package_size' => 10 * 1024 * 1024 // 最大データパケットサイズ、10M。アップロードファイルサイズはこの制限の影響を受けます
];

app.php

return [
    'debug' => true,  // debugモードを有効にするかどうか、有効にするとページエラーが呼び出しスタックなどのデバッグ情報を出力します。安全な生産環境ではdebugを無効にすべきです。
    'error_reporting' => E_ALL, // エラー報告レベル
    'default_timezone' => 'Asia/Shanghai', // デフォルトのタイムゾーン
    'public_path' => base_path() . DIRECTORY_SEPARATOR . 'public', // publicディレクトリの場所
    'runtime_path' => base_path(false) . DIRECTORY_SEPARATOR . 'runtime', // runtimeディレクトリの場所
    'controller_suffix' => 'Controller', // コントローラスフィックス
    'controller_reuse' => false, // コントローラーの再利用
];

process.php

use support\Log;
use support\Request;
use app\process\Http;
global $argv;

return [
     // webmanプロセス設定
    'webman' => [ 
        'handler' => Http::class, // プロセス処理クラス
        'listen' => 'http://0.0.0.0:8787', // リスニングアドレス
        'count' => cpu_count() * 4, // プロセス数、デフォルトのcpuの4倍
        'user' => '', // プロセスを実行するユーザー、低レベルのユーザーを使用すべき
        'group' => '', // プロセスを実行するユーザーグループ、低レベルのユーザーグループを使用すべき
        'reusePort' => false, // reusePortを有効にするか有効にした場合、接続は異なるworkerプロセスに均等に分配されます
        'eventLoop' => '', // イベントループクラス、空の場合server.event_loop設定を自動使用 
        'context' => [], // リスニングコンテキスト設定、例えばssl
        'constructor' => [ // プロセス処理クラスコンストラクタの引数、本例ではHttpクラスのコンストラクタ引数
            'requestClass' => Request::class, // カスタムリクエストクラスを使用可能
            'logger' => Log::channel('default'), // ログインスタンス
            'appPath' => app_path(), // appディレクトリの場所
            'publicPath' => public_path() // publicディレクトリの場所
        ]
    ],
    // モニタープロセス、ファイル更新の自動読み込みとメモリリークの検出に使用
    'monitor' => [
        'handler' => app\process\Monitor::class, // 処理クラス
        'reloadable' => false, // 現在のプロセスはreloadを実行しません
        'constructor' => [ // プロセス処理クラスコンストラクタの引数
            // 監視するディレクトリ、多すぎると検出が遅くなります
            'monitorDir' => array_merge([
                app_path(),
                config_path(),
                base_path() . '/process',
                base_path() . '/support',
                base_path() . '/resource',
                base_path() . '/.env',
            ], glob(base_path() . '/plugin/*/app'), glob(base_path() . '/plugin/*/config'), glob(base_path() . '/plugin/*/api')),
            // これらの拡張子のファイルの更新を監視
            'monitorExtensions' => [
                'php', 'html', 'htm', 'env'
            ],
            // その他のオプション
            'options' => [
                // ファイル監視を有効にするかlinux下でのみ有効、デフォルトのデーモンモードではファイル監視を有効にしません
                'enable_file_monitor' => !in_array('-d', $argv) && DIRECTORY_SEPARATOR === '/',
                // メモリ監視を有効にするか、linux下でのみサポート
                'enable_memory_monitor' => DIRECTORY_SEPARATOR === '/',
            ]
        ]
    ]
];

container.php

// psr-11依存性注入コンテナのインスタンスを返す
return new Webman\Container;

dependence.php

// 依存性注入コンテナ内のサービスと依存関係を設定するためのもの
return [];

route.php


use support\Route;
// /testパスのルートを定義
Route::any('/test', function (Request $request) {
    return response('test');
});

view.php

use support\view\Raw;
use support\view\Twig;
use support\view\Blade;
use support\view\ThinkPHP;

return [
    'handler' => Raw::class // デフォルトのビュー処理クラス 
];

autoload.php

// フレームワーク自動読み込みのファイルを設定
return [
    'files' => [
        base_path() . '/app/functions.php',
        base_path() . '/support/Request.php',
        base_path() . '/support/Response.php',
    ]
];

cache.php

// キャッシュ設定
return [
    'default' => 'file', // デフォルトファイル
    'stores' => [
        'file' => [
            'driver' => 'file',
            'path' => runtime_path('cache') // キャッシュファイルの保存場所
        ],
        'redis' => [
            'driver' => 'redis',
            'connection' => 'default' // redis接続名、redis.php内の設定に対応
        ],
        'array' => [
            'driver' => 'array' // メモリキャッシュ、再起動後に無効
        ]
    ]
];

redis.php

return [
    'default' => [
        'host' => '127.0.0.1',
        'password' => null,
        'port' => 6379,
        'database' => 0,
    ],
];

database.php

return [
 // デフォルトデータベース
 'default' => 'mysql',
 // 各種データベース設定
 'connections' => [

     'mysql' => [
         'driver'      => 'mysql',
         'host'        => '127.0.0.1',
         'port'        => 3306,
         'database'    => 'webman',
         'username'    => 'webman',
         'password'    => '',
         'unix_socket' => '',
         'charset'     => 'utf8',
         'collation'   => 'utf8_unicode_ci',
         'prefix'      => '',
         'strict'      => true,
         'engine'      => null,
     ],

     'sqlite' => [
         'driver'   => 'sqlite',
         'database' => '',
         'prefix'   => '',
     ],

     'pgsql' => [
         'driver'   => 'pgsql',
         'host'     => '127.0.0.1',
         'port'     => 5432,
         'database' => 'webman',
         'username' => 'webman',
         'password' => '',
         'charset'  => 'utf8',
         'prefix'   => '',
         'schema'   => 'public',
         'sslmode'  => 'prefer',
     ],

     'sqlsrv' => [
         'driver'   => 'sqlsrv',
         'host'     => 'localhost',
         'port'     => 1433,
         'database' => 'webman',
         'username' => 'webman',
         'password' => '',
         'charset'  => 'utf8',
         'prefix'   => '',
     ],
 ],
];

exception.php

return [
    // 異常処理クラスを設定 
    '' => support\exception\Handler::class,
];

log.php

return [
    'default' => [
        'handlers' => [
            [
                'class' => Monolog\Handler\RotatingFileHandler::class, // ハンドラ
                'constructor' => [
                    runtime_path() . '/logs/webman.log', // ログ名
                    7, //$maxFiles // 7日間内のログを保持
                    Monolog\Logger::DEBUG, // ログレベル
                ],
                'formatter' => [
                    'class' => Monolog\Formatter\LineFormatter::class, // フォーマッタ
                    'constructor' => [null, 'Y-m-d H:i:s', true], // フォーマットパラメータ
                ],
            ]
        ],
    ],
];

session.php

return [
     // タイプ
    'type' => 'file', // or redis or redis_cluster
     // ハンドラ
    'handler' => FileSessionHandler::class,
     // 設定
    'config' => [
        'file' => [
            'save_path' => runtime_path() . '/sessions', // 保存ディレクトリ
        ],
        'redis' => [
            'host' => '127.0.0.1',
            'port' => 6379,
            'auth' => '',
            'timeout' => 2,
            'database' => '',
            'prefix' => 'redis_session_',
        ],
        'redis_cluster' => [
            'host' => ['127.0.0.1:7000', '127.0.0.1:7001', '127.0.0.1:7001'],
            'timeout' => 2,
            'auth' => '',
            'prefix' => 'redis_session_',
        ]
    ],
    'session_name' => 'PHPSID', // セッション名
    'auto_update_timestamp' => false, // タイムスタンプを自動更新するか、セッションの期限切れを避けるため
    'lifetime' => 7*24*60*60, // ライフタイム
    'cookie_lifetime' => 365*24*60*60, // cookieのライフサイクル
    'cookie_path' => '/', // cookieのパス
    'domain' => '', // cookieのドメイン
    'http_only' => true, // http経由でのみアクセス
    'secure' => false, // https経由でのみアクセス
    'same_site' => '', // SameSite属性
    'gc_probability' => [1, 1000], // セッションの回収確率
];

middleware.php

// ミドルウェアを設定
return [];

static.php

return [
    'enable' => true, // webmanの静的ファイルアクセスを有効にするか
    'middleware' => [ // 静的ファイルミドルウェア、キャッシュ戦略、クロスオリジン設定などに使用
        //app\middleware\StaticFile::class,
    ],
];

translation.php

return [
    // デフォルト言語
    'locale' => 'zh_CN',
    // フォールバック言語
    'fallback_locale' => ['zh_CN', 'en'],
    // 言語ファイルの保存位置
    'path' => base_path() . '/resource/translations',
];