PHP 之 面试题(笔试题总结)
来源:互联网 发布:大数据时代人工智能 编辑:程序博客网 时间:2024/05/18 15:06
多个进程同时处理同一文件,加下锁防冲突
function writeData($path, $mode, $data){ $fp = fopen($path, $mode); $retries = 0; $max_retries = 100; do{ if ($retries > 0){ usleep(rand(1, 10000)); } $retries += 1; }while(!flock($fp, LOCK_EX) and $retries <= $max_retries); if ($retries == $max_retries) { return false; } fwrite($fp, "$data\n"); flock($fp, LOCK_UN); fclose($fp); return true; }
超大文件读取
error_reporting(E_ALL^E_NOTICE); function readBigFile($filename, $count = 20, $tag = "\r\n") { $content = "";//最终内容 $_current = "";//当前读取内容寄存 $step= 1;//每次走多少字符 $tagLen = strlen($tag); $start = 0;//起始位置 $i = 0;//计数器 $handle = fopen($filename,'r+');//读写模式打开文件,指针指向文件头 while($i < $count && !feof($handle)) { //文件没有到结尾和小鱼需要读取得行数时 fseek($handle, $start, SEEK_SET);//指针设置在文件开头 $_current = fread($handle,$step);//读取文件 //echo $_current;exit; $content .= $_current;//组合字符串 $start += $step;//依据步长向前移动 //依据分隔符的长度截取字符串最后免得几个字符 $substrTag = substr($content, -$tagLen); if ($substrTag == $tag) { //判断是否为判断是否是换行或其他分隔符 $i++; } } //关闭文件 fclose($handle); //返回结果 return $content;}$filename = 'F:/wamp/www/test/import_order_log.txt';//需要读取的文件$tag = "\r\n";//行分隔符 注意这里必须用双引号$count = 20;//读取行数$data = readBigFile($filename,$count,$tag);echo $data;exit;
多维数组转一维
function arrToOne($multi) { $arr = array(); foreach ($multi as $key => $val) { if( is_array($val) ) { $arr = array_merge($arr, arrToOne($val)); } else { $arr[] = $val; } } return $arr;}function get_real_ip(){ $ip=false; if(!empty($_SERVER['HTTP_CLIENT_IP'])){ $ip=$_SERVER['HTTP_CLIENT_IP']; } if(!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ $ips=explode (', ', $_SERVER['HTTP_X_FORWARDED_FOR']); if($ip){ array_unshift($ips, $ip); $ip=FALSE; } for ($i=0; $i < count($ips); $i++){ if(!eregi ('^(10│172.16│192.168).', $ips[$i])){ $ip=$ips[$i]; break; } } } return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);}echo get_real_ip();echo $_SERVER['REMOTE_ADDR'];
拆分成小文件
function chai($file){ //$file = './qq.txt'; $sub_file_count = 100; //要拆分的文件个数 $sub_file_len = ceil(filesize($file)/$sub_file_count); //每个子文件的大小 $handle = fopen($file, "rb"); //打开文件资源 rewind($handle); //文件位置指针设为文件流的开头 $last_n_len = 0; for ($i=0;$i<$sub_file_count;$i++){ $content = fread($handle , $sub_file_len + $last_n_len); $last_n = strrchr($content , "\n"); //从最后一个\n开始一直到末尾的字符串 $last_n_len = strlen($last_n); //从最后一个\n开始一直到末尾的字符串的长度 $trim_n_content = substr($content , 0 , strlen($content) - $last_n_len); //写文件 fwrite(fopen($i.".log", "wb") , $trim_n_content); fseek($handle , ftell($handle) - $last_n_len + 1);//设置文件指针 }}
功能:删除数组出现次数最多或最少
function dodellargemsl($array){ $count = array_count_values($array); $max= max($count); foreach($count as $kt=>$vw){ if($vw==$max){ $vc[]=$kt; } } foreach($array as $k=>$v){ if( in_array($v,$vc)){ unset($array[$k]); } } return $array;}
数据库分表(提前分)
//生成id function get_AI_ID($canshu) { $sql = "insert into create_id (id) values('')"; $sid = $canshu->query($sql); return $canshu->lastInsertId(); } function new_Article($canshu) { $id = get_AI_ID($canshu); $table_name = get_Table_Name($id); $sql = "insert into {$table_name} (id,subject,content) values('{$id}','测试标题','测试内容')"; print_r($id); echo $table_name; $canshu->exec($sql); } function get_Table_Name($id) { return 'article_'.intval($id)%10; } $opts_values = array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8'); $dns = "mysql:host=localhost;dbname=ttlsa_com"; $canshu=$dbObj = new PDO($dns,'root','',$opts_values); //连接数据库查询更新数据 $dbObj -> query('set names utf-8'); new_Article($canshu);
excel文档导入
function mslz(){ echo "<pre>"; //$data = file_get_contents('./test.csv'); //$dataa = @explode("",$data); $datab = fopen('./test.csv','r');while (!feof($datab)) { $datae[] = fgets($datab); } fclose($datab); $datae = array_filter($datae); unset($datae[0]); foreach($datae as $v){ echo $v; //var_dump($v); $r = rtrim($v,", ");//特别之处 //$r = rtrim($v,","); // echo $r=; echo $r.PHP_EOL; }//print_r(trim("9.78076E+12,95,",","));//print_r($datae);}
判断参数中是否含有中文
function has_chinese($address) { if (!$address) { return false; } if (preg_match("/[\x7f-\xff]/", trim($address))) { $has_chinese = true; // 含有中文 } else { $has_chinese = false; } return $has_chinese; }
文件查找函数
//文件查找函数//返回文件绝对路径//PHP_EOL换行符function guchi($name="*",$type="*"){ $files = glob("{$name}.{$type}"); //realpath foreach ($files as $filename){ $baf[] = realpath($filename); // .filesize($filename); } return $baf;}
图片放大或压缩函数
/**图片放大或压缩函数**$imgname*$sizex,$sizey 相对原图宽高比例*$xsize="",$ysize="" 新图宽高值(设置后宽高比例失效)*return 新图名字*/function doimage($imgname,$sizex,$sizey,$xsize="",$ysize=""){ $ext = pathinfo($imgname,PATHINFO_EXTENSION); $type=array("jpg","jpeg","png","gif"); if(!in_array($ext,$type)){ exit("格式错误"); } $ext = strtolower($ext); switch($ext){ case "jpeg": $img=imagecreatefromjpeg($imgname); //获得源文件 break; case "png": $img=imagecreatefrompng($imgname);//创建一块画布,并从 PNG 文件或 URL 地址载入一副图像 break; case "gif": $img=imagecreatefromgif($imgname);//创建一块画布,并从 GIF 文件或 URL 地址载入一副图像 break; case "jpg": $img=imagecreatefromjpeg($imgname); //获得源文件 break; } //echo $ext;exit("hui"); $x=imagesx($img); //获得图片的长 $y=imagesy($img); //获得图片的宽 $newx=$xsize?$xsize:$x*$sizex; //新图片的长, $newy=$ysize?$ysize:$y*$sizey; //新图片的宽, $newimg = imagecreatetruecolor($newx, $newy); // 创建新图片 imagecopyresized ($newimg,$img,0,0,0,0,$newx,$newy,$x,$y); //(0,0,0,0)前两个是新文件的起始坐标,后面两个是源文件的起始坐标 if($ext=="jpg"||$ext=="jpeg"){ $newname = date("Y-m-d-H-i-s",time()); header ("Content-type: image/jpeg"); imagejpeg ($newimg,"{$newname}.jpg"); return $newname."jpg"; } if($ext=="png"){ $newname = date("Y-m-d-H-i-s",time()); header ("Content-type: image/png"); imagejpeg ($newimg,"{$newname}.png"); return $newname."png"; } if($ext=="gif"){ $newname = date("Y-m-d-H-i-s",time()); header ("Content-type: image/gif"); imagejpeg ($newimg,"{$newname}.gif"); return $newname."gif"; }}
将php对象转化为数组
//将php对象转化为数组 function objectToArray($obj) { if(is_object($obj)){ $obj = get_object_vars($obj); } if(is_array($obj)){ return array_map(__FUNCTION__, $obj); }else{ return $obj; } }
将数组转化为对象
//将数组转化为对象 function arrayToObject($d) { if (is_array($d)) { return (object) array_map(__FUNCTION__, $d); }else{return $d;} }
字符串截取函数
//字符串截取函数 function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) { if(function_exists("mb_substr")){ if($suffix) return mb_substr($str, $start, $length, $charset); else return mb_substr($str, $start, $length, $charset); } elseif(function_exists('iconv_substr')) { if($suffix) return iconv_substr($str,$start,$length,$charset); else return iconv_substr($str,$start,$length,$charset); } $re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/"; $re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/"; $re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/"; $re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/"; preg_match_all($re[$charset], $str, $match); $slice = join("",array_slice($match[0], $start, $length)); if($suffix) return $slice; return $slice; }
表单提交框处理函数
//表单提交框处理函数 function checkstr($str){ $str= trim($str); $str = htmlspecialchars($str); $str = strtolower($str); $str=str_replace("join","",$str); $str=str_replace("union","",$str); $str=str_replace("select","",$str); $str=str_replace("where","",$str); $str=str_replace("insert","",$str); $str=str_replace("delete","",$str); $str=str_replace("update","",$str); $str=str_replace("like","",$str); $str=str_replace("drop","",$str); $str=str_replace("create","",$str); $str=str_replace("modify","",$str); $str=str_replace("rename","",$str); $str=str_replace("alter","",$str); $str=str_replace("admin","",$str); $str=str_replace("performance_schema","",$str); $str=str_replace("mysql","",$str); $str = preg_replace( "@<script(.*?)</script>@is", "", $str ); $str = preg_replace( "@<iframe(.*?)</iframe>@is", "", $str ); $str = preg_replace( "@<style(.*?)</style>@is", "", $str ); $str = preg_replace( "@<(.*?)>@is", "", $str ); return $str; }
加密解密函数
// 加密解密函数 // $string: 明文 或 密文 // $operation:DECODE表示解密,其它表示加密 // $key: 密匙 // $expiry:密文有效期 function authcode($string, $operation = 'DECODE', $key = '', $expiry = 0) { // 动态密匙长度,相同的明文会生成不同密文就是依靠动态密匙 $ckey_length = 4; // 密匙 $key = md5($key ? $key : $GLOBALS['discuz_auth_key']); // 密匙a会参与加解密 $keya = md5(substr($key, 0, 16)); // 密匙b会用来做数据完整性验证 $keyb = md5(substr($key, 16, 16)); // 密匙c用于变化生成的密文 $keyc = $ckey_length ? ($operation == 'DECODE' ? substr($string, 0, $ckey_length): substr(md5 (microtime()), -$ckey_length)) : ''; //PHP加密解密函数authcode参与运算的密匙 $cryptkey = $keya.md5($keya.$keyc); $key_length = strlen($cryptkey); // 明文,前10位用来保存时间戳,解密时验证数据有效性,10到26位用来保存$keyb(密匙b),解密时会通过这个密匙验证数据完整性 // 如果是解码的话,会从第$ckey_length位开始,因为密文前$ckey_length位保存 动态密匙,以保证解密正确 $string = $operation == 'DECODE' ? base64_decode(substr ($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string; $string_length = strlen($string); $result = ''; $box = range(0, 255); $rndkey = array(); //PHP加密解密函数authcode产生密匙簿 for($i = 0; $i <= 255; $i++) { $rndkey[$i] = ord($cryptkey[$i % $key_length]); } // 用固定的算法,打乱密匙簿,增加随机性,好像很复杂,实际上对并不会增加密文的强度 for($j = $i = 0; $i < 256; $i++) { $j = ($j + $box[$i] + $rndkey[$i]) % 256; $tmp = $box[$i]; $box[$i] = $box[$j]; $box[$j] = $tmp; } //PHP加密解密函数authcode核心加解密部分 for($a = $j = $i = 0; $i < $string_length; $i++) { $a = ($a + 1) % 256; $j = ($j + $box[$a]) % 256; $tmp = $box[$a]; $box[$a] = $box[$j]; $box[$j] = $tmp; // PHP加密解密函数authcode从密匙簿得出密匙进行异或,再转成字符 $result .= chr(ord($string[$i]) ^ ( $box[($box[$a] + $box[$j]) % 256])); } if($operation == 'DECODE') { // substr($result, 0, 10) == 0 验证数据有效性 // substr($result, 0, 10) - time() > 0 验证数据有效性 // substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16) //验证数据完整性 // 验证数据有效性,请看未加密明文的格式 if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5 (substr($result, 26).$keyb), 0, 16)) { return substr($result, 26); } else { return ''; } } else { //PHP加密解密函数authcode把动态密匙保存在密文里,这也是为什么同样的明文,生产不同密文后能解密的原因 // 因为加密后的密文可能是一些特殊字符,复制过程可能会丢失,所以用base64编码 return $keyc.str_replace('=', '', base64_encode($result)); } }
0 0
- PHP 之 面试题(笔试题总结)
- PHP 之 面试题(笔试题总结)
- 笔试面试题总结之单链表(Linked List)
- php笔试面试题
- 笔试面试题总结
- 【面试笔试-php】某公司php方向面试题总结。
- php面试题笔试题分享
- android面试题笔试题总结
- android 面试题笔试题总结
- android面试题笔试题总结
- xian笔试面试题总结
- Linux笔试面试题总结
- JVM笔试+面试题总结
- PHP面试题总结
- PHP面试题总结
- php 面试题总结
- php面试题总结
- PHP面试题总结
- Zxing关于Android端生产二维码
- 带有一个UITextView的AlertView
- 跟着Innost理解下与Activity相关的UI控件系统
- windows下使用git出现 warning: LF will be replaced by CRLF in git/.gitignore. 解决方案
- 数据结构常用内部排序算法
- PHP 之 面试题(笔试题总结)
- 《大型网站技术架构》读书笔记二:大型网站架构模式
- 距离离开还有13天
- sim开机APDU命令流程
- html5初体验
- 推荐一个Github上查看源代码的浏览器插件Octotree
- Python菜鸟--基础语法
- swift_012(Swift 的字面量)
- python 3.5 怎么安装pygame