我有两个页面,都是PHP的,但是在查看页面时,服务器将两者组合在一起,并将它们作为一个页面提供服务。我如何防止这种情况,并收到两个单独的页面?超级全局变量在我的环境中是受限的,而且没有javascript。
- Page One (index.php)
这是该站点的索引页。我想要求用户在查看此页面之前正确输入验证码。
<?php
require_once __DIR__ . '/captcha.php';
?>
<!doctype html>
<html lang="en">
<head>
<title>You Win!</title>
<meta charset="utf-8" />
</head>
<body>
<h1>You Really Win!</h1>
<h2>Win Baby, Win!</h2>
</body>
</html>
- Page Two (captcha.php)
这是验证码所在的页面,也是我想在索引页之前首先出现的页面。
<?php
//To save time and space, This page is highly abbreviated from the actual php file.
require_once __DIR__ . '/vendor/autoload.php';
use GregwarCaptchaPhraseBuilder;
use GregwarCaptchaCaptchaBuilder;
$captcha = new CaptchaBuilder;
$captcha->build();
$phrase = $captcha->getPhrase();
$phrase = $_SESSION['phrase'];
$check_phrase = PhraseBuilder::comparePhrases($_SESSION['phrase'], $_POST['phrase']);
if (isset($_SESSION['phrase']) && $check_phrase === true)
{
header('Location: ' . __DIR__ . '/index.php');
exit;
}
?>
<!DOCTYPE html>
<html lang="en">
<form method="post">
<div>
Copy the CAPTCHA:
</div>
<div>
<img src="<?php echo $captcha->inline(); ?>" alt="Captcha"/>
</div>
<br>
<div>
<label>
<input type="text" name="phrase" />
</label>
<input type="submit" />
</div>
<br>
<div>
</div>
</form>
</html>
那么我如何将页面彼此分开,并使服务器将它们作为两个单独的页面提供服务呢?
@Barmar提出的建议是一个开始,但并没有让我立足于本垒。通过使用第三个文件来管理两个文件之间的重定向,问题得到了解决。整个过程如下图所示。
工艺流程图
- index . php
为了使用条件来管理重定向,在这个文件上仍然方便使用require_once
。唯一改变的是所需的文件,它是重定向管理器文件start.php
。
require_once (start.php)
- Start.php
- captcha.php
这个文件是这个问题的新添加和发现的解决方案。它使用条件来测试应该将用户转发到哪个页面。
if (strcmp($user_secret, $server_secret)
{
header('Location: index.php')
}
else //inferred not actual
{
header('Location: captcha.php')
}
除了便于使用require_once
使用其中的条件来引导使用到索引页之外,文件中也没有什么变化。
<?php
require_once __DIR__ . '/vendor/autoload.php';
use GregwarCaptchaPhraseBuilder;
use GregwarCaptchaCaptchaBuilder;
$captcha = new CaptchaBuilder;
$captcha->build();
$phrase = $captcha->getPhrase();
$phrase = $_SESSION['phrase'];
$check_phrase = PhraseBuilder::comparePhrases($_SESSION['phrase'], $_POST['phrase']);
if (isset($_SESSION['phrase']) && $check_phrase === true)
{
require_once 'start.php';
}
?>
<form method="post">
<div>
Copy the CAPTCHA:
</div>
<div>
<img src="<?php echo $captcha->inline(); ?>" alt="Captcha"/>
</div>
<br>
<div>
<label>
<input type="text" name="phrase" />
</label>
<input type="submit" />
</div>
<br>
<div>
</div>
</form>
</html>
<?php
}
?>
并且,它的工作原理和我所希望的完全一样。代码更简单,更直接,并且过程更少令人困惑。