Carbon-Forum 源码走读

前言

工作需要写一个简单的网站,就学习了下PHP,读了一套小型的论坛网站的代码,这里通过博客记录一下这几天的工作过程。

正文

首先是选择变成语言,虽然我懂Java,可是PHP这类脚本语言的入门不会太久,并且对于web开发,PHP市场占有率貌似达到百分之八十多,有问题也便于解决,所以呢,我们就选择了PHP。关于小型的论坛网站,在github上找了几个,貌似有比carbon小的,但是因为版本问题,没有跑通,我就没有去详细调试,直接选用了比较小的Carbon-Forum。github链接
使用的话,就是解压到安装的apache的目录下,修改权限,然后在浏览器打开localhost/install网页,按内容填写,就可以进行安装了。主要调用过程是运行了./install/index,php文件。下面我们看下,代码还是很简单的。

<meta charset="utf-8">

<?php
@set_time_limit(0);
......

//这里是点击提交代码的时候
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    $fp = fopen(__DIR__ . '/database.sql', "r") or die("SQL文件无法打开。  The SQL File could not be opened.");
    //dobefore
    if (isset($_POST["Language"]) && isset($_POST["DBHost"]) && isset($_POST["DBName"]) && isset($_POST["DBUser"]) && isset($_POST["DBPassword"])) {
        $Language = $_POST['Language'];
        $DBHost = $_POST['DBHost'];
        $DBName = $_POST['DBName'];
        $DBUser = $_POST['DBUser'];
        $DBPassword = $_POST['DBPassword'];
        $SearchServer = $_POST['SearchServer'];
        $SearchPort = $_POST['SearchPort'];
        $EnableMemcache = $_POST['EnableMemcache'];
        $MemCachePrefix = $_POST['MemCachePrefix'];
    } else {
        die("An Unexpected Error Occured!");
    }
    //$WebsitePath = $_POST['WebsitePath'];
    $WebsitePath = $_SERVER['PHP_SELF'] ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME'];
    if (preg_match('/(.*)\/install/i', $WebsitePath, $WebsitePathMatch)) {
        $WebsitePath = $WebsitePathMatch[1];
    } else {
        $WebsitePath = '';
    }
    //初始化数据库操作类
    require('../library/PDO.class.php');
    //为了安全性
    $DB = new Db($DBHost, 3306, '', $DBUser, $DBPassword);
    $DatabaseExist = $DB->single("SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = :DBName", array('DBName' => $DBName));
    if (empty($DatabaseExist)) {
        $DB->query("CREATE DATABASE IF NOT EXISTS " . $DBName . ";");
    }

//生成db类,可以操作数据库
    $DB = new Db($DBHost, 3306, $DBName, $DBUser, $DBPassword);
    //数据库安装
    while ($SQL = GetNextSQL()) {
        $DB->query($SQL);
    }
    //这里是一些动态数据,写入数据库
    $DB->query("INSERT INTO `" . PREFIX . "config` VALUES ('WebsitePath', '" . $WebsitePath . "')");
    $DB->query("INSERT INTO `" . PREFIX . "config` VALUES ('LoadJqueryUrl', '" . $WebsitePath . "/static/js/jquery.js')");
    $DB->query("UPDATE `" . PREFIX . "config` SET `ConfigValue`='" . date('Y-m-d') . "' WHERE `ConfigName`='DaysDate'");
    $DB->query("UPDATE `" . PREFIX . "config` SET `ConfigValue`='" . $Version . "' WHERE `ConfigName`='Version'");
    $DB->CloseConnection();
    fclose($fp) or die("Can’t close file");

    //写入config文件
    $ConfigPointer = fopen(__DIR__ . '/config.tpl', 'r');
    $ConfigBuffer = fread($ConfigPointer, filesize(__DIR__ . '/config.tpl'));
    $ConfigBuffer = str_replace("{{Language}}", $Language, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{DBHost}}", $DBHost, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{DBName}}", $DBName, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{DBUser}}", $DBUser, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{DBPassword}}", $DBPassword, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{SearchServer}}", $SearchServer, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{SearchPort}}", $SearchPort, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{EnableMemcache}}", $EnableMemcache, $ConfigBuffer);
    $ConfigBuffer = str_replace("{{MemCachePrefix}}", $MemCachePrefix, $ConfigBuffer);

    fclose($ConfigPointer);
    $ConfigPHP = fopen("../config.php", "w+");
    fwrite($ConfigPHP, $ConfigBuffer);
    fclose($ConfigPHP);

    //写入htaccess文件
    $HtaccessPointer = fopen(__DIR__ . '/htaccess.tpl', 'r');
    $HtaccessBuffer = fread($HtaccessPointer, filesize(__DIR__ . '/htaccess.tpl'));
    $HtaccessBuffer = str_replace("{{WebSitePath}}", $WebsitePath, $HtaccessBuffer);
    //Server Software Type
    if (isset($_SERVER['HTTP_X_REWRITE_URL'])) {//IIS(ISAPI_Rewrite)
        $HtaccessBuffer = str_replace("{{RedirectionType}}", "[QSA,NU,PT,L]", $HtaccessBuffer);
    } else {//Others
        $HtaccessBuffer = str_replace("{{RedirectionType}}", "[L]", $HtaccessBuffer);
    }
    fclose($HtaccessPointer);
    $Htaccess = fopen("../.htaccess", "w+");
    fwrite($Htaccess, $HtaccessBuffer);
    fclose($Htaccess);

    //rewrite文件配置
    $Message = '安装成功。<br />Installed successfully! <br /><a href="../register">点我马上注册管理员账号<br />The first registered users will become administrators.</a>';

    if (!file_exists('install.lock')) {
        touch('install.lock');
    }
    if (!file_exists('../update/update.lock')) {
        touch("../update/update.lock");
    }

} 
......

