关于如何使用PHP&;Mysql?
我正在寻找一个关于如何使用PHP和MySQL构建wiki的好教程。我需要一些东西来告诉我如何构造mysql数据库,以及为文本差异等实现哪些算法。到目前为止,我唯一发现的是: 但是它是基于cakePHP的,我需要花一个月的时间来学习cakePHP来理解他们做了什么关于如何使用PHP&;Mysql?,php,mysql,wiki,Php,Mysql,Wiki,我正在寻找一个关于如何使用PHP和MySQL构建wiki的好教程。我需要一些东西来告诉我如何构造mysql数据库,以及为文本差异等实现哪些算法。到目前为止,我唯一发现的是: 但是它是基于cakePHP的,我需要花一个月的时间来学习cakePHP来理解他们做了什么 提前感谢您的任何提示 假设您是为了教程而这样做的(因为已经有很多很棒的wiki软件了),让我们看看我是否能对这个主题进行一个非常全面的概述。当然,我没有时间或空间在这个答案中编写整个维基,如果我这样做了,你也不会学到任何东西。但我将尝试
提前感谢您的任何提示 假设您是为了教程而这样做的(因为已经有很多很棒的wiki软件了),让我们看看我是否能对这个主题进行一个非常全面的概述。当然,我没有时间或空间在这个答案中编写整个维基,如果我这样做了,你也不会学到任何东西。但我将尝试绘制一般框图,并给出一个数据库模式的示例 首先,考虑维基需要的不同页面。不是信息页面,而是您将拥有的不同功能页面
- 一页用于解析请求(找到他们请求的文章并向他们发送信息)
- 一页用于编辑文章
- 一页用于登录
articles
--------
id (int)
title (tinyblob)
content (mediumblob)
meta info
- 修订跟踪(每篇文章的更改日志)
- 文章下载器(使用PHP模块将文章输出为PDF、txt或其他格式,并使用
将其作为下载发送)header()
- Media viewer(就像在维基百科上一样,当你点击一个图像时,它会带你进入一个页面,页面上有关于该图像的信息,谁上传的,它有多大,等等)
- 还有什么,要有创意!=)李>
- 首先,它必须找到他们要找的文章。这可能需要在执行搜索之前解析他们的搜索字符串(将“尼罗河”转换为“尼罗河”),或者可能需要进行一些比较以找到最相关的帖子(查看“尼罗河”并重定向到“尼罗河”)。维基的这一部分可以无限改进,因为还没有人开发出“完美”的搜索算法
- 如果找不到文章,则需要有一些错误状态。要么给出建议文章的列表,继续搜索,在每篇文章的正文中而不是标题中查找他们的术语,要么只是道歉并要求他们再次搜索。一个好的wiki将始终为他们提供创建文章的能力,如果该文章不存在(指向文章编辑页面的链接)
- 如果可以找到文章,它需要能够将文章的内容翻译成HTML。对于非常简单的文章,这可能只是使用
将htmlentities()
之类的内容转换为&
&代码>。但是,随着文章变得越来越复杂,您可能需要一种显示标题、指向其他文章的链接等的方法。为此,您可能需要使用特殊的模板解析,以便用户无法直接控制HTML。我从未亲自编写过其中的一个,但我可以想象它有很多
语句preg\u replace()
最后,您需要考虑显示什么标题/边栏/页脚信息。如果他们登录,这些信息可能会有所不同,可能包含相关文章的链接,也可能包含编辑本文的链接
- 检查他们是否已登录
- 如果是,给他们一个
,其中预先填充了原始文章 - 如果没有,道歉并告诉他们登录。提供登录页面的链接
- 检查是否设置了
。如果是这样,他们已经发送了他们的登录信息。如果没有,请向他们发送登录表单。(用户名、密码、提交)$\u POST[“用户名”]
- 如果设置了,则对密码进行散列(使用salt!),与数据库中的散列进行比较,如果匹配,则启动会话。如果他们不匹配,道歉并再次向他们发送登录表单
- MySQL行具有设置的大小。这个大小可以设置为难以置信的大,比如16777216个字符,但是仍然有一个限制,这意味着文章的最大大小。TXT文件可以任意增大()
- 如果系统上有许多文件,打开和读取文件的速度可能会变慢。防止在某些系统上而不是在其他系统上(取决于使用的文件系统)出现这种速度减慢的一个技巧是创建多个文件夹。例如,每一篇以“ab”(“腹部”、“吸收能力”、“亚伯(圣经人物)”等)开头的文章都是一篇
articles -------- id (int) title (tinyblob) content (mediumblob) meta info