[英]PHP headers issue on server
我最近从Godaddy转到了我的虚拟主机的letshost.ie。 但是,我的脚本都无法在新的Letshost服务器上运行。
所以我做了一些修补,这是我发现的结果:
当在与php include相同的文件中使用php标头函数时,将引发错误。 仅当脚本中不包含头文件时,才能重定向的头文件功能。
以下脚本:
<?php
include ("div.php");
header("Location: redirect.php");
?>
可以在这里查看。 我得到的错误是
警告:无法修改标头信息-第3行的/home/michae28/public_html/header/withinclude.php中已经发送过的标头(输出始于/home/michae28/public_html/header/div.php:2)
以下脚本尝试使用标头功能执行相同的重定向,但该脚本没有php include。 工作正常。
<?php
header("Location: redirect.php");
?>
Lets主机支持团队无法帮助我。 一位工程师建议我的.htaccess文件可能有问题。 我根本没有更改.htaccess文件,所以我不知道这怎么可能引起任何问题。
这是为了防止任何人看到任何问题:
# -FrontPage-
IndexIgnore .htaccess */.??* *~ *# */HEADER* */README* */_vti*
<Limit GET POST>
order deny,allow
deny from all
allow from all
</Limit>
<Limit PUT DELETE>
order deny,allow
deny from all
</Limit>
AuthName michaeloneill.ie
AuthUserFile /home/michae28/public_html/_vti_pvt/service.pwd
AuthGroupFile /home/michae28/public_html/_vti_pvt/service.grp
文件末尾没有空格。
任何帮助表示赞赏。
如果已经输出某些内容,则无法设置header()
调用。
如您所见,错误( headers already sent by (output started at /home/michae28/public_html/header/div.php:2)
)检查div.php的第2行,该行显示了一些内容
在重定向之前将输出发送到浏览器时,通常会发生此错误。 检查包含文件“ div.php”,看是否有任何echo语句。
标头语句必须在任何html代码之前使用。
来源: http : //pl1.php.net/manual/en/function.header.php
在您的代码中,它发送输出。 没有重定向。 到浏览器,然后使用header()
重定向。 因此它将不起作用 。 您必须更改订单或header();
并include
。
header("Location: redirect.php");
include ("div.php");
但是它将始终redirect.php
到redirect.php
您所描述的是简单的PHP。 普通输出无缓冲。 生成后立即将其发送到客户端。 因此,开始处理200的内容后,您将无法向客户端发送其他响应代码。
修复非常简单。 如果您认为需要在脚本中途更改方向,请缓冲输出 。
<?php
ob_start();
include ("div.php");
header("Location: redirect.php");
但这仍在启动缓冲区并部分填充它。 如果您在真正意识到需要重定向之前就可以完成输出的一半,那么这是错误的逻辑。 这很浪费CPU。 最好的方法是在生成任何内容之前将所有可能指示重定向的逻辑移到该位置。
体面的MVC(或其他)框架将在开始呈现之前处理业务逻辑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.