無限のリダイレクトループを引き起こすPHPスクリプトがあり、それを検出する方法がわかりません。これを検出する方法はありますか?リダイレクトをログに書き込むために、.htaccessにコマンドを追加できますか?
前もって感謝します、
無限のリダイレクトループを引き起こすPHPスクリプトがあり、それを検出する方法がわかりません。これを検出する方法はありますか?リダイレクトをログに書き込むために、.htaccessにコマンドを追加できますか?
前もって感謝します、
簡単な方法で PHP をデバッグすることは、実際には面倒な作業です。必要なのは、各行の後にいくつかの " echo " ステートメント (ダミー テキストを出力する) を提供し、その後に " exit " コマンド ステートメントを続けることです。
次に、「終了」によりプログラムカウンターが停止可能になるため、リダイレクトループが機能しなくなります。また、問題のある場所を順番にデバッグできるようになります。
「.htaccess」コマンドに関しては、そのようなものは必要ありません。Web サイトの index.php ファイルをホストしている「error.log」ファイルのルート フォルダーを確認してください。このファイルをテキスト エディタ (ワードパッドなど) で開くと、すべてのエラー リストが日付と時刻とともに表示されます。
編集(一例を提供):-
次のような1つのページがあるとしましょう:-
<?php
session_start();
include_once("includes/header.php");
$var1 = 'blah blah';
// some code
$var2 = 'some more blah blah';
// some code again
// may be some more code
include_once("includes/footer.php");
?>
この方法でコードをデバッグするように変更します。
<?php
session_start();
echo 'test 1';
exit;
// other code of yours comes after this line
?>
機能する場合は、次のように変更します。
<?php
session_start();
include_once("includes/header.php");
echo 'test 2';
exit;
// other code of yours comes after this line
?>
これが機能する場合は、「header.php」ファイルに問題がないことを意味します。それ以外の場合は、そのインクルード ファイルに問題があり、その「header.php」ファイルで同じ方法でデバッグを開始する必要があります。
それが役に立てば幸い。
私は現在、無限のリダイレクトに苦労しています。アプリケーションとアフターアワー プログラミング サイクルの複雑さのため、すべてのリダイレクトが正しい方法で行われているわけではありません。
最初にセッションを設定した場合(たとえば、autoloader ファイル)、セッションがループするかどうかを単純に確認することはできません。
私のアドバイスは、ブラウザーが何らかの誤解を検出した場合でも実行を追跡できるように、変数のリダイレクトを外部ファイルに書き込む (つまり、file_put_contents または fwrite を使用する) ことです。外部ファイルに書き込むと、画面にエコーが表示されなくても、実行を追跡する機会が得られます。
無限のリダイレクトは通常、コードを書く際の不必要な複雑さと、プロジェクト構造を形成する際の誤解から生じます。
幸運を!
インスタンスの変更
header ("Location: foo.php");
に
//header ("Location: foo.php");
echo "redirecting to foo.php on line ## of bar.php";
exit;
(最も可能性が高いのは foo = bar ですが、複数のページを含むループを作成することもできます...)