国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于PHP+MySQL的網(wǎng)絡(luò)互動社區(qū)平臺的設(shè)計與研究

2014-05-30 13:01張笑青吳中杰夏俊
電腦知識與技術(shù) 2014年8期
關(guān)鍵詞:數(shù)據(jù)庫微信

張笑青 吳中杰 夏俊

摘要:針對江蘇省內(nèi)的對于衣、食、住、行類信息的發(fā)布、整理、歸類、檢索等功能要求,提出了使用PHP服務(wù)器、MySQL數(shù)據(jù)庫開發(fā)工具以及MVC的開發(fā)模式、Zend+CI的開發(fā)框架等最新技術(shù),設(shè)計出基于開源代碼“小黃雞”的二次開發(fā)的網(wǎng)絡(luò)互動社區(qū)平臺。實驗結(jié)果:本網(wǎng)絡(luò)互動社區(qū)平臺實現(xiàn)了信息的發(fā)布、整理、歸類、檢索等功能,此外人們還可以通過微信、網(wǎng)站發(fā)布等方式進(jìn)行信息的互動和共享。結(jié)論:本網(wǎng)絡(luò)互動社區(qū)平臺可以方便大眾人群使用并可以實現(xiàn)信息的互動和共享。

關(guān)鍵詞:PHP;MySQL;MVC;互動平臺;微信;數(shù)據(jù)庫

中圖分類號:TP311文獻(xiàn)標(biāo)識碼:A文章編號:1009-3044(2014)08-1681-11

隨著計算機(jī)網(wǎng)絡(luò)和手機(jī)網(wǎng)絡(luò)的發(fā)展,網(wǎng)絡(luò)社區(qū)成為人們相互交流溝通的良好平臺,正逐漸發(fā)展為一個巨大的網(wǎng)絡(luò)群體。社區(qū)會員通過社區(qū)平臺相互交流,彼此間的互動可以實現(xiàn)信息的傳遞和共享,方便了會員的日常生活。“愛江蘇” 網(wǎng)絡(luò)互動平臺是在開源程序“小黃雞”等的基礎(chǔ)上進(jìn)行的二次開發(fā),搭建專業(yè)的知識庫和在線問答社區(qū)。小黃雞是源于韓國的一款聊天機(jī)器人,小黃雞接口是由微信論壇提供的智能對話接口,開發(fā)者可以通過該接口建立自己的交互平臺?!皭劢K” 網(wǎng)絡(luò)互動平臺開發(fā)的主要目標(biāo)是方便人們對于在住宿、餐飲、購物、公共服務(wù)、旅游、娛樂等方面信息的需求,注冊的會員不僅可以在網(wǎng)站上提出問題、發(fā)布話題、關(guān)注好友、站內(nèi)搜索等,還可以通過手機(jī)微信查看話題、回復(fù)話題和提問等,大大方便了人們的日常生活。本系統(tǒng)的建設(shè)原則是首先采用主流技術(shù)和成熟架構(gòu)進(jìn)行開發(fā)建設(shè);其次應(yīng)該易于使用和操作,符合大眾的使用習(xí)慣;再次系統(tǒng)應(yīng)保證擁有高可靠、均衡負(fù)載、能長時間連續(xù)運行的能力;最后系統(tǒng)還需有可擴(kuò)展性,方便動態(tài)擴(kuò)展以滿足業(yè)務(wù)的不斷增長的需求。

1 運行環(huán)境

1.1服務(wù)器配置要求

操作系統(tǒng):WINXP/2000/2003

數(shù)據(jù)庫:MySQL Server 5.0

CPU:主頻800MHZ

內(nèi)存:1GB(最大可擴(kuò)充量=16GB)

硬盤:SCSI硬盤

網(wǎng)卡:100M/1000M以太網(wǎng)卡

網(wǎng)絡(luò)協(xié)議:TCP/IP

1.2 Wamp的設(shè)置和使用

