3系ではindex_dev.phpによってIP制限を指定した上でデバッグモードを実行することができましたが、4系では標準のEC-CUBE内にindex_dev.phpが用意されておらず、環境変数や.envでAPP_ENVを書き換えないとデバッグモードを実行することができません。
これだと諸事情によりステージング環境がなかったり、本番でしか再現しない!ログ見ても原因の特定に時間がかかりそう!という時に困ったりします。
もちろん本番環境でデバッグするなという話ではあるのですが、APP_ENV = prodでもデバッグモードを実行したいときはたまにあります。そんな時のためのindex_dev.phpをご紹介します。
関連記事:[4系]デバッグモードを有効化する方法 .envファイル
このファイルをルートディレクトリに設置し、http(s)://自分のサイト/index_dev.php/ でアクセスすれば4系.envでAPP_ENV=Prodとなっていてもデバッグモードが実行できるはずです。
今作ったところなのであまり確認していません。実際に使用する際はご注意を。何か問題があれば教えていただけると嬉しいです。
特に、デバッグモードは誰でも閲覧できると情報流出や改ざんにつながる情報が見れてしまいますのでIP制限はしっかり掛かるよう確認してください。また使用しないときはファイルを削除するか、誰もアクセスできないようにしておいてください。
<?php /* * This file is part of EC-CUBE * * Copyright(c) EC-CUBE CO.,LTD. All Rights Reserved. * * http://www.ec-cube.co.jp/ * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ use Dotenv\Dotenv; use Eccube\Kernel; use Symfony\Component\Debug\Debug; use Symfony\Component\HttpFoundation\Request; $autoload = __DIR__.'/vendor/autoload.php'; if (!file_exists($autoload) && !is_readable($autoload)) { die('Composer is not installed.'); } require $autoload; // The check is to ensure we don't use .env in production if (!isset($_SERVER['APP_ENV'])) { if (!class_exists(Dotenv::class)) { throw new \RuntimeException('APP_ENV environment variable is not defined. You need to define environment variables for configuration or add "symfony/dotenv" as a Composer dependency to load variables from a .env file.'); } if (file_exists(__DIR__.'/.env')) { (new Dotenv(__DIR__))->overload(); if (strpos(getenv('DATABASE_URL'), 'sqlite') !== false && !extension_loaded('pdo_sqlite')) { (new Dotenv(__DIR__, '.env.install'))->overload(); } } else { (new Dotenv(__DIR__, '.env.install'))->overload(); } } $env = 'dev'; $debug = true; umask(0002); Debug::enable(); $trustedProxies = isset($_SERVER['TRUSTED_PROXIES']) ? $_SERVER['TRUSTED_PROXIES'] : false; if ($trustedProxies) { Request::setTrustedProxies(explode(',', $trustedProxies), Request::HEADER_X_FORWARDED_ALL ^ Request::HEADER_X_FORWARDED_HOST); } $trustedHosts = isset($_SERVER['TRUSTED_HOSTS']) ? $_SERVER['TRUSTED_HOSTS'] : false; if ($trustedHosts) { Request::setTrustedHosts(explode(',', $trustedHosts)); } $request = Request::createFromGlobals(); $allowedIps = [ '自分のIPアドレス', ]; if (!in_array($request->getClientIp(), $allowedIps)) { header('HTTP/1.0 403 Forbidden'); exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); } $kernel = new Kernel($env, $debug); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。