| 1、使用绝对路径载入文件 defined('ROOT',pathinfo(__FILE__,PATHINFO_DIRNAME));
 require(ROOT.'/test.php');
 2、写入文件前,检查目录写权限
 一般代码:
 $content="please input text";
 $path='e:/text/text.txt';
 file_put_contents($path,$content);
 存在问题:写或生存文件前,确保目录是可写的,假如不可写输出
 错误信息,在linux系统中,需要处理权限,目录权限不妥会导致
 很多问题,文件也有可能无法读取。
 1、父目录不存在
 2、目录存在,但文件不可写
 3、文件被写锁住
 改良代码:
 $content='please input text';
 $dir='e:/text';
 $path=$dir.'/text.txt';
 if(is_writable($dir)){
 file_put_contents($path,$contents);
 }else{
 die('文件夹有权限设置大概文件不可写');
 }
 3、不要依靠submit按钮值来检查表单的提交行为
 一般代码:
 if($_POST['submit']=='Save'){
 //other thing
 }
 上诉环境大多数环境下正确,除了应用多语言,save可能代表其他寄义,不好区分它们以是不要依靠它们
 改良代码:
 if($_SERVER['REQUEST_METHOD']=='POST'&&isset($_POST['submit'])){
 //other thing
 }
 4、天生唯一的id 使用函数uniqid()2013/9/1
 5、array_fill($start_index,$num,$mix)数组填充
 6、mt_rand()与rand() 区别:mt_rand()比rand()产生随机数的均匀速度快4倍
 8、比力常见的输出:echo,var_dump(),var_export()
 9、所有魔术方法:__construct() __destruct() __clone() __set() __get() __isset() __unset() __call() __invoke()
 10、reset系列相干函数;reset()将数组的内部指针移动到第一个位置 current() key() next()
 11、OOP关键字:class final instanceof private protected public static abstruct interface extends implements :: ->
 12、查询出当天的记录: select * from notes where to_days(notes_date)=to_days(now()); to_days()为Mysql时间函数用于计算出天数
 13、查询出昨天的记录: select * from notes where (TO_DAYS(NOW())-TO_DAYS(notes_date)) BETWEEN 1 and 2;
 14、查询出近7天的记录:select * from notes where DATE_SUB(CURDATE(),INTERVAL 7 DAY)  此中:\/?表现斜杠可无可有,匹配开始和关闭标签。[^>]+表现如果不是右尖括号的字符
 重复一次或多次。
 143、XSS攻击:指的是css和javascript脚本攻击,主要在地址栏和论坛留言表单中 ,管理方案是:对特殊字符“”等html标签过滤
 可以使用 htmlspecialchars() 大概使用正则表达式过滤。
 143、microtime(true) 表现微妙数。该函数主要用于测试一个过程的执行总时间。用结束时间减去开始时间。
 144、在使用Session中,session_start()必须在步调最开始执行,前面不能有任何输出内容。但是偶然候确实需要输出大概不能确定是否有输出则可以如下:
 ob_start();
 session_start();
 $_SESSION['user']='xiaoluo';
 ob_end_flush();
 145、禁用Cookie之后,传递SessionID可以通过 URL大概表单来传递。如下
 a.php:
 echo "new1";
 $a=session_name();
 $b=session_id();
 echo "new2";
 
 new.php:
 $session_name=session_name();
 //取得sessionid
 $sessionID=$_GET[$session_name];
 //使用session_id设置得到的Session
 session_id($sessionID);
 session_start();
 var_dump($_COOKIE);
 var_dump($_SESSION);
 146、javascript进行加密验证和非均衡图形验证码
 147、IP限定
 148、Token法
 149、表单诱骗
 150、getenv('REMOTE_ADDR') 得到环境变量的函数
 151、MySQL常见引擎对比:
 MyISAM: 非事务存储引擎,表锁 支持小数据,小并发,适用于频繁查询
 InnoDB: 支持事务引擎,行锁 支持大数据,大并发,适用于插入更新比力多的应用
 152、SQL注入:
 如:select * from table where user='xiao' and pwd='111'
 下面的SQL语句可以绕过验证
 select * from table where user='xiao' and pwd='111' or 1=1
 这条语句可以绕过用户名和密码的验证。
 一般而言,如果用户名或密码通过GET传递过来则 如下地址可以绕过用户名与密码验证
 http://www.chuanzhi.com/10-25/06sql.php?user=xiao&pwd=admin' or '1=1
 防SQL攻击可以使用函数 addslashes(string) 会把所有传入所有的'(单引号)、"(双引号)、\(反斜杠)和空字符
 153、文件缓存
 154、ignore_user_abort() 关闭浏览器时PHP脚本也将继续执行
 155、set_time_limit() 设置脚本最大执行时间,默认值为30秒,如果为0表现没有限定。
 PHP定时执行任务的实现
 config.php文件
 
 test.php文件
 
 156、javascript对URL编码的函数:
 编码函数:encodeURI(string) 该函数是对整个URL编码
 解码函数:decodeURI(string)
 编码函数:encodeURIComponent() 该函数是对组成部门进行个别编码
 157、设置客户端缓存:
 注意:
 header('Cache-Control:max-age=86000,must-revalidate');
 header('Last-Modified:'.gmdate('D,d M Y H:i:s').'GMT');
 header('Expires:'.gmdate('D,d M Y H:i:s',time()+'86400').'GMT');
 注意:HTTP的日期时间是格林威治时间(GMT),而不是当地时间
 例如:Expires:Fri,30 Oct 1998 12:41:12 bm GMT
 158、日志管理
 PHP日志:
 打开PHP的Log记录,只需要在php.ini文件中设置如下选项
 Log_errors = On //开启日志记录和记录的错误等级
 LogLevel warn
 error_log = e:/error.log //记录Log的位置。
 159、ThinkPHP中URL访问的几种模式
 160、ThinkPHP中的令牌
 161、array_merge($arr1,$arr2) 归并数组
 162、设置PHP.ini文件最大并发数、apache最大并发数
 163、浏览器端使用JS正则表达式验证 服务器端使用php正则表达式验证
 164、PHP中多态的使用
 function add(Person person){
 if(person instanceOf chinese){
 echo '中国人的类';
 }
 if(person instanceOf usa){
 echo '美国人的类';
 }
 if(person instanceOf english){
 echo '英国人的类';
 }
 }
 165、构建流畅类的接口
 class Goods{
 private $good_name;
 private $good_price;
 public function setName($good_name){
 $this->good_name=$good_name;
 return this;
 }
 public function setPrice($good_price){
 $this->good_price=$good_price;
 return this;
 }
 }
 $goods=new Goods();
 $goods->setName('xiaozhang')->setPrice('2000');
 166、PHP的断点续传
 167、关于虚拟主机的具体设置信息(重要)、
 168、正则表达式反向引用:引用字表达式内容时,如果在正则表达式直接使用使用\1号,如果在另外地方使用用$1
 169、apache发生错误,看错误日志可以可以方便调试
 170、将session生存到memcached中
 171、对myisam的存储引擎表,进行碎片整理。optimize table 表名
 172、create table table_1 like table_2 根据创建布局相同的表
 173、a标签的href和onclick同时使用时会发生的问题:a标签的href执行页面跳转,onclick执行ajax请求。
 当两者同时使用时,a标签会先执行跳转,ajax请求会停止,也就是说ajax请求不到数据。
 管理方案是:阻止a标签的默认行为,当ajax请求数据完成后再再执行a标签的页面跳转
 174、dede中在html模板页面中引入某模板的标签是 {dede:global.cfg_templets_skin/}
 如:
 175、网站图片的现加载效果
 176、格式化小数的函数 round(数字,2) 表现保留两位小数
 177、以换行转化为数组 explode("\r\n",$str) 使用\r\n的原因是与操纵系统有关。
 178、服务器优化措施:
 1、查看慢查询的条数,定位性能脖颈
 show global status like '%slow%'
 2、适当使用Query Cache
 3、增加Mysql最大毗连数
 查看最大毗连数:show variables like 'max_connections'
 4、从表中删除大量数据后,可运行 optimize table tab_name 进行碎片整理
 5、对于MyISAM,适当设置 table_cache
 179、压力测试软件:ab.exe apache的bin目录下。ab.exe -c 100 -n 1000 地址
 180、删除地址栏参数的算法
 181、Sphinx 词库 搜狗词库 语言包的制作
 182、把Sphinx 安装成一个系统服务 --install
 183、ifnull(字段名,'test') 数据库中判断字段名如果为空为输出test
 184、dedecms中的防脚本攻击的函数:在include/helpers/filter.helper.php文件中
 185、filemtime()得到文件最后修改时间
 186、缓存内容
 ob_start(); //开启缓存
 include './test.html'; //将该数据写到缓存中
 $_content=ob_get_content(); //得到缓存内容
 ob_clear(); //清空缓存区
 187、实现局部不缓存的,使用ajax去实现。
 188、var_export()打印出带有php语法格式的字符串
 $content=var_export(数组,true) 不会直接输出出来,但是可以用变量接受
 var_export(数组,false) 直接输出
 该函数可以将数组信息以有效的PHP语法格式写到文件中
 189、对数组做缓存
 方案1:序列化数组存到文件中,用时再反序列化
 方案2:直接使用var_export()格式化数组,再写到文件中
 190、TP框架中的实例化模子 $model=M('Model')与$model=D('model')的区别
 如果需要要使用模子中的数据,则使用D,如果只是需要使用TP模子中的方法则使用M
 191、如何取json得数据
 var json={'person':[{'name'=>'xiaozhang','age':20,'sex':'male'},{'name':'xiaowu','age':20,'sex':'famale'}]}
 取得json中的某一个值:json.person[0].name 得到的是person节点下的第一个数组下的name的值 xiaozhang
 192、使用空模子,应用场所:带有毗连查询的SQL语句的执行,可以实例化空模子,再调用query()
 193、无限极分类
 脚本延迟执行:sleep(10)延迟10秒 不定参数 func_get_args()
 194、ckeditor的使用
 195、$.ajax({
 type:'post',
 url:''
 data:$('form').serilize(), //技巧部门 得到表单中的所有序列化数据
 success:function(msg){
 
 }
 })
 196、stript_tags()过滤html标签
 197、$(str).each(function(k,v){
 alert(v);
 })
 198、set_time_limit(0) 设置脚本执行时间为没有限定
 199、parse_url($url) 解析域名 得到的是一个数组:hhtp,wwww.baidu.com,/name/xiaoming
 200、开启安全模式下,有些函数是失败的,如mkdir,fopen,fread,fwrite,exec,system等涉及到文件系统的系统函数不能执行
 默认是关闭的safe_mode=off 开启是safe_mode=on
 201、char、varchar、text的区别
 char :255字符
 varchar:65535字节
 text:65535字符
 202、SQL注入攻击:
 当在URL地址提交 id=1 or 1=1时会产生SQL注入 防范方法是使用intval(value)将数据转换成整数
 使用 addslashes(str) 验证字符串,将单引号”"“转换成”\'“ 双引号“"”转换为”\"“
 使用mysql_real_escape_string() 转义sql语句中的特殊字符
 203、跨站脚本攻击:使用htmlspecialchars函数来防范
 203、在php.ini文件中将magic_quotes_gpc=on时,它会把提交的变量中的所有的单引号,双引号,反斜线和空字符会自动转化为含有反斜线的转义字符。
 204、SQL注入专题
 1、select注入:sql语句:select * from user where username like '%$search%' order by username
 注入语句:aabb%' or 1=1 order by id#
 注入成的语句是:select * from user where username like '%aabb%' or 1=1 order by id #order by username
 加入没有含有aabb的用户名,那么or 1=1使返回值依然为真,使其返回所有值
 还可以注入:%' order by id#
 注入乐成的语句是:select * from user where username like '% %' order by id#order by username
 2、update users set password='$pwd',
 
 205、char与varchar的区别:
 char与varchar的区别在于两者的生存方式和检索方式
 char为固定长度,varchar为可变长度,如char(4),varchar(4) 如果为'ab'则 char为'ab '未知的长度以空格填充,而varchar为'ab'不会以空格填充
 检索方式:'ab ' varchar数据类型检索出来是原数据'ab ',而char数据类型检索出来的是'ab'会删除尾部的空格
 float、decimal的区别
 float为浮点数,decimal为定点数,float为产生不精确的环境,如111.32可能会变成111.31
 206、TP中打印出SQL语句信息$this->getLastsql()
 207、PHP中使用eval()可以将字符串表明为php脚本执行 如
 $str="echo 'xiaozhang';";
 eval($str);
 208、SQL优化:
 优化的一般步调:1、使用show status了解SQL的执行服从 2、定位执行服从低的SQL语句(通过慢查询日志文件或slow processlist)
 3、通过explain分析低效的SQL语句() 4、采取对应的优化措施
 使用show status 下令了解各种SQL的执行频率,此中show session status 显示的是session级别的统计结果,show global status 显示的是global级别的结果
 在show status中 下面的参数对MyIsam和Innodb存储引擎都有计数
 1、Com_select 执行select操纵的次数
 2、Com_insert 执行insert操纵的次数
 3、Com_update 执行update操纵的次数
 4、Com_delete 执行delete操纵的次数
 以下几个参数时对Innodb存储引擎计数
 1、Innodb_rows_read select查询返回的行数
 2、Innodb_rows_inserted 执行Insert操纵插入的行数
 3、Innodb_rows_updated 执行update操纵更新的行数
 4、Innodb_rows_deleted 执行delete操纵删除的行数
 对于事物型的应用,通过Com_commit和Com_rollback可以了解事务提交和回滚的环境
 以下几个参数可以了解数据库的根本环境
 1、Connections 试图毗连Mysql服务器的次数
 2、Uptime 服务器的工作时间
 3、Slow_queries 慢查询的次数
 通过explain分析低效的SQL语句
 select_type: select 类型
 table: 输出结果集的表
 type: 表现表的毗连类型 当表中只有一行是type的值时为system是最佳的毗连类型
 当select的表毗连没有使用索引时,type的值为all,表现对该表为全表扫描,这时需要通过创建索引
 来提高表毗连的服从。
 possible_keys: 表现查询时,可以使用的索引列
 key: 表现使用的索引
 key_len: 索引长度
 rows: 扫描范围
 extra 执行环境
 索引的存储类型目前只有两种(btree和hash),具体和表的模式相干
 myisam btree
 innodb btree
 memory hash,btree
 btree为二叉树 hash为哈希
 查看索引使用环境:如果索引正在工作,Handler_read_key的值将很高。这个值代表了一个行被索引值读的次数
 Handler_read_rnd_next的值高则意味着查询运行低效,而且应该建立索引补救。
 show status like 'Handler_read%'
 优化措施:整理文件碎片:optimize table (删除大量数据后)
 优化group by语句:默认环境下mysql排序所有group by col1,col2 查询时会隐式的指定order by col1,col2 但是你又想
 避免排序结果的消耗,可以执行order by null禁止排序。
 209、字符串的反转,如:$str='hello,world' 不使用php函数
 function fn1($str){
 $len=strlen($str);
 $new_str='';
 for($i=$len-1;$i>=0;$i--){
 $new_str.=$str[$i];
 }
 return $new_str;
 }
 210、php中操纵mongodb
 将对应的版本的mongodb.dll文件放入php的ext文件夹下,开启mongodb.dll的扩展
 $mongo=new Mongo(); //创建Mongo对象
 $data=array('name'=>'xiaoming','age'=>20);
 $mongo->cms->user->insert($data); //执行插入
 //修改操纵 在控制台中的修改是:db.user.update({'name':'xiaoluo'},{'$set':'xiaoli'})
 $mongo->cms->user->update(array('name':'xiaoluo'),array('$set':'xiaoli'))
 //取出数据
 $arr=$mongo->cms->user->find(); //得到的是一个游标
 while($arr->hasNext()){
 $d=$arr->getNext(); //取得下一条记录是数据的格式
 echo $d['name'];
 echo $d['age'];
 }
 211、在控制台下操纵mongodb
 切换数据库:use cms 切换到cms数据库中(由于mongodb是无模式的数据库以是如果不需要主动创建数据库,只要里面插入数据则会自动天生数据库)
 插入数据: db.user.insert({'name':'xiaozhang'},{'age':20})
 删除数据: db.user.remove({'name':'xiaoluo'}) //删除了name为xiaoluo的一条记录
 修改数据: db.user.update({'name':'xiaowu'},{'$set':{'age':20}}) //将name为xiaowu的一条记录修改name为xiaoli 如果没有age这个字段则主动添加上
 查找数据: db.user.find() //查找出所有数据
 按条件查询:db.user.find({'name':'xiaoluo'}) //查找出name为xiaoluo的记录
 查找数据: db.user.findOne() //查找出一条记录
 使用游标查询数据
 var data=db.user.find(); //得到一个游标 不能使用for语句遍历输出
 while(data.hasNext()){
 var dd=data.next();
 print(dd.name);
 print(dd.age);
 }
 212、mongodb的特点:
 1、面向文档的数据库
 2、无模式(无需建表,也无需建数据库)
 3、以BSON格式存储数据(一种类JSON的格式)
 4、javascript作为操纵语言
 5、支持多种语言:php、python、java、c++
 6、支持GridFS
 |