🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

1887閲覧

Laravel の APP_DEBUG の値を アクセス元によって変えたい

showkit

総合スコア1638

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/03/18 04:55

Laravel 学習中です。

PHP 7.4.16
Laravel Framework 8.30.1

の環境下です。

表題のとおり、クライアントの IP アドレスによって

192.168.* からのアクセスであれば APP_DEBUG=true
上記以外 からのアクセスであれば APP_DEBUG=false

にするというような制御はできますでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

こんな感じのミドルウェア置いとけばいけるかなと
ipInRanges 以下からは過去の自分のコードからの使い回しなので若干冗長だったりします

<?php declare(strict_types=1); namespace App\Http\Middleware; use Closure; use Illuminate\Http\Request; class ConfigureUsingIpAddress { public function handle(Request $request, Closure $next) { $ranges = ['10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16']; config(['app.debug' => $this->ipInRanges((string)$request->ip(), $ranges)]); return $next($request); } protected function ipInRanges(string $ip, array $ranges): bool { foreach ($ranges as $range) { if ($this->ipInRange($ip, $range)) { return true; } } return false; } protected function ipInRange(string $ip, string $range): bool { if (strpos($range, '/') === false) { $range .= '/32'; } [$range, $netmask] = explode('/', $range, 2); $ipDecimal = ip2long($ip); $rangeDecimal = ip2long($range); return $ipDecimal !== false && $rangeDecimal !== false && ctype_digit($netmask) ? $this->ipInRangeDecimal($ipDecimal, $rangeDecimal, (int)$netmask) : false; } protected function ipInRangeDecimal(int $ip, int $range, int $netmask): bool { $netmask = ~(2 ** (32 - $netmask) - 1); return ($ip & $netmask) === ($range & $netmask); } }

投稿2021/03/18 05:22

編集2021/03/18 05:26
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

showkit

2021/03/18 05:26

回答ありがとうございます。初心者なもので、ものかり悪くてすみません。 これを置くのは 「app/Http/Middleware/」配下で「ConfigureUsingIpAddress.php」というソース名で置けばいいのでしょうか? 呼び出しはどこで やればいいのでしょうか?
mpyw

2021/03/18 05:29

>> これを置くのは 「app/Http/Middleware/」配下で そうです >> 「ConfigureUsingIpAddress.php」 これに関してはクラス名と一致してれば何でもいいです。 これを採用していただいてもいいですし,お好きな名前でも。 ミドルウェアの登録方法などに関してはこちらをお読みください↓ https://readouble.com/laravel/7.x/ja/middleware.html
mpyw

2021/03/18 05:30

グローバルミドルウェアでいいかなと思います 順番的には先頭が妥当かな?
mpyw

2021/03/18 05:34

【注意点】プロキシの設定を正しくしないと,AWS などの本番環境で前段にロードバランサを置いたとき,判定を誤ってしまう可能性があるので注意してください。場合によっては脆弱性になります。 https://readouble.com/laravel/7.x/ja/requests.html#configuring-trusted-proxies (もっと安全に解決しようと思ったら,そもそもこのような考え方をしないほうがいいと思います。ローカル環境と本番環境は完全に別個のものとして用意するとか)
mpyw

2021/03/18 05:37

ロードバランサがあるときは protected $proxies = '*'; にしないと危険だし,逆にロードバランサが無いときは protected $proxies = []; にしないと危険です。運用時にかなり気をつけないと意図せず脆弱性生んでしまいそうな気がしますね…
showkit

2021/03/18 06:02

細かいところは、おいといて、まずは、組み込んで true, false の切り替えができました。 詳細な説明 ありがとうございます。何度も 反芻して、細かいところまで 理解しようと思います。
guest

0

config('app.debug')->set()

で上書きできるので、いい感じのところで変更してみてください。
または、.envから削ってindex.phpでdefindeするでも行けると思います

投稿2021/03/18 05:14

mikkame

総合スコア5036

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

showkit

2021/03/18 05:23

回答ありがとうございます。 すみません。laravel 初心者で config('app.debug')->set() をいれる「いい感じ」のところがわからないのですが、どのあたり? また true, false は set の引数でしょうか? index.php は、public/index.php ですか? index.phpでdefinde するというのは どのようにコーディングするのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問