タイトルはほとんどキャッチ22であることを認めますが、それは完全に関連しているので、しばらくお待ちください...
バックグラウンド
ご存知かもしれませんが、私はPHPフレームワークに取り組んでいます。その主なセールスポイントは、異なるCMS/システム間で機能をブリッジすることです。開発者の観点からは、広範なエラー処理とロギングのメカニズムがあります。現在、デバッグ出力を制御する2つの設定DEBUG_MODE
とがあります。DEBUG_VERBOSE
モードは媒体を記述し、詳細は詳細の量を制御します。簡単に言うと、「コンソール」と呼ばれるモードがあり、基本的にデバッグ情報をjavascriptコンソールにダンプします(これは現在、お近くの主要なWebブラウザーで使用できます)。
問題
この[デバッグシステム]は開発サーバーには最適ですが、デバッグの詳細(DBクレデンシャルなど)が公開されるため、本番サーバーでは絶対に使用できません。そして正直なところ、開発者から移行した人は誰でしょう。製品に。毎回完璧にサーバー?
ソリューション
したがって、私はこれを修正する方法を見つけようとしてきました。私が提案するソリューションには、次のものがあります。
- リクエストが特定のIPからのものである場合にのみログを有効にするようにフレームワークに指示する設定があります。このためのセキュリティの問題は非常に明白です(とりわけIPスプーフィング)。
- 評価されて返されるPHP式(コード)を含む設定がyes/noとして使用されます。最良の部分は、インストールされたフレームワークがCMS固有の式を提案する可能性があることです。
- Wordpress:
current_user_can('manage_options')
- Joomla:
$user=&JFactory::getUser() && ($user->usertype=='Super Administrator') || ($user->usertype=='Administrator')
- カスタム:
$_SERVER['REMOTE_ADDR']=='123.124.125.126'
- Wordpress:
- これらは2つのうちの1つであり、私はもっと多くの提案を聞きたいと思っています。
eval()
それで、あなたはそれに任せるべきだと思いますか?これをページのロード/リクエストごとに1回だけ実行することで、引き続き良好に機能することを確認します。
明確化
if(DEBUG_MODE!='none')echo 'Debug'; // this is how it is now
if(DEBUG_MODE!='none' && $USER_CONDITION)echo 'Debug'; // this is how it should be
は$USER_CONDITON
、実行などis_admin()
、すべての管理者がデバッグ情報を表示できるようにする、またはgetUser()->id==45
特定のユーザーに対してデバッグ情報を有効にするなどの機能を許可します。またはIPなどで。