2016-02-19 36 views
0

我需要做一些理論上聽起來很容易的事情,但我已經遇到很多問題,以便正確完成它。PHP載入第1頁,睡眠5秒,載入第2頁

添加了一層複雜性,因爲我運行的是自定義欺詐檢測腳本,但不應該對此產生任何影響。

基本上,我需要我的PHP代碼執行以下操作

-Load 1(通過包括()這樣的URL不會改變) -Show該網頁5秒 -Stop顯示第1頁,而是顯示第2頁(再次使用Include(),使URl保持不變)

任何想法?

最近我已經得到的是:

<?php 
 
ob_start(); 
 
include ("1b.html"); 
 
ob_clean(); 
 
sleep(5); 
 
include ("1c.html"); 
 

 
?>

,但它只是沒有顯示5秒鐘,彷彿頁面仍在加載,然後只顯示1C而沒有顯示1b 5秒鐘。

+0

乍一看我說你可能需要使用Javascript和AJAX調用。或者您可以預先加載內容,然後讓JavaScript更改可見的內容。一旦它加載的PHP頁面將無法重新加載或加載新的內容。 PHP是服務器端,所以一旦它將數據發送到瀏覽器就完成了。 – ckimbrell

回答

1

這是不可能的。這完全不是PHP如何工作的。您無法向用戶發送一個數據塊,然後將其發送給客戶端,並向客戶端發送一個新的數據blob。輸出緩衝不能以這種方式使用。

,但它只是沒有顯示5秒鐘,彷彿頁面仍在加載,

這是因爲頁面仍在加載。你正處於HTTP請求的中間,並且你告訴PHP要求sleep 5秒鐘。


爲了使這項工作,你需要兩個部分發送到客戶端,並在JavaScript,編程隱藏第一部分和顯示5秒

或者

之後的第二

將第一部分發送給用戶,並且(通過元刷新或JavaScript)在5秒後重新加載頁面,並使用一些信號(例如查詢字符串參數)將會話狀態提供給secon d頁面的內容給用戶。

+0

謝謝,一些很好的建議。 選項2的任何示例代碼?如果我使用查詢字符串重新加載頁面,如何僅加載第二頁而不呈現第一頁? 選項1似乎不是一種可能性。 –

0

它爲我的作品:

<?php 
if(session_status() == PHP_SESSION_NONE) session_start(); 

if(!isset($_SESSION['loaded'])) { 
    $_SESSION['loaded'] = 0; 
} 

if($_SESSION['loaded'] == 0) { 
    include('page1.php'); 
} 
elseif($_SESSION['loaded'] == 1) { 
    include('page2.php'); 
} 
elseif($_SESSION['loaded'] == 2) { 
    include('page3.php'); 
} 
else { 
    $_SESSION['loaded'] = 0; 
    die(header("Refresh:0")); 
} 

if(isset($_SESSION['loaded'])) { 
    $_SESSION['loaded']++; 
    die(header("Refresh:5")); 
} 

- 編輯:只有一次:

<?php 
if(session_status() == PHP_SESSION_NONE) session_start(); 

if(!isset($_SESSION['loaded'])) { 
    $_SESSION['loaded'] = 0; 
} 

if($_SESSION['loaded'] == 0) { 
    include('page1.php'); 
    $_SESSION['loaded']++; 
    die(header("Refresh:5")); 
} 
elseif($_SESSION['loaded'] == 1) { 
    include('page2.php'); 
} 

希望我幫助:)

+0

獲取警告:無法修改標題信息 - 已由第21行發送的標題(die(header(「Refresh:5」));)。已經檢查過沒有BOM的空格和UTF 8,所以我認爲這確實是發送頭兩次的問題。 似乎正在做它的工作壽命。加載文件1,如果我刷新它加載文件2. –

+0

好吧,我已經得到它所有的工作。我現在唯一遇到的問題是它在5秒後不斷刷新頁面。我希望它在5秒後刷新一次,然後保持該頁面。那可能嗎? –

+0

看看我的編輯 @YannickDeGroote – Ben

相關問題