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)