is_file 只判断文件是否存在;
代码如下 | 复制代码 |
输出:test.txt is a regular file |
file_exists 判断文件是否存在或者是目录是否存在;
代码如下 | 复制代码 |
<?php 输入 1 |
is_dir 判断目录是否存在;
例子
代码如下 | 复制代码 |
<?php 输出: images is a directory |
查看手册,虽然这两个函数的结果都会被缓存,但是is_file却快了N倍。
还有一个值得注意的:
文件存在的情况下,is_file比file_exists要快N倍;
文件不存在的情况下,is_file比file_exists要慢;
结论是,file_exits函数并不会因为该文件是否真的存在而影响速度,但是is_file影响就大了
测试
代码如下 | 复制代码 |
文件存在(当前目录) |
代码如下 | 复制代码 |
function RecordToJson($recordset) |
PHP默认的结果集数组有数字索引,下面函数可以去除数字索引,只保留字段索引:
代码如下 | 复制代码 |
|
取部份字符串。
语法: string substr(string string, int start, int [length]);
返回值: 字符串
函数种类: 资料处理
内容说明
本函数将字符串 string 的第 start 位起的字符串取出 length 个字符。若 start 为负数,则从字符串尾端算起。若可省略的参数 length 存在,但为负数,则表示取到倒数第 length 个字符。
使用范例
代码如下 | 复制代码 |
<? |
上面只支持英文不支持中文
截取GB2312中文字符串
代码如下 | 复制代码 |
< ?php |
截取utf8编码的多字节字符串
代码如下 | 复制代码 |
< ?php |
/*
* 功能: 作用跟substr一样,除了它不会造成乱码
* 参数:
* 返回:
*/
代码如下 | 复制代码 |
function utf8_substr( $str , $start , $length=null ){ // 如果参数start是正数 // 如果第1字节就不是 完整字符的首字节, 再往后截取大约6字节 // 判断前6字节是否符合utf8规则 // 判断后6字节是否符合utf8规则 return $res; |
测试数据::
代码如下 | 复制代码 |
<?php $str = 'dfjdjf测13f试65&2数据fdj(1就mfe&……就'; var_dump( utf8_substr( $str , 22 , 12 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 22 , -6 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 9 , 12 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 19 , 12 ) ); echo ' <br /> '; var_dump( utf8_substr( $str , 28 , -6 ) ); echo ' <br /> '; |
显示结果::(截取无乱码, 欢迎大家测试, 提交bug)
string(12) "据fdj"
string(26) "据fdj(1就mfe&…"
string(13) "13f试65&2数"
string(12) "数据fd"
string(20) "dj(1就mfe&…"
把我常用的分享出来
下面我们再来看中文截函数吧。
代码如下 | 复制代码 |
function MooCutstr($string, $length, $dot = ' ...') { if(strlen($string) <= $length) { return $strcut.$dot; |
分享一个实际在用的函数:
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法。如果操作系统支持,还会使用内存映射技术来增强性能。
/*比file_get_contents稳定的多!$timeout为超时时间,单位是秒,默认为1s。*/
代码如下 | 复制代码 |
function curl_get_contents($url,$timeout=1) { $curlHandle = curl_init(); curl_setopt( $curlHandle , CURLOPT_URL, $url ); curl_setopt( $curlHandle , CURLOPT_RETURNTRANSFER, 1 ); curl_setopt( $curlHandle , CURLOPT_TIMEOUT, $timeout ); $result = curl_exec( $curlHandle ); curl_close( $curlHandle ); return $result; } $hx = curl_get_contents('http://www.111cn.net/'); |
相信使用过file_get_contents函数的朋友都知道,当获取的$url访问不了时,会导致页面漫长的等待,甚至还能导致PHP进程占用CPU达100%,因此这个函数就诞生了。
通过php.ini中的default_socket_timeout设置,默认超时时间是default_socket_timeout = 60
代码如下 | 复制代码 |
max_execution_time = 30 default_socket_timeout = 60 |
假设你使用file_get_contents花费45,而max_execution_time是30,它将超时吗?
答案是NO,因为max_execution_time不影响操作系统调用或stream操作
另一点要指出的的是default_socket_timeout是在socket响应之前计算的,只要得到响应,将会一直执行下去
可以通过以下三种方式设置
代码如下 | 复制代码 |
1 直接在php.ini中修改 default_socket_timeout =120 |
curl的一些常识介绍
保留原file_get_contents函数的原因是当读取本地文件时,用原生的file_get_contents显然更合适。
另来自张宴的file_get_contnets的优化,具体可看:
首先,使用 top 命令查看 CPU 使用率较高的 php-cgi 进程。
代码如下 | 复制代码 |
top - 10:34:18 up 724 days, 21:01, 3 users, load average: 17.86, 11.16, 7.69 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 找其中一个 CPU 100% 的 php-cgi 进程的 PID,用以下命令跟踪一下: strace -p 10747 |
如果屏幕显示:
代码如下 | 复制代码 |
select(7, [6], [6], [], {15, 0}) = 1 (out [6], left {15, 0}) |
那么,就可以确定是 file_get_contents() 导致的问题了。
同样是设置超时时间来解决这个问题。如果没装curl,就必须得用这个方式了。
代码如下 | 复制代码 |
$ctx = stream_context_create(array( |
代码如下 | 复制代码 |
<?php /** * Check检测类 */ Class Check{ /** * IsUsername函数:检测是否符合用户名格式 * $Argv是要检测的用户名参数 * $RegExp是要进行检测的正则语句 * 返回值:符合用户名格式返回用户名,不是返回false */ function IsUsername($Argv){ $RegExp=/^[a-zA-Z0-9_]{3,16}$/; //由大小写字母跟数字组成并且长度在3-16字符直接 return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsMail函数:检测是否为正确的邮件格式 * 返回值:是正确的邮件格式返回邮件,不是返回false */ function IsMail($Argv){ $RegExp=/^[a-z0-9][a-z.0-9-_] @[a-z0-9_-] (?:.[a-z]{0,3}.[a-z]{0,2}|.[a-z]{0,3}|.[a-z]{0,2})$/i; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsSmae函数:检测参数的值是否相同 * 返回值:相同返回true,不相同返回false */ function IsSame($ArgvOne,$ArgvTwo,$Force=false){ return $Force?$ArgvOne===$ArgvTwo:$ArgvOne==$ArgvTwo; } /** * IsQQ函数:检测参数的值是否符合QQ号码的格式 * 返回值:是正确的QQ号码返回QQ号码,不是返回false */ function IsQQ($Argv){ $RegExp=/^[1-9][0-9]{5,11}$/; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsMobile函数:检测参数的值是否为正确的中国手机号码格式 * 返回值:是正确的手机号码返回手机号码,不是返回false */ function IsMobile($Argv){ $RegExp=/^(?:13|15|18)[0-9]{9}$/; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsTel函数:检测参数的值是否为正取的中国电话号码格式包括区号 * 返回值:是正确的电话号码返回电话号码,不是返回false */ function IsTel($Argv){ $RegExp=/[0-9]{3,4}-[0-9]{7,8}$/; return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsNickname函数:检测参数的值是否为正确的昵称格式(Beta) * 返回值:是正确的昵称格式返回昵称格式,不是返回false */ function IsNickname($Argv){ $RegExp = '/^s*$|^c:\con\con$|[%,*"st<>&'()]|xA1xA1|xACxA3|^Guest|^xD3xCExBFxCD|xB9x43xABxC8/is'; //Copy From DZ return preg_match($RegExp,$Argv)?$Argv:false; } /** * IsChinese函数:检测参数是否为中文 * 返回值:是返回参数,不是返回false */ function IsChinese($Argv,$Encoding=utf8){ $RegExp = $Encoding==utf8?/^[x{4e00}-x{9fa5}] $/u:/^([x80-xFF][x80-xFF]) $/; Return preg_match($RegExp,$Argv)?$Argv:False; } } ?> |