簡體   English   中英

服務器上的PHP標頭問題

[英]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.phpredirect.php

您所描述的是簡單的PHP。 普通輸出無緩沖。 生成后立即將其發送到客戶端。 因此,開始處理200的內容后,您將無法向客戶端發送其他響應代碼。

修復非常簡單。 如果您認為需要在腳本中途更改方向,請緩沖輸出

<?php
    ob_start();
    include ("div.php");
    header("Location: redirect.php");

但這仍在啟動緩沖區並部分填充它。 如果您在真正意識到需要重定向之前就可以完成輸出的一半,那么這是錯誤的邏輯。 這很浪費CPU。 最好的方法是在生成任何內容之前將所有可能指示重定向的邏輯移到該位置。

體面的MVC(或其他)框架將在開始呈現之前處理業務邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM