V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luguiyao
V2EX  ›  PHP

探讨当年 discuz 出品的 5d6d 是怎么实现的

  •  1
     
  •   luguiyao · 2020-02-26 20:03:05 +08:00 · 10514 次点击
    这是一个创建于 1493 天前的主题,其中的信息可能已经有所发展或是发生改变。

    先说说 5D6D 实现了哪些功能,解决了哪些需求吧

    1.5D6D 注册后自动生成 discuz 论坛,解决了部署方便快捷的需求;

    2.5D6D 生成的论坛核心程序是同一个,并不会同样的程序生成多份(当年我向管理反映问题时,管理在论坛目录下创建了个临时文件进行调试,我在另外论坛下访问同样可以访问到,从这点可以进行佐证)。解决的是统一管理,便于维护的需求;

    3.附件和数据表可以导出,数据独立,(貌似一开始是需要花金币才可以导出,最后需要购买官方虚拟主机才可以导出)。数据机动灵活,随时可以拆分。

    然后说说我的猜想,可能说得不对,望大佬指正

    第 1 点实现应该不难,生成的数据表应该加了字段,很可能是根据在 5D6D 上注册用户的 UID 来关联的;

    第 2 点把临时文件和附件路径同样做了修改,应该也是根据 UID 来分别存放的;

    第 3 点实现方式同第 2 点一样。

    我想到的一些疑问:

    以上方面实现后,怎么通过访问域名来判断识别要展示的某个论坛呢?因为程序是同一个,配置的数据库也是同一个,按一般的情况,多个域名绑定在同一台服务器上,展示的内容是一样的。这里是通过 HTTP_HOST 获取关联的 UID 然后读取对应论坛的数据么?那么数据库其实只有一个吧?但是很奇怪,当时我申请数据导出的时候,获取到的是数据库原文件(也就是直接在数据库目录下打了个压缩包给我,并不是导出的 sql 文件),如果是统一在一个数据库里肯定是通过 SQL 语句 where uid 来导出才是。

    我想到的暂时只有这些,想了解一下真实的情况(如果有当年参与该项目的大佬看到的话),或者有经验的大佬们说说最有可能实现的方法,还有我没有想到的一些技术上的难题。

    以上纯属小白的一些疑问和猜想,想得比较简单,请各位大佬们不要见笑,为小白扩展下知识。

    57 条回复    2020-02-29 18:39:11 +08:00
    lhx2008
        1
    lhx2008  
       2020-02-26 20:11:26 +08:00 via Android
    站抖没了。。现在要弄肯定是 docker
    shansing
        2
    shansing  
       2020-02-26 20:52:12 +08:00
    我曾想仿照 WordPress MU 制作 Typecho MU,自己想的大概是独立数据库+独立用户目录+通过 Host 分配的方法。总之我觉得“因为程序是同一个,配置的数据库也是同一个”不对。程序肯定是要进行二次开发的,不会跟原来一模一样。说不定思路就是独立数据库。
    luguiyao
        3
    luguiyao  
    OP
       2020-02-26 21:10:47 +08:00
    @shansing 用独立数据库的话,怎么调用数据库是个问题吧
    mayx
        4
    mayx  
       2020-02-26 21:17:39 +08:00 via Android
    我觉着可能和负载均衡的原理差不多
    luguiyao
        5
    luguiyao  
    OP
       2020-02-26 21:20:21 +08:00
    @mayx 负载均衡是针对同一站点的,5D6D 虽然是同一程序,但是访客访问的时候显然是独立的站点
    batnss
        6
    batnss  
       2020-02-26 21:53:55 +08:00
    硬逻辑 先生成多个程序和数据库 ; 然后看看哪里可以减; 一个个减下来
    areless
        7
    areless  
       2020-02-26 22:03:14 +08:00
    搞过单数据库多用户自主创建的 WordPress……简单的用一个四级域名产生一组标识,标注该 WordPress 归属于谁,并不新建 table。
    xcai
        8
    xcai  
       2020-02-26 22:05:02 +08:00 via Android
    @luguiyao 你可能忘记了表前缀这东西
    veDone
        9
    veDone  
       2020-02-26 22:07:51 +08:00
    虽然不懂你们在说什么,但是 10 多年前我小学五六年级用 5d6d 建了一个口袋妖怪游戏论坛。由于插件限制,5d6d 没有提供当时各大私人论坛非常火爆的“无心宠物”等其他游戏娱乐插件。让我一个小学生,第一次接触到了 PHP/Mysql 数据库等计算机技术。申请免费的国外空间,建了我第一个 BBS。都是回忆啊。
    GM
        10
    GM  
       2020-02-26 22:27:56 +08:00
    根据你的描述: [当时我申请数据导出的时候,获取到的是数据库原文件(也就是直接在数据库目录下打了个压缩包给我,并不是导出的 sql 文件]

    有且仅有一种可能:每个用户一个独立数据库。

    那么怎么切换数据库呢?
    我现在的公司有一个类似项目,大概原理如下( php 代码):

    $userId = getUserIdFromDomain();
    $groupId = getGroupIdFromUserId($userId);
    $dbHost = getDbHostByGroupId($groupId);
    $connStr = "mysql://{$dbHost}/{$userId}";

    $conn = mysql_connect($connStr);
    $result = mysql_query($conn, ....);
    luguiyao
        11
    luguiyao  
    OP
       2020-02-26 22:28:55 +08:00
    @xcai 可是官方给我的数据库表前缀是默认的,而且给的是没有修改过的源文件(文中最后有提到)
    luguiyao
        12
    luguiyao  
    OP
       2020-02-26 22:31:40 +08:00
    @GM 你的回答应该就是真相了
    porwyn
        13
    porwyn  
       2020-02-26 22:39:11 +08:00
    想起以前也折腾过
    qq292382270
        14
    qq292382270  
       2020-02-26 22:45:06 +08:00
    数据库是独立的,文件同一个就没啥了.
    没记错的话站长只有登录后台管理的功能,所以不同站点修改的东西只体现在数据库里,对文件无影响.
    WordPress 也有这样的功能,可以无限创建分站.
    y0bcn
        15
    y0bcn  
       2020-02-26 22:53:34 +08:00
    @veDone +1,都是回忆,当年要申请的时候 5d6d 已经不开放了,当时 phpwind 也有一个,也不开放了,后来有了一个 mf530,玩了好久
    g5hdyd
        16
    g5hdyd  
       2020-02-26 23:00:29 +08:00   ❤️ 1
    当年就是加了个 site_id
    keepeye
        17
    keepeye  
       2020-02-26 23:14:26 +08:00
    可能根据不同的域名连接不同的数据库?
    CRight
        18
    CRight  
       2020-02-26 23:21:37 +08:00
    我的领地。满满都是回忆,申请也一点都不困难,也没实名制什么的。
    yulon
        19
    yulon  
       2020-02-27 00:41:03 +08:00
    就是虚拟主机只给你论坛的后台,连什么 docker、虚拟化都不用,多用户就行了,可能多用户都不用,HTTP 协议本来就可以区分域名
    cnzfq
        20
    cnzfq  
       2020-02-27 00:59:02 +08:00 via iPhone
    @qq292382270 请问 WordPress 同样的功能怎么实现?有现成的插件吗?
    xiaoyanbot
        21
    xiaoyanbot  
       2020-02-27 07:54:07 +08:00
    修改 php 程序, 根据不同的访问域名, 链接不同的数据库即可
    hopboy
        22
    hopboy  
       2020-02-27 08:30:43 +08:00   ❤️ 1
    5d6d
    lunqun
    topzj
    满满都是回忆
    leonard916
        23
    leonard916  
       2020-02-27 09:01:29 +08:00
    這種應該是加載一套配置文件,代碼都是一樣的。
    youx
        24
    youx  
       2020-02-27 09:35:17 +08:00
    发展轨迹是:WEB 在线聊天室 -- BBS 论坛 -- QQ 群 -- 微信群
    krixaar
        25
    krixaar  
       2020-02-27 10:10:56 +08:00   ❤️ 1
    @cnzfq multisite,自带功能,去 wp-config 里加个参数就开了
    yu1u
        26
    yu1u  
       2020-02-27 10:51:22 +08:00
    没人想起 phpwind 吗
    yu1u
        27
    yu1u  
       2020-02-27 10:51:48 +08:00
    还有 uueasy.ocom 免费论坛
    tzheng
        28
    tzheng  
       2020-02-27 10:53:41 +08:00 via iPhone
    既然大家都在报菜名我就跟风回忆一下 70bb
    Keyes
        29
    Keyes  
       2020-02-27 10:54:30 +08:00
    5d6d,这个简直暴露年龄,没想到还有人记着
    WinG
        30
    WinG  
       2020-02-27 10:57:11 +08:00
    知道 5d6d 至少已经 30 了吧。
    ccc008
        31
    ccc008  
       2020-02-27 11:02:25 +08:00
    回想起来,那时候的互联网环境简直是宽松的不要不要。
    coosir
        32
    coosir  
       2020-02-27 11:03:14 +08:00
    1. 每个站用独立的数据库
    2. 所有站用同一套代码
    3. 访问不同子域名对应不同站点,走对应站点的数据库
    fuxkcsdn
        33
    fuxkcsdn  
       2020-02-27 11:21:36 +08:00
    在入口文件根据子域名加载不同的配置文件,数据库独立(简单,但 ddl 的时候必须每个数据库都执行)或者用个 site_id 做区分(麻烦,得修改 discuz 源码)

    伪代码
    ```php
    $subDomain = $_SERVER['SERVER_NAME'];
    $domainMap = require(GLOBAL_CFG_PATH . '/domain.map.php');

    if (!isset($domainMap[$subDomain]) {
    // redirect to 5d6d home page
    }

    $config = require(SUBDOMAIN_CFG_PATH . $domainMap[$subDomain] . '/config.php');

    // 常规的 discuz 流程
    ```

    添加站点的时候也无非就是修改 domain.map.php 文件(用缓存的话就是写入缓存),然后拷贝一份配置模板到指定目录

    nginx 或 apache 那边 server_name 配置成支持通配符即可
    type
        34
    type  
       2020-02-27 11:23:31 +08:00
    @ccc008 黄金时代
    chinvo
        35
    chinvo  
       2020-02-27 11:26:14 +08:00 via iPhone
    @shansing #2 在入口用域名查 admin 库的数据得到对应的数据库配置,然后设置 typecho 的数据库

    5d6d 应该也是这样的逻辑
    hiyouli
        36
    hiyouli  
       2020-02-27 11:32:10 +08:00
    这么多年竟然还有人记得 5D6D,我的领地。哈哈哈。
    哎,都是回忆。
    zsen
        37
    zsen  
       2020-02-27 11:41:30 +08:00
    @luguiyao 改过商城和 WP 系统,根据域名调用对应的配置文件(简单一点就配置文件名与域名一样就好了)。
    然后配置文件中有数据库配置、上传文件目录、模版文件目录等等

    除了程序是一样的,数据库、图片、文件等等都是独立的。甚至可以针对单独的站点做一些小的个性化的功能开发。
    shansing
        38
    shansing  
       2020-02-27 12:21:13 +08:00
    @cnzfq 记得很久以前 WordPress MU 就并入 WordPress 了,你去网上找找看。
    Zheming
        39
    Zheming  
       2020-02-27 12:34:31 +08:00 via iPhone
    我还申请过,我还没 30
    WeAreNoName
        40
    WeAreNoName  
       2020-02-27 13:04:50 +08:00   ❤️ 1
    @WinG 我 23,当年玩 5d6d 很疯狂。5d6d 让我选择了计算机专业
    xmoer
        41
    xmoer  
       2020-02-27 13:25:27 +08:00
    哇,现在居然还有人讨论 5D6D,满满的都是回忆。
    soho176
        42
    soho176  
       2020-02-27 13:25:28 +08:00
    当时我高中,也是用 5d6d 搞了一个论坛
    stillyu
        43
    stillyu  
       2020-02-27 13:42:08 +08:00
    没搞过 5d6d,但是用 discuz 折腾过论坛,用国外的免费空间,域名在 ename 上买的。
    当时是高中,一个月放一次假,每周六下午可以出去玩,别人去网吧玩游戏,我去网吧搭论坛。。。
    mzsongyan
        44
    mzsongyan  
       2020-02-27 14:13:11 +08:00
    @stillyu 哈哈,跟我一样,当年我也是通宵在网吧搞论坛
    julyclyde
        45
    julyclyde  
       2020-02-27 18:17:20 +08:00
    就是拿 host header 来识别的
    内部有个查询表,绑定域名、5d6d 内部域名,对应一组设置,包括数据库信息、附件路径之类的内容
    julyclyde
        46
    julyclyde  
       2020-02-27 18:20:48 +08:00
    其实还有个字段,就是“这个论坛在哪组服务器上”
    这个字段用于创建删除论坛、DNS 映射等
    RickyC
        47
    RickyC  
       2020-02-27 19:55:41 +08:00
    多用户论坛, 难点在哪里?
    edk24
        48
    edk24  
       2020-02-27 20:44:34 +08:00
    5d6d 好像是 discuz 7.2? 我刚开始接触网络的时候还在. 今年 23 了都
    alect
        49
    alect  
       2020-02-27 20:48:14 +08:00
    让我想起 WordPress MU
    wuxingsanren
        50
    wuxingsanren  
       2020-02-27 23:02:08 +08:00
    提起 5d6d,不经意间暴露你年龄的尺码。。
    akira
        51
    akira  
       2020-02-27 23:14:51 +08:00
    @cnzfq wp 有多用户版本
    iihho
        52
    iihho  
       2020-02-27 23:39:43 +08:00
    初中的时候开的 5d6d 班级论坛,现在 26 了,然而很遗憾并没有走计算机路线,有些后悔
    huangweipeng
        53
    huangweipeng  
       2020-02-28 09:15:03 +08:00
    都是回忆呀
    JingKeWu
        54
    JingKeWu  
       2020-02-28 12:30:27 +08:00
    @fuxkcsdn 那时候没有 nginx
    julyclyde
        55
    julyclyde  
       2020-02-28 14:11:19 +08:00
    @JingKeWu 那时候有 nginx 的。也有 php-fastcgi
    feedcc
        56
    feedcc  
       2020-02-28 16:33:55 +08:00 via Android
    已经在写了,penlogs.com 邀请码 assbbs
    yanheqi
        57
    yanheqi  
       2020-02-29 18:39:11 +08:00
    D6D 那时候我用过。技术面的东西不懂。反正那时候我也弄过免费 5D6D 论坛。
    之前还有个 锋行天下 5d6d 影视论坛,我还在里面。我自己也弄过自己的 5d6d 免费论坛。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2880 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:48 · PVG 21:48 · LAX 06:48 · JFK 09:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.