php框架

PDO防sql注入原理分析

感情迁移 提交于 2019-12-24 03:13:27
使用pdo的预处理方式可以避免sql注入。 在php手册中'PDO--预处理语句与存储过程'下的说明: 很多更成熟的数据库都支持预处理语句的概念。什么是预处理语句?可以把它看作是想要运行的 SQL 的一种编译过的模板,它可以使用变量参数进行定制。预处理语句可以带来两大好处: 查询仅需解析(或预处理)一次,但可以用相同或不同的参数执行多次。 当查询准备好后,数据库将分析、编译和优化执行该查询的计划。对于复杂的查询,此过程要花费较长的时间,如果需要以不同参数多次重复相同的查询,那么该过程将大大降低应用程序的速度。通过使用预处理语句,可以避免重复分析/编译/优化周 期。简言之, 预处理语句占用更少的资源,因而运行得更快。 提供给预处理语句的参数不需要用引号括起来,驱动程序会自动处理。 如果应用程序只使用预处理语句,可以确保不会发生SQL 注入。 (然而,如果查询的其他部分是由未转义的输入来构建的,则仍存在 SQL 注入的风险)。 预处理语句如此有用,以至于它们唯一的特性是在驱动程序不支持的时PDO 将模拟处理。这样可以确保不管数据库是否具有这样的功能,都可以确保应用程序可以用相同的数据访问模式。 下边分别说明一下上述两点好处: 1.首先说说mysql的存储过程,mysql5中引入了存储过程特性,存储过程创建的时候,数据库已经对其进行了一次解析和优化。其次,存储过程一旦执行

Yii框架tips

為{幸葍}努か 提交于 2019-12-22 00:59:40
db组件 'schemaCachingDuration'=>3600, 为什么不起做用? 需要开缓存 如何在页面下边显示sql的查询时间 在log组件的routes中加入 array( 'class'=>'CProfileLogRoute', 'levels'=>'error, warning', ) 同时在db组件中加入 'enableProfiling'=>true, 同时在这种情况下,可以用CDbConnection::getStats() 查看执行了多少个语句,用了多少时间 如何知道某一个程序段运行需要的时间 配置好CProfileLogRoute后,在需要测试的地方加上 Yii::beginProfile('blockID'); //程序段 Yii::endProfile('blockID'); 'enableParamLogging'=>true,的作用是? 在日志的bind的参数后边跟数的值 如何在页面底部显示所有的db相关的日志 同上,配置log组件的routes中加入 array( 'class'=>'CWebLogRoute', 'levels'=>'trace, info, error, warning', 'categories' => 'system.db.*', //'showInFireBug' => true, 将在firebug中显示日志 ),

php 内置web服务

我们两清 提交于 2019-12-21 14:39:53
从 PHP 5.4.0 起,PHP内置了Web 服务器 ,这对于认为需要Apache或Nginx才能预览PHP应用的开发者来说又是一个隐藏功能。这个内置的Web服务器不应该用于 生产环境 ,但对于本地开发来说是个极好的工具。 Laravel Valet 起初就是使用这个内置的服务器,但是在1.1.0版本后将其替换为Caddy( 查看相关新闻 )。 1、启动 这个内置的Web服务器很容易启动,打开终端(Windows下对应是cmd命令行),进入项目根目录,执行如下命令即可: php -S localhost:8000 (注意点:要安装php,并且php是全局环境) 如果是php -S localhost:8000 启动,则只有 本机能访问,且浏览器要输入localhost,很不方便!!! 上述命令会新启动一个PHP Web服务器,地址是 localhost ,监听的端口是 8000 ,当前所在目录就是这个Web服务器的根目录。 现在,打开浏览器,访问 http://localhost:8000 就可以预览应用了。(运行期间,doc窗口不能关闭!)在Web浏览器中浏览应用时,每个 HTTP 请求的信息都会记录到终端的标准输出中,因此我们可以查看应用是否抛出了404或500响应: 有时候我们需要在同一局域网中的另一台设备中访问这个服务器(例如iPad或本地虚拟机),为此,我们可以把

PHP 错误处理机制