本系統(tǒng)采用的開發(fā)工具是PHP語言和MySQL數(shù)據(jù)庫,由于單純搭建PHP環(huán)境比較繁瑣,所以我們使用了整合型的Wamp程序。WampServer是一款由法國人開發(fā)的Apache Web服務(wù)器、PHP解釋器以及MySQL數(shù)據(jù)庫的整合軟件包,大大簡化了開發(fā)人員配置環(huán)境的過程;Wamp又可理解為在Windows下將Apache+PHP+MySQL 集成的環(huán)境,它擁有簡單的圖形和菜單安裝和配置環(huán)境。具體安裝過程很簡單:

首先下載WampServer安裝包,根據(jù)提示安裝即可。安裝成功后可以在桌面右下角看到半圓形圖標(biāo),這個就是WampServe圖標(biāo),右鍵該圖標(biāo)可以修改語言狀態(tài),左鍵圖標(biāo)可以設(shè)置各項屬性,例如:Apache模塊設(shè)置、目錄設(shè)置,PHP設(shè)置、擴(kuò)展設(shè)置,MySQL服務(wù)設(shè)置、控制臺設(shè)置等。同時還可以通過左鍵圖標(biāo)設(shè)置WampServe的當(dāng)前狀態(tài):停止服務(wù)狀態(tài)、啟動服務(wù)狀態(tài)、離線狀態(tài)、在線狀態(tài)。

在安裝目錄下的/wamp/www/文件夾下,是“愛江蘇”互動平臺的系統(tǒng)文件夾ia0523,運行的時候在瀏覽器中輸入http://localhost/ia0523/便可以看到系統(tǒng)的頁面。下圖是Wamp的實現(xiàn)訪問數(shù)據(jù)庫的工作原理:

2 Web應(yīng)用程序的開發(fā)模式

2.1 MVC開發(fā)模式

Web應(yīng)用的開發(fā)模式主要分為分層開發(fā)模式與分模塊開發(fā)模式。

傳統(tǒng)的Web應(yīng)用開發(fā)一般分成三層:表示層、業(yè)務(wù)邏輯層和數(shù)據(jù)層。每一層完成相應(yīng)的職能,層之間通過接口實現(xiàn)松耦合,對任何一層的修改都不會影響到其他層的運行。例如數(shù)據(jù)層被修改的話,表示層和業(yè)務(wù)邏輯層均不會受到影響。

本系統(tǒng)使用的模式是當(dāng)前流行的MVC模式。MVC開發(fā)模式(Model-View-Controller),是一種分模塊的開發(fā)模式,并被廣泛應(yīng)用于Web應(yīng)用開發(fā)中。MVC中的模型(Model)代表數(shù)據(jù)結(jié)構(gòu),通常來說,模型類將包含取出、插入、更新數(shù)據(jù)庫等功能。視圖(View)是展示給用戶的信息,一個視圖通常是一個網(wǎng)頁,還可以是任何其他類型的“頁面”。控制器(Controller)是模型、視圖以及其他任何處理HTTP請求所必須的資源之間的中介,并生成網(wǎng)頁。使用MVC可以增加代碼重用率,減少數(shù)據(jù)表達(dá)、數(shù)據(jù)描述和應(yīng)用操作等部分耦合度的目的,同時還可以使程序的可維護(hù)性、可修復(fù)性、可擴(kuò)充性等得到更大的提高。下圖是MVC模式原理圖:

2.2 系統(tǒng)的開發(fā)框架:Zend框架和CI框架

框架是一個開發(fā)Web程序的基本架構(gòu),它通過提供快速搭建網(wǎng)站需要的全部組件,實現(xiàn)流水式的Web程序開發(fā)。PHP框架中,Zend、CakePHP、CI、Symfony以及Seagull是五大最佳的PHP開發(fā)框架。PHP絕大多數(shù)框架都是MVC開發(fā)模式的。

本系統(tǒng)采用了Zend框架與CI框架,汲取了兩種框架的優(yōu)點。

本系統(tǒng)的文件目錄結(jié)構(gòu)如圖3所示。

Zend框架是由Zend公司支持開發(fā)的完全基于PHP5的開源PHP開發(fā)框架,可用于開發(fā)Web程序和服務(wù)。Zend Framework采用MVC(Model-View-Controller)機(jī)構(gòu)模式來分離應(yīng)用程序中不同的部分方便程序的開發(fā)和維護(hù);代碼完全采用PHP5面向?qū)ο缶帉?;具有豐富完整的組件支持;模塊化的結(jié)構(gòu)設(shè)計,易于擴(kuò)展;完善的文檔資料;靈活的架構(gòu)設(shè)計。

