【问题标题】:On redirection does the redirected page gets processed?在重定向时,重定向页面是否得到处理?
【发布时间】:2011-04-30 00:58:33
【问题描述】:

我将重定向代码放在下面有引导代码的页面顶部。重定向会产生一个不同的进程,使重定向页面进程成为后台进程,还是完全杀死当前进程?

我正在使用 header() 进行重定向,但令人惊讶的是,header() 下面需要数据库连接的剩余代码也被执行了。这让我很好奇。

【问题讨论】:

    标签: linux drupal drupal-6 process operating-system


    【解决方案1】:

    首先,你永远不应该这样打电话给header(),除非你非常确定 Drupal 助手不合适(在我 10 多年的 Drupal 开发中,我从未遇到过这种情况)

    header()不会在 Drupal 中调用 shutdown 和其他关闭函数,从而可能导致会话中断、错误统计和模块损坏(取决于调用的关闭)。在这种情况下,套接字和其他低级资源没有关闭的事实,甚至可能在某些时候使您的 apache 服务器(或其他服务器)崩溃。

    如果您想设置标题,请致电drupal_set_header()。十分之九的时候你想要一个重定向头,在这种情况下你最好调用drupal_goto(),它会完成所有的关闭,甚至支持要遵循的目标参数。

    在 drupal_goto 上,所有进程都被杀死(参见底部的exit()),因此不会保留正在运行的进程。 module_invoke_all('exit') 将确保所有模块轮流关闭其套接字、连接等等。

    【讨论】:

    • 我将标头代码放在 index.php 的顶部。这也会导致故障吗?实际上,我使用此重定向将站点带到维护页面,因为 MySQL 服务器需要停止一段时间。
    • 在 index.php 的顶部 Drupal 还没有加载,所以确实,你需要在那里运行 header(),然后调用 exit(),/if/ 你真的想要这个.我不信。您可以简单地在 Drupal 根目录中放置一个名为 index.html 的 HTML 页面,然后禁用或重命名 .htaccess。如果您重定向,Google、书签和服务将跟随重定向,并导致许多不必要的副作用。
    【解决方案2】:

    据我了解,一个进程同时处理原始请求和重定向请求。一旦原始请求完成,就会处理重定向请求。

    由于 URL 重定向技术有很多,除非您让我们知道您正在使用的特定 URL 重定向技术,否则我们无法确定。

    【讨论】:

      【解决方案3】:

      据我所知,如果您直接从 apache htaccess 文件重定向,则不会创建新进程。如果使用 header() 函数,它会向 apache 服务器发送响应,并且 apache 会重定向页面。在这两种情况下,都没有创建新进程;但后者在重定向之前运行 php 脚本(成本更高?)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-08
        • 2017-08-07
        • 2021-08-12
        • 2011-12-25
        • 2010-11-09
        相关资源
        最近更新 更多