設定ファイル
位置
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.php
、config/order
ディレクトリ内にはapp.php
ファイルが必要です。内容は以下の通りです。
<?php
return [
'enable' => true,
];
enable
がtrue
であることは、フレームワークがこのディレクトリの設定を読み取ることを意味します。
最終的な設定ファイルのディレクトリツリーは以下のようになります。
├── 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',
];