PHP开发
文章平均质量分 51
jhkj_5154
我是一个小菜鸟...哈哈哈哈
展开
-
CORS跨域
header('Access-Control-Allow-Origin: *');//允许所有域访问APIheader("Access-Control-Allow-Headers: token,Origin,X-Requested-with,Contect-Type,Accept")//我们允许客户端放我们API,Header允许那些键值对header('Access-Control-Allow-...原创 2018-03-03 16:43:17 · 435 阅读 · 0 评论 -
CMS
跨域:在我们小程序,安卓,IOS移动端应用中,不存在跨域问题。但是在JS里,如果说我们这个代码是运行在浏览器的Javascript构成的话,他存在跨域问题。CMS不是和我们服务器,API绑定在一起的,CMS也不是和我们的数据库绑定在一起。最常见的CMS形式就是CMS代码不是调用我们的API,由我们API再操作数据库。我们最常见的CMS,包括大家所熟悉的很多开元CMS,他们都不是通过API来操作数据...原创 2018-03-03 04:57:52 · 541 阅读 · 0 评论 -
服务器客户端实时同步(挖个坑:)
长连接:比较老了WebSocket等以后填上这个坑原创 2018-03-03 03:59:50 · 341 阅读 · 0 评论 -
路由分组
当路由前面的都是一样的, 可以省略,否则改起来挺麻烦的。 第一个加共有的前缀,第二个加闭包,一个方法Route::group('共有的前缀部分',function(){ Route::请求方法如get('/url后缀1’,‘地址1’); Route::请求方法如get('/url后缀2’,‘地址1’); Route::请求方法如get('/url后缀3’,‘地址1’);...原创 2018-03-02 18:15:36 · 1540 阅读 · 0 评论 -
TP5路由配置遇到的一个小问题
如果在URL后传参比如...../:id和....../recent两个1.如果recent在前 那么传参,和recent接口都可以2.如果/:id在前,那么recent就不可以了因为TP5匹配路由是顺讯匹配的,当输入recent时,他会认为吧recent放入id的匹配,这样不会同过验证器。以为它会任务recent是上面的格式,就不会匹配到下面了。解决方案:recent不是可变参数是常量,/:id...原创 2018-03-02 17:57:55 · 1310 阅读 · 0 评论 -
无限分类下拉列表代码
原创 2018-03-15 22:29:28 · 373 阅读 · 0 评论 -
递归无限分类原理
我们必须要有条件判断否则就无限循环 我们递归返回值一般三种技巧 因为递归会把值丢了1 $_GLOBALS[result]2 static $result3 参数应用&输出1,2,3,4,5,6,7,8,9第一种,引用传递function deeploop(&$i=1){ echo $i; $i++; if($i<10){ deeploop($i...原创 2018-03-15 22:14:23 · 2216 阅读 · 1 评论 -
PHP无限分类
无限分类就是一个分类下面创建很多子类,其子类也可以创建不同子类,如此往复没有终点。1.族谱关系2.某种东西分类常用实现方法1.以父ID实现的无限分类使用递归算法。表中一个字段id,一个字段pid(父id)这样可以根据Where id = pid来查找出上一级类内容,运用递归至顶层2.以全路径实现的无限分类表中有一字段path:1,2,3使用where path like '1,2,3%'order...原创 2018-03-15 21:59:48 · 326 阅读 · 0 评论 -
彻底理解闭包函数(待定)
最早在学PYTHON遇到闭包,后面已经不止N次遇到闭包了,等有个机会把坑填上原创 2018-03-03 23:05:54 · 157 阅读 · 0 评论 -
PSR-4主要需要注意的
1.命名空间必须与绝对路径一致2.类名首字母必须大写3.除了入口文件其他.php文件必须只有一个类4.类文件名必须以.php结尾5.类文件名必须与文件名一样,大小写完全一样...原创 2018-03-03 23:33:24 · 427 阅读 · 0 评论 -
异常分类和层次结构
异常是分层次级别的,方法1,2,3代表异常层级。假如是方法3调用方法2,方法2调用方法1。 当方法1出现异常时,首先方法1会捕获异常try catch,接着方法1的代码会决定怎么处理异常(记录日志,或者修复异常假装没发生,或者返回客户端错误)假如不想处理异常,可以抛出去给方法2,方法2继续往上抛,也可以处理不处理,也可以往上抛。如果能够在服务器内部正确处理异常,并且把异常纠正过来之后返回客户端...原创 2018-02-25 17:58:56 · 1279 阅读 · 0 评论 -
命名空间的一个小问题
在继承全局异常类的过程中public function render(\Exception $e)这个类公共方法,我原来是Exception $e,怎么做都导致参数不兼容后来改成\Exception $e才可以查了一下发现是以下原因:如果你的PHP文件定义了命名空间,catch(Exception $e) 则会寻找该命名空间下面的Exception 类,如果未定义就会出现找不到类的问题。catch...原创 2018-02-25 20:03:35 · 103 阅读 · 0 评论 -
注册模式
用来解决全局共享和交换对象原来我们必须调用工厂或者调用类我们创建这个对象能不能直接调用?注册模式,用来将我们对象注册到全局上面,他就可以被任何地方直接访问声明一个Register.php<?phpnamespace zhuceshu;{ protected static $objects; static function set($alias,$object) //将一个对象...原创 2018-03-04 00:07:44 · 248 阅读 · 0 评论 -
单例模式
某个类对象只能创建一次假设我们数据库的类要连接到数据库,如果我们不使用一个单例模式。我们有很多个php文件都创建了数据库。是对资源的浪费。我们只需要创建一个数据库即可。我们指定构造方法private function __construct() //表示私有的,只有本类内部可以使用{}再New就发现不可以去new我们就屏蔽了在其他地方创建数据库连接stat...原创 2018-03-04 00:18:36 · 90 阅读 · 0 评论 -
工厂模式
我整理一下3种最常见的设计模式第一个,我个人也用的比较多的工厂模式工厂方法,或者类生产对象,而不是带代码中直接new建立一个factory.php工厂类如果不用工厂模式,创建对象比如new Database(); 我们可以直接factroy::createDatabase在工厂类里面我们static function createDatabase(){ $db = new Databa...原创 2018-03-04 00:05:51 · 112 阅读 · 0 评论 -
PHP魔术方法
4类魔术方法1.__get($key)/__set($key,$value) 将对象属性接管,定义后自动调用get,set,当对不存在的属性赋值就会调用set,当读取不存在的属性就会用set2.__call/__callStatic用来控制对象的方法调用,后者是控制类的静态方法3.__toString方法转换字符串,当我们echo对象的时候,就会执行toString4.__invoke对象当函数执...原创 2018-03-03 23:53:19 · 173 阅读 · 0 评论 -
链式操作实现
$db->where()->limit()-order();php框架常看到一行代码实现很多功能有一个数据库类,他定义了where,limit和order方法,链式操作就是在每一个方法后return $this每一个方法执行完,就是原来的类,就可以链式操作...原创 2018-03-03 23:48:41 · 204 阅读 · 0 评论 -
SPL标准库四个常用数据结构
数据结构类: 栈$stack = new SplStack();$stack->push("data1");$stack->push("data2")echo $stack->pop();echo $stack->pop();就是data2和data1队列$queue = new SplQueue();$queue->enqueue("data1");$queue-&..原创 2018-03-03 23:38:24 · 197 阅读 · 0 评论 -
API权限控制
在API不存在用户登录这样的概念,我们是通过令牌来管理用户身份的。在传统网站用户登录的概念,转换成用户获取令牌,这个令牌,是代表用户身份的 。虽然都是类似用户输入账号密码的东西,但是理解和概念上时不一样的。API是用户拿到令牌,这个令牌具有用户的身份,而且这个身份是分级别的。有些级别是管理员级别,有些级别是普通用户级别。用户在每一次调用接口的时候,都需要携带他所获取的令牌,如果令牌合法,那我们认为...原创 2018-02-28 23:10:03 · 16956 阅读 · 0 评论 -
接口粒度和分层
我们有时候把整个业务编写成一个API,这样可以在前端方便调用。但是这样做并不合适,只用了一次HTTP请求。这种方式是站在当前业务角度的方式考虑问题,而没有站在数据角度考虑问题。如果把所有接口合并成一个接口,这会导致任意一个小改动,导致整个接口剧烈变化。如果根据业务编写,那么整个API无法复用。如果站在数据角度,每个API保持一定独立性就可以做到的。纯粹按照功能写,没有按照数据,这个API通用性非常...原创 2018-02-28 22:12:19 · 2720 阅读 · 2 评论 -
TP5访问数据库具体实现---query查询器
我们是用Query查询器来完成。使用查询构建器,封装了对于不同数据库的操作,它提供了我们对于不同数据库统一的操作。不需要在意不同数据库差异性。使用原生sql来操作,整个tp5数据库访问层就失去了它的意义。我们一直在说Query是查询构造器。但是这个查询二字就是泛指,它不仅仅是有数据库的读操作,还有写操作。Query构建起仅仅是一种语法,最终还是有Builder来翻译成sql语句来查询。所有操作数据...原创 2018-02-27 12:59:41 · 2021 阅读 · 0 评论 -
PHP的Thinkphp5的apache服务器开发过程中的虚拟域名简化以及路由配置
在PHP的thinkphp开发过程中URL格式为http://serverName/index.php/module/controller/action/[param/value...] 开发过程中反复输入次URL十分的繁琐影响开发效率,为此可以通过修改配置来完成虚拟域名替换,主要分为两步第一步:打开apache目录下的conf\extra内的httpd-vhosts.conf加上这么一段<...原创 2018-02-11 19:38:22 · 2970 阅读 · 0 评论 -
TP5访问数据库架构
database.php配置数据库的配置文件 TP5默认支持4中数据库mysql,pgsql,sqlite,sqlsrv在thinkphp目录下library/think/db/connect可以看到连接器。在type配置。hostname配置数据库IP,如果外网需要外网IP,database改成数据库名tp5查询数据库方式有3种,1通过原生sql语句查询 2使用构造器操作数据库 3使用模型和关联...原创 2018-02-26 22:21:39 · 2601 阅读 · 0 评论 -
RESTFul API
Representional State Transfer:表述性状态转移本身来说概念非常抽象,从字面上都不能很好理解。不需要深层次了解对于开发工程师来说我们不用彻底了解rest是什么的,我们需要学会Restful的API设计,其本质可以认为是一种风格,一种约束,设计理念。与之对应的有Soap其本身是相对重量级的,而目前互联网的发展是向轻量级的,其用XML来描述数据的,rest是通过json来描述...原创 2018-02-14 13:43:15 · 4547 阅读 · 0 评论 -
错误日志
出现内部错误,代码有问题,我们需要解决。我们需要用日志记录下来。只有记录日志我们才能解决。在开发环节中我们可以输出变量,或者断点调试找到问题原因。但是在生产环境时,不能随意更改。我们排查生产环境的方法还是日志的方式。我们需要在全局异常记录异常信息,在全局异常处理记录的日志是比较机械刻板的。按照同一模式输出,在需要的时候也可以输出一些有标示性的,相关变量。 但是比较有特征值的我们全局异常处理没法弄,...原创 2018-02-26 18:24:30 · 3239 阅读 · 1 评论 -
命名空间
主要是为了解决上一个博客的问题的,顺便整理复习一下命名空间:解决常量,函数,类冲突的问题namespace 命名空间名字加上\就是调用全局的比如a\test();就是调用a命名空间下的test();也有子命名空间如果在namespace a下就得 \a 表示在根目录下面的a命名空间声明命名空间不能有任何代码输出,除了declare,不如$a=100;上一个异常Exception需要加\是因为,我们...原创 2018-02-25 21:08:11 · 108 阅读 · 0 评论 -
ORM对象关系映射
全称Object object relation mapping 对象关系映射让我们用面向对象的方式来思考数据表。在我们传统的sql中并没有把表当做对象,我们就是理解的二维关系的数据结构。但是用ORM我们得吧每张表思考成一个对象。那么用这样一种方式查询数据库不再使用sql语句。当我们用ORM查询数据库,我们操作的不是数据库的表,我们操作的是对象。至于说对象是如何获取数据的,这些细节是不需要我们关心...原创 2018-02-27 18:21:20 · 428 阅读 · 0 评论 -
Laravel路由
写在:routes文件下的web.php原本是欢迎页面的路由Route::get('/', function () { return view('welcome');});Route类的静态方法get(也可以改成post)'/'代表访问的URL路径,回调函数,表示做的实际操作,这里是渲染一个welcome的模板。但是写在Web.php非常多,所以Laravel提供了第二种Route::g...原创 2018-03-07 19:55:53 · 649 阅读 · 0 评论 -
减少页面HTTP请求的几种方式
减少HTTP请求次数 为什么:性能黄金法则:只有10%-20%的最终用户相应时间花在接收请求的HTML文档上,剩下的80%-90%时间花在HTML文档所引用的所有组件(图片,script,css,flash等等)进行的http请求上。 如何改善呢?改善相应时间最简单的途径就是减少组价的数量,并由此减少HTTP请求的数量。 HTTP连接产生的开销:几个步骤域名解析—TCP连接—发送请求—等待—下载资...原创 2018-02-19 06:57:44 · 7549 阅读 · 0 评论 -
Web资源防盗链
Web资源防盗链盗链:在自己的页面上展示一些并不在自己服务器上的内容。获得他人服务器上的地源地址,绕过别人的资源展示页面,直接在自己的页面上向最终用户提供此内容常见的是小站盗用大战的图片、音乐、视频、软件等资源。通过倒链的方法可以减轻自己服务器的负担,因为真实的空间和流量均是来自别人的服务器。如果有一天发现我们的流量慢慢消失,但是我们的PV统计、IP统计很少就是被盗链了。随便找个网站查看netwo...原创 2018-02-18 19:33:27 · 477 阅读 · 0 评论 -
Apahce虚拟主机与伪静态
Apahce虚拟主机与伪静态 Apache虚拟主机一般在配置多域名的时候使用虚拟主机,比如说在一个服务器配置很多的网站。那就需要多个配置来保证域名访问的网站的内容和源代码和源代码是不一样的。首先进入cd /etc/httpd/ ls –alconf配置文件,conf.module.d配置文件模块的配置文件,modules模块cd conf打开vim httpd.conf 看到很多...原创 2018-02-18 00:59:07 · 774 阅读 · 0 评论 -
TP5路由使用完整匹配
在TP5中 如果两个路由路径,很相似,前者传参数是?后者是/这优先代用前者,因为提前匹配如果我们希望不自动传入匹配,可以设置,在Config中的,路由使用完整匹配改成True即可...原创 2018-02-28 12:22:24 · 2336 阅读 · 0 评论 -
文章模块数据表
表名:Laravel推荐大家用名词加负数 比如posts外键:名词加下划线id,比如user_id时间:created_at/updata_atmigiration 数据库迁移 它让你对任何数据库操作,CURD以代码的形式呈现在Laravel,一旦需要同步就可以同步php artisan make:migration create_posts_table,前面会加上时间文章模型:ORM创建:ph...原创 2018-03-08 00:09:03 · 657 阅读 · 0 评论 -
Laravel的模板
使用的是blade模板 .balde.php结尾一般存放在resource.views目录中模板语法:{{}}@if@foreach 参数传递,一般来说我们上面写的变量名和传递的变量名尽量保持一致,否则我们搞不清楚,直接第二个参数compact('posts',‘啊','b');模板继承关系:extends/ section/ yeild/ content引入识图:include...原创 2018-03-07 23:02:03 · 277 阅读 · 0 评论 -
高并发处理方案
高并发和大流量:并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行。但是我们所说的并发是:上面的定义明显不是我们通常所言的并发,在互联网时代,所讲的并发和高并发,通常来讲是并发访问.也就是在某个时间点有多少访问同时到来。 通常一个系统的日PV在千万以上,有可能是一个高并发的系...原创 2018-02-17 19:07:18 · 3165 阅读 · 0 评论 -
TP5自动创建文件指令(未完成,挖个坑,后面总结归纳)
php think make::controller api/v1/控制器名这样原创 2018-02-28 00:35:28 · 841 阅读 · 0 评论 -
Laravel特色和基本介绍
支持队列,搜索,数据库迁移,定时脚本,composer管理 数据填充包https://github.com/fzaninotto/Faker/思想更为先进:服务容器和服务提供者,服务提供者存放到容器,当我们具体使用时直接从容器获取就行了,获取和使用服务容器的人不需要考虑是谁提供的,这是一种解耦合,在替换服务提供方的时候就非常方便。比如缓存服务,这次使用Redis,测试使用的是文件, 正式则用re...原创 2018-03-06 01:34:35 · 3808 阅读 · 0 评论