2014-06-25 52 views
-1

在我們的網站中,我們正在實施免費註冊系統,以便我們可以允許人們訪問安全的個人信息,但是如果他們直接訪問它,我們需要這個文件重定向,任何幫助都會很大讚賞在MySQL進程無法重定向後使用頭文件

​​

這是我們出https://www.oursite.org/account/private/secure/activation/ 我們不斷收到此錯誤代碼:

Warning: Cannot modify header information - headers already sent by (output started at /route/to/site/public_html/account/private/secure/activation/index.php:9) in /route/to/site/public_html/account/private/secure/activation/index.php on line 17

.htaccess文件

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-d 
RewriteRule ^(.*)$ /?username=$1 

您可以通過帳戶/資料/?的用戶名=用戶訪問配置文件,但我試圖重寫它佔/型材/用戶/

+0

@弗雷德-II-我試圖審查文件,我找不到任何問題,它沒有空格等。 –

+0

你檢查的字節順序標記內的一個或所有文件?即使是一個cookie也算作輸出。另外,使用會話? –

+0

對此進行故障排除的方法是,一次嘗試一個文件而不包含。一旦你觸到了神經,你就會知道哪個文件正在做它。 –

回答

1

問題是你header通話只停留在HTML中的中間PHP邏輯恰好被髮送到瀏覽器。因此,在Apache解析發送它的HTML &時,技術上已經將標頭髮送給最終用戶。含義header不是由PHP調用的,但就Apache而言,純HTML等同於正在發送的內容,這相當於發送頭文件。

解決方案?重構你的邏輯在HTML呈現之前發生。

這個想法是,而不是echo馬上,它設置一個$message變量。所以你的邏輯在任何HTML被吐出之前都會發生。這種方式$message在發生任何事情之前被設置,然後$message的值可以傳遞給內聯PHP(如果需要的話)。如果header需要重定向?嗯,這只是發生在<!DOCTYPE html>發生前:

<?php 

include("../../account/core/init.php"); 
logged_in_redirect(); 

$message = '' 
if(isset($_GET['email'], $_GET['email_code'])) { 
    $message = 'This is where the account will be activated'; 
} 
else { 
    header('Location: https://www.oursite.org/'); 
    exit(); 
} 

?><!DOCTYPE html> 
<html lang="en"> 
<head> 
<?php include '../../bundles/base/inc/head.php'; ?> 
</head> 
<body> 
    <?php include("../../bundles/base/inc/header.php"); ?> 
    <div class="container page clearfix account-activation"> 
    <?php echo $message; ?> 
</div> 
<?php include("../../bundles/base/inc/footer.php"); ?> 
</body> 
</html> 
0
Warning: Cannot modify header information - headers already sent by....... 

意味着你已經寫出來的內容並且服務器已經開始將響應流式傳輸給客戶端。您不能修改標題,因爲它們已經發送。

將標題生成代碼移至寫入第一個輸出之前的某個點。

移動此代碼到報頭到頁面的頁,其中:如在此提到的

<?php if(isset($_GET['email'], $_GET['email_code'])) { 
     echo 'This is where the account will be activated'; 
    } else { 
     header('Location: https://www.oursite.org/'); 
     exit(); 
    } 

https://stackoverflow.com/a/8028987/3739658

修改HTTP報頭的一些功能是:

+0

我在這之前沒有任何標題,除了在我的函數文件中,但所有標題都包含在函數 –

+1

「我在此之前沒有任何標題...」是的,你這樣做。第二種情況是,任何純HTML都會發送到觸發標頭輸出的瀏覽器。看看我的答案,找到一個實際的解決方案,告訴你我的意思。 – JakeGould

0

用途: -

ob_start(); 
ob_clean(); 

確保ob_start()是在網頁中的第一行。

// clean the output buffer 
ob_clean();