PHP中重定向头之后的所有代码都会被执行吗?

2024-03-08

所以我知道一般的经验法则是在 PHP 中进行标头重定向后,您应该调用 exit() 以避免运行额外的代码,但我想知道您是否将代码放在重定向标头之后,如果它会always run?

我正在对 Google Analytics 中跟踪推荐的各种方法进行一些研究,并发现了这篇文章:Google Analytics 提示与技巧 – 在 Google Analytics 中跟踪 301 重定向 http://www.zetainteractive.com/blog/2009/04/google-analytics-tips-tricks-tracking-301-redirects-in-google-analytics/

它建议这样做:

<?
Header( “HTTP/1.1 301 Moved Permanently” );
Header( “Location: http://www.new-url.com” );
?>

<script type=”text/javascript”>
var gaJsHost = ((“https:” == document.location.protocol) ? “https://ssl.” : “http://www.”);
document.write(unescape(“%3Cscript src=’” + gaJsHost + “google-analytics.com/ga.js’ type=’text/javascript’%3E%3C/script%3E”));
</script>
<script type=”text/javascript”>
try {
var pageTracker = _gat._getTracker(“UA-YOURPROFILE-ID”);
pageTracker._trackPageview();
} catch(err) {}</script>

从我一直理解 header() 函数的方式来看,它取决于浏览器,并且它可以随时运行重定向。因此,无法保证 JavaScript 在重定向发生之前实际上会开始或完成执行。

PHP 关于 header() 函数的文档 http://php.net/manual/en/function.header.php指示重定向后退出的原因是“确保重定向时不会执行下面的代码”。这听起来并不像他们保证所有后续代码都会运行,只是它可能会发生。

无论如何,我找到了一种不同的方法来实际管理跟踪,但我想看看是否可以找出 header() 在这种情况下到底是如何工作的。

感谢您的帮助。


在 PHP 中使用 header 函数只会添加服务器返回的响应的标头。它不会立即发送任何数据,也不会立即终止连接。后面的任何代码header call will被处决。

特别是,即使在执行 301 重定向后添加响应正文也是一个好主意,以便不支持重定向的客户端也能获得一些描述性响应。事实上根据HTTP 1.1 规范 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 第10.3.2节 -

除非请求方法是 HEAD,否则响应的实体应该 包含一个简短的超文本注释,其中包含指向新 URI 的超链接。如果 收到 301 状态代码是为了响应除 GET 或 HEAD,用户代理不得自动重定向 请求,除非它可以被用户确认,因为这可能 更改发出请求的条件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP中重定向头之后的所有代码都会被执行吗? 的相关文章

  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 我可以让 swagger-php 在查询字符串上使用数组吗?

    我使用 Swagger php 当我定义查询字符串上的参数时 它可以是一个数组 但据我所知 它不支持这种查询字符串 https api domain tld v1 objects q 1 q 5 q 12 我相信这会被设定in the co
  • 在 PHP 中包含 PHP 文件

    我有一个网站 它运行 PHP if 语句来根据附加文件的类型 即 Jpg Txt MP4 显示内容 所以我显示 TXT 文件的代码是 if post attachment txt display attachment div class d
  • Symfony2:为什么请求传递到受 Symfony2 中 AppCache 影响的 Kernel.Terminate EventListener

    在我的 Symfony2 2 应用程序中 我使用 onKernelTerminate EventListener 以便我可以在渲染响应后进行一些 繁重 处理 以便用户收到更快的响应时间 在我的控制器中 我在请求上设置了一个属性 以便当事件侦
  • 选择一组数字以达到最小总数的算法

    给定 一组数字n 1 n 2 n 3 n x 还有一个数字M 我想找到最好的组合 n a n b n c n gt M 该组合应达到达到或超过 M 所需的最小值 没有其他组合可以提供更好的结果 将在 PHP 中执行此操作 因此可以使用 PH
  • C++ 头文件和实现文件:要包含哪些内容?

    有一个 h 文件和一个 cpp 文件 它们具有相同的名称但扩展名不同 如果我想使用 cpp 文件中的内容 是否包含 h 文件或 cpp 文件 简单的答案是您几乎总是希望包含 h 文件并编译 cpp 文件 CPP 文件 通常 是真实代码 H
  • 防止 Propel 插入空字符串

    当未设置列时 如何防止 Propel ORM 插入空字符串 CREATE TABLE user uid INTEGER PRIMARY KEY AUTO INCREMENT email VARCHAR 255 NOT NULL UNIQUE
  • 简单的 PHP 回显代码不起作用

    这是我的 html 和 php 脚本 h1 Bob s Auto Parts h1 table width 100 tr tr table 为什么这个输出会出现一个 gt 我希望它是 这有效 仅有的 这是输出 鲍勃的汽车零件 鲍勃
  • 尝试使用 php 发送 POST 请求,无论我做什么,我都会收到“HTTP ERROR 500”

    为了发出 HTTP 请求 有人建议我尝试使用 PHP 并给了我一段代码 url https example com dashboard api data array to gt PHONE NUMBER from gt SENDER ID
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • 如何对 SQL 进行多次查询

    我正在尝试创建一个表 并在 PHP 脚本的帮助下在数据库中插入一些值 虽然只插入 1 行 但效果很好 当我尝试输入更多行数时 出现错误 我需要为每个查询编写完整的插入语句 因为我正在使用在线 Excel 到 SQL 查询转换器
  • PHP 无法加载动态库“php_pdo_oci.dll”

    我在 Windows 8 上运行 Apache 2 4 7 和 PHP 5 5 9 我安装了 PHPUnit 并开始弹出此警告图像 警告 是的 我在 php ini 中启用了扩展加载以及 extension dir 以更正文件夹 并且该文件
  • 如何在HTML中的PHP中注释掉HTML和PHP?

    这是我想注释掉的一行代码 h1 class post title a href title a h1 一种流行的注释方法是分别注释 html 和 php 有一个更好的方法吗
  • 检查 PHP 中的字符串长度

    我有一个长度为 141 个字符的字符串 使用下面的代码我有一个if如果字符串大于或小于 140 则语句返回一条消息 libxml use internal errors TRUE dom new DOMDocument dom gt loa
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • PHP print_r() 中 _r 的含义是什么?

    我见过这个答案 https stackoverflow com questions 13103410 what does r suffix mean就这样 但我不确定它对于 PHP 是否相同 如果是 可重入的含义是什么 From PHP n
  • 如何从 Laravel 执行存储过程

    我需要在表单提交数据后执行存储过程 我让存储过程按照我想要的方式工作 并且我的表单正常工作 我只是不知道从 laravel 5 执行 sp 的语句 它应该是这样的 执行 my stored procedure 但我似乎在网上找不到类似的东西
  • 如何使用 php 在 sql 查询中转义引号?

    我有一个疑问 sql SELECT CustomerID FROM tblCustomer WHERE EmailAddress addslashes POST username AND Password addslashes POST p
  • PHP递归遍历对象树[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get

随机推荐

  • WinExec 和 ShellExecute 之间有哪些区别?

    我需要执行另一个应用程序 我想知道我是否应该使用WinExec代替ShellExecute或相反亦然 两种方法有哪些区别 有应该优先选择的吗 WinExec长期以来已被弃用 仅出于向后兼容性的原因而保留 它用于启动可执行文件 不要使用它 因
  • 使用ajax调用php并返回多个变量?

    我正在尝试使用 javascript 调用 php 脚本 然后该脚本会将多个变量返回给我的 javascript 以便我可以操作它们 这是我的JS ajax url test php data id lastFileId success f
  • 使用 escaped_list_separator 和 boost split

    我正在使用 boost 字符串库 刚刚发现 split 方法非常简单 string delimiters string str string with comma delimited tokens and delimiters inside
  • R将EXIF数据写入JPEG文件

    对于 R 我发现有机会只读取 EXIF 数据 R 中是否有可能将 EXIF 数据写入 JPEG 文件 感谢所有回复的人 结果 我得到了以下解决方案 Install ExifTool https sno phy queensu ca phil
  • 从查找表创建新变量

    我的数据集中有以下列 presult aresult I single I double I triple I home run SS strikeout 我想添加第三列 bases 它取决于列 areresult 中结果的值 例如 我希望
  • SASS 文件内链接的缓存清除图像

    我对 Laravel 5 0 相当陌生 但对 PHP 不太熟悉 我一直在使用 Elixir 来编译我的 SASS 从我的资源目录复制图像并通过mix version防止缓存的功能 然而 这对于 CSS 图像和 JavaScript 来说非常
  • 多字节字符是否会干扰正则表达式中的结束行字符?

    使用这个正则表达式 regex1 z 以下字符串匹配 hello regex1 gt 5 regex1 gt 5 但使用这些正则表达式 regex2 z regex3 n z 他们表现出差异 hello regex2 gt 5 hello
  • 用例之间的 UML 关系(扩展/包含)

    我不太理解以下主题 因为它与我读到的内容有点含糊 Inlcude就像对下一部分的引用一样 没有它 用例就不完整 这部分应该从更多地方引用 否则它的使用没有意义 但我见过一个例子 其中 include 仅在某些 IF 语句中为真 例如 添加新
  • 从 pandas dataframe 列更新 sqlalchemy orm 列的正确方法是什么

    我已经加载了一些数据并修改了数据框中的一列 并且想要更新数据库以反映更改 I tried db session query sqlTableName update sqlTableName sql col name pdDataframe
  • 使用 Android Native、Android Studio 和改造在本地网络中信任我自己的自签名证书

    我正在创建一个简单的 Android 应用程序 将在封闭的本地网络中使用 在此本地网络中 正在运行 Flask 服务器 该服务器配置为通过 nginx 代理使用自签名证书 服务器的后端应用程序使用自签名证书可以正常工作 我已经使用浏览器和邮
  • Rails 三种开发模式的区别

    Rails 中的三种模式有什么区别 In development mode Rails reloads models each time a browser sends in a request so the model will alwa
  • 从python文件中提取函数并将其写入其他文件

    我已经编写了一个包含很多函数的 python 文件 我决定将它们全部拆分到不同的文件中 并使用它们的名称和相同的导入 代码看起来像这样 import class TestExtractors unittest TestCase def te
  • 元素隐式具有“any”类型,因为类型“Window”没有索引签名?

    我试图在 Typescript 中创建一个 Factory 类 但遇到以下错误 src ts classes Factory ts 8 10 错误 TS7017 元素隐式具有 any 类型 因为类型 Window 没有索引签名 我尝试搜索此
  • 有没有办法从java调用imagej宏(.ijm)(即将宏存储为字符串并使用imagej的java控件执行它)?

    将问题反转为 如何从 ImageJ 宏调用 执行 java 程序 每当我写 imagej 时 我都会提到斐济 当然 一个简单的解决方案是从 java 字符串创建 ijm 并使用以 ijm 作为参数的系统调用来调用 imagej 但我正在寻找
  • Supervisord celery 的用户不正确

    我有一些使用 celery 运行的定期任务 由supervisord 守护 但是在尝试为我为supervisord 进程设置的用户的主目录中创建一个目录后 我收到了 权限被拒绝 错误 看完之后os environ在运行芹菜任务中的字典我注意
  • 打开 PDF:WPF

    我想通过单击按钮打开 PDF 文件 我会将 PDF 文件保留在项目的解决方案 命名空间中 谁能给我解决这个问题吗 要启动标准 PDF 查看器 您只需启动一个外部进程即可 Process proc new Process proc Start
  • 控制ipython历史长度

    标题几乎说出了我想要的 我想在我的 ipython history 中有超过 1000 行的输入 这意味着将显示较旧的按向上箭头命令 这可能吗 可能在 ipython config 的某个地方 Thanks In http 2sn org
  • 返回私有项目的私有内部模块给出“公共接口中的私有类型”错误

    在下面的示例中 模块outer有一个私有类型Private和一个私有内部模块inner inner能够访问Private 因为子模块可以访问其父模块的私有项目 即使它们不是公共停车 inner定义一个函数not really public
  • ASP.NET MVC 每个View的静态内容的路由策略

    我希望系统中的每个视图都有一些静态帮助内容 我考虑的方法是为静态内容设置一个并行结构 并创建一个路由来重写该结构的 URL 例如 Controllers Help Account Login htm Create htm Models Vi
  • PHP中重定向头之后的所有代码都会被执行吗?

    所以我知道一般的经验法则是在 PHP 中进行标头重定向后 您应该调用 exit 以避免运行额外的代码 但我想知道您是否将代码放在重定向标头之后 如果它会always run 我正在对 Google Analytics 中跟踪推荐的各种方法进