我最近从godaddy转到了letshost。我的虚拟主机。但是,我的脚本都不能在新的letshost服务器上工作。
所以我做了一些修补,下面是我发现的:
当一个php头函数和一个php include在同一个文件中使用时,会抛出一个错误。重定向头函数只在脚本中没有包含内容时才会起作用。
以下脚本:
<?php
include ("div.php");
header("Location: redirect.php");
?>
可以在这里查看。我得到的错误是
警告:无法修改报头信息-报头已由(输出开始于/home/michae28/public_html/header/div.php:2/home/michae28/public_html/header/withinclude.php第3行
下面的脚本,尝试用头函数执行相同的重定向,除了它没有php include。
<?php
header("Location: redirect.php");
?>
可以在这里看到。
让主机支持团队已经无法帮助我。一位工程师建议我的。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
您所描述的是简单的PHP。正常输出没有缓冲。一旦生成,它就被发送到客户端。在这种情况下,你不能发送另一个响应代码给客户端后,你已经开始你的200的内容。
修复方法很简单。如果您认为需要在脚本中途更改方向,请缓冲输出。
<?php
ob_start();
include ("div.php");
header("Location: redirect.php");
但这仍然是启动缓冲区并部分填充它。如果您在输出到一半时才意识到实际上需要重定向,那么这是糟糕的逻辑。这是浪费CPU。最好的方法是在生成任何内容之前移动所有可能指示重定向到的逻辑。
一个像样的MVC(或其他)框架将在它开始显示之前处理业务逻辑。