PHP标题重定向问题(不,不是那么常见的问题)

首先,这不是已经发送的标题'问题。

我有一个包含文件,即重定向。 这适用于我尝试过的每台服务器,但运行Windows的生产服务器除外。

当我在生产服务器上运行它时,它只重定向包含文件,而不是整个页面。

我有主文件,index.php:

<?php include('red.php'); ?>
<html ....
>

我做red.php重定向到另一个页面。 然后,重定向的页面将显示在index.php页面的顶部,其余的index.php html文件位于此页面之后。

在php.ini中设置一些设置?

经过一番调查后,问题出现在我使用完整网址而不是相对网址时。 第一个只会重定向包含的文件。 (我上面发现的问题)

而第二个正常工作

red2.php:

header("Location: http://example.com/newfile.php"); header("Location: newfile.php");'


当我在生产服务器上运行它时,它只重定向包含文件,而不是整个页面。

这是一个有趣的事情要说,因为它不是真的可能。 只有一个数据块会呈现给浏览器,您不能“重定向”它的一部分,但是您可以从多个文件中包含这些数据以便生成一个复合块。

也许,这就是你在做的。 也许你正在做一个包含而不是重定向。 记住重定向是这样完成的:

header('Location: file.php');
exit;

建议最后退出,这样执行不会不必要地继续。


约翰,

我认为你对客户端发生的变化和服务器上发生的变化感到困惑。

当你调用include() ,服务器将在其本地文件系统上搜索你正在包含的文件,并且将简单地通过它并逐行执行它。

现在,当你在php中调用Header()函数时,这会改变浏览器将收到的标题数据。 因此,重定向将在浏览器级完成 ,而不是服务器级。

这意味着拥有以下代码并不合理:

<?php
# Doesn't matter if you call it through include() or directly
Header("Location: http://example.com/newfile.php");
?>
<html><p>Hello world</p></html>

这就像你告诉浏览器:你需要重定向到newfile.php,但是这里有一些HTML内容可供你展示。

如果你想在服务器端包含newfile.php,你需要使用Server Side Includes,CURL或者只包含(“remote_file”); (如果remote_file位于另一台服务器上,则需要在php.ini中更改安全设置,以使后者能够工作,即allow_url_fopen)

希望能帮助到你

链接地址: http://www.djcxy.com/p/12409.html

上一篇: PHP Header Redirect problem (no, not that common problem)

下一篇: How do I build a basic Terminal from scratch