1.flock
LOCK_EX 独占锁定
LOCK_SH 共享锁定
LOCK_UN 解除锁定
LOCK_NB 锁定但不堵塞进程,直接返回false
2. fseek
SEEK_CUR
SEEK_END
SEEK_SET
3、
function search($key,&$result){ $result=$key.'此种方法值得学习'; return true; } if(search('123',$result)){ echo $result; }
/* * ① md5_file()要比get_headers()快很多 * ② global和$GLOBALS只能使用,但并不会改变原来的赋值 * ③ 递归思想的用处 * ④ register_shutdown_function()来模拟析构函数 * ⑤ set_error_handler() set_exception_handler() 接管的函数或者类都要加载错误出现之前 * ⑥ ini_set('display_errors','Off')的权限要大于error_reporting(); * ⑦ 代码技巧:先定义返回结果的格式,失败直接返回 * ⑧ sprintf: %u=>无符号十进制 %b=>二进制 %d=>有符号的十进制整数 %f=>浮点数 %s=>字符串 %x=>小写字母的十六进制 %X=>大写字母的十六进制 原理就是如何认为计算机里边的二进制数了,会把参数当作十进制 * 1)正负号,正号不用写,当不满足最小宽度的时候,从前边补0还是从后边补0 * 2)填充字元 0表示空格填充0 默认值是空格,表示空格就放着 * 3)总宽度(包括小数点),为最小宽度 * 4)(.)精确度 * 随心所欲的调用参数 “%1$.2f %1$f”(%1$u 第一个参数,无符号十进制正数) * ⑨ ip2long()不要忘了使用%u * ⑩ substr_count($string,$serach[,$start,$length]) 检测一个字符串在另一个字符串中出现的次数 * 11) 用isset来替换array_key_exists * 为初始化的变量、0、空、null、空数组、false、[没有任何属性的object]都为empty * 重点 var = null 跟empty唯一不同的就是当变量为定义时,会抛出一个Notice * 12) 如果php.int中的register_globals=On的话,所有的$_GET $_POST $_COOKIE $_SESSION 都将别注册成全局变量,通过$GLOBALS中,不建议开启 * 13) get_magic_quotes_runtime() 和 get_magic_quotes_gpc() * 14) final关键字:如果类声明为final,则此类不允许继承,如果类中的方法声明为final,则此方法不允许覆盖 * 15) Exception * class Exception{ * protected $message; * protected $code=0; * protected $file; * protected $line; * * public function __construct($message=null,$code=0); * final function getMessage(); * final function getFile(); * final function getLine(); * final function getCode(); * final function getTrace(); * final function getTraceAsArray(); * * public function __toString(); * } * 16) 静态变量只存在函数作用域内,也就是说,静态变量只存活在栈中,一般的函数内部变量在函数结束后就会释放,比如局部变量,但是 * 静态变量不会,也就是说下次在调用的时候,这个变量会保存起来 * 静态属性不属于那个实例,对任何实例都有效 * * 17) htmlspecialchars($string[,ENT_COMPAT|ENT_QUOTES|ENTNOQUOTES]) 【这些都是针对单双引号的】 * ENT_COMPAT 尽编码双引号 * ENT_QUOTES 编码单双引号 * ENT_NOQUOTES 都不编码 * * 18) pathinfo($fine[,option]) 返回文件路径信息 * PATHINFO_DIRNAME * PATHINFO_BASENAME * PATHINFO_EXTENSION * * 19) mb_strlen($str[,$encode]); 最好把encode加上 * * 20) strtr($str,from,to) 或者 strtr($str,$array); 可以做个小的关键词库 * * 21) explode('_',$str.2) 规定数组的最大长度 * * 22) call_user_func_array(array('classname','method'),array('参数一','参数二',...)) * classname * 可以为类名,此时就不再调用初始化函数 * 可以为类的实例化,$test=new test(); array(&$test,methodName),调用初始化函数 * 参数数组是一个索引数组,不会去按关联数组去匹配,不要太天真哦~~~ * * 23)正则 (?=exp) 顺序肯定 (?<=exp) 逆序肯定 (?!exp) 顺序否定 (?<!exp) 逆序否定 * 匹配ABBABB的正则 [d]+ ((?<n1>d)(?<n2>[^k<n1>])k<n2>)1 (如何不用分组名去捕获,我还是没写出来) */
4、
<?php /* class Exception{ protected $message; protected $code; protected $file; protected $line; function __construct($message[,$code]); final function getMessage(); final function getCode(); final function getFile(); final function getLine(); final function getTrace(); final function getTraceAsArray(); public function __toString(); final private __clone(); }*/ // PDO 中包括三个预定义的类 // ① PDO // exec($sql) // query($sql) // setAttribute(PDO::ERRMODE,PDO::ERRMODE_EXCEPTION); // lastInsertId() // prepare() // beginTransaction() // commit() // rollBack() // ② PDOStatment // rowCount() // fetch(PDO::FETCH_ASSOC|PDO::FETCH_BOTH|PDO::OBJ|PDO::NUM) // fetchAll() // bindParam() // execute() // ③ PDOException try{ $dsn='mysql:host=localhost;dbname=test'; $pdo=new PDO($dsn,'root',''); $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); // $sql='insert article values("",1,2)'; // 执行一条sql,并返回影响的行数 // echo $pdo->exec('SET NAMES UTF8'); // query()执行一个sql,并返回结果集 // $query=$pdo->query($sql); // rowCount() 返回sql执行后影响的行数 // $affected_rows=$query->rowCount(); // echo $last_id=$pdo->lastInsertId(); // $query=$pdo->query('select * from friends LIMIT 10'); // $result=$query->fetchAll(PDO::FETCH_ASSOC); // print_r($result); // $insert=$pdo->prepare('insert into article values("",?,?)'); // $insert->execute(array(1,2)); $sth=$pdo->prepare('select * from article where id=?'); $id=20; $sth->bindParam(1,$id); $sth->execute(); $result=$sth->fetch(PDO::FETCH_ASSOC); print_r($result); }catch(PDOException $e){ echo $e->getMessage(); } ?>
5、
为所有的连接加上target='_blank'
function contentTargetChange($content){ $pattern='/<[a|A][^>]*>/'; $count=preg_match_all($pattern,$content,$matches); if($count>0){ try{ $str=''; $arr=preg_split($pattern, $content); foreach($matches[1] as $key=>$value){ $value=preg_replace('/target=[^>|^ ]*/i','',$value); $str.=$arr[$key].substr($value,0,-1).' target="_blank">'; } if(count($arr)>$count){ $str.=array_pop($arr); } return $str; }catch(Exception $e){ return $content; } } return $content; }
6)、
function dec2f($num){ $base='0123456789abcdef'; $result=''; do{ $result=$base[$num%16].$result; $num=intval($num/16); }while($num!=0); return $result; } function f2dec($num){ $map=array('0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'a' => 10, 'b' => 11, 'c' => 12, 'd' => 13, 'e' => 14, 'f' => 15); $len=strlen($num); $result=''; for ($i=0; $i < $len; $i++) { $result*=16; $result=$result+$map[$num[$i]]; } return $result; }