register_globals を深く理解する
dedecms ではregister_globals が強制的に制限されています
register_globals 設定は PHP 変数のアクセス範囲を制御するため、オンにすると不要なセキュリティ上の問題が発生するため、ここでは強制的にオフにします。ウェブマスターのスペースはこれをサポートしていません。ウェブマスターの参照のために次の方法を使用して変更できます:
*スタンドアロンサーバーユーザーの場合は、php 設定ファイルの php.ini を変更し、 register_globals=On を変更できます。 register_globals=Off にして、Apache を再起動します
*仮想ホスト ユーザーの場合は、構成を変更できるようにスペース プロバイダーに通知するか、ini_set('register_globals',0) を試してください。
*Web サイトのディレクトリに新しい .htaccess ファイルを作成し、php_flag register_globals off に移動します。既に .htaccess ファイルがある場合は、それを末尾の新しい行に追加してください。最後の手段は、 include/common.inc.php に直接アクセスして次のコードを追加することだけです。削除するだけです (推奨されません)
// register_globals を開くと安全でない可能性が多くなるため、閉じることが必須です。 register_globalsif(ini_get('register_globals')){ exit('php.ini register_globals はオフになっています! a>'); } PHP4.2.0バージョンより、php.iniのregister_globals設定オプションのデフォルト値がオフになりました。したがって、今すぐ Off スタイルでプログラミングを始めるのが最善です。
register_globals の値は次のように設定できます: On または Off それぞれの違いを説明するコードを示します。
コード:
コードは次のとおりです:
上記のコードの問題は、正しいユーザー名とパスワードを入力しなくても簡単にアクセスできることです。ブラウザのアドレスバーの最後に ?authorized=1 を追加するだけです。 PHP はフォームの送信、URL クエリ文字列、Cookie など、送信された値ごとに変数を自動的に作成するため、$authorized が 1 に設定され、権限のないユーザーがセキュリティ制限を超える可能性があります。
register_globals=off ウェブサイトが開けない問題の解決策
register_globals は php.ini の設定であり、php が渡されたパラメータを受け取る方法に影響します。その名前が示すように、register_globals はグローバル変数として登録することを意味します。そのため、On の場合は渡された値がグローバル変数として直接登録されて直接使用され、Off の場合は特定の配列で取得する必要があります。したがって、値を取得できないという上記の問題に遭遇した友人は、まず register_globals 設定が値を取得する方法と一致しているかどうかを確認する必要があります。 (確認するには、phpinfo() 関数を使用するか、php.ini を直接確認できます)
register_globals=off は主にセキュリティ上の理由からです。同時に、ほとんどのプログラムでは値を off に設定する必要があります。以前は On スタイルで書かれたスクリプトがたくさんありましたか? 以前のスクリプトが適切に計画されており、config.inc.php ファイルなどのパブリック インクルード ファイルがある場合は、次のコードをこのファイルに追加してシミュレートします (このコードは問題を 100% 解決するという保証はありません。十分なテストはしていませんが、うまく機能すると思います)。
コード:
コードは次のとおりです:
if ( !ini_get("register_globals") )
{
extract($_GET);抽出($ _SERVER);
抽出($_ENV);
if (isset($_SESSION) )
}
?> ;
php 未定義のインデックスと未定義の変数の解決策
$act=$_POST['act'];
注意: Unknown Index: act in F:windsflybookpost.php 18 行目
さらに、時々
内容を引用します
通知: 未定義の変数: 送信...
およびその他の同様のプロンプト
原因: 未定義の変数によって引き起こされます
解決策:
1) error_reporting 設定:
error_reporting を検索します= E_ALL
error_reporting = E_ALL & ~E_NOTICE に変更します
2) register_globals 設定:
register_globals を検索 = Off
register_globals = On に変更
注意: 未定義の変数: PHP の 9 行目の電子メール
注意: 未定義。変数: D:PHP5ENOTEADDNOTE.PHP の 9 行目の件名
注意: 未定義の変数: D:PHP5ENOTEADDNOTE.PHP の 9 行目のコメント
... 変数を定義する必要がありますが、これが発生した場合はどうすればよいですか
検索するだけです。 C: WINDOWS の php.ini
php.ini の 302 行目 error_reporting = E_ALL
に変更します
error_reporting = E_ALL & ~E_NOTICE apache2.2 を再起動するだけです
解決策: php.ini を変更します
変更: error_reporting = E_ALL
: error_reporting = E_ALL & ~E_NOTICE
エラーを表示したくない場合は、次のように変更してください:
display_errors = Off
php.ini の権限を変更する必要がない場合は、ini_set("error_reporting" を追加できます) , "E_ALL & ~E_NOTICE"); 以上です
さらに詳しい関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。