如何防止页面在PHP中一起运行或合并



我有两个页面,都是PHP的,但是在查看页面时,服务器将两者组合在一起,并将它们作为一个页面提供服务。我如何防止这种情况,并收到两个单独的页面?超级全局变量在我的环境中是受限的,而且没有javascript。

  1. 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>
  1. 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>
&nbsp;
</div>
</form>
</html>

那么我如何将页面彼此分开,并使服务器将它们作为两个单独的页面提供服务呢?

@Barmar提出的建议是一个开始,但并没有让我立足于本垒。通过使用第三个文件来管理两个文件之间的重定向,问题得到了解决。整个过程如下图所示。

工艺流程图

  1. index . php

为了使用条件来管理重定向,在这个文件上仍然方便使用require_once。唯一改变的是所需的文件,它是重定向管理器文件start.php

require_once (start.php)
  • Start.php
  • 这个文件是这个问题的新添加和发现的解决方案。它使用条件来测试应该将用户转发到哪个页面。

    if (strcmp($user_secret, $server_secret)
    {
    header('Location: index.php')
    }
    else //inferred not actual
    {
    header('Location: captcha.php')
    }
    
  • 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>
    &nbsp;
    </div>
    </form>
    </html>
    <?php
    }
    ?>
    

    并且,它的工作原理和我所希望的完全一样。代码更简单,更直接,并且过程更少令人困惑。

    相关内容

    • 没有找到相关文章

    最新更新