Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在生产脚本中找到重定向_Php_Redirect - Fatal编程技术网

Php 在生产脚本中找到重定向

Php 在生产脚本中找到重定向,php,redirect,Php,Redirect,我继承了一个非常大的php网站的工作。我们遇到一些问题,某些页面会导致奇怪的重定向。我正在寻找一些想法来帮助在php代码中找到这些重定向 我们没有托管该网站,因此我们没有shell访问权限。最初我打算挂接一个关闭函数或析构函数并记录调用堆栈,但调用堆栈似乎只包含exit函数。接下来,我正在寻找覆盖php“header”函数的方法(很可能是通过名称空间),但这将涉及将名称空间添加到太多的文件中 除了到处放置die语句或下载所有源代码并在其上运行grep之外,是否有任何php技术可以让您找到代码中正

我继承了一个非常大的php网站的工作。我们遇到一些问题,某些页面会导致奇怪的重定向。我正在寻找一些想法来帮助在php代码中找到这些重定向

我们没有托管该网站,因此我们没有shell访问权限。最初我打算挂接一个关闭函数或析构函数并记录调用堆栈,但调用堆栈似乎只包含exit函数。接下来,我正在寻找覆盖php“header”函数的方法(很可能是通过名称空间),但这将涉及将名称空间添加到太多的文件中

除了到处放置die语句或下载所有源代码并在其上运行grep之外,是否有任何php技术可以让您找到代码中正在触发的重定向?

首先

尽可能避免在实时生产站点上进行调试。如果你必须这样做,那么我会设置“大门”,防止其他人看到你的测试。您可以通过检查IP地址或自定义GET变量来实现这一点。下面是两个PHP示例

if ($_SERVER["REMOTE_ADDR"] == "xxx.xxx.xxx.xxx") {
    // Run Your Code Here
}

技术1-特定于PHP的

有时,找到某种东西或测试某种东西是否起作用的最简单方法是尝试打破它。在这种情况下,要使PHP重定向成功(使用PHP
header
函数),需要在调用之前不向浏览器发送任何头信息。因此,首先,看看是否可以通过在调用之前输出任何内容来触发已经发送的可怕的
标题。如果您可以触发该警告,您应该能够获得重定向发生的行号和文件。从那里,您可以
debug\u backtrace()
找到重定向的罪魁祸首

function my_custom_function ($location, $status) {
    print_r(debug_backtrace());
    exit;
}
add_filter("wp_redirect", "my_custom_function" , 10, 2);
如果“输出缓冲”处于启用状态,您将希望暂时禁用该功能,或者为测试刷新它

技术2-特定于WordPress的

我想如果你在一个非常大的WordPress网站上工作,我也会加入WordPress解决方案。只要引起重定向的代码/插件使用WordPress的核心,那么您就应该能够访问它们的钩子系统。下面是一个可以从活动模板/主题中的“functions.php”文件运行的测试,它将向您显示重定向之前的堆栈跟踪

function my_custom_function ($location, $status) {
    print_r(debug_backtrace());
    exit;
}
add_filter("wp_redirect", "my_custom_function" , 10, 2);
首先

尽可能避免在实时生产站点上进行调试。如果你必须这样做,那么我会设置“大门”,防止其他人看到你的测试。您可以通过检查IP地址或自定义GET变量来实现这一点。下面是两个PHP示例

if ($_SERVER["REMOTE_ADDR"] == "xxx.xxx.xxx.xxx") {
    // Run Your Code Here
}

技术1-特定于PHP的

有时,找到某种东西或测试某种东西是否起作用的最简单方法是尝试打破它。在这种情况下,要使PHP重定向成功(使用PHP
header
函数),需要在调用之前不向浏览器发送任何头信息。因此,首先,看看是否可以通过在调用之前输出任何内容来触发已经发送的可怕的
标题。如果您可以触发该警告,您应该能够获得重定向发生的行号和文件。从那里,您可以
debug\u backtrace()
找到重定向的罪魁祸首

function my_custom_function ($location, $status) {
    print_r(debug_backtrace());
    exit;
}
add_filter("wp_redirect", "my_custom_function" , 10, 2);
如果“输出缓冲”处于启用状态,您将希望暂时禁用该功能,或者为测试刷新它

技术2-特定于WordPress的

我想如果你在一个非常大的WordPress网站上工作,我也会加入WordPress解决方案。只要引起重定向的代码/插件使用WordPress的核心,那么您就应该能够访问它们的钩子系统。下面是一个可以从活动模板/主题中的“functions.php”文件运行的测试,它将向您显示重定向之前的堆栈跟踪

function my_custom_function ($location, $status) {
    print_r(debug_backtrace());
    exit;
}
add_filter("wp_redirect", "my_custom_function" , 10, 2);

你能看看服务器日志和301/302吗?附加一个调试器和/或分析器。修复生产站点的实时bug不好,没有VCS来查看代码?冒险@fubar-日志似乎显示了请求的URI和重定向URI-可以调整它们以捕获发生重定向的文件和行吗?@Sammitch-我已尝试将生产站点拉到本地并附加调试器,(实际上我仍在尝试)它们有大约5个付费模块链接到活动域,这些模块不会从其他任何地方运行,站点要求它们运行,删除它们会破坏站点的许多其他部分。您可以查看服务器日志并查找301/302吗?附加调试器和/或探查器。修复生产站点的活bug不好,没有VCS查看代码吗?冒险@fubar-日志似乎显示了请求的URI和重定向URI-可以调整它们以捕获发生重定向的文件和行吗?@Sammitch-我已尝试将生产站点拉到本地并附加调试器,(实际上我仍在尝试)它们有大约5个付费模块链接到活动域,这些模块不会从其他任何地方运行,站点要求它们运行,删除它们会破坏站点的许多其他部分。