懵懂的女人 提交于 2019-12-20 18:19:30
在日常的项目开发过程中,总是会出现一些我们意想不到的异常错误,如果我们对此没有进行相对完善的处理,那么程序看上去也很不专业,也很可能就会成为别人攻击系统的有效信息;有些错误异常会终止脚本执行,这个时候如果没有一些错误提示信息的话,那么我们只能从头开始看代码了,要知道项目中成百上千行的代码对我们来说是件多么恐怖的事情啊,那么我们如何在项目开发的过程中快速准确地定位到异常、错误呢,并进行相应的处理,本文由自己对错误、异常处理的了解,再此分享与大家相互学习交流,并作为一个备忘。 系统错误处理器 : PHP 正常情况下,错误会正常的输出,但在一些框架中,可能会影响错误的输出,可能是框架本身有自己的处理机制,也可能代码中作处理了,一般是这几个函数设置: 1.error_reporting(); 设置 PHP 的报错级别并返回当前级别 error_reporting(report_level) 如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值: 值 常量 描述 1 E_ERROR 致命的运行时错误。不能回收此错误。脚本被中断执行。 2 E_WARNING 非致命的运行时警告。脚本不被中断执行。 4 E_PARSE 编译时分析错误。解析应该只由分析器生成的错误 8 E_NOTICE 运行时通知。该脚本发现可能是一个错误,但通常运行一个脚本时,也可能发生 16

php单一入口框架设计

≯℡__Kan透↙ 提交于 2019-12-19 16:26:02
说到PHP单入口模式,很快想到关于PHP的一些框架,zend,thinkphp,qeephp,还有cakephp 等,它们都采用了统一的入口,可以根据不同的需要,分前台入口后台入口或者其他操作权限入口,这样的设计模式优点很明显,比如。权限控制,url重写,结 合MVC清晰地目录结构。这些都是单入口模式所带来的便利,当然这样的也会带来执行效率的疑问。 由单入口模式,我顺便提下单件模式,结合OO特性。 <?php class A{ private static $tag = null; private function __construct(){} static function getObject(){ if( null == self::$tag){ self::$tag = new A(); } return self::$tag; } } $object1 = A::getObject(); $object2 = A::getObject(); if($object1 === $object2){ echo "同一对象"; }else{ echo "不同对象"; } 通过$tag标示class是否实例化,$tag为空,则实例化当前类并赋给$tag,如果不为空则返回这个指向实例的static 属性。 继续知识延伸...工厂模式

最新访问维基百科的方法

依然范特西╮ 提交于 2019-12-19 12:56:25
使用万维百科:https://www.wanweibaike.com 中文版: https://www.wanweibaike.com/ 英文版: https://en.wanweibaike.com/ PHP框架。 Agavi是一个开源的PHP框架,支持MVC设计模式。它并没有使用约定优于配置的设计范式,而是重在设计决策,以及更好的可伸缩性。 ApPHP是一个MVC的快速开发框架。 AuraPHP是一个受到SolarPHP影响的PHP框架。 AsgardPHP是一个灵活的,支持快速开发的MVC框架。 Atomik Framework是一个PHP的微框架。 CakePHP是一个开源的PHP框架,它支持MVC设计模式,其受到Ruby on Rails影响,并通过MIT许可证发行。 ClanCats是一个开源的PHP框架,支持HMVC模式. CodeIgniter是一套给PHP网站开发者使用的应用程序开发框架和工具包。它提供一套丰富的标准库以及简单的接口和逻辑结构,其目的是使开发人员更快速地进行项目开发。 Core Framework是一个开源的PHP框架,支持PHP 5.4以上版本,可开发基于MVC的Web应用。 Cygnite Framework是一个强大的PHP框架,其Active Record受Ruby on Rails影响。 DiscoPHP是一个支持PHP 5

PHP框架类加载器

 ̄綄美尐妖づ 提交于 2019-12-19 07:09:12
今天跟着教程一块走了一个 加载各种类的加载器,基于面向消息的思路,向队列添加任务消息;具体跟着代码走一遍 就可以了.感觉不是很难 < ? php class A { public static function testA ( $a ) { echo 'A' . $a ; return false ; } } //静态方法 class B { public static function testB ( $b ) { echo 'B' . $b ; return false ; } } //对象方法 class C { public function testC ( $c ) { echo 'C' . $c ; return false ; } } //单例方法 /*程序执行完成有0个或者1个实例*/ class D { private static $d = Null ; private function __construct ( ) { echo 123 ; } public static function newInstance ( ) { if ( self : : $d == Null ) { self : : $d = new D ( ) ; } return self : : $d ; } public function testD ( $d ) { echo "D

