欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP实例教程(1):构建基于PHP的微博客服务

程序员文章站 2022-05-13 17:49:18
...
如果您曾经留意过,就会知道 Twitter 是 Web 2.0 世界最大的轰动事件之一。简单来说,Twitter(Twitter.com 上提供的一个服务)是一个简单的微博客服务,用户可以发最多 140 个字符的贴子(称作 tweet),回答 “你现在在做什么?” 之类的问题。用户可以追随他们感兴趣的人,也有自己的追随者。通过这种方式,可以将信息发布给追随者或是广泛地转发。

随意浏览一下某个 Twitter 账户可以发现,用户常常发布关于很多不同话题的 tweet,从日常生活(例如 “我在吃三明治”)到更不平凡的话题。其中常常嵌入了图像、媒体文件和日志的链接。这些 URL 常常被 TinyURL 之类的服务缩短,主要是为了使贴子的总字符数不超过 140 个字符。

很多人喜欢上了 Twitter,使超短格式成了一种艺术形式,甚至将之用于与其他用户交谈(例如将他们的评论定向到 @user)。从这个简单的起点开始,涌现了大量支持 Twitter 的移动应用程序和其他工具。现在甚至还有专门为最有趣、最卓越和最详实的 tweet 而设置的奖项,另外还有跟踪不同 Twitter 应用程序的状态的在线应用程序。

很多其他站点和服务,例如 LinkedIn 和 Facebook 现在允许用户用仿照 Twitter 的方式更新他们的当前状态。换句话说,在 Facebook 更新状态需要使用短消息,当然,状态通常是回答 “你现在在干什么” 之类的问题。

为您自己的站点添加微博客或状态更新工具不需要做很多工作,但是却可以为用户带来乐趣和简单的交流方式。本文的目标是展示如何实现这个目的。但是,首先需要对您作一些假设。

首先,假设您对 PHP 和 MySQL 有所了解。同时假设您可以访问某个运行 PHP 和 MySQL 的本地 Apache Web 服务器。对于本文,我在使用 Macintosh、Apache、MySQL 和 PHP(MAMP)的 MacBook Products 上进行开发,这个免费程序将整个开发环境打包到一个包中。但是,您应该能够毫无困难地在 Microsoft® Windows® 或 Linux® 上进行开发。最后,假设您已经有一个可以立即运行的应用程序,该应用程序现在有一些用户,您打算以某种方式将微博客或 tweeting 添加到该应用程序中。为此,我简化应用程序中侧重用户的一些方面(例如登录、管理个人文件等),而侧重于贴子。

设计应用程序的后端

简言之,Twitter 服务以两个名词为中心:用户和消息。如果您已经构建了一个应用程序,并且希望将类似 Twitter 的服务添加到应用程序中,那么很可能已经有了用户管理功能。如果还没有,那么需要采用某种方式使用一个数据库表(一个主键,通常是一个整数)、一个用户名(也是惟一的)、一个电子邮件地址和密码等标识每个用户。

tweet(即贴子)存储在一个 posts 表中,每个贴子有一个主键(某种连续整数)、一个指向发出该贴的用户的外键关系、贴子本身(限制为一定数量的字符)和日期/时间戳。

最容易令人感到迷惑的是显示用户追随关系的数据库表。这里需要某种方式记录用户 ID 和追随者 ID,使应用程序能够快速建立追随者列表,并轻松地将信息转发给那些已注册为要追随某用户的其他用户。

理解这些内容后,现在就可以着手建立这 3 个数据库表。使用清单 1 中的 SQL 代码创建第一个表,即 users 表(如果已经有一个 users 表,则可以跳过这一步)。


清单 1. users 表
				
CREATE TABLE `users` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`username` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL ,
`password` VARCHAR( 8 ) NOT NULL ,
`status` ENUM( 'active', 'inactive' ) NOT NULL
) ENGINE = MYISAM ;


下面是第二个表,即 posts 表。


清单 2. posts 表
				
CREATE TABLE `posts` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` INT NOT NULL ,
`body` VARCHAR( 140 ) NOT NULL ,
`stamp` DATETIME NOT NULL
) ENGINE = MYISAM ;

清单 3 显示了最后一个表,即 following 表。注意这个表有两个主键。


清单 3. following 表
				
CREATE TABLE `following` (
`user_id` INT NOT NULL ,
`follower_id` INT NOT NULL ,
PRIMARY KEY ( `user_id` , `follower_id` )
) ENGINE = MYISAM ;

然后,先创建一个名为 header.php 的文件,将所有用于 MySQL 的连接字符串放到该文件中。如果已经有一个这样的文件,可以跳过这一步。请务必在各处都包括这个文件,因为将来需要用到它。清单 4 展示了这个文件的内容。


清单 4. 样例 header.php 文件
				
$SERVER = 'localhost';
$USER = 'username';
$PASS = 'password';
$DATABASE = 'microblogger';


if (!($mylink = mysql_connect( $SERVER, $USER, $PASS))){
echo "

Sorry, could not connect to database.



Please contact your system's admin for more help\n";
exit;
}

mysql_select_db( $DATABASE );

请记住,还可以随意将任何其他类型的安全检查添加到这个 header.php 文件中。例如,可以检查一个会话变量中是否设置了一个用户 ID(表明该用户已经登录)。如果用户没有登录,那么可以将用户重定向到登录页面。本文不会深入讨论这一点,不过需要时可以很容易地添加安全检查。