PHP 开发框架扩展
来源:互联网 发布:克鲁斯卡尔算法 详解 编辑:程序博客网 时间:2024/05/22 06:37
PHP 开发框架扩展
作者:Wucl(1223261610)
时间:2015-03-30
章节内容:基础背景、主要内容、个人心得(这个人非常没品德,想到什么就写什么)。
1. 基础背景:
了解自己专长,总结知识。
2. 主要内容:
1) url伪静态:
目标:做seo(Search Engine Optimization)、统一项目访问入口。
方式:Apache或nginx服务里做url重定向。
实现:
第一步:加载Apache(nginx)url重定向模块,去掉LoadModule rewrite_module modules/mod_rewrite.so的注释。
第二步:允许Apache(nginx)进行url重定向,AllowOverride All。
第三步:增加Apache(nginx)url重定向规则。
例子:
<IFMODULE mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^extract\/[\w\/]*(.html|.htm|.php)?$ extract/index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^daily\/\w*(.html|.htm|.php)?$ daily/index.php [QSA,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^[\w\/]*(.html|.htm|.php)?$ index.php [QSA,L]
</IFMODULE>
2) 前期定义常量和init设置:
目标:减少冗余,初始化项目特性。
方式:defined和ini_set
实现:
常量设置:
defined('DS') ? null : define('DS',DIRECTORY_SEPARATOR);
defined('PS') ? null : define('PS',PATH_SEPARATOR);
define("WEB_ROOT",dirname(__FILE__));
define("APP_PATH",WEB_ROOT.DS.'app');
define("LIB_PATH",WEB_ROOT.DS.'vendor');
时区设置:ini_set('date.timezone','PRC')。
错误日志:
ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'Off');
ini_set("log_errors", "On");
ini_set('error_log', '/var/log/portal.log');
3) 添加自动装载类:
目标:自动require_once "PHP文件"
方式:spl_autoload_register
实现:
第一步:建立自动转载类函数
第二步:把函数注册到_autoload栈列
例子:
spl_autoload_register(array($this, 'loadClass'));
public function loadClass($className){
$fileName = '';
$namespace = '';
if (false !== ($lastNsPos = strripos($className, $this->_namespaceSeparator))) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace($this->_namespaceSeparator, DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName = strtolower($fileName);
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . $this->_fileExtension;
$file= ($this->_includePath !== null ? $this->_includePath . DIRECTORY_SEPARATOR : '') . $fileName;
$paths = explode(PATH_SEPARATOR,get_include_path());
foreach ($paths as $path) {
$classpath = $path.DS.$file;
if(\is_file($classpath)){
require_once $file;
return ;
}
}
}
4) 开启memcache的session支持:
目标:支持多台服务器和一级域名下多个站点的session共享
方式:使用memcache的session支持
实现:
第一步:设置session id的保存方式以及安全措施
第二步:设置session的作用域为一级域名“**.com”
第三步:设置session管理为memcache,设置session值的存取路径
例子:
ini_set('session.name', 'sid');
ini_set('session.use_trans_sid', 0);
ini_set('session.use_cookies', 1);
ini_set('session.cookie_path', '/');
$domain = static::getDomainBySub();
ini_set('session.cookie_domain', '.' . $domain);
ini_set('session.save_handler', 'memcache');
ini_set('session.save_path', '192.168.0.2:11210');
session_start();
5) 建立db链接:
目标:操作数据库,并提高代码重用性
方式:使用pdo类
实现:
第一步:建立持久化连接,并保存于静态变量(可使用异常机制解决主从数据库链接问题)。
第二步:封装操作函数,这里需注意预处理操作。
第三步:调用。
例子:由于代码过多,暂时不列出来。
6) 路由匹配和转换:
目标:通过配置来控制url对应执行的代码
方式:正则匹配然后转换,获得对应的PHP文件的目录、PHP文件名称、须执行的方法。
实现:
第一步:获得uri,然后通过正则匹配获取配置数据。
第二步:经过路由核心类转换为执行代码的url。
第三步:分解转换后的url获得对应的PHP文件的目录、PHP文件名称、须执行的方法。
第四步:执行程序。
例子:列出路由属性
$routerEntity = new RouterEntity();
$routerEntity->setPath($path);
$routerEntity->setMethod($method);
$routerEntity->setVariables($variables);
$routerEntity->setStaticPrefix($staticPrefix);
$routerEntity->setRegex($regex);
$routerEntity->setTokens($tokens);
$routerEntity->setPathVariables($pathVariables);
$routerEntity->setHostRegex($hostRegex);
$routerEntity->setHostTokens($hostTokens);
$routerEntity->setHostVariables($hostVariables);
return $routerEntity;
7) 获取接口数据:
目标:接收中间件接口数据并解析
方式:curl
实现:
第一步:建立curl链接,预设url和params参数。
第二步:获取接口数据,解析数据。
第三步:数据传输。
例子:建立连接
$this->_curl = curl_init();
curl_setopt($this->_curl, CURLOPT_HEADER, true);
curl_setopt($this->_curl, CURLOPT_RETURNTRANSFER, '');
curl_setopt($this->_curl, CURLOPT_USERAGENT, '');
curl_setopt($this->_curl, CURLOPT_CONNECTTIMEOUT, '');
curl_setopt($this->_curl, CURLOPT_TIMEOUT, '');
curl_setopt($this->_curl, CURLOPT_HTTPHEADER, '');
curl_setopt($this->_curl, CURLOPT_REFERER, '');
curl_setopt($this->_curl, CURLOPT_SSL_VERIFYPEER, '');
if($this->_option['CUSTOMREQUEST']){
curl_setopt($this->_curl, CURLOPT_CUSTOMREQUEST, '';
}
if(strtolower($this->_option['TYPE']) == 'post'){
curl_setopt($this->_curl, CURLOPT_POST, '');
curl_setopt($this->_curl, CURLOPT_URL, '');
curl_setopt($this->_curl, CURLOPT_POSTFIELDS, '');
}else{
curl_setopt($this->_curl, CURLOPT_URL, '');
}
$this->setCurlResult($this->_curl); //未列出
curl_close($this->_curl);
8) 数据redis缓存:
目标:缓存某些数据,加快页面渲染效率,增加用户体验。
方式:使用PHP的redis扩展
实现:
第一步:建立redis持久化链接,并存放于当前类的静态变量
第二步:设置redis特性
第三步:操作redis缓存数据,并关闭链接
例子:仅建立连接
private function redisConn(){
$cacheConn = null;
$tryI = 0;
while ( $cacheConn == null && $tryI < 10 ) {
try {
$cacheConn = new Redis ();
$serverSetting = Config::$redis;
if (! $cacheConn->pconnect ( $serverSetting[$this->_serverType]['ip'], $serverSetting[$this->_serverType]['port'])) {
$this->_serverType = "default";
$cacheConn->pconnect ( $serverSetting[$this->_serverType]['ip'], $serverSetting[$this->_serverType]['port']);
}
$cacheConn->setOption ( Redis::OPT_SERIALIZER, Redis::SERIALIZER_NONE );
// 选择DB
$redisDB = $serverSetting[$this->_serverType]['redisDb'];
if ($redisDB > 0 && $redisDB <= 16) {
$cacheConn->select ( $redisDB );
} else {
$cacheConn->select ( 0 );
}
} catch ( \Exception $e ) {
sleep ( $tryI * 0.3 );
$tryI ++;
$cacheConn = null;
}
}
return $cacheConn;
}
9) 页面渲染:
目标:快速的渲染页面
方式:使用Blitz
实现:
第一步:确认布局文件和模板文件
第二步:获取布局文件和模板文件的内容,
第三步:解析include字典,然后把注释的内容替代为空
第四步:解析Blitz的字典
第五步:页面渲染
例子:
public function execute(){
$this->getContent();
if (!empty($this->_preBody)) {
try {
$this->_blitz->load($this->_preBody);
} catch (\Exception $e) {
echo $e->getMessage();
}
} else {
echo '加载的文件不存在或为空';
}
if (!empty($this->_option['DATA'])) {
$this->_blitz->set($this->_option['DATA']);
}
if (!empty($this->_option['GLOBALS'])) {
$this->_blitz->setGlobals($this->_option['GLOBALS']);
}
$result = $this->getResult($this->_option['PREFIX']);
$blitzError = $this->_blitz->getError();
$this->_parseBody = $result;
return $this;
}
3. 个人心得:
理解了以上9点内容基本就理解了PHP网站框架的思路。
- PHP 开发框架扩展
- PHP扩展开发(1)-生成扩展框架
- php 框架扩展类
- PHP扩展开发(1)-创建基础框架
- PHP扩展开发-写一个简单的框架
- PHP扩展开发-创建扩展
- 开发PHP扩展模块
- 开发PHP扩展模块
- PHP扩展开发笔记
- 开发php扩展
- 开发 PHP 扩展 DLL
- php扩展开发-准备工作
- 开发PHP扩展模块
- 开发 PHP 扩展 DLL
- PHP扩展库开发
- PHP扩展开发
- php扩展开发
- php扩展开发
- 【opencv学习笔记2】播放AVI视频
- 垂直菜单特效
- BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
- 爬取手机APP客户端学习笔记
- 我的学习列表
- PHP 开发框架扩展
- (5.1.3)计算机网络之数据链路层
- C++标准容器
- 构建实时Web的JAVA选择组合:socket.io client + socketio-netty server
- js父页面如何通过子页面查询后回填到父页面的input框中去
- java中静态方法和非静态方法的存储
- xmlns:android作用以及自定义布局属性
- Android JavaScript调用Java 方法
- Razor输出字符串和变量