php基础函数汇总表
字符串类:
nl2br($str) //把n转换为br $str="<h1><i>1</i>这是一个标题</h1>"; htmlentiites($string); //把html的代码转换为实体显示 把中文字体也转换了,这是个不好的现象 <h1><i>1</i>è¿�æ�¯ä¸�个æ �é¢�</h1> htmlspecialchars($str); //<h1><i>1</i>这是一个标题</h1> strip_tags($str); //去掉html代码 get_magic_quotes_gpc() //返回1或0 与这个方法进行连用,如果系统开启了这个方法,则不要执行addslashes()方法了。否则执行 addslashes($str); //把 单引号 与双引号 $str 都加上转义字符,进行数据库的安全限制 $str1=addslashes($str); //1name:jame\'s这是一个标题 echo $str1; echo "<br>"; echo stripslashes($str1); //1name:jame's这是一个标题 echo stripcslashes($str1); //1name:jame's这是一个标题 strtoLower($str) //转换为小写 strtoUpper($str) //转换为大写 ucfirst($str) //首字母转换为大写 ucwords($str) //每一个单词首字母都转换为大写 lcfirst($str) //使第一字母小写 str_repeat($str,length); 返回length个$str个字符串 $_arrStr="a,b,c,d"; explode(",",$_arrStr); //使用这个函数,将使用逗号作为分隔条件,分隔$_arrStr字符串,得到数组。 //Array( [0] => a [1] => b [2] => c [3] => d) implode(",",$arr) //得到字符串,使用逗号把$arr 连接成字符串。 join(",",$arr) //和implode()函数是一样的,加入 strlen($_arrStr) //返回字符串的长度 substr($str,0,10); //截取字符串 mb_substr($str,0,10,"utf-8"); //截取中文字 str_replace($str,0,10) substr_replace($str,0,-4) mb_substr_replace($str,0,10) //截取字符串函数 strrev($str) //字符反转 strstr($str,$find)//判断str是否包含find这个字符(str和find都是变量) stristr($str,$find)//是否包含find这个变量,不区分大小写 strrchr($str,$find) //$find字符串中的最后一次出现 strpos($str,$find) //查找find是否在str中出现,如果有返回出现的位置,否则返回 false stripos(str,$find) //和strpos这个函数是一样的,区别:不区分大小写 strrpos($str,$find) //从后面向前边寻找,找到返回其位置 echo lcg_value() //生成0-1之间的随机数 //时间 echo "今天:".date("Y-m-d H:i:s"); echo "<br>"; echo "前五天:".date("Y-m-d H:i:s",strtotime("-5 day")); echo "<br>"; echo date("Y-m-d H:i:s",strtotime("+1 month")); echo "<br>"; strtotime("+1 day"); strtotime("+1 day"); strtotime("+1 week") strtotime("+2 month"); strtotime("+2 hours"); //加两个小时 //请输入你的php代码 // echo date("Y-m-d H:i:s",strtotime("-2 day")); //前两天 // echo date("Y-m-d H:i:s",strtotime("-1 week")); // 上个星期 // echo date("Y-m-d H:i:s",strtotime("-1 month")); //上个月 // echo date("Y-m-d H:i:s",strtotime("-1 hour")); //上一个小时 // echo date("Y-m-d H:i:s",time()-60); //上一份钟 //echo date("D"); //Wed // echo date("t"); //月份中有多少天 //echo date("z"); //年份中第多少天 echo date("w"); //星期 星期中的第几天,数字表示 0星期天 3表示第三天 //var_dump(date("L")); //是否闰年 今天:2017-04-10 12:55:03 前五天:2017-04-05 12:55:03 前下一个月:2017-05-10 12:55:03 strtotime("2017-03-15 17:22:33"); date("Y-m-d H:i:s"); $timeChuo=strtotime("2017-02-15 17:22:33"); echo date("Y-m-d",$timeChuo-3600*24); //返回时间的前一天 D //表示星期几 Wed d //这个月的第几天 j // 月份中的第几天,没有前导零 w //今天是这周的第几天 0(表示星期天)到 6(表示星期六) z //今天是今年的第多少天 L //是否闰年 t //返回这个月的天数 //操作本地文件 file_get_contents("Path/a.css"); //得到a.css这个文件的内容 file_put_contents("Path/a.css",$content); //写文件 //写一个文件 $fp=fopen($path."a.txt","w"); fwrite($fp,$content); fwrite($fp,$content2); fclose($fp); //读一个文件: $handle = fopen("http://www.example.com/", "rb"); $contents = ''; while (!feof($handle)) { $contents .= fread($handle, 8192); } fclose($handle); 打开model: r r+ w w+ a a+ b 这几种方式是可以进行组合 wb w //计算两个文件的相对路径: //方法:得到两个文件的绝对路径,然后进行 / 进行分割,得到两个不同的数组, 然后得到A文件和B文件array_diff_assoc() 通过这个函数得到两个数组不同的交集,并得到个数 循环一下,得到相对地址 计算出:A文件相当于B文件的相对路径 $a="/a/b/c/d/a.php"; $b="/a/b/1/2/b.php"; function fff($fileA,$fileB){ $path=""; $tempA=explode("/",$fileA); $tempB=explode("/",$fileB); $diff=array_diff_assoc($tempA,$tempB); $diffSize=count($diff); for($i=0;$i<$diffSize-1;$i++){ $path.="../"; } $path .= implode('/', $diff); //implode()用于使用指定字符串连接数组元素,此处返回用'/'连接数组元素后的字符串 return $path; } echo fff($a,$b); //解析url地址 $url=$_SERVER['REQUEST_URI']; $url_arr=parse_url($url); //得到一个数组 两个key path 和 query parse_str($url_arr['query'],$http); //$http 这个数组 unset($http['page']); //删除对应的参数 echo $url_arr["path"]."?".http_build_query($http); $file=$_SERVER['SCRIPT_NAME']; $file=$_SERVER['PHP_SELF']; $file="http://www.looda.com/asp/ff.aspx?a=2134&b=33"; $temp = parse_url($file); $path = $temp['path']; //然后再借用pathinfo直接将扩展名取出 echo pathinfo($path,PATHINFO_EXTENSION)."<br>"; echo pathinfo($path,PATHINFO_FILENAME )."<br>"; echo pathinfo($path,PATHINFO_BASENAME)."<br>"; echo pathinfo($path,PATHINFO_DIRNAME)."<br>"; $temp = pathinfo($file,PATHINFO_EXTENSION); //取出扩展名 $temp = explode("?",$temp); echo $temp[0]; //在不使用临时变量的情况下,交换两个数的变量: echo "<br>"; $a=3; $b=9; echo "原始a".$a."------b".$b; $a=$a+$b; $b=$a-$b; $a=$a-$b; echo "原始 a:".$a."------b:".$b; //读取一个目录 function readdir($dir){ $_dataArr=array(); if(is_dir($dir)){ $fp=opendir($dir); while($file=readdir($fp)){ if($file!="." && $file!=".."){ $_dataArr[]=$file; //filesize 文件大小 //文件扩展名 stristr($fileName,".") //filetype 文件类型 文件 or 文件就爱 //filemtime 文件最后的编辑时间 } } }else{ return false; } } dirname(__FILE__); 得到文件所在的路径
解析字符串类
class Parsert{ private $tpl; //构造方法 function __construct($mtpl){ if(!$this->tpl=file_get_contents($mtpl)){ echo "ERROR: 模板文件读取错误"; exit; } } //定义一个方法来解析普通变量, //这里使用private 因为这里只在类里访问 private function parVal(){ // 这里使用正则表达式 preg_match() 来匹配,用preg_replace() 来替换 $pattern='/\{\$([a-zA-Z0-9_]+)\}/'; if(preg_match($pattern,$this->tpl)){ //解释一下 echo \$this->_vars['\\1'] //这里的\\1 指的是 正则表达式匹配后的第一个分组的数据 //这里的\\1 也可以用$1来替换为 echo \$this->_vars['$1'] $this->tpl=preg_replace($pattern,"<?php echo \$this->_vars['\\1']?>",$this->tpl); } } //解析if语句 首先去判断有没有if语句,如果有 //那么就必须有结束语句,如果没有,就报错,并结束程序 /* {if $变量} 变量的使用的方法 {else} {/if} */ private function parif(){ $patternif='/\{if\s+\$([a-zA-Z0-9_]+)\}/'; $patternelse='/\{else\}/'; $patternendif='/\{\/if\}/'; if(preg_match($patternif,$this->tpl)){ //判断是否有结尾 if(preg_match($patternendif,$this->tpl)){ $this->tpl=preg_replace($patternif,"<?php if(\$this->_vars['\\1']){ ?>",$this->tpl); //判断是否有else if(preg_match($patternelse,$this->tpl)){ $this->tpl= preg_replace($patternelse,"<?php } else {?>",$this->tpl); } //解析结束if $this->tpl=preg_replace($patternendif,"<?php }?>",$this->tpl); }else{ echo "ERROR: if语句没有结束语句 "; exit; } } } /*循环嵌套使用方法 */ private function pariff(){ $patternif='/\{iff \@([a-zA-Z\-\>]+)\}/'; $patternelse="/\{iffelse\}/"; $patternend="/\{\/iff\}/"; if(preg_match($patternif,$this->tpl)){ if(preg_match($patternend,$this->tpl)){ $this->tpl=preg_replace($patternif,"<?php if(\$$1){?>",$this->tpl); $this->tpl=preg_replace($patternend,"<?php } ?>",$this->tpl); if(preg_match($patternelse,$this->tpl)){ $this->tpl=preg_replace($patternelse,"<?php }else{ ?>",$this->tpl); } }else{ echo "Error: 内嵌式循环 iff 没有关闭"; exit; } } } //解析动态注释 private function parCommon(){ $pattern='/\{#\}(.*)\{\/#\}/'; //我是php注释,在网页中是看不到的,只有在php文件中才可以看到 if(preg_match($pattern,$this->tpl)){ $this->tpl=preg_replace($pattern,"<?php /*\\1*/ ?>",$this->tpl); } } //解析foreach语句 private function parForeach(){ $patternForeach='/\{foreach \$([\w]+)\(\$([\w]+),\$([\w]+)\)\}/'; $patternEndForeach='/\{\/foreach\}/'; $f_val='/\{@([\w\-\>\+\$]+)\}/'; $fun_val='/\{@([\w\-\>]+)\s+function=(\"|\')([\w]+)\(\'([\w\-\#\+.@]*)\'\)(\"|\')\}/'; if(preg_match($patternForeach,$this->tpl)){ //php echo \$$1 if(preg_match($patternEndForeach,$this->tpl)){ $this->tpl=preg_replace($patternForeach,"<?php foreach(\$this->_vars['\\1'] as \$\\2=>\$\\3){ ?>",$this->tpl); $this->tpl=preg_replace($f_val,"<?php echo \$$1; ?>",$this->tpl); $this->tpl=preg_replace($patternEndForeach,"<?php } ?>",$this->tpl); if(preg_match($fun_val,$this->tpl,$all)){ // print_r($all); if($all[3]=="checkempty"){ $this->tpl=preg_replace($fun_val,"<?php if(\$$1==\"\"){echo \"$4\";}else{echo \$$1;} ?>",$this->tpl); }else{ $this->tpl=preg_replace($fun_val,"<?php echo \$$1; ?>",$this->tpl); } } }else{ echo "ERROR: 没有foreach关闭语句 "; exit; } } } private function parFor(){ $partterFor='/\{for\s+\@([\w\-\>]+)\(\$([\w]+),\$([\w]+)\)\}/'; $partterelse='/\{else\}/'; $partterend='/\{\/for\}/'; $f_val='/\{@([\w\-\>\+\$]+)\}/'; if(preg_match($partterFor,$this->tpl)){ if(preg_match($partterend,$this->tpl)){ $this->tpl=preg_replace($partterFor,"<?php foreach(\$$1 as \$\\2=>\$\\3){ ?>",$this->tpl); $this->tpl=preg_replace($partterend,"<?php } ?>",$this->tpl); $this->tpl=preg_replace($f_val,"<?php echo \$$1; ?>",$this->tpl); if(preg_match($partterelse,$this->tpl)){ $this->tpl=preg_replace($partterelse,"<?php }else{ ?>",$this->tpl); } }else{ echo "ERROR: for 循环没有关闭语句 "; exit; } } } //解析include private function parInclude(){ //$pattern='/\{\s*include\s+file=\"|\'([\w]+).([\w]+)\"|\'\s*\/\}/'; //$pattern='/\{\s*include\s+file=\"|\'(.*)\"|\'\s*\/\}/'; $pattern='/\{\s*include\s+file=(\"|\')(.*)(\"|\')\s*\/\}/'; if(preg_match($pattern,$this->tpl)){ preg_match($pattern,$this->tpl,$_file); // print_r($_file); $infile=$_file[2]; if(!file_exists($infile)){ echo "ERROR: $infile 引入的文件不存在"; exit; } $this->tpl=preg_replace($pattern,"<?php include '\\2' ;?>",$this->tpl); } } //解析array数组 private function parArray(){ $pattern='/\{array\s+\$([a-z0-9A-Z\-\>]+)\(\$[a-z0-9A-Z]+,\$[a-z0-9A-Z]+\)\}/'; $patternend='/\{\/array\}/'; if(preg_match($pattern,$this->tpl)){ if(preg_match($patternend,$this->tpl)){ $patternval='/\{\#value\}/'; $patternval2='/\{\#key\}/'; $this->tpl=preg_replace($pattern,"<?php \$pa=\$this->_vars['\\1']; for(\$i=2;\$i<sizeof(\$this->_vars['\\1']);\$i++){ ?>",$this->tpl); if(preg_match($patternval,$this->tpl)){ $this->tpl=preg_replace($patternval,"<?php echo \$pa[\$i]; ?>",$this->tpl); $this->tpl=preg_replace($patternval2,"<?php echo \$i; ?>",$this->tpl); } $this->tpl=preg_replace($patternend,"<?php }?>",$this->tpl); }else{ exit("没有array结束标签"); } } } //解析系统变量 private function parConfig(){ $pattern='/<!--\$([\w]+)-->/'; if(preg_match($pattern,$this->tpl)){ $this->tpl=preg_replace($pattern,"<?php echo \$this->config['\\1']; ?>",$this->tpl); } } public function common($parfile){ //解析普通变量 $this->parVal(); //解析if语句 $this->parif(); //解析内嵌式if $this->pariff(); //解析php注释 $this->parCommon(); //解析For $this->parFor(); //解析foreach $this->parForeach(); //解析include $this->parInclude(); //解析系统变量 $this->parConfig(); //解析数组 $this->parArray(); //在这里生成编译文件 if(!file_put_contents($parfile,$this->tpl)){ echo "ERROR:生成缓存文件出错"; exit; } } //定义一些常用方法 private function checkfunction($bl,$fun,$view){ $string=""; if($fun=="checkempty"){ $string="<?php if(\$$bl==\"\"){echo \"$view\";}else{echo \$$bl;} ?>"; }else{ $string="<?php echo \$$bl ?>"; } return $string; } }