PHP开发常用函数
在共过开发中,我经常要用到一些PHP函数,有时会不记得,这里把这些常用函数总结到一起。本篇列举了PHP程序员开发中经常用到的php函数。几乎每个函数都有例子,老手可以看看当做温习,新手可以背理论,然后把例子敲他几遍,后面再开发中,开发效率绝对有所提高。例子大多取自w3cschool标准例子和网上的一些资源,部分为个人所写,均经过测试。如果要装载本文,还请注明来源 :http://blog.csdn.net/qq_22327455。
一.检查函数
1.empty()
empty() 函数是用来测试变量是否已经配置。若变量已存在、非空字符串或者非零,则返回 false 值;反之返回 true值。所以,当字符串的值为0时,也返回true,就是执行empty内部的语句。
empty()函数 判断值为否为空
若变量不存在则返回 TRUE
若变量存在且其值为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 TURE
若变量存在且值不为""、0、"0"、NULL、、FALSE、array()、var $var; 以及没有任何属性的对象,则返回 FALSE
empty() 只检测变量,检测任何非变量的东西都将导致解析错误。换句话说,后边的语句将不会起作用: empty(addslashes($name))。
2.isset()
isset() 函数 一般用来检测变量是否设置。
若变量不存在则返回 FALSE
若变量存在且其值为NULL,也返回 FALSE
若变量存在且值不为NULL,则返回 TURE
同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE
使用 unset() 释放变量之后,它将不再是 isset()。
如检测 $id 变量,当 $id=0 时,用empty() 和 isset() 来检测变量 $id 是否已经配置,两都将返回不同的值—— empty() 认为没有配置,isset() 能够取得 $id 的值:
我们在使用变量处理函数时,当该变量可能出现0的值,使用 empty() 要小心,这个时候用 isset 取代它更明智一些。
如果变量为0,则empty()会返回TRUE,isset()会返回TRUE;
如果变量为空字符串,则empty()会返回TRUE,isset()会返回TRUE;
如果变量未定义,则empty()会返回TRUE,isset()会返回FLASE;
3.defined() 函数检查某常量是否存在。若常量存在,则返回 true,否则返回 false。
例子
<?php
define("GREETING","Hello world!");
echo defined("GREETING"); //输出:1
?>
4.is_int()
is_int() 判断变量类型是否为整数类型。
其他类似判断变量类型函数:is_array() is_double() is_float() is_integer() is_long() is_object() is_real() is_string()
------------------------------------------------------------------------------------------------------------------------------------------------------------------
二. 数组函数
1.array_keys()
array_keys()定义: 函数返回包含数组中所有键名的一个新数组。
array_keys() 案例:
$a=array("a"=>"Horse","b"=>"Cat","c"=>"Dog");
print_r(array_keys($a)); //输出:Array ( [0] => a [1] => b [2] => c )
2.array_values()
array_values()定义: 函数返回一个包含给定数组中所有键值的数组,但不保留键名。
array_values() 案例:
$a=array("a"=>"Horse","b"=>"Cat","c"=>"Dog");
print_r(array_keys($a)); //输出:Array ( [0] => Horse [1] => Cat [2] => Dog )
3.array_filter()
array_filter() 定义:函数用回调函数过滤数组中的元素,如果自定义过滤函数返回 true,则被操作的数组的当前值就会被包含在返回的结果数组中, 并将结果组成一个新的数组。如果原数组是一个关联数组,键名保持不变。
array_filter() 语法:array_filter(array,function)
array_filter() 案例:
function test($v){
if($v === 'Cat'){
return true;
}
return false;
}
$a=array(0=>"Dog",1=>"Cat",2=>"Horse");
print_r(array_filter($a,"test")); //输出:Array ( [1] => Cat )
4.array_slice() 定义:函数在数组中根据条件取出一段值,并返回。
array_slice() 语法:array_slice(array,offset,length,preserve)
参数 描述
offset:必需。数值。规定取出元素的开始位置。
如果是正数,则从前往后开始取,如果是负值,从后向前取 offset 绝对值。
length:可选。数值。规定被返回数组的长度。
如果 length 为正,则返回该数量的元素。
如果 length 为负,则序列将终止在距离数组末端这么远的地方。
如果省略,则序列将从 offset 开始直到 array 的末端。
5.array_slice() 案例:
$a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird",4=>"lili",5=>"james");
print_r(array_slice($a,0)); //输出:Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird [4] => lili [5] => james )
print_r(array_slice($a,0,2)); //输出:Array ( [0] => Dog [1] => Cat )
print_r(array_slice($a,0,-2)); //输出:Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird )
print_r(array_slice($a,-2,-1)); //输出:Array ( [0] => lili )
print_r(array_slice($a,-1,-2)); //输出:Array()
6.array_serch()
array_search() 函数与 in_array() 一样,在数组中查找一个键值。如果找到了该值,匹配元素的键名会被返回。如果没找到,则返回 false。
<?php
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
echo array_search("Dog",$a); //输出:a
?>
7.array_merge()
array_merge() 函数把两个或多个数组合并为一个数组。
例子
<?php
$a1=array("a"=>"Horse","b"=>"Dog");
$a2=array("c"=>"Cow","b"=>"Cat");
print_r(array_merge($a1,$a2)); //输出:Array ( [a] => Horse [b] => Cat [c] => Cow )
?>
8.array_combine()
array_combine() 函数通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值。如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false。
例子
<?php
$a1=array("a","b","c","d");
$a2=array("Cat","Dog","Horse","Cow");
print_r(array_combine($a1,$a2)); //输出:Array ( [a] => Cat [b] => Dog [c] => Horse [d] => Cow )
?>
9.is_array()
is_array 判断变量类型是否为数组类型。若变量为数组类型则返回 true,否则返回 false。
10.in_array() in_array(value,array,type)
in_array() 函数在数组中搜索给定的值。
如果给定的值 value 存在于数组 array 中则返回 true。如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true。
如果没有在数组中找到参数,函数返回 false。
$people = array("Peter", "Joe", "Glenn", "Cleveland", 23);
if (in_array(23,$people, TRUE)){
echo "Match found<br />";
}else{
echo "Match not found<br />";
}
?>
输出:Match found//数据类型与给定值都相同
if (in_array("23",$people, TRUE)){
echo "Match found<br />";
}else{
echo "Match not found<br />";
}
输出:Match not found//数据类型不同,给定值相同
11.count() sizeof() 该函数是 count() 的别名。
count() 函数计算数组中的单元数目或对象中的属性个数。对于数组,返回其元素的个数,对于其他值,返回 1。如果参数是变量而变量没有定义,则返回 0。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
$result = count($people);
echo $result; //输出:4
?>
12.array_push() array_push() 函数向第一个参数的数组尾部添加一个或多个元素(入栈),然后返回新数组的长度。该函数等于多次调用 $array[] = $value。
<?php
$arr = array();
$arr[]= 'john';
array_push($arr, 'jams','tome');
print_r($arr); //输出: Array ( [0] => john [1] => jams [2] => tome )
?>
13.array_pop()
array_pop() 函数删除数组中的最后一个元素。
<?php
$a=array("Dog","Cat","Horse");
array_pop($a);
print_r($a);//输出:Array ( [0] => Dog [1] => Cat )
?>
14.array_unshift() array_unshift(array,value1,value2,value3...)
array_unshift() 函数在数组开头插入一个或多个元素。
<?php
$a=array("a"=>"Cat","b"=>"Dog");
array_unshift($a,"Horse");
print_r($a);// 输出:Array ( [0] => Horse [a] => Cat [b] => Dog )
?>
15.array_shift()
array_shift() 函数删除数组中的第一个元素,并返回被删除元素的值。
<?php
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
echo array_shift($a);
print_r ($a); //输出:Dog Array ( [b] => Cat [c] => Horse )
?>
16.array_flip()
array_flip() 函数返回一个反转后的数组,如果同一值出现了多次,则最后一个键名将作为它的值,所有其他的键名都将丢失。
如果原数组中的值的数据类型不是字符串或整数,函数将报错。
<?php
$a=array(0=>"Dog",1=>"Cat",2=>"Horse");
print_r(array_flip($a)); //输出:Array ( [Dog] => 0 [Cat] => 1 [Horse] => 2 )
?>
17.array_key_exists() array_key_exists(key,array)
array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,则返回 true,否则返回 false。
<?php
$a=array("a"=>"Dog","b"=>"Cat");
if (array_key_exists("a",$a)){
echo "Key exists!";
}else{
echo "Key does not exist!";
}
18.array_reverse() array_reverse(array,preserve) preserve 可选。规定是否保留原始数组的键名。可能的值:true 和 false。
<?php
$a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");
print_r(array_reverse($a)); //输出:Array ( [c] => Horse [b] => Cat [a] => Dog )
?>
19.end()
end() 函数将数组内部指针指向最后一个元素,并返回该元素的值(如果成功)。
<?php
$people = array("Peter", "Joe", "Glenn", "Cleveland");
echo current($people) . "<br />";
echo end($people);
?>
输出:
Peter
Cleveland
20.current()
current() 函数返回数组中的当前元素(单元)。
每个数组中都有一个内部的指针指向它“当前的”元素,初始指向插入到数组中的第一个元素。
21.sort asort arsort ksort krsort
(1)sort()
sort() 函数按升序对给定数组的值排序。注释:本函数为数组中的单元赋予新的键名。原有的键名将被删除。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
sort($my_array);
print_r($my_array);// 输出:Array ( [0] => Cat [1] => Dog [2] => Horse )
?>
(2)asort()
asort() 函数对数组进行排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
asort($my_array);
print_r($my_array); //输出:Array ( [b] => Cat [a] => Dog [c] => Horse )
?>
(3)arsort() 函数对数组进行逆向排序并保持索引关系。主要用于对那些单元顺序很重要的结合数组进行排序。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
arsort($my_array);
print_r($my_array); //输出:Array ( [c] => Horse [a] => Dog [b] => Cat )
?>
(4)ksort()
ksort() 函数按照键名对数组排序,为数组值保留原来的键。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
ksort($my_array);
print_r($my_array); //输出:Array ( [a] => Dog [b] => Cat [c] => Horse )
?>
(5)ksort() 函数按照键名对数组排序,为数组值保留原来的键。
<?php
$my_array = array("a" => "Dog", "b" => "Cat", "c" => "Horse");
krsort($my_array);
print_r($my_array); //输出:Array ( [c] => Horse [b] => Cat [a] => Dog )
?>
---------------------------------------------------------------------------------------------------------------------------------------
三.字符串函数
1.strpos()
strpos() 函数返回字符串在另一个字符串中第一次出现的位置。如果成功,则返回位置,否则返回 false。
<?php
echo strpos("Hello world!","wo"); //输出:6
?>
2.strrpos()
strrpos() 函数查找字符串在另一个字符串中最后一次出现的位置。如果成功,则返回位置,否则返回 false。
<?php
echo strpos("Hello world!","wo"); //输出:6
?>
3.strlen()
strlen() 函数返回字符串的长度。
<?php
echo strlen("Hello world!"); //输出:12
?>
4.substr() 截取函数substr(string,start,length)
substr() 函数返回字符串的一部分。
具体用法看例子:
<?php
$str = 'abcdefg';
echo substr($str,0).'<br />'; //输出:abcdefg 解释:a的下标为0,没有第三个参数,所以从a开始截取,一直截取最后
echo substr($str,3).'<br />'; //输出:defg 解释:d的下标为3,没有第三个参数,所以从d开始截取,一直截取最后
echo substr($str,1,4).'<br />'; //输出:bcde 解释:b的下表为1,e的下标为4,所以从b开始,截取到e
echo substr($str,-2).'<br />'; //输出:fg 解释:g的位置为-1,f的位置为-2,没有第三个参数,所以从f开始截取,一直截取到最后
echo substr($str,-5,-1).'<br />'; //输出:cdef 解释:c的位置为-5,g的位置为-1,截取是从-5的位置开始算,在-1之前的那个位置结束,也就是不包括-1的位置。
echo substr($str,1,-2).'<br />'; //输出:bcde 解释:b的位置为-1,f的位置为-2,b开始截取,截取到f前面的那个止(即不包括-2的这个位置)
?>
5.strstr() strstr(string,search)
strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。该函数返回字符串的其余部分(从匹配点)。如果未找到所搜索的字符串,则返回 false。
<?php
echo strstr("Hello world!","o"); //输出:o world!
?>
该函数对大小写敏感。如需进行大小写不敏感的搜索,请使用 stristr()。
6.trim()
trim() 函数从字符串的两端删除空白字符和其他预定义字符。
<?php
$str = " Hello World! ";
echo $str.'<br />';
echo trim($str).'<br />';
//查看源码可以看到: Hello World! <br />Hello World!<br />
?>
7.strtoupper()
strtoupper() 函数把字符串转换为大写。
<?php
echo strtoupper("Hello WORLD!"); //输出:HELLO WORLD!
?>
8.strtolower
strtolower() 函数把字符串转换为小写。
<?php
echo strtolower("Hello WORLD!"); //输出:hello world!
?>
9.ucfirst()
ucfirst() 函数把字符串中的首字符转换为大写。
<?php
echo ucfirst("hello world"); //输出:Hello world!
?>
10.ucwords()
ucwords() 函数把字符串中每个单词的首字符转换为大写。
<?php
echo ucfirst("hello world"); //输出:Hello World!
?>
11.strrev()
strrev() 函数反转字符串。
<?php
echo strrev("Hello World!"); //输出:!dlroW olleH
?>
12.round() ceil() intval() floor() 的用法
round() 函数对浮点数进行四舍五入。
ceil() 进一法取整
intval() 获取变量的整数值
<?php
echo round(0.60); //输出:1
echo round(0.49); //输出:0
echo ceil(3.33); //输出:4
echo ceil(3.9); //输出:4
echo intval(3.33);//输出:3
echo intval(3.9); //输出:3
?>
floor() PHP Math 函数
floor() 函数向下舍入为最接近的整数。返回不大于 x 的下一个整数,将 x 的小数部分舍去取整。floor() 返回的类型仍然是 float,因为 float 值的范围通常比 integer 要大。
具体看例子:
<?php
echo(floor(0.60)); //0
echo(floor(0.40)); //0
echo(floor(5)); //5
echo(floor(5.1)); //5
echo(floor(-5.1)); //-6
echo(floor(-5.9)) //-6
?>
13.implode()
implode() 函数把数组元素组合为一个字符串。
<?php
$arr = array('Hello','World!','Beautiful','Day!');
echo implode(" ",$arr); //输出:Hello World! Beautiful Day!
?>
14.explode()
explode() 函数把字符串分割为数组。
<?php
$str = "Hello world. It's a beautiful day.";
print_r (explode(" ",$str));
?>
输出:
Array(
[0] => Hello
[1] => world.
[2] => It's
[3] => a
[4] => beautiful
[5] => day.
)
15.str_pad()
str_pad() 函数把字符串填充为指定的长度。 str_pad(string,length,pad_string,pad_type)
string 必需。规定要填充的字符串。
length 必需。规定新字符串的长度。如果该值小于原始字符串的长度,则不进行任何操作。
pad_string 可选。规定供填充使用的字符串。默认是空白。
pad_type 可选。规定填充字符串的那边。可能的值:
STR_PAD_BOTH - 填充到字符串的两头。如果不是偶数,则右侧获得额外的填充。
STR_PAD_LEFT - 填充到字符串的左侧。
STR_PAD_RIGHT - 填充到字符串的右侧。这是默认的。
<?php
$str = "Hello World";
echo str_pad($str,20,"."); //输出:Hello World.........
?>
<?php
$str = "Hello World";
echo str_pad($str,20,".",STR_PAD_LEFT); //输出:.........Hello World
?>
16.strip_tags() strip_tags(string,allow) string 必需。规定要检查的字符串。allow 可选。规定允许的标签。这些标签不会被删除。
strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。
<?php
echo strip_tags("Hello <b><i>world!</i></b>","<b>"); //输出:Hello world!
?>
17.htmlspecialchars() htmlspecialchars(string,quotestyle,character-set)
htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
预定义的字符是:
& (和号) 成为 &
" (双引号) 成为 "
' (单引号) 成为 '
< (小于) 成为 <
> (大于) 成为 >
string 必需。规定要转换的字符串。
quotestyle 可选。规定如何编码单引号和双引号。
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
character-set 可选。字符串值,规定要使用的字符集。
<html>
<body>
<?php
$str = "John & 'Adams'";
echo htmlspecialchars($str, ENT_COMPAT);
echo "<br />";
echo htmlspecialchars($str, ENT_QUOTES);
echo "<br />";
echo htmlspecialchars($str, ENT_NOQUOTES);
?>
</body>
</html>
浏览器输出:
John & 'Adams'
John & 'Adams'
John & 'Adams'
如果在浏览器中查看源代码,会看到这些 HTML:
<html>
<body>
John & 'Adams'<br />
John & 'Adams'<br />
John & 'Adams'
</body>
</html>
18.htmlspecialchars_decode() htmlspecialchars_decode() 函数是 htmlspecialchars() 函数的反函数。
htmlspecialchars_decode() 函数把一些预定义的 HTML 实体转换为字符。
会被解码的 HTML 实体是:
& 解码成 & (和号)
" 解码成 " (双引号)
' 解码成 ' (单引号)
< 解码成 < (小于)
> 解码成 > (大于)
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars_decode($str);
?>
浏览器输出:This is some bold text.
如果在浏览器中查看源代码,会看到这些 HTML:
<!DOCTYPE html>
<html>
<body>
This is some <b>bold</b> text.
</body>
</html>
-------------------------------------------------------------------------------------------------------------------------------------
四 Date / Time 函数
1.time()
time() 函数返回当前时间的 Unix 时间戳。
<?php
echo time(); //输出:1424937345
echo date('Y-m-d H:i:s',time());//输出:2015-02-26 15:55:32 // date()函数将时间戳转换为日期格式
?>
2.mktime() 语法:mktime(hour,minute,second,month,day,year,is_dst)
mktime() 函数返回一个日期的 Unix 时间戳。
<?php
echo(date("M-d-Y",mktime(0,0,0,12,36,2001))); //输出:Jan-05-2002
echo(date("M-d-Y",mktime(0,0,0,14,1,2001))); //输出:Feb-01-2002
echo(date("M-d-Y",mktime(0,0,0,1,1,2001))); //输出:Jan-01-2001
echo(date("M-d-Y",mktime(0,0,0,1,1,99))); //输出:Jan-01-1999
?>
3.microtime()
microtime() 函数返回当前 Unix 时间戳和微秒数。
<?php
echo microtime(); //输出:0.79456400 1424937755
?>
4.strtotime()
strtotime() 函数将任何英文文本的日期时间描述解析为 Unix 时间戳。
<?php
echo(strtotime("now"));
echo(strtotime("3 October 2005"));
echo(strtotime("+5 hours"));
echo(strtotime("+1 week"));
echo(strtotime("+1 week 3 days 7 hours 5 seconds"));
echo(strtotime("next Monday"));
echo(strtotime("last Sunday"));
?>
输出:
1138614504
1128290400
1138632504
1139219304
1139503709
1139180400
1138489200
5.date()
date() 函数格式化一个本地时间/日期。
<?php
echo date('Y-m-d H:i:s',time());//输出:2015-02-26 15:55:32
?>
6.date_default_timezone_set() 语法:date_default_timezone_set(timezone)
date_default_timezone_set() 函数设置用在脚本中所有日期/时间函数的默认时区。
设置中国时区
date_default_timezone_set('Asia/Shanghai');//'Asia/Shanghai' 亚洲/上海
date_default_timezone_set('Asia/Chongqing');//其中Asia/Chongqing'为“亚洲/重庆”
date_default_timezone_set('Asia/Harbin');//其中'Asia/Harbin'为"亚洲/哈尔滨"
date_default_timezone_set('PRC');//其中PRC为“中华人民共和国”
7.date_default_timezone_get()
date_default_timezone_get() 函数返回脚本中所有日期时间函数所使用的默认时区。
<?php
echo date_default_timezone_get(); //输出:Asia/Chongqing
?
8.usleep()
usleep() 函数延迟代码执行若干微秒。
<?php
echo date('h:i:s') . "<br />"; //开始执行程序
usleep(10000000); //延迟10秒
echo date('h:i:s'); //再次开始执行程序
?>
输出:
04:28:24
04:28:34
9.就时间戳转换为时间和将时间转换为时间戳
(1)UNIX时间戳转换为日期用函数: date()
看例子:
<?php
echo date("Y-m-d H:i:s", time());
echo date("Y-m-d H:i:s","1424937345");
?>
2. 日期转换为UNIX时间戳用函数:strtotime()
例子:
<?php
echo strtotime('2010-03-24 08:15:42');
?>
10. 开发案例
/*
现在要实现这样功能:
如银行信用卡还款通知:当程序扫描到用户需要信用卡还款时,就发送短信通知用户。
但为了防止打扰到用户,只能在白天9:00-18:00之间发送短信,怎么实现这个功能呢?
*/
<?php
$y=date("Y",time());
$m=date("m",time());
$d=date("d",time());
$start_time = mktime(9, 0, 0, $m, $d ,$y);
$end_time = mktime(18, 0, 0, $m, $d ,$y);
$time = time();
if($time >= $start_time && $time <= $end_time){
//send message... 写发送短信的代码
}
?>
-------------------------------------------------------------------------------------------------------------------------------------
五 其他函数
1.error_reporting(E_ALL);
报告所有错误
2.file_exists(path)
file_exists() 函数检查文件或目录是否存在。如果指定的文件或目录存在则返回 true,否则返回 false。
<?php
echo file_exists("test.txt");
?>
3.number_format()
number_format() 函数通过千位分组来格式化数字。
<?php
echo number_format("1000000"); //1,000,000
echo number_format("1000000",2); //1,000,000.00
echo number_format("1000000",2,",","."); //1.000.000,00
?>
4.preg_replace()
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
搜索subject中匹配pattern的部分, 以replacement进行替换。
这个例子剥离多余的空白字符
<?php
$str = 'foo o';
$str = preg_replace('/\s\s+/', ' ', $str);
// 将会改变为'foo o'
echo $str;
?>
5.dirname()
dirname() 函数返回路径中的目录部分。
<?php
echo dirname("c:/testweb/home.php"); //输出:c:/testweb
echo dirname("/testweb/home.php"); //输出:testweb
?>
6.__FILE__
__FILE__ 返回当前 路径+文件名
7.dirname(__FILE__)
当前php程序的就是完整路径(路径+文件名)
<?php
$the_full_name=__FILE__;
$the_dir=dirname(__FILE__);
echo $the_full_name; //返回/home/data/demo/test/a.php
echo $the_dir; //返回/home/data/demo/test
?>
简单地说:
__FILE__ 返回当前 路径+文件名
dirname(__FILE__) 返回当前文件路径的 路径部分
dirname(dirname(__FILE__));得到的是文件上一层目录名(不含最后一个“/”号)
例如,当前文件是 /home/data/demo/test.php ,则
__FILE__ 得到的就是完整路径 即 /home/data/demo/test.php ,而
dirname(__FILE__)得到路径部分 即 /home/data/demo (后面没有“/”号)
8.$_SERVER['SCRIPT_FILENAME']
PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 的区别:
通常情况下,PHP $_SERVER['SCRIPT_FILENAME'] 与 __FILE__ 都会返回 PHP 文件的完整路径(绝对路径)与文件名:
二者的差别是:$_SERVER['SCRIPT_FILENAME'] 反映的是当前执行程序的绝对路径及文件名;__FILE__ 反映的是原始文件(被包含文件)的绝对路径及文件名
9.$_SERVER['HTTP_HOST']和$_SERVER['PHP_SELF']
假如命令行的地址是:http://www.baidu.com/index.php
那么:
$_SERVER['HTTP_HOST']=='www.baidu.com' //一个是主机地址
$_SERVER['PHP_SELF']=='/index.php' //脚本文件的绝对路径
10.error_log()
error_log() 函数向服务器错误记录、文件或远程目标发送一个错误。若成功,返回 true,否则返回 false。
<?php
$test=2;
if ($test>1)
{
error_log("A custom error has been triggered",
1,"[email protected]","From: [email protected]");
}
?>
输出:
A custom error has been triggered
11.ini_set('display_errors', '1');
PHP ini_set用来设置php.ini的值,在函数执行的时候生效,脚本结束后,设置失效。无需打开php.ini文件,就能修改配置,对于虚拟空间来说,很方便。
函数格式:string ini_set(string $varname, string $newvalue)
常见的设置:
@ ini_set('memory_limit', '64M');
'menory_limit':设定一个脚本所能够申请到的最大内存字节数,这有利于写的不好的脚本消耗服务器上的可用内存[email protected]
@ini_set('display_errors', 1);
‘display_errors':设置错误信息的类别。
ini_set("display_errors","On"); //显示所有错误信息
ini_set("display_errors","Off"); //屏蔽所有错误信息
这里要说明的是,通常服务器配置文件中,是屏蔽notice错误,只显示error错误,如果是这样的话,你打开错误显示,也不会显示notice错误
12.json_decode()和json_encode()
先看json_encode()
json_decode — 对 JSON 格式的字符串进行编码 接受一个 JSON 格式的字符串并且把它转换为 PHP 变量
json_decode($data)输出的是对象,而json_decode("$data",true)是生成PHP关联数组.
<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
var_dump(json_decode($json, true));
?>
上例将输出:
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}
在看json_decode()
json_encode — 对变量进行 JSON 编码
该函数只能接受 UTF-8 编码的数据
<?php
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
?>
以上例程会输出:
{"a":1,"b":2,"c":3,"d":4,"e":5}
看一个开发案例(删除案例):
(1)放置删除按钮:
<body>
<a href="javascript:del(<?=$info->c_id?>,<?=$val->c_id?>)">删除</a>
</body>
(2)ajax指定处理器并传递数据
<script>
function del(cid,b_id){
if(confirm("您确定要删除吗")){
$.ajax({
type:"get",
dataType:"json",
url:"/demo/del",
data:{
"c_id":cid,
"b_id":b_id
},
success: function (msg) {
if(msg.rs == "success"){
alert(msg.info);
window.location.reload();
}else{
alert(msg.info);
}
}
});
}
}
</script>
(3)处理方法
处理方法就不写了,处理的结果返回给$res。
if($res){
die(json_encode(array("rs"=>'success',"info"=>"删除成功"))); //json_encode()对变量进行 JSON 编码
}else{
die(json_encode(array("rs"=>'fail',"info"=>'删除失败')));
}
13.urlencode()和urldecode()
他们是用来解决网页URL编码解码问题,为的是让包含中文的URL可以使用。
<?php
$str = '我';
$str1 = urlencode($str);
$str2 = urldecode($str1);
echo $str1; // 输出:%e6%88%91 //编码
echo $str2; // 输出:我 //解码
?>
14.sprintf()
sprintf() 函数把格式化的字符串写入一个变量中。
<?php
$transAmt=10000000;
$transAmt = sprintf('%.2f',$transAmt);
echo $transAmt; //输出:10000000.00
?>
15.fopen() fwrite() fclose的用法
先看个例子:
<?php
$path = dirname(__FILE__);
$paths = $path.'/a.txt';
$content = '测试';
$handle = fopen($paths,'w+');
fwrite($handle, $content);
fclose($handle);
?>
运行一次,不过在$path路径下不存在a.txt文件,则会创建a.txt文件,w+是会把文件里面内容清空,重新写入。每次运行,都会清空原来的a.txt里面的数据,重新写入。
如果要追加的方法,即里面内容不清楚,继续添加,可用a,即,$handle = fopen($paths,'a');
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x"
创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
"x+"
创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
12.file_put_contents()和file_get_contents()的用法
file_put_contents() 函数把一个字符串写入文件中。与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。该函数将返回写入到文件内数据的字节数
<?php
$path = dirname(__FILE__);
$paths = $path.'/a.txt';
$content = '测试';
//$handle = fopen($paths,'w+');
//fwrite($handle, $content);
//fclose($handle);
echo file_put_contents($paths,$content);//输出:30
$arr = array('a'=>1,'b'=>2);
file_put_contents($paths,var_export($arr,true));
?>
file_get_contents() 函数把整个文件读入一个字符串中。
<?php
header('Content-type:text/html;charset=utf-8');
$path = dirname(__FILE__);
$paths = $path.'/a.txt';
$content = '测试';
file_put_contents($paths,$content);
$str = file_get_contents($paths);
echo $str; //输出:测试
?>
16.flock()
flock() 函数锁定或释放文件。若成功,则返回 true。若失败,则返回 false。
flock(file,lock,block)
file 必需。规定要锁定或释放的已打开的文件。flock() 操作的 file 必须是一个已经打开的文件指针。
lock 必需。规定要使用哪种锁定类型。
block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。
要取得共享锁定(读取的程序),将 lock 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。
要取得独占锁定(写入的程序),将 lock 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。
要释放锁定(无论共享或独占),将 lock 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。
如果不希望 flock() 在锁定时堵塞,则给 lock 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。
<?php
$file = fopen("test.txt","w+"); //打开
// 排它性的锁定
if (flock($file,LOCK_EX)){ //锁定后
fwrite($file,"Write something"); //写入内容
// release lock
flock($file,LOCK_UN); //然后解锁
}else{
echo "Error locking file!";
}
fclose($file); //关闭
?>
17.unlink() unlink(filename,context)
unlink() 函数删除文件。若成功,则返回 true,失败则返回 false。
<?php
$file = "test.txt";
if (!unlink($file)){
echo ("操作错误");
}else{
echo ("删除成功");
}
?>
18.unset()
unset -- 释放给定的变量 在 PHP 4 中,unset() 不再是一个真正的函数:它现在是一个语句。这样就没有了返回值,试图获取 unset() 的返回值将导致解析错误。
<?php
$arr = array(
'a'=>1,
'b'=>2,
'c'=>3
);
unset($arr['b']);
echo '<pre>';print_r($arr);
?>
输出:
Array
(
[a] => 1
[c] => 3
)
19.var_export()
var_export — 输出或返回一个变量的字符串表示
此函数返回关于传递给该函数的变量的结构信息,它和 var_dump() 类似,不同的是其返回的表示是合法的 PHP 代码。您可以通过将函数的第二个参数设置为 TRUE,从而返回变量的表示。
<?php
$arr = array(
'a'=>1,
'b'=>2,
'c'=>3
);
var_dump($arr); //输出: array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> int(3) }
var_export($arr); //输出: array ( 'a' => 1, 'b' => 2, 'c' => 3, )
$v = var_export($arr,TRUE); //第二个参数设置为 TRUE,从而返回变量的表示
echo $v; //输出 array ( 'a' => 1, 'b' => 2, 'c' => 3, )
?>
20.serialize()和unserialize()
serialize — 产生一个可存储的值的表示 serialize() 返回字符串,此字符串包含了表示 value 的字节流,可以存储于任何地方。 这有利于存储或传递 PHP 的值,同时不丢失其类型和结构。
unserialize — 从已存储的表示中创建 PHP 的值。 想要将已序列化的字符串变回 PHP 的值,可使用 unserialize()。
具体看例子:
<?php
$str = 'abcdefg';
$str1 = serialize($str);
$str2 = unserialize($str1);
echo $str1; //输出:s:7:"abcdefg";
echo $str2; //输出:abcdefg
$arr = array(
'a'=>1,
'b'=>2,
'c'=>3
);
$string = serialize($arr);
$arr2 = unserialize($string);
echo $string; //输出:a:3:{s:1:"a";i:1;s:1:"b";i:2;s:1:"c";i:3;}
print_r($arr2); //输出:Array ( [a] => 1 [b] => 2 [c] => 3 )
?>
21.rand()
rand() 函数返回随机整数。
<?php
echo rand(0,100); // 输出0-100的随机整数
?>
22.preg_match()
http://developer.51cto.com/art/200911/165362.htm
$num = $this->input->post('buy_num');
$preg = '/^[1-9][0-9]*$/';
if(!preg_match($preg, $ct_id) || !preg_match($preg, $num)){
echo '<script type="text/javascript">alert("参数错误!");history.back();</script>';
die();
}
23.str_replace()
str_replace() 函数使用一个字符串替换字符串中的另一些字符。
<?php
echo str_replace("world","John","Hello world!"); //输出:Hello John!
?>
<?php
$str = '123456789';
$new_str = str_replace("'","",$str);
echo $new_str;//输出123456789 //将' 替换为空
?>
24.preg_match()
在php中preg_match()函数是用来执行正则表达式的一个常用的函数
例子1:
如在开发中要判断表达提交过来的手机号码是否符合我们的要求,可用他来判断
<?php
if(!preg_match("/^1[3578][0-9]{9}$/", $_POST['phone_tel'])){
$this->show_warning('phone_error');
return;
}
?>
例子2:
判断是否为邮箱
if(!preg_match('/\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/', $_POST['email'])){
echo "<script>alert('邮箱格式错误');location.href='/xxx'</script>";
}
25.curl_init() url_init -- 初始化一个CURL会话
curl_init()函数将初始化一个新的会话,返回一个CURL句柄供curl_setopt(), curl_exec(),和 curl_close() 函数使用。如果可选参数被提供,那么CURLOPT_URL选项将被设置成这个参数的值。你可以使用curl_setopt()函数人工设置。
<?php
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "网站地址");
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_exec ($ch);
curl_close ($ch);
?>
<?php
public function request_by_curl($remote_server, $post_array)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER,0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $remote_server);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_array);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Errno'.curl_error($ch);//捕抓异常
exit;
//print_r(curl_getinfo($ch));
}
curl_close($ch);
return $result;
}
?>