我需要做一些理论上听起来非常简单的事情,但我已经遇到了很多问题来正确地完成它。
因为我正在运行一个自定义的欺诈检测脚本,所以增加了一层复杂性,但这应该不会对此产生任何影响。
基本上,我需要我的PHP代码来完成以下工作
包含页面1(通过-Load ()以使URL不变)包含该页面5秒以显示页面1,而不是显示页面2(再次使用-Show ()以使URl保持不变)
有什么想法吗?
我得到的最接近的结果是:
<?php
ob_start();
include ("1b.html");
ob_clean();
sleep(5);
include ("1c.html");
?>
但它只在5秒内什么也不显示,就好像页面仍在加载一样,然后在5秒内只显示1c而不显示1b。
发布于 2016-02-20 03:21:29
这是不可能的。这根本不是PHP的工作方式。您不能将一大块数据发送给用户,然后对其进行编辑,然后再将新的数据块发送到客户端。输出缓冲不能以这种方式使用。
,但它只在5秒内不显示任何内容,就像页面仍在加载一样。
这是因为页面仍在加载。您正处于HTTP请求的中间,并且您告诉PHP to sleep 5秒。
为此,您需要将两个部分都发送到客户端,并在JavaScript中发送,以编程方式隐藏第一部分,并在5秒后显示第二部分
或
将第一部分发送给用户,并(通过元刷新或JavaScript)在5秒后重新加载页面,并使用一些信号,如会话状态的查询字符串参数,为用户提供第二个页面的内容。
发布于 2016-02-20 03:25:45
它对我来说很有效:
<?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');
}希望我能帮上忙:)
https://stackoverflow.com/questions/35513068
复制相似问题