【问题标题】:Create a copy/ session of a site for demo purposes为演示目的创建站点的副本/会话
【发布时间】:2019-03-25 09:55:44
【问题描述】:

我编写了一个 PHP 电子商务网站,我将向潜在客户/买家展示。他们将能够创建和删除类别、产品、上传图像并随心所欲地使用网站和数据库进行游戏,甚至可以毫无疑问地删除所有内容。

这是产品的完整演示,用户可以使用演示管理员帐户访问,作为投资组合或说服小企业购买。

基本上我希望他们可以随意使用该网站,但我不想每次有人破坏它时手动恢复它。

所以我的想法是在每次访问者单击 URL 时创建站点和 MySQL 数据库的副本/会话,并在他们关闭浏览器时将其删除。新用户将获得该网站的全新原始副本。

伴随的访问者每个人都有自己的副本供使用。

谷歌搜索/Binging 这种事情的实现让我失败了。也许我说的不太对,但我没有发现任何接近我需要的东西。

因此,我寻求有关如何编写代码的指针的帮助。提前致谢。

【问题讨论】:

    标签: javascript php mysql session copy


    【解决方案1】:

    选项 1:

    您可以使用以下代码制作一个 php 文件:

    $command = "mysql --user={$vals['db_user']} --password='{$vals['db_pass']}' "
     . "-h {$vals['db_host']} -D {$vals['db_name']} < {$script_path}";
    
    $output = shell_exec($command . '/backup.sql');
    

    恢复数据库并清理您的数据库(在 SQL 文件中需要再次 DROP & CREATE 所有表)。

    要删除上传的文件,请执行以下操作:

    //The name of the folder.
    $folder = 'temporary_files';
    
    //Get a list of all of the file names in the folder.
    $files = glob($folder . '/*');
    
    //Loop through the file list.
    foreach($files as $file){
        //Make sure that this is a file and not a directory.
        if(is_file($file)){
            //Use the unlink function to delete the file.
            unlink($file);
        }
    }
    

    在一个文件(如 cron.php)中使用它们,然后在您的网站上添加一个按钮以由您的用户手动清除,您也可以将其添加到您的服务器 cronjob 以每小时/每天/每周/每月清除。

    选项 2:

    如果使用 CPanel - 您需要阅读 cPanel API 2 Functions。 使用 PHP 为用户创建子域,如下代码(API1 示例):

    $xmlapi->api1_query($cpanelusr, 'SubDomain', 'addsubdomain', array('user123','bodoamat.com',0,0, '/public_html/NewUserDirectory')
    

    然后复制你的 package.zip 并在 /public_html/NewUserDirectory 中提取它

    然后使用cPanel API 2 Functions 创建一个数据库和帐户。

    并使用此代码在用户配置文件中添加数据库用户名/密码/名称:

    $file_path= 'public_html/NewUserDirectory/config.php';
    // Open the file to get existing content
    $current = file_get_contents($file_path);
    
    $data_to_write = str_replace("DATABASE_USERNAME",$newdb_user,$current);
    $data_to_write = str_replace("DATABASE_PASSWORD",$newdb_pass,$data_to_write);
    $data_to_write = str_replace("DATABASE_NAME",$newdb_name,$data_to_write);
    
    file_put_contents($file_path, $data_to_write);
    

    每个用户都有一个子域供测试/使用。

    选项 3:

    您可以在域的 DNS 服务器中添加此子域(*.domain.ir 到您的 /public_html 目录)。

    在您的 PHP 代码中,您必须阅读域 ($_SERVER['REQUEST_URI']),然后为每个用户使用前缀表或其他数据库。 (例如,如果他们打开user1.domain.ir,则使用user_TABLENAME(如果存在)。)并为每个用户创建一个上传目录。

    【讨论】:

    • 哇,谢谢!这很有帮助。当我回到我的电脑时,我会尝试并报告。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 2019-12-01
    • 2019-02-03
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    相关资源
    最近更新 更多