php有必要用swoole吗

三世轮回 提交于 2019-12-19 06:57:33
在 Swoole 官网的自我介绍是“面向生产环境的 PHP 异步网络通信引擎”,首先 Swoole 它是一个网络应用的开发工具,它支持 Http、TCP、UDP、WebSocket。 Swoole 和我们传统的 PHP 开发差别是有的,需要理解的概念也是有的。使用目前一些基于 Swoole 的框架开发的话,从开发习惯上和传统的TP、LV 框架相差不多。 那为什么要使用 Swoole? 我认为有以下几点: 常驻内存,避免重复加载带来的性能损耗,提升海量性能 协程异步,提高对 I/O 密集型场景并发处理能力(如:微信开发、支付、登录等) 方便地开发 Http、WebSocket、TCP、UDP 等应用,可以与硬件通信 PHP 高性能微服务架构成为现实 常驻内存 目前传统 PHP框架,在处理每个请求之前,都要做一遍加载框架文件、配置的操作。这可能已经成为性能问题的一大原因,而使用 Swoole 则没有这个问题,一次加载多次使用。 协程 说到协程,就得先简单说说进程和线程,众所周知进程是很占用资源的,为了处理请求大量创建进程肯定是得不偿失的。而多线程应用就比较多了,在 CPU 层面有几个核心就会执行几个任务,线程一旦创建的多了,就会有线程调度的损耗。 协程是在单线程基础上实现的,它可以最大限度利用 CPU 资源,而不会在等待 I/O 时白白浪费。当然,协程数越多占用的内存也就越多

打造自己php的开发框架--php的MVC简单实现

荒凉一梦 提交于 2019-12-18 13:53:42
从本篇开始介绍如何用php来实现MVC模式开发,而且后续的文章也是在这个基础上不断改造优化。关于MVC这里就不多说了,并且在以后的文章里也是以讲技术为主。 本篇先介绍一下php的MVC实现原理,我们框架的MVC部分也是基于此原理实现的,但是今天的代码并不是框架内的代码,仅仅为说明原理。 一、文件结构 建立3个文件夹 controller文件夹存放控制器文件 view文件夹存放视图文件 model文件夹存放数据文件 建立1个index.php 作为唯一入口 二、控制器 我们在controller文件夹下建立一个democontroller.php文件,文件内容如下 <?php class DemoController { function index() { echo('hello world'); } } /* End of file democontroller.php */ 这个文件里面我们只是建立了一个名为DemoController的对象并包含一个index的方法,该方法输出hello world。下面在index.php中执行DemoController中index方法。 index.php的代码如下 <?php require('controller/democontroller.php'); $controller=new DemoController();

PSR规范 (psr-0,psr-1,psr-2,psr-3,psr-4)

自古美人都是妖i 提交于 2019-12-18 13:29:21
04是自动加载的规范, 12是代码规范, 3是日志规范,后面的数字就是升级版 PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。 项目的目的在于:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了 PHP 的发展,解决这个程序设计师由来已久的困扰。 目前已表决通过了 6 套标准,已经得到大部分 PHP 框架的支持和认可。 1.PSR-0 自动加载规范,此规范已被启用-本规范已于2014年10月21日被标记为弃用,目前新的替代规范为【PSR-4】 本文是为自动加载器实现通用自动加载所需要遵循的编码规范 一个标准的命名空间与类名称的定义必须符合以下结构:\<Vendor Name><Namespace>*(ClassName) 其中Vendor Name 为每个命名空间都必须要有的一个顶级命名空间名 需要的话,每个命名空间下可以拥有多个子命名空间 当根据完整的命名空间名从文件系统中载入类文件时,每个命名空间之间的分隔符都会被转换成文件夹路径分隔符 类命名中的每个_字符也会被转换成文件夹路径分隔符,而命名空间中的_字符则是无特殊含义的。 当从文件系统中载入标准的命名空间或类时,都将添加.php为目标文件后缀