記事の詳細
PHPでparse_ini_file関数を使用した際に発生するWarningを解消する方法
今回はPHPでparse_ini_file関数を使用した際に発生するWarningを解消する方法をご紹介致します。
※2017年7月18日に記事を一部追記しました!
PHPでiniファイルを読み込んでいろいろと処理をさせようとした際に、警告が発生して思うように動かなかったことがあったのでメモとして残しておきます。
今回のブログの見出しはコチラです!
parse_ini_file関数で何かよくわからない警告が発生!
phpでiniファイルを読み込む際にparse_ini_file関数を使用して下記のようなコードを組んでみました。
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php /* 定数定義 */ $IniFilePass = './XXXXX/config.ini)'; // iniファイルのパス /* iniファイル読み込み */ $ArrayIniFile = parse_ini_file($IniFilePass, true); if($ArrayIniFile != false){ /* mode 取得*/ $flgDebugMode = $ArrayIniFile[state][debug]; } ?> |
上記はiniファイルの[state]セクションの[debug]キーの値を取得しようとしています。
Warningが二件発生しました!
各警告の内容は下記のようになっています。
「Warning: parse_ini_file(): http:// wrapper is disabled in the server configuration by allow_url_include=0 in ./XXXXX/header.php on line 50」について
ざっくり翻訳すると「サーバーの設定で”allow_url_include”の設定が0(Off)になっているから、header.phpの50行目で使ってるparse_ini_file関数が使えない!」という事をサーバーさんが訴えています。
サーバーの設定を変えることで解決しそうな内容です。
「Warning: parse_ini_file(./XXXXX/config.ini): failed to open stream: no suitable wrapper could be found in ./XXXXX/header.php on line 50」について
ざっくり翻訳すると「指定したファイル(./XXXXX/config.ini)が開けません!なんかheader.phpの50行目がおかしくない?」という事をサーバーさんが訴えています。
上記の警告に関しては、一番目のエラーを解決できれば一緒に解決しそうです。
どちらも”line 50″(50行目)で発生している警告なので、対象ファイル(”header.php”)の50行目を直すことでどちらも解決することが考えられます。
「allow_url_include」の設定値を変更する
“allow_url_include”の設定を直せばparse_ini_file関数が動くようなので、設定を修正してみましょう。
“allow_url_include”の設定はサーバー内に設定しているpnp.iniファイルを修正する必要があります。
※実験用に持っているサーバーはminibird様のサーバーになるので、minibird様のサーバーでのphp.iniファイルの設定値の変更方法を記載します。
php.iniファイルの編集画面へ行く
minibird様のサーバーの場合は「PHP環境設定」画面にてphp.iniファイルを修正します。
「php.ini変更設定」画面も存在するのですが”allow_url_include”の設定項目が存在しないため「php.ini直接編集」画面にて”allow_url_include”の項目を直接変更します。
変更を確定してホームページを見てみると…、警告が消えました!
では、本当にiniファイルの内容を読み込んでいるのでしょうか?
javascriptの変数に値を入力して確認したところ、しっかり値が入力されていました!
これで、parse_ini_file関数で発生していた問題は解消しました。
【後日追記】allow_url_includeの設定値変更は、セキュリティ上の問題が発生する可能性があるので注意が必要!
そもそも何故allow_url_includeという設定がデフォルトでoffになっているのか?
調べてみるとこんな記事が出てきました。
・新たな Web サイト改ざんの危険性:Linux 用コントロールパネル「Plesk」にゼロデイ脆弱性
・ユーザー定義関数は外部ファイル(http経由)で呼びさせませんか?
要約すると「単純にallow_url_includeの設定をonにするとセキュリティ上よろしくないため、使用する場合はしっかりと対策をしましょう。」という事らしいです。
こういった記事をみると、設定値を読み込む際には外部ファイルから読み込むよりもデータベース上にデータを持って引っ張ってきた方が良いっぽいですね。
エラーや警告の解決のヒントは見逃さずに!
いかがでしたか?
プログラムでエラーが出ると精神的にゲンナリしてしまう事が多いですが、最近のプログラムは警告やエラーをしっかり出してくれることが多いです。
今回のPHPのように「〇〇というファイルの〇〇行目!」という形で出してくれることもあるため、修正をする際の大きなヒントをつかむことができます。
エラーや警告の内容に関しては、文章をそのままGoogleさんで検索すると大抵は解決方法が載っているため、問題の調査も非常に楽です。
問題を早期に解決できるようにログを出してくれる親切なシステムと、解決方法をネット上に公開している有志の方々のおかげで、プログラムの敷居の高さはかなり緩和されているのではないかと思います。
かく言う私も非常に助かっています!感謝感謝!
ではまた!
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。