1

我有一个导致无限重定向循环的 PHP 脚本,但我不知道如何检测它。有什么方法可以检测到这一点吗?我可以向我的 .htaccess 添加任何命令以将重定向写入日志吗?

提前致谢,

4

3 回答 3

1

以简单的方式在 PHP 中进行调试实际上是一项繁琐的工作。你需要的是你应该在每一行之后提供一些“ echo ”语句(输出一个虚拟文本),然后是“ exit ”命令语句。

然后重定向循环将不起作用,因为“退出”使程序计数器可停止,并且您现在可以按顺序调试出错的地方。

至于“.htaccess”命令,你不需要任何这样的东西。请在您的根文件夹中检查“error.log”文件,您在其中托管了您网站的 index.php 文件。如果您在某些文本编辑器(如写字板)中打开此文件,您将看到所有错误列表以及日期和时间。

编辑(提供一个示例):-
假设您有一页如下:-

<?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”文件中以相同的方式开始调试。

希望能帮助到你。

于 2010-07-03T04:48:48.083 回答
0

更改实例

header ("Location: foo.php");

//header ("Location: foo.php");
echo "redirecting to foo.php on line ## of bar.php"; 
exit;

(很可能是 foo = bar,但你可能有一个包含多于一页的循环......)

于 2010-07-03T04:59:21.070 回答
0

我目前正在为自己的无限重定向而苦苦挣扎。由于应用程序和下班后编程周期的复杂性,并非所有重定向都以正确的方式进行。

如果您在开始时设置了会话(比如说 autloader 文件),您不能简单地检查会话是否循环自身。

我的建议是您将变量重定向写入外部文件(即使用 file_put_contents 或 fwrite),这样即使您的浏览器检测到一些误解,您也可以跟踪执行。即使您在屏幕上看不到任何回声,写入外部文件也可以让您有机会跟踪执行。

无限重定向通常来自编写代码时不必要的复杂性和形成项目结构时的误解。

祝你好运!

于 2014-03-13T20:42:15.517 回答