CI的全稱是CodeIgniter,它是一個簡單快速的PHP MVC 框架。CodeIgniter 是一套給 PHP 網(wǎng)站開發(fā)者使用的應(yīng)用程序開發(fā)框架和工具包。它提供一套豐富的標(biāo)準(zhǔn)庫以及簡單的接口和邏輯結(jié)構(gòu),其目的是使開發(fā)人員更快速地進(jìn)行項目開發(fā)。使用 CodeIgniter 可以減少代碼的編寫量,并將你的精力投入到項目的創(chuàng)造性開發(fā)上。

相對而言,Zend比較適合用于復(fù)雜的系統(tǒng),因此會顯得比較笨重;而CI則相對輕量,自由度高,更適用于小型和初級的系統(tǒng)。

本系統(tǒng)中“話題”(topic)模塊中所使用的CI的代碼示例:

// 控制器Controller: /app/admin/topic.php

class topic extends AWS_CONTROLLER{var $per_page = 15;public function setup(){$this→model('admin_session')→init();TPL::assign('menu_list', $this→model('admin_group')→get_menu_list($this→user_info['group_id'], 303));}public function index_action(){$this→list_action();}……

//模型Model: /models/topic.php

class topic_class extends AWS_MODEL

{//根據(jù)指定條件獲取話題數(shù)據(jù)

public function get_topic_list($where = null, $limit = 10, $order = 'topic_id DESC')

{if ($topic_list = $this→fetch_all('topic', $where, $order, $limit)){

foreach ($topic_list AS $key => $val)

{if (!$val['url_token'])

{$topic_list[$key]['url_token'] = rawurlencode($val['topic_title']);

}}}

return $topic_list;

}……

//視圖View: /views/default/admin/topic/ list.tpl.htm

……

<?php _e('話題標(biāo)題'); ?>

<?php _e('相關(guān)話題'); ?>

<?php _e('問題'); ?><?php if ($_GET['sort_key'] == 'discuss_count'){ ?><?php if ($_GET['order'] == 'ASC'){ ?>︿<?php }

else{ ?><?php } ?><?php } ?>

<?php _e('狀態(tài)'); ?>

<?php _e('操作'); ?>

……

3 系統(tǒng)總體結(jié)構(gòu)

3.1 系統(tǒng)總體結(jié)構(gòu)

“愛江蘇”網(wǎng)絡(luò)互動平臺的實際運行過程為:用戶注冊會員,登錄后可以看到有幾個主要菜單:問題,話題,用戶。打開問題菜單,用戶可以查看全部問題列表;可以根據(jù)個人需求打開某類問題(包括住宿類、旅游類、餐飲類、娛樂類、購物類、公共服務(wù)類、其他類等);可以搜索需要了解的問題;同時還可以編輯提問。打開話題菜單:用戶可以編輯話題;關(guān)注話題。打開用戶菜單:用戶可以回復(fù)某個用戶的話題;關(guān)注和取消關(guān)注某用戶等。同時用戶還可以對個人信息進(jìn)行設(shè)置:用戶基本信息的設(shè)置;郵件或通知提醒的設(shè)置;QQ或微信賬號綁定設(shè)置;密碼設(shè)置等。以下是網(wǎng)站前臺和后臺的功能結(jié)構(gòu)圖。

3.2用例圖

“愛江蘇”網(wǎng)絡(luò)互動平臺中不同的用戶有不同的權(quán)限。未注冊的用戶只有站內(nèi)搜索、查看問題等功能,不能發(fā)起問題、后臺管理等;已注冊的用戶分為超級管理員和普通會員等,其中普通會員可以進(jìn)行問題管理、站內(nèi)搜索、話題管理、用戶管理和基本信息管理等;超級用戶除了擁有普通會員的權(quán)限外還有網(wǎng)站后臺管理的權(quán)限,包括全局管理、界面管理、內(nèi)容管理、用戶管理、運營管理、郵件群發(fā)管理、系統(tǒng)維護(hù)等。

下圖為系統(tǒng)用例圖:

4 數(shù)據(jù)庫的設(shè)計與實現(xiàn)

4.1 MySQL數(shù)據(jù)庫配置

“愛江蘇”網(wǎng)絡(luò)互動平臺中數(shù)據(jù)庫的開發(fā)使用的是MySQL數(shù)據(jù)庫,MySQL是一個快速、多線程、多用戶的SQL數(shù)據(jù)庫服務(wù)器,是PHP的首選數(shù)據(jù)庫,PHP中提供了一整套的MySQL函數(shù),對MySQL進(jìn)行了全方位的支持。WampServer整合了PHP、Apache和MySQL;其中MySQL是基于PHP的數(shù)據(jù)庫管理軟件,可以通過系統(tǒng)托盤菜單中的phpMyAdmin對數(shù)據(jù)庫進(jìn)行操作。在MySQL數(shù)據(jù)庫中,root賬戶類似于SQL Server的sa賬戶,具有對數(shù)據(jù)庫的最高操作權(quán)限。默認(rèn)情況下root賬戶的密碼為空,可以通過phpMyAdmin的界面設(shè)置權(quán)限,對root賬戶設(shè)置密碼。

數(shù)據(jù)庫配置為 /system/config/database.php文件中的:

<?php

$config['charset'] = 'utf8';$config['prefix'] = 'aws_';$config['driver'] = 'MySQLi';$config['master'] = array (

'charset' => 'utf8',

'host' => 'localhost',

'username' => 'root',

'password' => '',

'dbname' => 'ia05232',

'db_port' => '3306',

);

$config['slave'] = false;$config['db_port'] = '3306';

對數(shù)據(jù)庫中表的操作,例如/system/ aws_model.inc.php 文件中的,插入數(shù)據(jù)函數(shù):

// 插入數(shù)據(jù)

public function insert($table, $data)

{foreach ($data AS $key => $val)

{$debug_data['`' . $key . '`'] = "'" . $val . "'";

}

$sql = 'INSERT INTO `' . $this→get_table($table) . '` (' . implode(', ', array_flip($debug_data)) . ') VALUES (' . implode(', ', $debug_data) . ')';

if (AWS_APP::config()→get('system')→debug)

{$start_time = microtime(TURE);

}

try {

$rows_affected = $this→db()→insert($this→get_table($table), $data);

}catch (Exception $e)

{show_error("Database error\n——-\n\nSQL: {$sql}\n\nError Message: " . $e→getMessage());

}

if (AWS_APP::config()→get('system')→debug)

{AWS_APP::debug_log('database', (microtime(TRUE) - $start_time), $sql);

}

$last_insert_id = $this→db()→lastInsertId();

return $last_insert_id;

}

圖7是在WampServer中使用phpMyAdmin打開的MySQL數(shù)據(jù)庫ia05232的數(shù)據(jù)庫。

4.2 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計

本系統(tǒng)的數(shù)據(jù)庫設(shè)計比較復(fù)雜,主要涉及幾大類包括問題表,問題回復(fù)表,導(dǎo)航分類表,話題表,用戶表,通知表,專題表,用戶舉報表,郵件群發(fā)表,微信表等。其中每一種類型的表,都會根據(jù)功能的需要細(xì)分,不但達(dá)到表結(jié)構(gòu)的最優(yōu)減少冗余,而且能夠?qū)崿F(xiàn)特定的功能。例如:問題表可以細(xì)分成問題內(nèi)容表,問題關(guān)注表,問題邀請表,問題興趣表,問題答謝表等;問題回復(fù)表可以細(xì)分成回復(fù)內(nèi)容表,回復(fù)答謝表,回復(fù)興趣表,回復(fù)投票表等;用戶表可以細(xì)分成用戶貢獻(xiàn)度表,用戶贊同表,用戶組表,用戶通知設(shè)置表,用戶上線表,用戶qq表,用戶sina表,用戶行為表等;話題表可以細(xì)分成話題關(guān)注表,話題合并表,話題問題表等;由于數(shù)據(jù)庫中的表較多,不能一一列舉,因此只列表其中幾個比較典型的數(shù)據(jù)表結(jié)構(gòu),以下是aws_question(問題表),aws_topic(話題表),aws_notice(通知表),aws_users(用戶表),aws_users_qq(用戶qq表),aws_weixin_message(微信信息表),aws_nav_menu(導(dǎo)航菜單表),aws_category(分類表)的表結(jié)構(gòu):

1)aws_question(問題表)

