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/15、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) <DATE(notes_date); curdate()得到当前年月日,date_sub()计算时间差15、查询出近30天的记录:select * from notes where date_sub(curdate(),interval 30 day)<date(notes_date)16、查询出本月的记录:select * from notes where DATE_FORMAT(notes_date,’%Y%m’)=DATE_FORMAT(CURDATE(),’%Y%m’); date_format(date,format)格式化时间17、查询出上月的记录:select * from notes where PERIOD_DIFF(DATE_FORMAT(CURDATE(),’%Y%m’),DATE_FORMAT(notes_date,’%Y%m’))=1; period_diff(P1,P2)返回P1到P2之间的月份间隔数,其中P1和P2的格式是YYYYMM或YYMM18、在MVC中所有的相对路径参照路径都是入口文件 index.php19、if(array_key_exists($key,get_object_vars($this))) 在一个类中中判断传入的参数键是否在类中20、 __DIR__:动态得到当前文件所在目录dirname()得到上级目录 dirname(__DIR__) 动态得到当前文件所在目录的上级目录__FILE__ 动态得到包含文件名的全路径basename(__FILE__) 动态得到文件名 包括后面的地址栏参数 如 test.php?a=method&id=221、读取txt文件中的信息并以换行为分隔存入到数组中: $txt=file_get_contents(text.txt); $string_arr=explode(“\n”,$txt) //此处的分隔符必须要是双引号将\n包含起来,不能使用单引号22、使用fread读取文件内容function get_file_content($file_path){$fp=fopen($file_path, ‘r’);$data=”;while (!feof($fp)){ //feof($handle) 其中feof表示测试文件指针是否已经到了文件结束的位置$data.=fread($fp, 1024);}fclose($fp);return $data;}23、ini_set()函数的使用24、array_unique(array) 移除数组中重复的项25、strlen()与mb_strlen()的区别:都是用于获取字符串的长度,其中str_len只针对单字节编码字符,也就是说它计算的是字符串的总字节数。如果是多字节编码如gbk和utf8,使用strlen得到的不是字符的个数而是该字符的总字节数。可以使用mb_strlen获取其字符个数,使用mb_strlen要注意两点,一是要开启mbstring扩展二是指定字符集$str=”传智播客php学院”;echo strlen($str); //21 当前页面是utf-8字符集,如果是gbk则结果为15echo mb_strlen($str); //21 注意 未指定字符集,使用内部字符编码(单字节)echo mb_strlen($str,’utf8′); //9自定义函数取得带有中文字符字符串的长度function strlen_utf8($str){$arr=preg_split(‘//u’,$str,-1,PREG_SPLIT_NO_EMPTY);$len=count($arr);return $len;}26、截取带有中文的字符串使用 mb_substr()$str=”你好我叫shushu”;echo mb_substr($str,2,3,’utf8′);function substr_utf8($str,$start,$len){return implode(“”,array_slice(preg_split(‘//u’,$str,-1,PREG_SPLIT_NO_EMPTY),$start,$len));}27、post与get传输的最大容量分别是: post根据php.ini文件的配置 post_max_size(默认为8M),get则是2k28、打印前一天的时间strtotime()函数用于将英文文本的日期时间转换为unix时间戳得到前一天的时间:date(“Y-m-d H:i:s”,strtotime(“-1 day”));得到上一个月的时间:date(“Y-m-d H:i:s”,strtotime(“-1 Month”))得到上一年的时间:date(“Y-m-d H:i:s”,strtotime(“-1 Year”)) 或者 date(“Y-m-d H:i:s”,strtotime(“last year”))得到上一周的时间:date(“Y-m-d H:i:s”,strtotime(“-1 Week”));计算2009-4-1与200-3-2两个日期之差:(strtotime(‘2009-4-1’)-strtotime(‘2009-3-2’))/(3600*24) 得到两个日期的日期之差29、list()函数,把一个数组中的值赋给list中的变量 如 list($a,$b)=array(‘xiaozhang’,’xiaoli’);30、implode()将数组转成字符串 emplode()将字符串转为数组31、preg_split()函数:使用正则表达式对字符串分割语法:preg_split(正则表达式,分割的字符串,limit,$flag) 其中limit为-1表示没有限制,$flag为PREG_SPLIT_NO_EMPTY表示只返回非空部分preg_split(‘//u’,$str,-1,PREG_SPLIT_NO_EMPTY);32、array_slice() 从数组中取出一段来 语法:array_slice(array,offset,[length])33、trim() 消去字符串左右两边的空格 语法:trim($string,【$charlist】) 如果$charlist缺省则消去$string中左右两边的空格,如果存在$charlist则消去$string中两边的$charlist 如 trim(‘ashushusdsa’,’a’) 得到的结果是字符串 :shushusds 消掉了左右两边的a其他两个函数 ltrim()与rtrim()分别表示消掉左边和消掉右边的指定字符串34、何为可变变量:获取一个变量的值作为这个可变变量的变量名35、以Apache模块的方式安装PHP,在文件http.conf中首先要用语句:LoadModule php5_module ‘c:/php/php5apache2.dll’; 动态加载PHP模块然后再用语句 AddType application/x-httpd-php .php 使得Apache把所有扩展名为php的文件都作为PHP脚本处理。36、取得一个全路径的文件的扩展名的五种方法//取得一个全路径的扩展名//方法1function getExtension1($file_path){//对文件地址做分割得到数组$path_arr=preg_split(‘/\./’, $file_path,-1,PREG_SPLIT_NO_EMPTY);return $path_arr[(count($path_arr)-1)];}//方法2function getExtension2($file_path){return pathinfo($file_path,PATHINFO_EXTENSION);}//方法3function getExtension3($file_path){$arr=explode(‘/’, $file_path);$file_arr=$arr[(count($arr)-1)];$extension=explode(‘.’, $file_arr);return $extension[(count($extension)-1)];}//方法4function getExtension4($file_path){$extension=strrchr($file_path,’.’);return ltrim($extension,’.’);}//方法5function getExtension5($file_path){return substr($file_path, strrpos($file_path, ‘.’)+1);}echo getExtension4(‘f:/test/a.txt’);37、intval() 函数 将’101′ 转换为10138、将open_dir转换为OpenDirfunction get($string){$arr=explode(‘_’,$string);$txt=array_map(‘toUpper’,$arr); //使用array_map()函数使得数组$arr中的每一个元素都调用了函数toUpperreturn implode(”,$txt);}function toUpper($word){$word{0}=strtoupper($word{0});return $word;}39、array_map(callback,array) 该函数的作用是使得数组array中的每一个元素都回调callback函数40、统计字符在字符串中出现的次数:substr_count(字符串,字符)//自定义函数:统计字符在字符串中出现的次数function getNumber($string,$key){$arr=explode($key, $string);return count($arr)-1;}echo getNumber(‘gsggsgsgs’,’g’);41、ord($string)函数 得到字符串中的ASCII码 如:0-9为48-57 只能得到第一个字符的ASCII值42、删掉一个网站的所有的Cookie $_SERVER[‘HTTP_COOKIE’]得到包含所有cookie的字符串 每个cookie之间用”;”分割 如:name1=xiaozhang; name2=xiaoli; name4=xiaoluo//删除一个站点的所有cookie$cookie_str=$_SERVER[‘HTTP_COOKIE’];$cookies_arr=explode(‘;’, $cookie_str);foreach ($cookies_arr as $cookie){$cookie_arr=explode(‘=’, $cookie); //得到cookie名与cookie值的数组$cookie_name=trim($cookie_arr[0]); //必须要使用trim()去掉两边的空格//echo $cookie_name;setcookie($cookie_name,”,time()-3600);}43、chr()44、ini_get()取得PHP配置信息 ini_set() 配置PHP45、extract()46、str_repeat(字符串,次数) 该函数是重复的产生字符串 如:$str=str_repeat(‘=’,10) 将生成10个“=”的字符串47、mysql_real_escape_string() 转义SQL中的特殊字符48、fsockopen()49、feof()50、header()51、header_set()if(!header_set()){header(‘Location:http://www.baidu.com’);exit;}52、gmdate()53、glob()54、serialize() 对数据序列化55、unserialize() 对数据反序列化56、json_decode() 对json格式的数据进行编码57、json_encode() 对变量进行json编码58、unlink()删掉文件59、finfo_open() finfo_file()60、ucfrist() 将字符串的首字母大写,主要应用于MVC地址栏中平台与模块的单词拼写61、addslashes()62、get_magic_quotes_gpc()63、array_walk_recursive()64、IE8下不支持html5标签的解决方法:使用javascript:document.createElement(‘header’); 这句话即告诉IE8说header为一个标签65、array_unique(array) 消除数组中重复的项,返回为一个数组66、js事件监听:IE:attachEvent(type,callback) type:事件名 如 onclick,callback:事件处理程序基于w3c模型的浏览器(firefox 等):addEventListener(type,callback,flag) type:事件名 如click 注意,这里没有on前缀 callback:事件处理程序 flag: 使用捕捉模型还是冒泡模型 默认:冒泡解决浏览器兼容性问题:/*** obj: 为操作的dom对象* type: 事件名 不加 ‘on’* callback: 事件处理程序function addEvent(obj,type,callback){if(window.addEventListener){obj.addEventListener(type,callback);}else{obj.attachEvent(‘on’+type,callback);}}67、js中的event对象 window.event 只支持IE浏览器 火狐等W3C浏览器不支持 这个需要在匿名函数中传递event对象 function(event){}如:obj.onclick=function(event){var evt;if(window.event){//解决IE浏览器问题evt=window.event;}else{//解决w3c浏览器问题evt=event;}}68、js中的事件冒泡机制与阻止冒泡:window.onload=function(){document.getElementById(‘div1’).onclick=function(){alert(‘div1’);}document.getElementById(‘div2’).onclick=function(){alert(‘div2’); //发生事件冒泡 依次弹出div3、div2}document.getElementById(‘div3’).onclick=function(){alert(‘div3’); //发生事件冒泡 依次弹出div3、div2、div1}}

