探讨当年 discuz 出品的 5d6d 是怎么实现的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
luguiyao
V2EX    PHP

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

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

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

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

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

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

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

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

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

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

    我想到的一些疑问:

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

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

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

    58 条回复    2024-09-22 16:03:43 +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
       
    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,玩了好久
    6oML852dJf9Kn2l7
        16
    6oML852dJf9Kn2l7  
       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 程序, 根据不同的访问域名, 链接不同的数据库即可
        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
    是加一套配置文件,代都是一的。
    1QWxx6CtzA3CPgEQ
        24
    1QWxx6CtzA3CPgEQ  
       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 免费论坛。
    zhd1994
        58
    zhd1994  
       2024-09-22 16:03:43 +08:00
    全是回忆,当年追星,我们很多粉丝后援会都用 5d6d 申请 bbs
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2529 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 11:53 PVG 19:53 LAX 03:53 JFK 06:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86