最近、PHPでクラスがどのように機能するかをレビューしています。私はこのコードに遭遇し、WAMPが私のホストとは違って私に通知を出す理由を理解しようとしています。私が取得しますグローバル変数を使用しない未定義の変数エラー
$settings['ip_forwarded_check'] = 1;
function get_ip()
{
$ip = 0;
if(!preg_match("#^(10|172\.16|192\.168)\.#", $_SERVER['REMOTE_ADDR']))
{
$ip = $_SERVER['REMOTE_ADDR'];
}
if($settings['ip_forwarded_check'])
{
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
{
preg_match_all("#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#s", $_SERVER['HTTP_X_FORWARDED_FOR'], $addresses);
}
elseif(isset($_SERVER['HTTP_X_REAL_IP']))
{
preg_match_all("#[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}#s", $_SERVER['HTTP_X_REAL_IP'], $addresses);
}
if(is_array($addresses[0]))
{
foreach($addresses[0] as $key => $val)
{
if(!preg_match("#^(10|172\.16|192\.168)\.#", $val))
{
$ip = $val;
break;
}
}
}
}
if(!$ip)
{
if(isset($_SERVER['HTTP_CLIENT_IP']))
{
$ip = $_SERVER['HTTP_CLIENT_IP'];
}
}
return $ip;
}
エラーは以下のとおりです。
Notice: Undefined variable: settings in
Notice: Undefined variable: addresses in
私は追加することにより、すべての問題を修正することができ、 "グローバル:$設定を、グローバル$アドレス;"私はこれを防ぐ方法が不思議でしたか?私は機能でグローバルを使用すべきではないと多くの主張を知っているので、私はこのことについて正しい方法を考えるのに苦労します。なぜ1つのホストが私に警告/通知を表示し、もう1つは表示しないのかを知りたいですか?私はホストのために通知をオフにしません。
これは、変数を定義していないため、値を渡す前に変数を使用しているので、変数が存在しないという意味です。そしてあなたの関数の外でその変数を使用しています。この '$ settings ['ip_forwarded_check'] = 1;を' $ settings = 1; 'に変更し、2つの変数を関数の中に入れてみてください。 – Mario
しかし、$ settings ['ip_forwarded_check'] = 1より前に$ settings = array()を追加しても、うまくいけませんか?また、$ addresses変数は、関数の中でかなり多く形成されています。私は本当に= 0に設定する必要がありますか?奇妙なPHPが私にそれを要求しているようだ。私のホストのPHPバージョンが私に警告を促すように見えないので、私が尋ねる理由があります。 –
'error_reporting(1);を追加します。 ini_set( 'error_reporting'、E_ALL); 'あなたのスクリプトに、そのコードを読んで本当にエラーが出るでしょう。 – Mario