//从文件中逐条取SQL
function GetNextSQL()
{
    global $fp;
    $sql = "";
    while ($line = fgets($fp, 40960)) {
        $line = trim($line);
        //以下三句在高版本php中不需要,在部分低版本中也许需要修改
        /*
        $line = str_replace("","//",$line);
        $line = str_replace("/’","’",$line);
        $line = str_replace("//r//n",chr(13).chr(10),$line);
        */
        //$line = stripcslashes($line);
        if (strlen($line) > 1) {
            if ($line[0] == "-" && $line[1] == "-") {
                continue;
            }
        }
        $sql .= $line . chr(13) . chr(10);
        if (strlen($line) > 0) {
            if ($line[strlen($line) - 1] == ";") {
                break;
            }
        }
    }
    return $sql;
}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh-cmn-Hans" lang="zh-cmn-Hans">
//这里及时html文件,这里只关注PHP相关部分
</html>

其实这里逻辑非常简单,第一次浏览器打开是通过get方法,PHP进行判断,如果是通过form的post的方法,那么就开始初始化数据库, 如果不是,那么就要显示基本的html,用来注册。我们只要关注那个判断语句即可:
/database.sql这个文件存储了初始化数据库的所有文件,还需要判断form里面的东西是否初始化完全,,然后是通过dbdao初始化了数据库,生成一个confing.php文件,生成一个锁文件,最终显示安装完成,

后记

本来想着写长一点,但是忽然发现有些简单,浪费时间,就不好了,看看以后如何完成全部。

Carbon Forum 论坛系统 v5.9.0 更新日志 增加了API(文档); 调整风格; 增强代码可读性; 注册时不需要输入密码两次; 在页面底部显示网站名称; 以圆形显示所有头像; 在移动版本中创建新主题之前,请按标签自动输入密码; 更新appframework ui; 优化移动版缓存机制; 添加俄语语言包; 添加HTML5音频标签支持; 更改SyntaxHighlighter样式; 修复需要双击返回键的移动版本生效的错误; 新编辑风格; 修正了一些草案问题; 修复将NavBar的位置设置; 服务器端请求伪造(SSRF); 自动跳转到可能的通知标签; 修复了使用一些旧版本的MySQL驱动程序可能导致的问题。 Carbon Forum 论坛系统简介 Carbon Forum,一个高性能的、高安全性的、基于话题的PHP轻论坛。 优秀的架构,高效的代码,每个页面平均执行时间仅为1~5毫秒,同时恰当地使用异步加载技术,在SEO与用户体验间取得平衡。 论坛摒弃了版块、节点等概念,发帖时无需选择板块,系统根据帖子内容自动推荐话题供用户选择,并且有功能强大而不显冗余的富文本编辑器。 支持关注用户、关注话题等功能,可以作为一个社交网站使用。 Carbon Forum 论坛系统安装环境要求: PHP版本高于5.3.6,并打开PDO_MYSQL(PHP 5.3以上默认支持PDO_MySQL,如果不支持请联系服务商) 支持.htaccess文件的解析(即Apache mod_rewrite) Carbon Forum 论坛系统安装步骤: 1、解压后将Carbon-Forum-master文件夹上传至服务器,并确保整个目录可读可写。 2、运行http://你的域名/install (将http://www.yourdomain.com/替换为你自己的域名)安装,安装完成后删除install文件夹。 3、安装完成后第一个注册用户会自动成为管理员。 4、如果需要额外的话题建议拓展包,请登陆官网下载(请勿通过中国移动线路访问) 如果你觉得这个项目对你有用,请到官网上给本项目一个star。 Carbon Forum 论坛系统页面展示    相关阅读 同类推荐:站长常用源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值