• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで$_ENVを使うと警告が出る)

PHPで$_ENVを使うと警告が出る

このQ&Aのポイント
  • PHPの$_ENVを使用する際に警告が出る問題について解説します。
  • Windowsでの環境確認のためにif文を使用する場合、Undefined index: OSという警告が表示されます。
  • 警告を消す方法として、環境でメッセージの表示をOFFにするか、if文の条件を修正する方法があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

var_dump($_ENV) とでもして確認すれば自明ですが、xampp5.6.3をデフォルトのまま使っているならば$_ENVは(配列として変数は存在していますが)要素数は 0 のハズです。 ∴ undefined index(該当する添え字の要素が存在しない)になります。 php.iniで、variables_order="GPCS" となっているハズですから、variables_order="EGPCS" に書き替えて、Apacheのリスタートさせてください。 (蛇足) >if (preg_match("/Windows/", $_ENV["OS"])) preg_matchじゃなくて、strposを使うべき。マニュアルにもそう書いてます。 http://php.net/manual/ja/function.preg-match.php >ある文字列が他の文字列内に含まれているかどうかを調べるためだけに >preg_match() を使うのは避けた方が良いでしょう。 >strpos() か strstr() 関数を 使う方が速くなります。

gen-goro
質問者

お礼

早々の解答をありがとうございます variables_order="EGPCS"としたら警告は消えました。 当方phpは始めたばかりの初心者のため、マニュアルを見てもGPCSをEGPCSにするとどこへどのような影響が出るのか分かりませんでした。EGPCSのままで特に問題はないのでしょうか? これからsrtpos()/srtstr()関数の使い方を調べてみます。 などと言っていたら、 質問の命令は以下のような使い方をしていました。 質問したプログラムではうまくいったのですが、他のプログラムではエラーが出ました。 if (preg_match("/Windows/", $_ENV["OS"])) { $sql = mb_convert_encodin($sql,"EUC-JP","SJIS"); ← エラー発生 } エラー発生の行に Fatal error: call to undefined function mb_convert_encoding(") in C:\localhost\form2.php on line nn と出てきました。 このif文と次の変換命令は同じ行をコピーして使っているのに、エラーが出たり、出なかったりするので何が原因なのか分からず困っています。 もし分かりましたら重ねてご教授願います。

その他の回答 (4)

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.5

>図解!速効プログラミング PHP+MySQL >2005年8月4日初版第1刷 >という本でphpを学習しています あまりに古すぎます。amazonのレビューで3年前には「昔の本なので、これから買うには不適」と書かれていたりするのに(それからさらに3年経っていますからね)。 >その本の中の設定が、画面はS-JIS、DBはEUC-JPとなっているためです。 おそらくは大昔のMySQL4.0を前提に書かれている書籍なんでしょうかね。ブラウザ側のhtmlもphpスクリプトも今はutf-8が主流ですし、DBへ接続するときにはクライアント(phpスクリプト)の文字セットを通知すればDBサーバとの間で文字コードは自動変換されるようになっています。DBへの接続もPDOが推奨ですし、プレースホルダを使うのがデフォです。そんな古い書籍はとっとと捨ててください(正直、百害あって一利なしです)。 http://qiita.com/mpyw/items/b00b72c5c95aac573b71

  • agunuz
  • ベストアンサー率65% (288/438)
回答No.4

>if (preg_match("/Windows/", $_ENV["OS"])) >{ >$sql = >mb_convert_encodin($sql,"EUC-JP","SJIS"); ← エラー発生 >} >エラー発生の行に >Fatal error: call to undefined function mb_convert_encoding(") in C:\localhost >\form2.php on line nn >と出てきました。 えっと・・。ソースはmb_convert_encodinでエラーメッセージがmb_convert_encodingというのは『あり得ない』ので、どちらかが間違っていますよね。どちらが違っているかわからないと回答不可です。 で、SQL文($sqlという変数名から邪推)をmb_convert_encodingするってことは『あり得ない』ですし、そもそもOSによって文字セットが違うなんてこともないです。いったい何のためにこんなことをやっているのかが謎です。

gen-goro
質問者

お礼

失礼しました codingは「mb_convert_encodin」でした メッセージは、画面を消してしまったので、メモしていた時の内容を手打ちしたものです。その時に「mb_convert_encoding」と打ってしまっていました。 ようは「g」が抜けていたんですね ありがとうございます 何でこんなことをやっているかというと、現在 図解!速効プログラミング PHP+MySQL 2005年8月4日初版第1刷 という本でphpを学習しています その本の中の設定が、画面はS-JIS、DBはEUC-JPとなっているためです。 環境の違いを意識させるのと、変換するにはこうすればできる、といったことを教えようとしているんだと思います。 まだ実際の環境でプログラムを作ったことがないので、このようなことが現実的なのかどうかはわかりません。 また資料が古いため、現在の言語環境に合っているかどうかもわかりません。 その辺は今後の課題だと思います。 大変ありがとうございました

noname#244856
noname#244856
回答No.3

稼動環境をチェックするには定数「PHP_OS」を使うのが理想的です。 function is_windows() { return PHP_OS === 'WIN32' || PHP_OS === 'WINNT'; }

gen-goro
質問者

お礼

ありがとうございます 参考にさせて頂きます

  • t_ohta
  • ベストアンサー率38% (5238/13705)
回答No.1

エラーメッセージに書かれている通り、$_ENV には "OS" というキーが存在しないのです。

gen-goro
質問者

お礼

ありがとうございます そうなんですか・・・

関連するQ&A