div1

div2

div3

阻止冒泡发生function stopBubble(evt){if(window.event){//ie浏览器window.event.cancelBubble=true;}else{evt.stopPropagation();}}69、js 字符串的search方法:var str=’try you best’; str.search(‘tr’) 说明:该方法是查找字符串中匹配的字符如果找到则返回索引位置,如果没有找到则返回-1 实例:js版搜索功能70、多关键字的搜索功能实现原理:将关键字字符串使用空格分隔,得到数组,再for遍历逐个匹配即可 如 str=’中国 中华 台湾’ 使用空格分隔成数组再使用 for遍历搜索实例:$link=mysql_connect(‘localhost’,’root’,’123456′);mysql_select_db(‘myshop’);mysql_query(‘set names utf8’);$str=’诺基亚 三星’;$arr=explode(‘ ‘, $str);$sql=”select goods_name from ecs_goods where”;for ($i=0;$i<count($arr);$i++){$key=$arr[$i];$sql .=” goods_name like ‘%$key%’ or”;}$sql=substr($sql, 0,-2);$result=mysql_query($sql);while ($row=mysql_fetch_assoc($result)){var_dump($row);}71、背景透明度兼容性:IE:filter:alpha(opacity:30) 火狐、谷歌:opacity:0.372、元素的:offsetLeft、offsetRight、offsetWidth、offsetHeight 的使用73、JS中根据类名筛选出指定的元素 通用方法function getByClass(oParent,sClass){var aEle=oParent.getElementsByTagName(‘*’); //从父节点中得到所有的子节点,其中通配符“*”表示匹配所有的元素var aResult=[];for(var i=0;itestssss’;var pattern=/(.*)/;var result=str.replace(pattern,’ ‘);alert(result);82、eval()方法 检查JS代码并执行 如 eval(‘3+5′) 得到的结果不是字符串’3+5’ 而是8 因为它执行了3+5这个运算83、css中设置透明色:IE:filter:alpha(opacity=30) W3C:opacity:0.384、window.onresize=function(){窗体发生改变时的动作} window.onresize表示当窗体发生改变时调用的方法85、document.documentElement.clientWidth :得到当前浏览器的最大宽度 document.documentElement.clientHeight:得到当前浏览器的最大高度86、获取网页元素的绝对位置网页元素的绝对位置指该元素的左上角相对于整个网页左上角的坐标。首先每个元素都有offsetTop和offsetLeft属性,表示该元素的左上角与父容器(offsetParent对象)左上角的距离。所以,只需要将这两个值进行累加,就可以得到该元素的绝对坐标使用下面函数完成//得到元素左边坐标function getElementLeft(element){var actualLeft=element.offsetLeft;var current=element.offsetParent;while(current!=null){actualLeft+=current.offsetLeft;current=current.offsetParent;}return actualLeft;}//得到元素上边坐标function getElementTop(element){var actualTop=element.offsetTop;var current=element.offsetParent;while(current!=null){actualTop+=current.offsetTop;current=current.offsetParent;}return actualTop;}87、解决浏览器对事件对象的兼容问题function(event){var ev=event||window.event; //其中window.event支持IE浏览器,从匿名函数中传过来的参数event支持W3C浏览器}88、div拖拽效果的实现//div拖拽效果实现var login=document.getElementById(‘login’);login.onmousedown=function(event){var e=event||window.event;var diffX=e.clientX-login.offsetLeft;var diffY=e.clientY-login.offsetTop;document.onmousemove=function(event){var e=event||window.event; //解决浏览器兼容问题,其中window.event表示支持IE,event表示支持w3clogin.style.left=e.clientX-diffX+’px’;login.style.top=e.clientY-diffY+’px’;}document.onmouseup=function(){this.onmousemove=null;this.onmouseup=null;}}89、JS取消浏览器的默认行为var prevent=function(event){var e=event||window.event;if(typeof e.preventDefault !=’undefined’){//W3Ce.preventDefault();}else{//IEe.returnValue=false;}}90、js中取得字符串的第一个字母 如: string=’test’; 得到t这个单词 使用 string.charAt(0)91、js检查浏览器的兼容性(function(){var version=navigator.userAgent.toLowerCase();window.sys={}; //其中{}表示申明为一个对象//IE浏览器if((/msie ([\d.]+)/).test(version)){var info=version.match(/msie ([\d.]+)/);sys.ie=info[1];}//Firefox浏览器if((/firefox\/([\d.]+)/).test(version)){var info=version.match(/firefox\/([\d.]+)/);sys.firefox=info[1];}//alert(version); chromeif((/chrome\/([\d.]+)/).test(version)){var info=version.match(/chrome\/([\d.]+)/);sys.chrome=info[1];}})();92、filemtime、fileatime、filemtime93、定义常量常用代码if(!defined(‘SMARTY_DIR’)){define(‘SMARTY_DIR’,dirname(__FILE__));}94、定义操作系统文件分割符if(!defined(‘DS’)){define(‘DS’,DIRECTORY_SEPARATOR);}95、strip_tags96、encodeURIComponent() JS中中文转码 此方法与php中的urlencode方法效果是一样的在ajax的get传值中,如果值为中文,则需要转码再在php文件中接收并解码html文件:xhr.open(‘get’,’./01.php?name=xiaozhang&addr=’+encodeURIComponent(‘北京’),true); //true表示异步传输php文件:$addr=urldecode($_GET[‘addr’]);97、创建ajax对象function createXHR(){if(window.ActiveXObject){//支持IEvar versions=[‘Microsoft.XMLHTTP’,’MSxml2.XMLHTTP’,’MSxml2.XMLHTTP2.0′,’MSxml2.XMLHTTP3.0′,’MSxml2.XMLHTTP4.0′,’MSxml2.XMLHTTP5.0′];for(var i=0;icache_lifetime=7200; //设置缓存时间默认缓存时间为3600秒 $cache_lifetime=3600检查缓存:$smarty->isCached(“tpl.html”)清除缓存:$smarty->clearCached(‘tpl.html’);清除所有缓存:$smarty->clearAllCached();局部缓存:$smarty->assign(‘var’,$var,true); 第三个参数表示是否不缓存{$var nocache=true} 指定$var不缓存{nocache}不缓存的内容{/nocache}137、smarty模板fetch读取某个文件内容并输出 {fetch file=’文件名’ isassign=’var’} 表示保存本次结果但不输出138、json是属性的集合139、prototype:使用原因:扩展对象当前实例的属性或方法。功能:返回对象构造器的引用140、闭包原理:当一个函数里面包含另一个函数,并且返回里面函数的值,则当在函数外部使用一个全局变量指向返回的函数的首地址时,里面的函数所占用的内存不会被回收,而函数内部的局部变量也不会被回收。这就是闭包原理。function f1(){var i=10;function f2(){alert(i);}return f2;}var d=f1(); //得到f2的首地址d(); //执行f2()141、正则表达式的常用模式:1、忽略大小写模式(i) /^test$/i2、多行模式(m) /^test$/m3、懒惰模式(U) /^test$/U4、支持UTF-8转义表达式(u) /^test$/u142、过滤所有的html标签的正则表达式:]+> 其中:\/?表示斜杠可无可有,匹配开始和关闭标签。[^>]+表示如果不是右尖括号的字符重复一次或多次。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设置获得的Sessionsession_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 GMT158、日志管理PHP日志:打开PHP的Log记录,只需要在php.ini文件中设置如下选项Log_errors = On //开启日志记录和记录的错误等级LogLevel warnerror_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号,如果在另外地方使用用$1169、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 Cache3、增加Mysql最大连接数查看最大连接数:show variables like ‘max_connections’4、从表中删除大量数据后,可运行 optimize table tab_name 进行碎片整理5、对于MyISAM,适当设置 table_cache179、压力测试软件:ab.exe apache的bin目录下。ab.exe -c 100 -n 1000 地址180、删除地址栏参数的算法181、Sphinx 词库 搜狗词库 语言包的制作182、把Sphinx 安装成一个系统服务 –install183、ifnull(字段名,’test’) 数据库中判断字段名如果为空为输出test184、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模型中的方法则使用M191、如何取json得数据var json={‘person’:[{‘name’=>’xiaozhang’,’age’:20,’sex’:’male’},{‘name’:’xiaowu’,’age’:20,’sex’:’famale’}]}取得json中的某一个值:json.person[0].name 得到的是person节点下的第一个数组下的name的值 xiaozhang192、使用空模型,应用场合:带有连接查询的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/xiaoming200、开启安全模式下,有些函数是失败的,如mkdir,fopen,fread,fwrite,exec,system等涉及到文件系统的系统函数不能执行默认是关闭的safe_mode=off 开启是safe_mode=on201、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 username2、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.31206、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 btreeinnodb btreememory hash,btreebtree为二叉树 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