【问题标题】:Code Translation: ASP.NET Server.Transfer in PHP代码翻译:PHP 中的 ASP.NET Server.Transfer
【发布时间】:2009-01-22 22:02:56
【问题描述】:

我将如何在 PHP 中做到这一点?

Server.Transfer("/index.aspx")

(为 C# 添加“;”)

编辑:

保持 URL 与以前相同很重要;你知道,对于谷歌。在我的情况下,我们有一堆 .html 文件要传输,对于客户端来说,地址栏不会改变很重要。

【问题讨论】:

    标签: php asp.net


    【解决方案1】:

    据我所知,PHP 没有真正的传输能力,但您可以像这样使用 include() 或 require() 获得完全相同的效果:

    require_once('/index.aspx");
    

    【讨论】:

    • 我实际上已经解决了这个问题,并打算自己回答这个问题,但你打败了我。
    • Require_once 会更合适,因为如果您打算像 Server.Transfer 一样工作,您将不会添加任何其他 require 语句。另外,至少你需要在语句的末尾添加一个 exit 或 die 否则这只是一个 PHP require 语句而不是 Server.Transfer
    【解决方案2】:

    最简单的方法是使用header 重定向。

    header('Location: /index.php');
    

    编辑: 或者,如果您不想使用 HTTP 标头,则可以只包含该文件并退出。

    【讨论】:

    • 实际上与 Server.Transfere 不同,因为 Server.Transfere 不会更改标头。
    • 对于我使用 Request.Transfer(url); 的方式在 ASPNET 中,PHP 中唯一的等价物是执行您将要执行的任何处理,而无需向标头或正文写入任何内容,然后调用 header('Location: url');
    【解决方案3】:

    使用 require 与 server.transfer 类似,但在某些情况下它的行为会略有不同。例如,当输出已经发送到浏览器并使用 require 时,将显示已经发送到浏览器的输出以及您需要的路径。

    模仿 C#/ASP.NET Server.Transfer() 的最佳方法是正确设置 PHP 输出缓冲,然后使用我编写的以下函数。

    function serverTransfer($path) { 
        if (ob_get_length() > 0) { 
            ob_end_clean(); 
        }
        require_once($path); 
        exit; 
    }
    

    设置输出缓冲就像使用 ob_start() 作为 PHP 应用程序调用的第一行一样简单。更多信息可以在这里找到:http://php.net/manual/en/function.ob-start.php

    ASP.NET 默认启用输出缓冲,这就是为什么在使用 Server.Transfer() 时不必这样做;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 2020-06-01
      • 2017-02-03
      • 1970-01-01
      • 1970-01-01
      • 2010-12-24
      相关资源
      最近更新 更多