2010-07-03 97 views
1

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

在此先感谢,

+0

应该已经有一个日志,这就是所谓的错误日志。它通常会告诉你哪个文件导致了循环以及在什么时间。 – animuson 2010-07-03 04:30:14

+0

你可以用你的htaccess更新你的问题吗? – Prix 2010-07-03 04:30:19

+0

@animuson:如果重定向是由脚本引起的,那么在错误日志中没有任何内容(我认为也不会有htaccess重定向)。这是有道理的 - 错误在客户端引发,服务器不知道它。 – Tgr 2012-03-13 11:13:14

回答

1

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

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

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

EDIT(其中一个实例提供): -
假设你有一个页面类似如下: -

<?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”文件。

希望它有帮助。

header ("Location: foo.php"); 

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

+0

好,其实我有数以百计的PHP脚本的;真诚的,我不能使用这种技术每个脚本... :(我readed一些有关在Apache的重写引擎重定向日志,但我不知道如何使用它... – FidoBoy 2010-07-03 09:34:59

+0

但我认为这是手头最好的解决方案,如果你想了解脚本中存在的问题。 – 2010-07-03 16:08:49

0

变化情况(最有可能的富=酒吧,但你可以包含多个页面的循环......)

0

我目前正在挣扎着无限重定向。由于应用程序和事后编程周期的复杂性,并非所有的重定向都是正确的。

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

我的建议是,你写变量重定向到外部文件(即使用file_put_contents或fwrite),以便即使浏览器检测到一些误解,也可以跟踪执行。即使在屏幕上看不到任何回显,写入外部文件也会给您提供一个遵循执行的机会。

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

祝你好运!