在PHP中为Dynamic页面创建临时URL

时间:2016-09-15 16:56:01

标签: php

我正在生成对帖子请求的php响应,如下所示

<?php
ob_start();
include_once('includes/headers.php');
require_once('includes/connection.php');
require_once('includes/functions.php');
?>

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
</head>
<?php
include($filePath);
?>

这很有效。

但我有一个不同的用例。

我想获取此页面的输出并创建一个页面。

然后向用户发送该页面的链接。

所以响应只是一个链接。

用户完成后,页面将被销毁,无需存储。

如何在PHP中完成。

1 个答案:

答案 0 :(得分:1)

实现您想要的直接技术:

  1. 使用mod_rewirte和.htaccess设置“漂亮网址”
  2. 有一个index.php来接收请求并处理它们:
  3. 为每个“页面”动态创建一个哈希键,将其存储在数据库(例如MySQL)中。
  4. “特殊”网址将根据您的域名路径和每个网页的哈希键构建(例如http://www.my-domain.com/pages/azXi39444
  5. 当用户输入URL时,他将获得与他在URL中使用的密钥相关的输出,并且哈希密钥将从数据库中删除(标记为“已删除”)
  6. 因此,您创建页面,构建URL(如上所述) - 并将其作为对用户的响应发回。

    我不会介绍如何设置mod_rewirte和.htaccess,但这里有一个指向简单指南的链接: https://code.tutsplus.com/tutorials/using-htaccess-files-for-pretty-urls--net-6049

    .htaccess文件的示例:

    RewriteEngine ON
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php?url_params=$1 [L,QSA]
    

    这可以是index.php(伪代码)的简单示例:

    <?php
        $params = explode('/',$_GET['url_params']);
        $hash = $params[0];
    
        // not a real database adapter - but you get the idea..
        $db = new DatabaseAdapter('username','password','database');
    
        $result = $db->querySingle("SELECT pageFileName FROM tb_Pages WHERE hash = %1", $hash);
    
        if($result){
    
            // delete the used hash
            $db->query("DELETE FROM tb_Pages WHERE hash = %1", $hash);
    
            // include the path of the page for display
            include('/mySecretFolder/'.$result->pageFileName );
    
        }else{
    
            echo 'Page not found';
            exit;
    
        }
    ?>
    

    如果您希望页面完全是虚拟的,您可以放弃包含实际文件的概念并将页面内容存储在数据库表中,然后从数据库中提取数据并相应地显示页面hash \ id得到了。

    用于存储虚拟页面的数据库表的伪示例:

    CREATE TABLE tb_Pages
    (
      PageID INT AUTO_INCREMENT,
      CreateDate Timestamp,
      HashKey VARCHAR(100) NOT NULL,
      HtmlContent TEXT,
      INDEX(HashKey),
      PRIMARY KEY(PageID)
    )ENGINE=InnoDB CHARACTER SET utf8;
    

    使用这种方法,您可以使用.htaccess,url rewrite,index.php和生成的哈希键的相同概念,但不是包含实际文件 - 您从数据库中获取页面内容并回显它。

    希望它有所帮助。