5 系統(tǒng)關(guān)鍵技術(shù)

5.1網(wǎng)站第三方登錄的實現(xiàn)

本系統(tǒng)采用了第三方登錄接口,所謂第三方登錄就是不需要注冊本網(wǎng)站的會員也可以通過用戶的QQ賬號或微博賬號登錄到本網(wǎng)站中,前提是用戶已經(jīng)擁有QQ賬號或者微博賬號;這樣可以吸引更多的用戶使用我們網(wǎng)站的功能,省略了注冊會員的步驟。要使用第三方服務(wù),需要經(jīng)過第三方平臺的授權(quán),到第三方網(wǎng)站注冊成為它的開發(fā)者,并為所開發(fā)的軟件申請APPID。詳細(xì)步驟如下:

1)申請第三方登錄接口:登錄到新浪微博-開放平臺,申請web應(yīng)用的驗證授權(quán),

2)獲取到key和secret值

3)寫第三方登錄文檔

//新浪微博 OAuth 認(rèn)證類(OAuth2)

class SaeTOAuthV2 {

public $client_id;

public $client_secret;

public $access_token;

public $refresh_token;

public $http_code;

public $url;

public $host = "https://api.weibo.com/2/";

public $timeout = 30;

public $connecttimeout = 30;

public $ssl_verifypeer = FALSE;

public $format = 'json';

public $decode_json = TRUE;

public $http_info;

public $useragent = 'Sae T OAuth2 v0.1';

public $debug = FALSE;

public static $boundary = '';

//獲取Access Token如下

function accessTokenURL()

{ return 'https://api.weibo.com/oauth2/access_token'; }

//引導(dǎo)需要授權(quán)的用戶到如下地址

function authorizeURL()

{ return 'https://api.weibo.com/oauth2/authorize'; }

//實例化以下變量

function __construct($client_id, $client_secret, $access_token = NULL, $refresh_token = NULL)

{$this→client_id = $client_id;

$this→client_secret = $client_secret;

$this→access_token = $access_token;

$this→refresh_token = $refresh_token;

}

// authorize接口

function getAuthorizeURL( $url, $response_type = 'code', $state = NULL, $display = NULL )

{$params = array();

$params['client_id'] = $this→client_id;

$params['redirect_uri'] = $url;

$params['response_type'] = $response_type;

$params['state'] = $state;

$params['display'] = $display;

return $this→authorizeURL() . "?" . http_build_query($params);

}……

// 獲取最新的公共微博消息

function public_timeline( $page = 1, $count = 50, $base_app = 0 )

{$params = array();

$params['count'] = intval($count);

$params['page'] = intval($page);

$params['base_app'] = intval($base_app);

return $this→oauth→get('statuses/public_timeline', $params);

}......

5.2 微信的實現(xiàn)

隨著智能手機(jī)的普及,微信越來越受到大家的歡迎,因此“愛江蘇”網(wǎng)絡(luò)互動平臺也增設(shè)了微信公眾平臺,便于移動互聯(lián)網(wǎng)登錄,并可以綁定私人賬號進(jìn)行群發(fā)信息。具體實現(xiàn)過程為:

進(jìn)入騰訊微信的公眾平臺http://mp.weixin.qq.com,到騰訊微博開放平臺申請AppKey,輸入一個token值,任意長度和字符串,為了接口安全,盡量用大于12位的字符串。

注冊登陸微信公眾平臺http://mp.weixin.qq.com,申請公眾平臺帳號,在設(shè)置里面輸入對應(yīng)的anwsion站點api接口:http://localhost/ia0523/app/weixin/api/;輸入和第1步一樣的token值,保存。打開anwsion站點后臺管理界面,在全局-開放平臺找到對應(yīng)微信公眾平臺接口設(shè)置。關(guān)注您的公眾平臺帳號,輸入您要查詢的社區(qū)內(nèi)容,測試返回數(shù)值表示設(shè)置正確。

配置信息編寫接口文件:

……

public function get_access_rule()

{$rule_action['rule_type'] = 'black';

$rule_action['actions'] = array();

return $rule_action;

}

public function setup()

{if (!$this→model('weixin')→check_signature($_GET['signature'], $_GET['timestamp'], $_GET['nonce']))

{die;

}

if ($_GET['echostr'])

{echo htmlspecialchars($_GET['echostr']);

die;

}

$this→input_message = $this→model('weixin')→fetch_message();

}

public function index_action()

{$this→model('weixin')→response_message($this→input_message);

}}

