Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
关于如何使用PHP&;Mysql?_Php_Mysql_Wiki - Fatal编程技术网

关于如何使用PHP&;Mysql?

关于如何使用PHP&;Mysql?,php,mysql,wiki,Php,Mysql,Wiki,我正在寻找一个关于如何使用PHP和MySQL构建wiki的好教程。我需要一些东西来告诉我如何构造mysql数据库,以及为文本差异等实现哪些算法。到目前为止,我唯一发现的是: 但是它是基于cakePHP的,我需要花一个月的时间来学习cakePHP来理解他们做了什么 提前感谢您的任何提示 假设您是为了教程而这样做的(因为已经有很多很棒的wiki软件了),让我们看看我是否能对这个主题进行一个非常全面的概述。当然,我没有时间或空间在这个答案中编写整个维基,如果我这样做了,你也不会学到任何东西。但我将尝试

我正在寻找一个关于如何使用PHP和MySQL构建wiki的好教程。我需要一些东西来告诉我如何构造mysql数据库,以及为文本差异等实现哪些算法。到目前为止,我唯一发现的是: 但是它是基于cakePHP的,我需要花一个月的时间来学习cakePHP来理解他们做了什么


提前感谢您的任何提示

假设您是为了教程而这样做的(因为已经有很多很棒的wiki软件了),让我们看看我是否能对这个主题进行一个非常全面的概述。当然,我没有时间或空间在这个答案中编写整个维基,如果我这样做了,你也不会学到任何东西。但我将尝试绘制一般框图,并给出一个数据库模式的示例

首先,考虑维基需要的不同页面。不是信息页面,而是您将拥有的不同功能页面

  • 一页用于解析请求(找到他们请求的文章并向他们发送信息)
  • 一页用于编辑文章
  • 一页用于登录
根据你想得到的简单或复杂程度,你只需要这三页。您的“主页”和任何其他重要页面(“联系我们”、“关于我们”、“如何使用此wiki”等)都可以是文章,因此它们的处理方式与您解析请求的方式相同。在您拥有一个功能性wiki之后,您可以考虑添加以下内容:

articles
--------
id (int)
title (tinyblob)
content (mediumblob)
meta info
  • 修订跟踪(每篇文章的更改日志)
  • 文章下载器(使用PHP模块将文章输出为PDF、txt或其他格式,并使用
    header()
    将其作为下载发送)
  • Media viewer(就像在维基百科上一样,当你点击一个图像时,它会带你进入一个页面,页面上有关于该图像的信息,谁上传的,它有多大,等等)
  • 还有什么,要有创意!=)
由于我们还没有一个运行正常的wiki,这些需要花费额外的时间和精力来实现,所以让我们从基本的三个页面开始。这些页面中的每一页都应该有自己的方框图,或者它们必须执行的功能的简单列表(具体的实现我将留给您去弄清楚)

对于文章解析脚本:

  • 首先,它必须找到他们要找的文章。这可能需要在执行搜索之前解析他们的搜索字符串(将“尼罗河”转换为“尼罗河”),或者可能需要进行一些比较以找到最相关的帖子(查看“尼罗河”并重定向到“尼罗河”)。维基的这一部分可以无限改进,因为还没有人开发出“完美”的搜索算法
  • 如果找不到文章,则需要有一些错误状态。要么给出建议文章的列表,继续搜索,在每篇文章的正文中而不是标题中查找他们的术语,要么只是道歉并要求他们再次搜索。一个好的wiki将始终为他们提供创建文章的能力,如果该文章不存在(指向文章编辑页面的链接)
  • 如果可以找到文章,它需要能够将文章的内容翻译成HTML。对于非常简单的文章,这可能只是使用
    htmlentities()
    &
    之类的内容转换为
    &。但是,随着文章变得越来越复杂,您可能需要一种显示标题、指向其他文章的链接等的方法。为此,您可能需要使用特殊的模板解析,以便用户无法直接控制HTML。我从未亲自编写过其中的一个,但我可以想象它有很多
    preg\u replace()
    语句
  • 最后,您需要考虑显示什么标题/边栏/页脚信息。如果他们登录,这些信息可能会有所不同,可能包含相关文章的链接,也可能包含编辑本文的链接
至于编辑文章,这个页面可能是最简单的。我会做以下几件事:

  • 检查他们是否已登录
  • 如果是,给他们一个
    ,其中预先填充了原始文章
  • 如果没有,道歉并告诉他们登录。提供登录页面的链接
至于登录页面,如果您曾经用多个用户编写过代码,那么您就会明白这应该如何工作

  • 检查是否设置了
    $\u POST[“用户名”]
    。如果是这样,他们已经发送了他们的登录信息。如果没有,请向他们发送登录表单。(用户名、密码、提交)
  • 如果设置了,则对密码进行散列(使用salt!),与数据库中的散列进行比较,如果匹配,则启动会话。如果他们不匹配,道歉并再次向他们发送登录表单
就数据库的外观而言,您几乎需要一个表(每个人都会将其放入数据库中,出于安全原因,没有人会将其信任于平面文件)

包含任何登录用户信息的表。至于文章本身,您可以选择将它们存储在数据库或文件中。MediaWiki将所有内容存储在MySQL中,而DokuWiki使用TXT文件。这是一个偏爱的问题,但是还有一些其他的事情要考虑。
  • MySQL行具有设置的大小。这个大小可以设置为难以置信的大,比如16777216个字符,但是仍然有一个限制,这意味着文章的最大大小。TXT文件可以任意增大()
  • 如果系统上有许多文件,打开和读取文件的速度可能会变慢。防止在某些系统上而不是在其他系统上(取决于使用的文件系统)出现这种速度减慢的一个技巧是创建多个文件夹。例如,每一篇以“ab”(“腹部”、“吸收能力”、“亚伯(圣经人物)”等)开头的文章都是一篇
    articles
    --------
    id (int)
    title (tinyblob)
    content (mediumblob)
    meta info