代码如下 | 复制代码 |
function RecordToJson($recordset) |
PHP默认的结果集数组有数字索引,下面函数可以去除数字索引,只保留字段索引:
代码如下 | 复制代码 |
|
上传操作代码
代码如下 | 复制代码 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
html
代码如下 | 复制代码 |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
一些常见的上传文件时错误代码
0 | UPLOAD_ERR_OK | 文件成功上传
1 | UPLOAD_ERR_INI_SIZE | Size exceeds upload_max_filesize in php.ini.
2 | UPLOAD_ERR_FORM_SIZE | Size exceeds MAX_FILE_SIZE specified in HTML form.
3 | UPLOAD_ERR_PARTIAL | 文件没有完整上传
4 | UPLOAD_ERR_NO_FILE | 没有上传文件
5 | UPLOAD_ERROR_E | As expliained by @Progman, removed in rev. 81792
6 | UPLOAD_ERR_NO_TMP_DIR | 找不到临时文件夹
7 | UPLOAD_ERR_CANT_WRITE | 磁盘不可写
8 | UPLOAD_ERR_EXTENSION | File upload stopped by extension.
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影响就大了
测试
代码如下 | 复制代码 |
文件存在(当前目录) |
取部份字符串。
语法: 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( |