……

//以下為接受消息代碼:

public function fetch_message()

{$post_data = file_get_contents('php://input');

// extract post data

if (! empty($post_data))

{$post_object = (array)simplexml_load_string($post_data, 'SimpleXMLElement', LIBXML_NOCDATA);

return array(

'fromUsername' => $post_object['FromUserName'],

'toUsername' => $post_object['ToUserName'],

'content' => trim($post_object['Content']),

'time' => time(),

'msgType' => $post_object['MsgType'],

'event' => $post_object['Event'],

'eventKey' => $post_object['EventKey']

);

}}

public function response_message($input_message)

{switch ($input_message['msgType'])

{case 'event':

switch ($input_message['event'])

{case 'subscribe':

$response_message = '您已經(jīng)成功關(guān)注 ' . get_setting('site_name') . ', 請問需要什么幫助嗎? 您可以通過輸入 "help, 幫助" 獲得更多支持!';

break;

}

break;

default:

if ($response = $this→message_parser($input_message))

{// Success...

$response_message = $response['message'];

$action = $response['action'];

}……..

6 界面展示

下圖為網(wǎng)站前臺首頁的界面:

下圖為網(wǎng)站后臺功能設(shè)置的界面:

7 結(jié)束語

“愛江蘇”網(wǎng)絡(luò)互動平臺采用了PHP技術(shù)和MySQL數(shù)據(jù)庫開發(fā)的基于Web的系統(tǒng),實現(xiàn)了江蘇省內(nèi)的衣食住行等信息的發(fā)布與查詢,同時實現(xiàn)了移動互聯(lián)網(wǎng)登錄技術(shù),方便了用戶的使用。本系統(tǒng)開發(fā)過程中使用了MVC開發(fā)模式和Zend+CI的框架,采用了多種先進(jìn)技術(shù),增加了代碼重用率,減少了數(shù)據(jù)表達(dá)、數(shù)據(jù)描述和應(yīng)用操作等部分耦合度,同時還可以使程序的可維護(hù)性、可修復(fù)性、可擴(kuò)充性等得到更大的提高。系統(tǒng)在實際使用過程中還需要根據(jù)具體情況不斷完善和改進(jìn)。

參考文獻(xiàn):

[1] 黃雅萍,劉曉強(qiáng),吳成義. 基于MySQL和PHP的分布式事務(wù)處理[J]. 東華大學(xué)學(xué)報:自然科學(xué)版,2011(1):81-85

[2] 張文婷. 都市報微信公眾平臺的運營與發(fā)展探索——基于八家都市報微信平臺的研究[J]. 中國記者,2013(5):99-100.

[3] 王鳳玲. 基于PHP+MYSQL的新聞發(fā)布系統(tǒng)的研究與實現(xiàn)[J]. 計算機(jī)應(yīng)用與軟件,2012(2):234-236.

[4] 張瑩. 信息分類編碼在線查詢——基于PHP+Apache+MySQL的Web數(shù)據(jù)庫開發(fā)實例[J]. 情報科學(xué),2004(4):510-512.

[5] 穆榮軍. 基于Apache+MySQL+PHP的關(guān)鍵技術(shù)分析[J]. 中國電化教育,2002(2):79.

[6] 劉紅芝. 基于Apache+PHP+MySQL框架的圖書管理系統(tǒng)開發(fā)[J]. 江西圖書館學(xué)刊,2008(3):100-101.

猜你喜歡
數(shù)據(jù)庫微信
微信
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
數(shù)據(jù)庫
微信
微信