举个例子
# 路由配置项 $router_config = array( # 首页 '/(@page:[0-9])' => array('home', 'index'),
# 帖子详情页
'/read/@tid:[0-9]+' => array('home', 'read'),
# 标签
'/tag/@name(/@page:[0-9]+)' => array('home', 'tag'),
# 搜索
'/search/@s(/@page:[0-9]+)' => array('home', 'search'),
# 用户设置
'/setting(/@type)' => array('setting', 'index'),
# 设定阅读排序(最新发表)
'/do/posttime' => array('doController', 'posttime'),
# 设定阅读排序(最后回复)
'/do/lasttime' => array('doController', 'lasttime'),
# 登录
'/login' => array('user', 'login'),
# 退出
'/logout' => array('user', 'logout'),
# 注册
'/register' => array('user', 'register'),
# QQ登录
'/qqlogin' => array('user', 'qqlogin'),
# 提醒
'/notification(/@status:0|1(/@page:[0-9]+))' => array('user', 'notification'),
# 私信
'/whisper(/@status:0|1|2(/@page:[0-9]+))' => array('user', 'whisper'),
# 用户中心
'/@@username' => array('user', 'transUser'),
# 用户中心
'/user(/@uid:[0-9]+)' => array('user', 'index'),
# 标记提醒为已读
'/do/readNotification/@nid:[0-9]+' => array('doController', 'readNotification'),
# 用户帖子
'/user(-@uid:[0-9]+)-topic(-@page:[0-9]+)' => array('user', 'topic'),
# 用户回复
'/user(-@uid:[0-9]+)-reply(-@page:[0-9]+)' => array('user', 'reply'),
# 用户关注
'/user(-@uid:[0-9]+)-follow(-@page:[0-9]+)' => array('user', 'follow'),
# 用户粉丝
'/user(-@uid:[0-9]+)-fans(-@page:[0-9]+)' => array('user', 'fans'),
# 我的收藏
'/my/favorite(/@page:[0-9]+)' => array('user', 'favorite'),
# 我的积分
'/my/score(/@page:[0-9]+)' => array('user', 'score'),
# QQ登录返回
'/user/QQCallback/*' => array('user', 'QQCallback'),
# 重置密码 step 1
'/resetPassword' => array('user', 'resetPassword'),
# 重置密码 step 2
'/doReset' => array('user', 'doReset'),
# 获取验证码
'/identifyImage(/*)' => array('user', 'identifyImage'),
# 后台管理
'/admin(/@type:system|common|topic|reply|tag|user|link(/@page:[0-9]+))' => array('admin', 'index'),
# 清理缓存
'/admin/ClearCache/@type:template|attachment|score' => array('manage', 'ClearCache'),
# 删除标签
'/manage/del_tag/@tagid:[0-9]+' => array('manage', 'del_tag'),
# 删除链接
'/manage/del_link/@position:[0-9]+' => array('manage', 'del_link'),
# AJAX 发表帖子
'POST /do/postTopic' => array('doController', 'postTopic'),
# AJAX 删除帖子
'POST /do/deleteTopic' => array('doController', 'deleteTopic'),
# AJAX 发布回复
'POST /do/postReply' => array('doController', 'postReply'),
# AJAX 删除回复
'POST /do/deleteReply' => array('doController', 'deleteReply'),
# AJAX 楼中楼回复
'POST /do/postFloor' => array('doController', 'postFloor'),
# AJAX 删除楼中楼回复
'POST /do/deleteFloor' => array('doController', 'deleteFloor'),
# AJAX 删除提醒
'POST /do/deleteNotification' => array('doController', 'deleteNotification'),
# AJAX 删除私信
'POST /do/deleteWhisper' => array('doController', 'deleteWhisper'),
# AJAX 上传图片
'POST /do/uploadPicture' => array('doController', 'uploadPicture'),
# AJAX 上传头像
'POST /do/uploadAvatar' => array('doController', 'uploadAvatar'),
# AJAX 删除图片
'POST /do/delPic' => array('doController', 'delPic'),
# AJAX 标记私信已读
'POST /do/readWhisper' => array('doController', 'readWhisper'),
# AJAX 传送私信
'POST /do/deliverWhisper' => array('doController', 'deliverWhisper'),
# AJAX 收藏帖子
'POST /do/favorTopic' => array('doController', 'favorTopic'),
# AJAX 赞帖子
'POST /do/praiseTopic' => array('doController', 'praiseTopic'),
# AJAX 关注用户
'POST /do/follow' => array('doController', 'follow'),
# AJAX 获取帖子的详细信息
'POST /manage/getTopicInfo' => array('manage', 'getTopicInfo'),
# AJAX 编辑帖子
'POST /manage/editTopic' => array('manage', 'editTopic'),
# AJAX 获取回复详情
'POST /manage/getReplyInfo' => array('manage', 'getReplyInfo'),
# AJAX 编辑回复
'POST /manage/editReply' => array('manage', 'editReply'),
# AJAX 锁帖
'POST /manage/lockTopic' => array('manage', 'lockTopic'),
# AJAX 帖子置顶
'POST /manage/topTopic' => array('manage', 'topTopic'),
# AJAX 禁言
'POST /manage/ban' => array('manage', 'ban'),
# 编辑链接
'POST /manage/edit_link' => array('manage', 'edit_link'),
# AJAX 获取更多楼中楼回复
'POST /getReplyFloorList' => array('home', 'getReplyFloorList'),
# AJAX 获取更多回复列表
'POST /getReplyList' => array('home', 'getReplyList'),
# AJAX 用QQ注册用户
'POST /qqjoin' => array('user', 'qqjoin'),
# AJAX 签到
'POST /do/doSign' => array('doController', 'doSign'),
# AJAX 设置个性签名
'POST /do/setSignature' => array('doController', 'setSignature'),
# AJAX 设置邮箱
'POST /do/setEmail' => array('doController', 'setEmail'),
# AJAX 设置密码
'POST /do/setPassword' => array('doController', 'setPassword'),
# 未匹配转404,默认不可删除规则,且必须置于最后
'*' => 'notFound'
);
路径配置里面也有很多正则判断,
$regex = str_replace(array( ')', '/*' ), array( ')?', '(/?|/.*?)' ), $this->pattern); $regex = preg_replace_callback('#@([\w]+)(:([^/\(\)]*))?#', function($matches) use (&$ids) { $ids[$matches[1]] = null; if (isset($matches[3])) { return '(?P<' . $matches[1] . '>' . $matches[3] . ')'; } return '(?P<' . $matches[1] . '>[^/\?]+)'; }, $regex); if ($last_char === '/') { $regex .= '?'; } else { $regex .= '/?'; } if (preg_match('#^' . $regex . '(?:\?.*)?$#i', $url, $matches)) { foreach ($ids as $k => $v) { $this->params[$k] = (array_key_exists($k, $matches)) ? urldecode($matches[$k]) : null; } if ($this->pass) { $this->params[] = $this; } $this->regex = $regex; return true; }
如果网站做的功能多了,一直这样累加下去,是不是比 直接读取$_SERVER["PATH_INFO"] 要影响性能?
是的。。你想得没有错,确实会影响你的性能的,,不过我觉得你这么一点都没有啥吧。。你又不是那种非常高并发的情况,无所谓的,单秒的并发可能就几十的,就不要去考虑这么一点性能上面的损失了。。嗯。有种办法你可以把这一些规则 都写到NGINX的配置里面,由他来做会好一些。 ######如果你有计算下时间,和其他处理时间相比,你会发现这个时间你是可以忽略的。如果正在意效率,可以对正则进行一个优先级排序,可以一定程度上优化下。######
$start=microtime(true);
foreach ($router_config as $path => $rule) balaba...
$delay= 1000*(microtime(true)-$start);
file_put_contents("list.txt",$delay."\n",8);
route patten
3.6530494689941
8.85009765625
8.8458061218262
10.030031204224
8.8880062103271
4.0349960327148
10.149002075195
3.9291381835938
6.0160160064697
5.2578449249268
PATH_INFO
0.017881393432617
0.032901763916016
0.033140182495117
0.030994415283203
0.015974044799805
0.030994415283203
0.019073486328125
0.030994415283203
0.030994415283203
0.033855438232422
数字不明显,直接做个图示
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。