04 php基础下
1. PHP函数
1.1 函数介绍
函数的英文叫做 : function , 而function的解释项中有另外一个含义”功能 ”, 函数就是功能 , 调用一个函数就是
在调用一个功能。
你可以理解成一个函数就是对一快代码的封装,然后调用函数,就会把这块代码运行
1.1.1 基本语法
函数的构成元素 :
- function关键字
- 函数名
- 参数
- 函数体
- return
语法 :
function 函数名(参数名1=值1, 参数名2=值2, 参数名n=值n)
{
函数中的功能体
return 返回值
}
实例 :
<?php
function func(){
echo '我是func函数';
}
func();
?>
1.1.2 函数参数
参数就在函数名称后面的一个括号内指定
位置传参 :
function f($x){
echo "$x"."\n"; // 打印1
}
f(1) // 内部会把1赋值给$x
默认值参数 :
function f($x=2){
echo "$x"."\n"; // 打印2
}
f() // 可以不传值,因为$x在定义的时候就已经赋值2了
指定传参 :
function f($x,$y=2){ // $y的值会被传入的值替换
echo "$x"."\n"; // 打印1
echo "$y"."\n"; // 打印3
}
f($x=1,$y=3)
1.1.3 返回值
return 后面紧跟的就是返回值,函数的返回值会传给函数的调用者,即函数名()
<?php
function add($x,$y)
{
$total=$x+$y;
return $total;
}
echo add(1,16); // 打印17
?>
1.2 函数备注说明
-
函数名只能是
字母,数字,下划线
的组合 , 并且之间不能包含空格 , 数字不能放在函数名首位 -
函数名与变量命名规则一样 , 但是不同的是 ,
函数名不区分大小写
-
函数体的参数若是定义了 , 未传参 , 代码会报错.
-
函数后的参数如果有默认值 , 参数可以不填 ,代码也不会报错
-
函数后的参数可以写多个
-
函数后如果有默认值和无默认值的参数 , 通常把无默认值的参数写在最前面
-
函数体的变量与函数体外的变量没有关系
-
函数体中若有return ,
return后的代码不执行.
-
函数执行完后,可把函数体内的值,带到函数体外
-
函数的执行没有顺序关系,
可以在定义外之前的位置调用
1.3 函数导入
在实际开发中,常常需要把程序中的共用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可
这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利
在PHP中,有以下四种方法包含一个文件:
序号 | 函数信息 | 说明 | 包含失败 |
---|---|---|---|
1 | include | 文件继续向下执行 , 通常用于动态包含 | 返回一条警告 |
2 | require | 代码就不会继续向下执行 , 通常包含极为重要的文件,这个代码别想执行 | 返回一个致命错误 |
3 | Include_once | 除了原有include的功能外,它还会做once检测,如果文件曾经被包含过,不在包含 | 返回一条警告 |
4 | require_once | 除了原功能以外,会做一次once检测,防止文件反复被包含 | 返回一个致命错误 |
// func.php
<?php
function func()
{
echo "执行了func函数"
}
>
// demo.php
<?php
// 在func.php文件的同级目录新建一个php文件,写入以下代码
include "func.php";
//可以直接调用
func();
>
1.4 常用内建函数
1.4.1 数字常用函数总结
序号 | 函数信息 | 说明 | 实例 |
---|---|---|---|
1 | abs() | 求绝对值 输入数字 输出绝对值数字 | $abs=abs(-42); //42 |
2 | ceil() | 进一法取整输入浮点数 输出进一取整 | echo ceil(9.999) //10 |
3 | floor() | 舍去法取整输入浮点数 输出直接舍去小数部分 | echo ceil(9.999) //9 |
4 | fmod() | 浮点数取余输入两个浮点数 输出浮点数余数 | $x=5.7;$y=1.3;$r=fmod($x,$y)//$r 0.5 |
5 | pow() | 返回数的n此房输入基础的n此房 输出乘方值 | echo pow(-1,20)//1 |
6 | round | 浮点数四舍五入输入一个数值 输出保留小数点后多少位默认为0舍入后的结果 | echo round(195583.2)//196 |
7 | sqit | 求平方根输入被开方的数 输出平方根 | echo sqit(9)//3 |
8 | max() | 求最大值输入多个数字或数组 输出返回其中的最大值 | echo max(1.3.5.6.7) //7echo max(array(2,4,5)) //5 |
9 | min() | 求最大值输入多个数字或数组 输出返回其中的最大值 | echo min(1.3.5.6.7) //7echo min(array(2,4,5)) //5 |
10 | mt_rand() | 更好的随机数输入最小和最大 输出返回其中的最大值 | echo min(array(2,4,5)) //5 |
11 | rand() | 随机数输入最小或最大 输出返回其中的最大值随机分配 | echo rand() |
12 | pi() | 获取圆周率值输入无 输出获取圆周率 | echo pi(); // 3.1415926535898 |
1.4.2 字符串常用函数总结
序号 | 函数信息 | 说明 | 实例 |
---|---|---|---|
1 | trim() | 删除字符串两端的空格或其他预定义字符 | "$str = "\r\nHello World!\r\n"; echo trim($str); |
2 | rtrim() | 删除字符串右边的空格或其他预定义字符 | "$str = "Hello World!\n\n"; echo rtrim($str);" |
3 | chop() | rtrim()的别名 | 同上 |
4 | ltrim() | 删除字符串左边的空格或其他预定义字符 | "$str = "\r\nHello World!"; echo ltrim($str);" |
5 | dirname() | 回路径中的目录部分(把它归在了字符串函数里了) | echo dirname("c:/testweb/home.php"); |
6 | str_pad() | 把字符串填充为指定的长度 | $str = "Hello World"; echo str_pad($str,20,"."); |
7 | str_repeat() | 重复使用指定字符串 | echo str_repeat(".",13); |
8 | str_split() | 把字符串分割到数组中 | print_r(str_split("Hello")); |
9 | strrev() | 反转字符串 | echo strrev("Hello World!"); |
10 | wordwrap() | 按照指定长度对字符串进行折行处理 | "$str = ""An example on a long word is: Supercalifragulistic""; echo wordwrap($str,15);" |
11 | str_shuffle() | 随机地打乱字符串中所有字符 | echo str_shuffle("Hello World"); |
12 | parse_str() | 将字符串解析成变量 | "parse_str("id=23&name=John%20Adams",$myArray); print_r($myArray);" |
13 | number_format() | 通过千位分组来格式化数字 | "echo number_format("1000000"); echo number_format("1000000",2); echo number_format("1000000",2,"","",""."");" |
14 | strtolower() | 字符串转为小写 | echo strtolower("Hello WORLD!"); |
15 | strtoupper() | 字符串转为大写 | echo strtoupper("Hello WORLD!"); |
16 | ucfirst() | 字符串首字母大写 | echo ucfirst("hello world"); |
17 | ucwords() | 字符串每个单词首字符转为大写 | echo ucwords("hello world"); |
18 | htmlentities() | 把字符转为HTML实体 | $str = ""John & 'Adams'""; echo htmlentities($str, ENT_COMPAT); |
19 | htmlspecialchars() | 预定义字符转html编码 | |
20 | nl2br() | \n转义为 | |
21 | strip_tags() | 剥去 HTML、XML 以及 PHP 的标签 | echo strip_tags("Hello world!"); |
22 | addcslashes() | 在指定的字符前添加反斜线转义字符串中字符 | $str = ""Hello, my name is John Adams." echo $str; echo addcslashes($str,'m');" |
23 | stripcslashes() | 删除由addcslashes()添加的反斜线 | echo stripcslashes("Hello, \my na\me is Kai Ji\m."); |
24 | addslashes() | 指定预定义字符前添加反斜线 | $str = "Who's John Adams?";echo addslashes($str); |
25 | stripslashes() | 删除由addslashes()添加的转义字符 | echo stripslashes("Who's John Adams?"); |
26 | quotemeta() | 在字符串中某些预定义的字符前添加反斜线 | $str = "Hello world. (can you hear me?)"; echo quotemeta($str); |
27 | chr() | 从指定的 ASCII 值返回字符 | echo chr(052); |
28 | ord() | 返回字符串第一个字符的 ASCII值 | echo ord("hello"); |
29 | strcasecmp() | 不区分大小写比较两字符串 | echo strcasecmp("Hello world!","HELLO WORLD!"); |
30 | strcmp() | 区分大小写比较两字符串 | |
31 | strncmp() | 比较字符串前n个字符,区分大小写 | |
32 | strncasecmp() | 比较字符串前n个字符,不区分大小写 | int strncasecmp ( string $str1 , string $str2 , int $len ) |
33 | strnatcmp() | 自然顺序法比较字符串长度,区分大小写 | int strnatcmp ( string $str1 , string $str2 ) |
34 | strnatcasecmp() | 自然顺序法比较字符串长度,不区分大小写 | int strnatcasecmp ( string $str1 , string $str2 ) |
35 | chunk_split() | 将字符串分成小块 | str chunk_split(str $body[,int $len[,str $end]]) |
36 | strtok() | 切开字符串 | str strtok(str $str,str $token) |
37 | explode() | 使用一个字符串为标志分割另一个字符串 | array explode(str $sep,str $str[,int $limit]) |
38 | implode() | 同join,将数组值用预订字符连接成字符串 | string implode ( string $glue , array $pieces ) |
39 | substr() | 截取字符串 | string substr ( string $string , int $start [, int $length ] ) |
40 | str_replace() | 字符串替换操作,区分大小写 | mix str_replace(mix $search,,mix $replace,mix $subject[,int &$num]) |
41 | str_ireplace() | 字符串替换操作,不区分大小写 | mix str_ireplace ( mix $search , mix $replace , mix $subject [, int &$count ] ) |
42 | substr_count() | 统计一个字符串,在另一个字符串中出现次数 | int substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) |
43 | substr_replace() | 替换字符串中某串为另一个字符串 | mixed substr_replace ( mixed $string , string $replacement , int $start [, int $length ] ) |
44 | str_ireplace() | 字符串替换操作,不区分大小写 | mix str_ireplace ( mix $search , mix $replace , mix $subject [, int &$count ] ) |
45 | substr_count() | 统计一个字符串,在另一个字符串中出现次数 | int substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] ) |
46 | substr_replace() | 替换字符串中某串为另一个字符串 | mixed substr_replace ( mixed $string , string $replacement , int $start [, int $length ] ) |
47 | similar_text() | 返回两字符串相同字符的数量 | int similar_text(str $str1,str $str2) |
48 | strchr() | 返回一个字符串在另一个字符串中开始位置到结束的字符串 | string strstr ( string $str, string $needle , bool $before_needle ) |
49 | strrchr() | 返回一个字符串在另一个字符串中最后一次出现位置开始到末尾的字符串 | string strrchr ( string $haystack , mixed $needle ) |
50 | stristr() | 返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写 | string stristr ( string $haystack , mixed $needle [, bool $before_needle = false ] ) |
51 | strtr() | 转换字符串中的某些字符 | string strtr ( string $str , string $from , string $to ) |
52 | strpos() | 寻找字符串中某字符最先出现的位置 | int strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) |
53 | stripos() | 寻找字符串中某字符最先出现的位置,不区分大小写 | int stripos ( string $haystack , string $needle [, int $offset ] ) |
54 | strrpos() | 寻找某字符串中某字符最后出现的位置 | int strrpos ( string $haystack , string $needle [, int $offset = 0 ] ) |
55 | strripos() | 寻找某字符串中某字符最后出现的位置,不区分大小写 | int strripos ( string $haystack , string $needle [, int $offset ] ) |
56 | strspn() | 返回字符串中首次符合mask的子字符串长度 | int strspn ( string $str1 , string $str2 [, int $start [, int $length ]] ) |
57 | strcspn() | 返回字符串中不符合mask的字符串的长度 | int strcspn ( string $str1 , string $str2 [, int $start [, int $length ]] ) |
58 | str_word_count() | 统计字符串含有的单词数 | mix str_word_count(str $str,[]) |
59 | strlen() | 统计字符串长度 | int strlen(str $str) |
60 | count_chars() | 统计字符串中所有字母出现次数(0..255) | mixed count_chars ( string $string [, int $mode ] ) |
61 | md5()iconv | 字符串md5编码 | $str = "Hello"; echo md5($str) |
62 | mb_substr | 获取字符串的部分 | string mb_substr ( string $str , int $start [, int $length = NULL [, string $encoding = mb_internal_encoding() ]] ) |
63 | mb_http_output | 设置/获取 HTTP 输出字符编码 | mixed mb_http_output ([ string $encoding = mb_http_output() ] ) |
64 | mb_strlen | 获取字符串的长度 | mixed mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] ) |
65 | iconv | 字符串按要求的字符编码来转换 | string iconv ( string $in_charset , string $out_charset , string $str ) |
66 | iconv_substr | 截取字符串的部分 | |
67 | iconv_get_encoding | 获取 iconv 扩展的内部配置变量 | |
68 | mb_substr_count | 统计字符串出现的次数 | |
69 | mb_check_encoding | 检查字符串在指定的编码里是否有效 | |
70 | mb_strrpos | 查找字符串在一个字符串中最后出现的位置 | |
71 | mb_split | 使用正则表达式分割多字节字符串 | |
72 | parse_url | 解释URL成为一个数组 | |
注释:mb_* 和iconv_* 他们可以处理多字节字符,例如:中文。中文主要用的是GBK和utf-8两种编码格式。GBK和utf-8是两个不同的编码委员会对于汉字进行的编码的标准。他们规定GBK是双字节,也就是一个汉字占用2Bytes。utf-8是三字节,一个汉字占用三个字节长度的存储空间。 |
1.4.3 时间函数总结
getdate()
函数是一个内建函数 , 会返回一个数组 , 他们的索引就是 year mon mday等
<?php
$mytime = getdate();
echo "年 :".$mytime['year']."\n";
echo "月 :".$mytime['mon']."\n";
echo "日 :".$mytime['mday']."\n";
echo "时 :".$mytime['hours']."\n";
echo "分 :".$mytime['minutes']."\n";
echo "秒 :".$mytime['seconds']."\n";
echo "时间戳 :".$mytime[0]."\n";
echo "一个小时中的第几钟 :".$mytime['minutes']."\n";
echo "这是一分钟的第几秒 :".$mytime['seconds']."\n";
echo "星期名称 :".$mytime['weekday']."\n";
echo "月份名称 :".$mytime['month']."\n";
?>
2. 数组数据结构
2.1 什么是数组
数组的英文是array , 可以存入多个不同类型的数据,是一个复合数据类型。
2.2 定义数组
$a1 = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇')
在上例中,我们发现我们存入了:整型、浮点、布尔、字符串,可以通过var_dump()
函数打印出来显示
<?php
$a1 = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');
var_dump($shu);
?>
//array(4) {
// [0]=>
// int(1)
// [1]=>
// float(1.5)
// [2]=>
// bool(true)
// [3]=>
// string(33) "天王盖地虎,小鸡炖蘑菇"
//}
2.3 指定索引
数组的默认索引是从0开始,依次加1直到最后一个元素,当然你也可以自定义索引,如果你从开头自定义
则后面的元素的索引就从自定义的那个数字依次加1
<?php
$a1 = array(2=>1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');
var_dump($shu);
?>
//array(4) {
// [2]=>
// int(1)
// [3]=>
// float(1.5)
// [4]=>
// bool(true)
// [5]=>
// string(33) "天王盖地虎,小鸡炖蘑菇"
//}
当然你也可以把索引设置成字母
<?php
$a1 = array("name"=>"ymn" ,"age"=>21);
var_dump($a1);
?>
//array(2) {
// ["name"]=>
// string(3) "ymn"
// ["age"]=>
// int(21)
//}
2.4 常用操作数组函数
序号 | 函数信息 | 说明 |
---|---|---|
1 | array_shift() | 弹出数组中的第一个元素 |
2 | array_unshift() | 在数组的开始处压入元素 |
3 | array_push() | 向数组的末尾处压入元素 |
4 | array_pop() | 弹出数组末尾的最后一个元素 |
5 | current() | 读出指针当前位置的值 |
6 | key() | 读出指针当前位置的键 |
7 | next() | 指针向下移 |
8 | prev() | 向上移 |
9 | reset() | 指针到开始处 |
10 | end() | 指针到结束处 |
这些函数,也是面试中基础面试中最爱问到的问题。
序号 | 函数信息 | 说明 |
---|---|---|
1 | array_combine() | 生成一个数组,用一个数组的值作为键名,另一个数组值作为值 |
2 | range() | 创建并返回一个包含指定范围的元素的数组。 |
3 | compact() | 创建一个由参数所带变量组成的数组 |
4 | array_fill() | 用给定的值生成数组 |
5 | array_chunk() | 把一个数组分割为新的数组块 |
6 | array_merge() | 把两个或多个数组合并为一个数组 |
7 | array_slice() | 在数组中根据条件取出一段值,并返回 |
8 | array_diff() | 返回两个数组的差集数组 |
9 | array_search() | 在数组中搜索给定的值,如果成功则返回相应的键名 |
10 | array_splice() | 把数组中的一部分去掉并用其它值取代 |
11 | array_sum() | 计算数组中所有值的和 |
12 | in_array() | 检查数组中是否存在某个值 |
13 | array_key_exists() | 检查给定的键名或索引是否存在于数组中 |
14 | shuffle() | 将数组打乱,保留键值 |
15 | count() | 计算数组中的单元数目或对象中的属性个数 |
16 | array_flip() | 返回一个键值反转后的数组 |
17 | array_keys() | 返回数组所有的键,组成一个数组 |
18 | array_values() | 返回数组中所有值,组成一个数组 |
19 | array_reverse() | 返回一个元素顺序相反的数组 |
20 | array_count_values() | 统计数组中所有的值出现的次数 |
21 | array_rand() | 从数组中随机抽取一个或多个元素,注意是键名 |
22 | array_unique() | 删除重复值,返回剩余数组 |
23 | sort() | 按升序对给定数组的值排序,不保留键名 |
24 | rsort() | 对数组逆向排序,不保留键名 |
25 | asort() | 对数组排序,保持索引关系 |
26 | arsort() | 对数组逆向排序,保持索引关系 |
27 | ksort() | 按键名对数组排序 |
28 | krsort() | 将数组按照键逆向排序 |
29 | natsort() | 用自然顺序算法对数组中的元素排序 |
30 | natcasesort() | 自然排序,不区分大小写 |
31 | array_filter() | 去掉数组中的空元素或者预定元素 |
32 | extract() | 将键变为变量名,将值变为变量值 |
3. PHP中的正则表达式
正则表达式就是匹配字符的规则
正则表达是会在开发中经常看到,它主要用在以下一些地方:匹配邮箱、手机号码、验证码、替换敏感的关键词。
例如:涉及政治和骂人的话
PHP的正则表达示定界符的规定如下:定界符,不能用a-zA-Z0-9\
其他的都可以用。必须成对出现,有开始就
有结束。
3.1 定义方法
例子 说明
/中间写正则/ 正确 (常用这个)
$中间写正则$ 正确
%中间写正则% 正确
^中间写正则^ 正确
@中间写正则@ 正确
(中间写正则) 错误 /\//
A中间写正则A 错误
3.2 转义字符
在php中\(反斜杠)
是具有转义的意思的,如果在\
后面紧跟一个n
那么n
就会被转义成换行
如果你想取消转义只需要在前面再加一个\
即可
/\// // 把/取消转义,/原本是正则的结束,加上\就是普通的/(斜杠)了
3.3 preg_match函数
<?php
$zz = '/wq/';
$string = 'ssssswqaaaaaa';
if(preg_match($zz, $string, $matches)){ // 匹配的结果会赋值给$matches(数组)
echo '匹配到了,结果为:'.$matches[0]."\n";
var_dump($matches);
}else{
echo '没有匹配到';
}
?>
3.4 常用的正则函数
序号 | 函数信息 | 说明 |
---|---|---|
1 | preg_filter() | 执行一个正则表达式搜索和替换 |
2 | preg_grep() | 返回匹配模式的数组条目 |
3 | preg_match() | 执行一个正则表达式匹配 |
4 | preg_match_all() | 执行一个全局正则表达式匹配 |
5 | preg_replace_callback_array() | 传入数组,执行一个正则表达式搜索和替换使用回调 |
6 | preg_replace_callback() | 执行一个正则表达式搜索并且使用一个回调进行替换 |
7 | preg_replace() | 执行一个正则表达式的搜索和替换 |
8 | preg_split() | 通过一个正则表达式分隔字符串 |
$zz = '/wq/';
$string = 'asdwqfggwqaaaawqaa';
$res = preg_split($zz, $string); // 匹配的结果会赋值给$res(数组)
var_dump($res);
//array(4) {
// [0]=>
// string(3) "asd"
// [1]=>
// string(3) "fgg"
// [2]=>
// string(4) "aaaa"
// [3]=>
// string(2) "aa"
//}
4. php文件管理
4.1 文件介绍
我们会点鼠标右键删除文件、会control+c(或右键)复制、粘贴文件,会新建一些文件,检测这个文件是不是只
读文件。在电脑里面进行的这些操作,在代码里面如果能操作就好了。因为,如果有了这些操作。我们能做很多事
情了:可不可以写入修改配置文件、是不是可以做PHP安装的时候检测文件的权限、是不是可以做生成Html文件
等等很多不同的操作,总之其他太多太多的地方用到了文件操作。
4.2 简单的读取文件
4.2.1 readfile函数
readfile( "文件路径" )
会直接将文件内容打印在控制台
<?php
readfile('test.txt')
?>
4.2.2 file_get_content函数
<?php
$filename = 'test.txt';
$filestring = file_get_contents($filename); //打开文件把内容读出来,赋值$filestring
echo $filest
ring;
?>
4.3 文件操作三步骤
4.3.1 fopen打开文件
当你用fopen打开一个文件之前,应该先指定好模式
常见模式 :
- r模式 只读
- w模式 只写
- a模式 追加模式
fopen的8种模式
模式 | 描述 |
---|---|
r | 只读。在文件的开头开始。 |
r+ | 读/写。在文件的开头开始。 |
w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
a | 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。 |
a+ | 读/追加。通过向文件末尾写内容,来保持文件内容。 |
x | 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
x+ | 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
如果 fopen() 函数无法打开指定文件,则返回 0 (false)。
<?php
$fp = fopen('test.txt','r');
echo var_dump($fp);
// resource(5) of type (stream)
$fp = fopen('test1.txt','r');
echo var_dump($fp);
// bool(false)
?>
4.3.2 读操作
逐行读取文件
gets() 函数用于从文件中逐行读取文件。
注释:在调用该函数之后,文件指针会移动到下一行。
<?php
$file = fopen("welcome.txt", "r") or exit("无法打开文件!");
// 读取文件每一行,直到文件结尾
while(!feof($file))
// feof($file)判断文件指针是否在文件末尾
{
echo fgets($file); // 读取文件内容,自动换行
}
fclose($file);
?>
逐字符读取文件
fgetc() 函数用于从文件中逐字符地读取文件。
注释:在调用该函数之后,文件指针会移动到下一个字符。
<?php
$file=fopen("text.txt","r");
while (!feof($file))
{
echo fgetc($file);
}
fclose($file);
?>
4.3.3 写操作
注意 : 想要向文件中写入内容,必须先指定模式为w
<?php
$filename = 'test.txt';
$fp= fopen($filename, "w");
$len = fwrite($fp, '我是一只来自南方的狼,却在北方冻成了狗');
fclose($fp);
print $len .'字节被写入了\n';
?>
// 代码说明:
// 不论有没有新建都会打开文件重新写入
// 原有的文件内容会被覆盖掉
// 文件不存在会创建
4.3.4 关闭文件
因为计算机不会像人类那么聪明,你不告诉他关闭文件,它是不会自己关闭文件的,所以当你打开文件,然后操作
完成后 ,一定要注意要关闭文件。
<?php
$fp = fopen('test.txt','w');
fwrite($fp,'晚上吃什么?');
fclose($fp);
?>
4.4 php 创建临时文件
我们之前创建的文件都是永久文件,而创建临时文件在我们平时的项目开发中也非常有用,创建临时文件的好处:
文件操作完成后即删除,不需要去维护这个文件的删除状态。
<?php
//创建了一个临时文件
$handle = tmpfile();
//向里面写入了数据
$numbytes = fwrite($handle, '写入临时文件');
//关闭临时文件,文件即被删除
fclose($handle);
echo '向临时文件中写入了'.$numbytes . '个字节';
?>
4.5 其他文件操作
4.5.1 重命名文件
rename($旧名,$新名)
功能:这个函数返回一个bool值,将旧的名字改为新的名字。
<?php
//旧文件名
$filename = 'test.txt';
//新文件名
$filename2 = 'new_test.txt';
//重名名文件
rename($filename, $filename2);
?>
4.5.2 复制文件
复制文件,就相当于是克隆技术,将一个原来的东西再克隆成一个新的东西,两个长得一模一样。
copy(源文件,目标文件)
功能:将指定路径的源文件,复制一份到目标文件的位置。
<?php
//旧文件
$filename = 'demo.txt';
//新文件
$filename2 = 'demo_copy.txt';
//复制文件
copy($filename, $filename2);
?>
说明:会通过上面的例子,发现多出来了一个文件。
4.5.3 删除文件
删除文件就是将指定路径的一个文件删除,不过这个删除是直接删除。使用的是windows电脑,你在回收站看不
到这个文件,你只会发现这个文件被删除了。
unlink(指定路径的文件)
返回一个bool值
<?php
$filename = 'test.txt';
if (unlink($filename)) {
echo "删除文件成功 $filename!\n";
} else {
echo "删除 $filename 失败!\n";
}
?>
4.5.4 检测文件属性函数
常用文件属性函数:
序号 | 函数信息 | 说明 |
---|---|---|
1 | file_exists( $指定文件名或者文件路径) | 文件是否存在。 |
2 | is_readable ( $指定文件名或者文件路径) | 文件是否可读 |
3 | is_writeable ( $指定文件名或者文件路径) | 文件是否可写 |
4 | is_executable ( $指定文件名或者文件路径) | 文件是否可执行 |
5 | is_file ( $指定文件名或者文件路径) | 是否是文件 |
6 | is_dir ( $指定文件名或者文件路径) | 是否是目录 |
7 | void clearstatcache ( void ) | 清楚文件的状态缓存 |
<?php
$filename = 'test.txt';
echo var_dump(file_exists($filename)) // 返回bool值
?>
4.6 目录处理函数
php 目录处理函数处理文件夹的基本思想如下:
-
读取某个路径的时候判断是否是文件夹
-
是文件夹的话,打开指定文件夹,返回文件目录的资源变量
-
使用readdir读取一次目录中的文件,目录指针向后偏移一次
-
使用readdir读取到最后,没有可读的文件返回false
-
关闭文件目录
我们来学习一下常用函数
序号 | 函数信息 | 说明 |
---|---|---|
1 | opendir | 打开文件夹,返回操作资源 |
2 | readdir | 读取文件夹资源 |
3 | is_dir | 判断是否是文件夹 |
4 | closedir | 关闭文件夹操作资源 |
5 | filetype | 显示是文件夹还是文件,文件显示file,文件夹显示dir |
<?php
//设置打开的目录是D盘
$dir = "d:/";
//判断是否是文件夹,是文件夹
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
//读取到最后返回false,停止循环
while (($file = readdir($dh)) !== false) {
echo "文件名为: $file : 文件的类型是: " . filetype($dir . $file) . "<br />";
}
closedir($dh);
}
}
?>
序号 | 函数 | 说明 |
---|---|---|
1 | pathinfo | 返回文件的各个组成部分 |
2 | basename | 返回文件名 |
3 | dirname | 文件目录部份 |
<?php
$path_parts = pathinfo('d:/www/index.php');
echo '文件目录名:'.$path_parts['dirname']."<br />";
echo '文件全名:'.$path_parts['basename']."<br />";
echo '文件扩展名:'.$path_parts['extension']."<br />";
echo '不包含扩展的文件名:'.$path_parts['filename']."<br />";
?>
4.7 php实现文件留言本
index.php
<?php
//设置时区
date_default_timezone_set('PRC');
//读了内容
@$string = file_get_contents('message.txt');
//如果$string 不为空的时候执行,也就是message.txt中有留言数据
if (!empty($string)) {
//每一段留言有一个分格符,但是最后多出了一个&^。因此,我们要将&^删掉
$string = rtrim($string, '&^');
//以&^切成数组
$arr = explode('&^', $string);
//将留言内容读取
foreach ($arr as $value) {
//将用户名和内容分开
list($username, $content, $time) = explode('$#', $value);
echo '用户名为<font color="gree">' . $username . '</font>内容为<font color="red">' . $content . '</font>时间为' . date('Y-m-d H:i:s', $time);
echo '<hr />';
}
}
?>
<h1>基于文件的留言本演示</h1>
<form action="write.php" method="post">
用户名:<input type="text" name="username" /><br />
留言内容:<textarea name="content"></textarea><br />
<input type="submit" value="提交" />
</form>
write.php
<?php
//追加方式打开文件
$fp=fopen('message.txt','a');
//设置时间
$time=time();
//得到用户名
$username=trim($_POST['username']);
//得到内容
$content=trim($_POST['content']);
//组合写入的字符串:内容和用户之间分开,使用$#
//行与行之间分开,使用&^
$string=$username.'$#'.$content.'$#'.$time.'&^';
//写入文件
fwrite($fp,$string);
//关闭文件
fclose($fp);
header('location:index.php');
?>