PHP 笔记
发布于 2026-04-06更新于 2026-11-145359 字62 分钟 · 阅读时间
2023-10-10 ~ 2023-10-11
总的来说,
PHP相当于结合了C++、Linux和JS的一部分
记得要保存之后再打开。。。
PHP:Hypertext Preprocessor(超文本预处理器)
PHP 是一种广泛用于 Web 开发的开源服务器端脚本语言
它可以嵌入 HTML 中执行,还可以执行编译后代码,使代码运行更快
语法吸收了 C 语言、java 和 Perl 的特点,利于学习,使用广泛
PHP 可以访问数据库,并与服务器上的其他文件交互。
PHP 是网络安全中需要掌握的一门语言
PHP 最初被设计为一种简单易用的语言,因此对于初学者来说非常易于理解和学习
PHP 也是一种功能强大的语言,拥有大量功能和扩展库,能够胜任各种任务
目前 PHP 在全球网页市场、手机网页市场还有为手机提供 API(程序接口)排名第一
集成环境包:[1] (简单易上手)
PHPstorm
VSCode
新建一个文件hello_world.php,里面写:
<?phpecho "hello world"; /*输出:hello world*/?>可以发现:
<?php ?> //和/**/来注释; 也可以不加首先打开下图的启动

然后在浏览器输入:
localhost/你要打开的文件路径(“WWW”文件夹下的)
如:要打开WWW/php/lesson01/1.hello_world.php
则输入:localhost/php/lesson01/1.hello_world.php
在一个 php 文件中输入:
<?phpphpinfo(); //用于显示当前服务器的php的详细信息?>然后打开,则会显示 php 的详细信息:

<?php$iphone7 = 5880;$iphone7plus = 6088;echo $iphone7 + $iphone7plus;?>php 的变量必须以$这个符号开始,和linux命令一样
命名和c++/linux命令一样
php 的变量和js一样,不用声明变量类型
推荐使用驼峰命名法或下划线命名法作为命名风格。
例如:firstName或first_name
变量分为:
<?php//定义第一个变量$shu = 'biao';//定义第二个变量$biao = '鼠标';//“ $“$shu” ” --> “ $biao ” --> “鼠标”echo $$shu;?>就是变量名也是可变的意思
就是 php 在提前规定好的一些变量
外部变量是在脚本中全局可用的预定义变量,可以从任何地方访问。它们被存储在 PHP 的超全局数组中。常见的外部变量包括$_GET、$_POST、$_SESSION等
<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <title>Title</title> </head> <body> <!-- 这一行method 对应的值改为post ---> <!-- 将文件提交给“3.Superglobals.php”,并打开它 ---> <form action="3.Superglobals.php" method="post"> <input type="text" name="username" /> <input type="password" name="pwd" /> <input type="submit" name="提交" /> </form> </body></html><?php//$_POST[‘username’],将username作为字符串放在中括号里面,就得到了表单里面的<input type=”text”name=”username”/>的值$u = $_POST['username'];echo $u.'<br />';//$_POST[‘pwd’],将pwd作为字符串放在中括号里面,就得到了表单里面的<input type=”text”name=”pwd”/>的值$passwd = $_POST['pwd'];echo $passwd.'<br />';?>输出:“账号”“密码”其他的一些外部变量
| 序号 | 全局变量名 | 变量解释说明 |
|---|---|---|
| 1 | $_COOKIE | 得到会话控制中的 cookie 传值信息 |
| 2 | $_SESSION | 得到会话控制中的 session 传值信息 |
| 3 | $_FILES | 得到文件上传的结果 |
| 4 | $_GET | 得到 get 传值的结果 |
| 5 | $_POST | 得到 post 传值的结果 |
| 6 | $_REQUEST | 可以得到 get 的传值结果,也能得到 POST 传值的结果 |
主要用的有$_SERVER和$_ENV两个环境变量。不过,$_ENV逐渐被 PHP 的新版本给废弃了。
<?php// 获取当前页面的URL$url = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];echo "Current URL: $url";?>输出:Current URL: localhost:63342/WWW/php/lesson02/4.Environment_Variables.php?_ijt=7deat8r0c48bhk17ea2q28vm3u&_ij_reload=RELOAD_ON_SAVE其他的一些环境变量

常量就是平常不变的量
定义语法:
<?php define('常量名','常量值'); //有点像c++的宏定义?>在字符串中调用常量:
<?php define('MyName','樱花莎'); //双引号也可以 echo MyName; echo '我的名字是:'.MyName; echo '我的名字是:'.'MyName'; //这个MyName只是一个字符串?>系统自带的一些常量:
| 序号 | 常量名 | 变量解释说明 |
|---|---|---|
| 1 | LINE | 当前所在的行 |
| 2 | FILE | 当前文件在服务器的路径 |
| 3 | FUNCTION | 当前函数名称 |
| 4 | CLASS | 当前类名 |
| 5 | METHOD | 当前成员方法名 |
| 6 | PHP_OS | PHP 运行的操作系统 |
| 7 | PHP_VERSION | 当前 PHP 的版本 |
| 8 | TRAIT | Trait 的名字(PHP 5.4 新加常量) |
| 9 | DIR | 文件所在的目录信息 |
| 10 | NAMESPACE | 当前命名空间的名称(区分大小写) |
一共有以下三种注释方法:
类似 C++的//、/**/和 Linux 命令的#
<?php // /**/ #?>一共有八种,分别是:
boolean(布尔类型)
integer(整形)
float/double(浮点型)
string(字符串型)
2 种复合数据类型:
array(数组类型)
object(对象类型)
2 中特殊的数据类型:
resource(资源类型)
null(无/空白类型)
8 进制声明方式:
<?php//8进制的取值范围是0-7,即0、1、2、3、4、5、6、7$bajinzhi=033145;echo $bajinzhi;?>// 这里仅仅是个说明,并不是八进制的运算,具体看下面的图10 进制声明方式:
<?php//为了方便大家记忆和前期学习,英文不好的朋友可用拼音来声明变量。//声明变量整数,英文int$int=1000;$zhengshu=1000;echo $int;echo $zhengshu;?>// 这里仅仅是个说明,并不是十进制的运算,具体看下面的图16 进制声明方式:以 0x 开始,后面跟 0-f 的,0x 的后面的 abcdef 不区分大小写。(了解即可)
<?php//16进制的取值范围是0-f,即0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f//声明变量整数,英文int$shiliujinzhi=0x6ff;echo $shiliujinzhi;// 这里仅仅是个说明,并不是十六进制的运算,具体看下面的图?>| 十进制 | 二进制 | 八进制 | 十六进制 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 |
| 3 | 11 | 3 | 3 |
| 4 | 100 | 4 | 4 |
| 5 | 101 | 5 | 5 |
| 6 | 110 | 6 | 6 |
| 7 | 111 | 7 | 7 |
| 8 | 1000 | 10 | 8 |
| 9 | 1001 | 11 | 9 |
| 10 | 1010 | 12 | A |
| 11 | 1011 | 13 | B |
| 12 | 1100 | 14 | C |
| 13 | 1101 | 15 | D |
| 14 | 1110 | 16 | E |
| 15 | 1111 | 17 | F |
| 16 | 10000 | 20 | 10 |
布尔类型举例说明:
<?php//声明一个变量(拼音)为布尔$buer=true;//声明一个变量(英文)$bool=false;?>在 PHP 语言中声明字符串有三种方式:
单引号声明
<?php//声明字符串变量$zifu$zifu='好好学习吧';echo $zifu;?>双引号声明
<?php//声明字符串变量$str$str="我想好好学习";echo $str;?>字界符声明
在变量后面的等号写三个小于号 <<<
然后在<<<后面写上字符(建议英文大写字符)
然后换行写上任意想写的字符
写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。
<?php$dingjie = <<<ABC 如果 非要在这个测试 前 面<br /> 加上一段 <i>有趣的话</i> 我想说,<h1>努力学习不好么<h1>ABC;echo $dingjie?>那双引号和单引号有什么区别呢:
双引号解析变量,但是单引号不解析变量
在双引号里面插入变量,变量后面如果有英文或中文字符,会把这个字符和变量拼起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。
如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
双引号解析转义字符,单引号不解析转义字符。但是单引号能解析\
单引号效率高于双引号,尽可能使用单引号
双引号和单引号可以互相嵌套,双引号中可以插入单引号,单引号当中插入变量,这个变量会被解析。
神奇的字符串拼接胶水——(.)点,用来拼接字符串。
一般将定界符声明字符串视为双引号一样的功能来看待。
声明方式分为两种:
普通声明方式
科学声明方式
普通声明浮点数:
<?php//声明变量fudian的植为12121.3232$fudian=12121.3232;echo $fudian;?>科学声明浮点数:
<?php//声明变量$f1的植为0.8873$f1=0.8873;var_dump($f1)?>输出:D:/elric/Programming/study/PHP/ceshi.php:4:float 0.8873//这个4为第四行var_dump() 函数用于输出变量的相关信息。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
查看数据类型:
gettype(传入一个变量)能获得变量的类型
var_dump(传入一个变量)输出变量类型和值
<?php//声明一个变量88.8,可以自己多做几次实现换成其他类型看看$type输出是多少。$float = 88.8;$type = gettype($float);echo $type; //多换几个类型试试$str = '你喜欢男人还是喜欢女人';$type = var_dump($str);echo $type;?>输出:doubleD:/elric/Programming/study/PHP/ceshi.php:9:string '你喜欢男人还是喜欢女人' (length=33)判断数据类型方法:
使用is_*系列函数,is_types这一系列的函数,来进行判断某个数据属于哪种类型,如果是这个类型返回真,不是这个类型返回假。
| 序号 | 判断函数 | 函数判断描述 |
|---|---|---|
| 1 | is_int | 判断是否为整数数据类型 |
| 2 | is_bool | 判断是否为布尔数据类型 |
| 3 | is_float | 判断是否是浮点数据类型 |
| 4 | is_string | 判断是否是字符串数据类型 |
| 5 | is_array | 判断是否是数组数据类型 |
| 6 | is_object | 判断是否是对象数据类型 |
| 7 | is_null | 判断数据信息是否为空 |
| 8 | is_resource | 判断是否为资源数据类型 |
| 9 | is_scalar | 判断是否为标量 |
| 10 | is_numeric | 判断是否为数值类型 |
| 11 | is_callable | 判断是否为函数 |
<?php//is_*系列函数有个特点,就是如果是这个类型的返回的值为真,不是这个数据类型就返回的是假//声明类型为假$fo = false;if (is_bool($fo)) { echo '执行真区间';}else{ echo '执行假区间';}echo "<br />"; //检查未声明的变量$p是否为空,为空就执行真区间if(is_null($p)) { echo '执行真区间';}else{ echo '执行假区间';}echo "<br />"; //字符串类型的数值,检查执行的真还是假$str = '18.8';if(is_numeric($str)) { echo '执行真区间';}else{ echo '执行假区间';}echo "<br />"; //把sca的值换为整数 浮点 布尔和字符串试试$sca = true;if(is_scalar($sca)) { echo '执行真区间';}else{ echo '执行假区间';}echo "<br />"; //换成echo,is_int试试,为什么echo执行假区间呢?if(is_callable('var_dump')) { echo '执行真区间';}else{ echo '执行假区间';}echo "<br />";?> 输出:执行真区间执行真区间执行真区间执行真区间执行真区间<?php//我们定义一个泡到美女的变量($pao)为true,意思为泡到了$pao =fales;if($pao){ echo '林志玲,我爱死你了'; echo '我愿意去死';}else{ echo '照骗,爱会消失的'; echo '我不愿意去死';}?>这里只是介绍有if...else...等流程控制语句,详细的在第三章
类似
C++的运算方法,少部分类似js的
算数运算符,就是小学所学过的大多数知识
| 序号 | 符号信息 | 说明 | 举例说明 |
|---|---|---|---|
| 1 | + | 表示相加符号 | $x + $y |
| 2 | - | 表示相减符号 | $x - $y |
| 3 | * | 表示相乘符号 | $x * $y |
| 4 | / | 表示相除符号 | $x / $y |
| 5 | % | 表示取余或取模符号 | $x % $y |
<?php$x=5;$y=6;//5+6为11echo $x+$y;?>| 序号 | 符号信息 | 说明 |
|---|---|---|
| 1 | $x++ | 表示先赋值后累加运算 |
| 2 | $x-- | 表示先赋值后求差运算 |
| 3 | ++$x | 表示先累加运算后赋值 |
| 4 | --$x | 表示先求差运算后赋值 |
<?php$x=5;//先赋值后做加法运算,即将$x的值赋值为$y.$x的值为5,所以将$x的值赋值为$y.$y也是5$y=$x++;echo $y;//$x的结果输出为6,因为赋值给$y后,$x自己又把自己进行了+1操作。所以,$x结果为6echo $x;?>| 序号 | 符号信息 | 说明 |
|---|---|---|
| 1 | > | 表示大于符号 |
| 2 | < | 表示小于符号 |
| 3 | >= | 表示大于等于符号 |
| 4 | <= | 表示小于等于符号 |
| 5 | == | 表示等于符号 |
| 6 | != | 表示不等于符号 |
| 7 | === | 表示全等(判断类型等于) |
| 8 | !== | 表示不全等(判断类型不等于) |
<?php$x=5;$y=6;//因为5大于6不成立,所以为错的,即为false执行了假区间if(!$x > $y){ echo '变量x大于变量y 成立';}else{ echo '变量x大于变量y 不成立';}?>| 序号 | 符号信息 | 说明 | 举例说明 |
|---|---|---|---|
| 1 | 逻辑与(并且关系) | $x 和 $y 都为真则返回为真 |
$x and $y |
| 2 | 逻辑或(或者关系) | $x 和 $y 均为 false 为真,其它情况全为真 |
$x or $y |
| 3 | 逻辑非 | 取反,即 true 变为 false,false 变为 true |
!$x |
| 4 | 逻辑异或 | 相同取 false,相异为 true |
$x xor $y |
<?php$x=true;$y=false;//逻辑与(并且),要求两个都为true才能执行真区间,所以代码中执行假区间if($x && $y) { echo '执行了真区间';}else{ echo '执行了假区间';}?>| 序号 | 符号信息 | 说明 | 举例说明 |
|---|---|---|---|
| 1 | 按位与 And | 将把 $a 和 $b 中都为 1 的位设为 1 |
$a & $b |
| 2 | 按位或 Or | 将把 $a 和 $b 中任何一个为 1 的位设为 1 |
$a |
| 3 | 按位异或 Xor | 将把 $a 和 $b 中一个为 1 另一个为 0 的位设置为 1 |
$a ^ $b |
| 4 | 按位取反 Not | 将把 $a 中为 0 的位设为 1,反之亦然 |
~$a |
| 5 | 左移 | 将把 $a 中的位向左移 $b 次(每一次移动都表示乘以 2) |
$a << $b |
| 6 | 右移 | 将把 $a 中的位向右移 $b 次(每一次移动都表示除以 2) |
$a >> $b |
<?php//$x二进制为:$x=5;//$y二进制为:$y=8;//结果为13echo $x ^ $y;?>三元运算符,相当于是 if…else 结构,不过三元运算符的写法更加简洁,语法格式如下:
| 序号 | 符号信息 | 说明 |
|---|---|---|
| 1 | $x ? 真代码段 : 假代码段 | 判断是否为真假?真情况:假情况 |
| 2 | ` (反引号) | 反引号中间插入代码,执行系统命令,等价于 shell_exec 函数 | | | |
| 3 | @ | 表示抑制错误,把这一行的错误不让它显示出来了,效率低不建议用 |
| 4 | => | 数组下标访问符 |
| 5 | -> | 对象访问符 |
| 6 | instanceof | 判断某个对象是否来自某个类,如果是的返回 true,如果不是返回 false |
<?php$x=true;$x?$y=5:$y=6;//输出5echo $y;?> <?phpecho '<pre>';echo `ipconfig`;echo '</pre>';?>基本和
C++一样,就elseif中间没有空格这点不一样
注意:和C++不同的是,elseif中间没有空格
<?phpIf(判断语句1){ 执行语句体1}elseif(判断语句2){ 执行语句体2} elseif(判断语句n){ 执行语句体n}else{ 最后的else语句可选}<?phpif(判断1){ if(判断2){ 代码段1;}else{ 代码段2;}}else{ if(判断3){ 代码段3;}else{ 代码段4;}}?><?phpswitch(变量){ //字符串,整形 case 具体值1: 执行代码1; break; case 具体值2: 执行代码2; break; case 具体值3: 执行代码3; break; defult:}?>上面的 break 是可选的,上面的 default 也是可选的,不要在 case 后面写成分号,后面是冒号.不要在 case 后面写判断区间,如($foo >20 或者 $foo == 30)
Switch 里面的变量最好是整形 字符串 因为布尔判断更适合 if…else.
<?php//定义需要往返的次数,老外喜欢从0开始计数,所以系统也是从0开始$count=0;//while后面接布尔值判断,为真执行,为假停止//$count小于100的时候执行,也就是$count为0至99的时候执行.//如果$count不小于100了,循环停止执行后续的代码 //循环开始处while($count < 100){ echo "这是王总第 $count 次出差 <br />"; //每次执行让$count+1,这样的话,就不会产生$count永远小于100的情况了 $count++;}//循环结束?>对比说明 do…while 与 while 区别:
do{ //代码框}while(判断)for(表达式1;表达式2;表达式3) 需要执行的代码段;}例:
<?phpfor($i=1;$i<=10;$i++) echo ‘分手后第’.$i.’年, 我全都忘了你的样子<br />’;}?> <?phpgoto wan;echo '天王盖地虎';wan:echo '小鸡炖蘑菇';?>例:
<?phpfor ($i=0;$i<100;$i++){ echo '第'.$i.'每周往返北京大连<br />'; if($i == 17){ goto end; }}end:echo '集团公司要求停止此项';?>类似
js的语法
Function 函数名(参数名1=[值1], 参数名2=[值2] , 参数名n=[值n]){ 函数中的功能体 [return 返回值]}例:
<?phpfunction php_cn(){ echo "好好学习";}php_cn();php_cn();?>函数备注说明:
函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位.
函数名与变量命名规则一样,但是不同的是,函数名不区分大小写
函数体的参数若是定义了,未传参,代码会报错.
函数后的参数如果有默认值,参数可以不填,代码也不会报错
函数后的参数可以写多个
函数后如果有默认值和无默认值的参数,通常把无默认值的参数写在最前面
函数体的变量与函数体外的变量没有关系
函数体中若有 return,return 后的代码不执行.
函数执行完后,可把函数体内的值,带到函数体外
函数的执行没有顺序关系,可以在定义外之前的位置调用
例:
<html> <head> <title>网站页面信息</title> </head> <body> <!-- 先用POST来做实验,以后可以改为get --> <form action="glob.php" method="post"> <input type="text" name="info" /> <input type="submit" name="提交" /> </form> </body></html>//文件名“glob.php”<?phpfunction demo() { echo $_POST['info'];}demo();?>在实际开发中,常常需要把程序中的共用代码放到一个文件中,使用这些代码的文件只需要包含这个文件即可.这种方法有助于提高代码的重用性,给代码的编写与维护带来很大的便利.在 PHP 中,有以下四种方法包含一个文件:
| 序号 | 函数信息 | 说明 | 包含失败 |
|---|---|---|---|
| 1 | include | 文件继续向下执行,通常用于动态包含 | 返回一条警告 |
| 2 | require | 代码就不会继续向下执行,通常包含极为重要的文件,这个代码别想执行 | 返回一个致命错误 |
| 3 | include_once | 除了原有include的功能外,它还会做once检测,如果文件曾经被包含过,不在包含 | 返回一条警告 |
| 4 | require_once | 除了原功能以外,会做一次once检测,防止文件反复被包含 | 返回一个致命错误 |
例:
//文件名“functions-test-02”<?phpfunction demo(){ echo 'aaaa';}function test(){ echo 'bbbb';}?>//文件名“user.php”<?phpinclude "function-test-02.php";//可以直接调用demo();test();?>在 functions.php 的同级目录下,在创建一个 user.php 文件把 functions.php 文件包含进来.
这样函数信息就可以专门放在 functions.php 里面,哪需要用到这些函数的时候,就从哪包含进来.
简单来说,这个include就相当于C++中的引入自创的头文件
以下是自带的函数
| 序号 | 函数信息 | 说明 | 实例 |
|---|---|---|---|
| 1 | abs() | 求绝对值 | $abs = abs(-42); //42 |
| 2 | ceil() | 进一法取整 | echo ceil(9.999); //10 |
| 3 | floor() | 舍去法取整 | echo floor(9.999); //9 |
| 4 | fmod() | 浮点数取余 | $x=5.7; $y=1.3; $r=fmod($x,$y); //$r=0.5 |
| 5 | pow() | 返回数的n次方 | echo pow(-1,20); //1 |
| 6 | round() | 浮点数四舍五入 | echo round(195583.2); //196 |
| 7 | sqrt() | 求平方根 | echo sqrt(9); //3 |
| 8 | max() | 求最大值 | echo max(1,3,5,6,7); //7 |
| 9 | min() | 求最小值 | echo min(1,3,5,6,7); //1 |
| 10 | mt_rand() | 更好的随机数 | echo mt_rand(1,100); |
| 11 | rand() | 随机数 | echo rand(); |
| 12 | pi() | 获取圆周率值 | echo pi(); //3.1415926535898 |
| 序号 | 函数信息 | 说明 | 实例 |
|---|---|---|---|
| 1 | trim() | 删除字符串两端的空格或其他预定义字符 | echo trim("\r\nHello World!\r\n"); |
| 2 | rtrim() | 删除字符串右边的空格或其他预定义字符 | echo rtrim("Hello World!\n\n"); |
| 3 | chop() | rtrim()的别名 | 同上 |
| 4 | ltrim() | 删除字符串左边的空格或其他预定义字符 | echo ltrim("\r\nHello World!"); |
| 5 | dirname() | 返回路径中的目录部分 | echo dirname("c:/testweb/home.php"); |
| 6 | str_pad() | 把字符串填充为指定的长度 | echo str_pad("Hello World",20,"."); |
| 7 | str_repeat() | 重复使用指定字符串 | echo str_repeat(".",13); |
| 8 | str_split() | 把字符串分割到数组中 | print_r(str_split("Hello")); |
| 9 | strrev() | 反转字符串 | echo strrev("Hello World!"); |
| 10 | wordwrap() | 按照指定长度对字符串进行折行处理 | echo wordwrap($str,15); |
| 11 | str_shuffle() | 随机地打乱字符串中所有字符 | echo str_shuffle("Hello World"); |
| 12 | parse_str() | 将字符串解析成变量 | parse_str('id=23&name=John%20Adams', $myArray); |
| 13 | number_format() | 通过千位分组来格式化数字 | echo number_format('1000000'); |
| 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 实体 | echo htmlentities("John & 'Adams'", ENT_COMPAT); |
| 19 | htmlspecialchars() | 预定义字符转 html 编码 | - |
| 20 | nl2br() | \n 转为 <br> |
- |
| 21 | strip_tags() | 去掉 HTML、XML 以及 PHP 的标签 | echo strip_tags("<b>Hello</b> world!"); |
| 22 | addcslashes() | 在指定的字符前添加反斜线转义 | echo addcslashes('Hello, my name is John Adams.','m'); |
| 23 | stripslashes() | 删除由 addcslashes() 添加的反斜线 | echo stripslashes('Hello, \my na\me is Kai Ji\n.'); |
| 24 | addslashes() | 指定预定义字符前添加反斜线 | echo addslashes("Who's John Adams?"); |
| 25 | quotemeta() | 在字符串中某些预定义的字符前添加反斜线 | $str = "Hello world. (can you hear me?)"; echo quotemeta($str); |
| 26 | chr() | 从指定的 ASCII 值返回字符 | echo chr(052); |
| 27 | ord() | 返回字符第一个字符的 ASCII 值 | echo ord('hello'); |
| 28 | strcasecmp() | 不区分大小写比较两个字符串 | echo strcasecmp("Hello world!", "HELLO WORLD!"); |
| 29 | strcmp() | 区分大小写比较两个字符串 | |
| 30 | strncmp() | 比较字符串前 n 个字符,区分大小写 | |
| 31 | strncasecmp() | 比较字符串前 n 个字符,不区分大小写 | int strncasecmp(string $str1, string $str2, int $len) |
| 32 | strnatcmp() | 自然顺序法比较字符串长度,区分大小写 | int strnatcmp(string $str1, string $str2) |
| 33 | strnatcasecmp() | 自然顺序法比较字符串长度,不区分大小写 | int strnatcasecmp(string $str1, string $str2) |
| 34 | chunk_split() | 将字符串分成小段 | str chunk_split($body, int $len, $end); |
| 35 | strtok() | 标记分割字符串 | str strtok($str, $token); |
| 36 | explode() | 使用一个字符串为标志分割另一个字符串 | array explode(str $sep, str $str[, int $limit]); |
| 37 | implode() | 同 join,将数组值用预设字符连接成字符串 | string implode(string $glue, array $pieces); |
| 38 | substr() | 截取字符串 | string substr(string $string, int $start [, int $length ]); |
| 39 | str_replace() | 字符串替换操作,区分大小写 | mixed str_replace(mixed $search, mixed $replace, mixed $subject[, int &$num]); |
| 40 | str_ireplace() | 字符串替换操作,不区分大小写 | mixed str_ireplace(mixed $search, mixed $replace, mixed $subject[, int &$count]); |
| 41 | substr_count() | 统计一个字符串在另一个字符串中出现次数 | int substr_count(string $haystack, string $needle [, int $offset = 0 [, int $length ]]); |
| 42 | substr_replace() | 替换字符串中某串为另一个字符串 | mixed substr_replace(mixed $string, string $replacement, int $start [, int $length ]); |
| 43 | similar_text() | 返回两个字符串相同字符的数量 | int similar_text(str $str1, str $str2) |
| 44 | strchr() (同 strstr) | 返回从某字符开始到结束的字符串 | string strstr(string $str, string $needle [, bool $before_needle]) |
| 45 | strrchr() | 返回从最后一次出现位置到结束的字符串 | string strrchr(string $haystack, mixed $needle) |
| 46 | stristr() | 同 strstr,不区分大小写 | string stristr(string $haystack, mixed $needle [, bool $before_needle = false]) |
| 47 | strpos() | 查找字符串首次出现的位置 | int strpos(string $haystack, mixed $needle [, int $offset = 0]) |
| 48 | stripos() | 查找首次出现的位置,不区分大小写 | int stripos(string $haystack, string $needle [, int $offset]) |
| 49 | strrpos() | 查找最后出现的位置 | int strrpos(string $haystack, string $needle [, int $offset = 0]) |
| 50 | strripos() | 查找最后出现的位置,不区分大小写 | int strripos(string $haystack, string $needle [, int $offset]) |
| 51 | strspn() | 返回字符串中首次符合 mask 的子字符串长度 | int strspn(string $str1, string $str2 [, int $start [, int $length]]) |
| 52 | strcspn() | 返回字符串中不符合 mask 的子字符串长度 | int strcspn(string $str1, string $str2 [, int $start [, int $length]]) |
| 53 | str_word_count() | 统计字符串包含的单词数 | mixed str_word_count(str $str[,]) |
| 54 | strlen() | 统计字符串长度(字节) | int strlen(str $str) |
| 55 | count_chars() | 统计字符串中所有字母的出现次数 | mixed count_chars(string $string [, int $mode]) |
| 56 | md5() | 计算 MD5 摘要 | $str = "Hello"; echo md5($str); |
| 57 | mb_substr() | 获取子字符串的部分(多字节) | string mb_substr(string $str, int $start [, int $length = NULL [, string $encoding]]) |
| 58 | mb_strlen() | 获取字符串的长度(多字节) | mixed mb_strlen(string $str [, string $encoding]) |
| 59 | iconv() | 将字符串转换为指定编码 | string iconv(string $in_charset, string $out_charset, string $str) |
| 60 | iconv_substr() | 截取子字符串的部分(iconv) | string iconv_substr(string $str, int $start [, int $length [, string $charset]]) |
| 67 | iconv_get_encoding() | 获取 iconv 扩展的内部配置变量 | mixed iconv_get_encoding([string $type]) |
| 68 | mb_substr_count() | 统计子字符串出现的次数(多字节) | int mb_substr_count(string $haystack, string $needle [, string $encoding]) |
| 61 | mb_check_encoding() | 检查字符串是否有效编码 | bool mb_check_encoding([string $str [, string $encoding]]) |
| 62 | mb_strpos() | 查找字符串在另一个字符串中最后出现的位置(多字节) | mixed mb_strpos(string $str, string $needle [, int $offset]) |
| 63 | mb_split() | 使用正则表达式分割多字节字符串 | array mb_split(string $pattern, string $string [, int $limit]) |
| 64 | parse_url() | 解释 URL 成为一个数组 | mixed parse_url(string $url [, int $component]) |
多字节字符处理:
mb_*和iconv_*函数支持多字节字符(如中文)。中文编码:
GBK:双字节,一个汉字占用 2 字节。
UTF-8:三字节,一个汉字占用 3 字节。
<?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['minutes']."\n";echo "这是一分钟的第几秒 :".$mytime['seconds']."\n";echo "星期名称 :".$mytime['weekday']."\n";echo "月份名称 :".$mytime['month']."\n";echo "时间戳 :".$mytime[0]."\n";?>这里的数组和
js的一样
数组的英文是 array,可以存入多个不同类型的数据,php 的数组是一个复合数据类型。
例 1:
<?php$shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');echo '<pre>';var_dump($shu);echo '</pre>';?>//在上例中,我们发现我们存入了:整型、浮点、布尔、字符串//注:上例中echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰。//可以用var_dump()打印出来显示看一下效果://索引数组的下标必须要从0开始吗?//答:这个问题其实不然,索引数组并不一定要从0开始。//那如何能够不从0开始呢?//答:需要用到大家在上面学的一小块知识哟。就是键值对应符。我们来动手写。例 2:
<?php$kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP中文网' , '去PHP中文网学PHP', 19 => '苹果和梨子我都爱' , '橘子我最爱');//打印显示$keleecho '<pre>';var_dump($kele);echo '</pre>';?> 输出:D:/elric/Programming/study/PHP/ceshi.php:5:array (size=6) 0 => string '只有不断努力才能博得未来' (length=36) 10 => string 'NoAlike' (length=7) 11 => string 'PHP中文网' (length=12) 12 => string '去PHP中文网学PHP' (length=21) 19 => string '苹果和梨子我都爱' (length=24) 20 => string '橘子我最爱' (length=15)<?php//声明一个数组,值为1到10$num = array(1,2,3,4,5,6,7,8,9,10); //按照索引数组的特点,下标从0开始。所以1的下标为0,10的下标为9echo $num[0].'<br />';echo $num[9].'<br />'; //我们可以得到数组中元素的总个数,为10echo count($num) .'<br />'; //遍历这个索引数组的话,我们就可以定义一个变量为$i//$i 的值为0,从0开始//可以设定一个循环条件为:$i 在下标的(9)最大值之内循环for($i = 0 ; $i < count($num) ; $i++){ echo $num[$i].'<br />';}?> //通过上面的例子,我们就把数组进行了循环。因为下标是从0开始的,定义i=0 。 每次循环的时候让i=0。每次循环的时候让i=0。每次循环的时候让i加1,但是必须要小于10,因为数组下标的最大值为9这些函数,也是面试中基础面试中最爱问到的问题。
| 序号 | 函数信息 | 说明 |
|---|---|---|
| 1 | array_shift() | 弹出数组中的第一个元素 |
| 2 | array_unshift() | 在数组的开始处压入元素 |
| 3 | array_push() | 向数组的末尾处压入元素 |
| 4 | array_pop() | 弹出数组末尾的最后一个元素 |
| 5 | current() | 读出指针当前位置的值 |
| 6 | key() | 读出指针当前位置的键 |
| 7 | next() | 指针向下移 |
| 8 | prev() | 指针向上移 |
| 9 | reset() | 指针到开始处 |
| 10 | end() | 指针到结束处 |
| 11 | array_combine() | 生成一个数组,用一个数组的值作为键名,另一个数组值作为值 |
| 12 | range() | 创建并返回一个包含指定范围的元素的数组 |
| 13 | compact() | 创建一个由参数所带变量组成的数组 |
| 14 | array_fill() | 用给定的值生成数组 |
| 15 | array_chunk() | 把一个数组分割为新的数组块 |
| 16 | array_merge() | 把两个或多个数组合并为一个数组 |
| 17 | array_slice() | 在数组中根据条件取出一段值,并返回 |
| 18 | array_diff() | 返回两个数组的差集数组 |
| 19 | array_search() | 在数组中搜索给定的值,如果成功则返回相应的键名 |
| 20 | array_splice() | 把数组中的一部分去掉并用其它值取代 |
| 21 | array_sum() | 计算数组中所有值的和 |
| 22 | in_array() | 检查数组中是否存在某个值 |
| 23 | array_key_exists() | 检查给定的键名或索引是否存在于数组中 |
| 24 | shuffle() | 将数组打乱,保留键值 |
| 25 | count() | 计算数组中元素数目或对象中的属性个数 |
| 26 | array_flip() | 返回一个键值反转后的数组 |
| 27 | array_keys() | 返回数组中所有的键,组成一个数组 |
| 28 | array_values() | 返回数组中所有值,组成一个数组 |
| 29 | array_reverse() | 返回一个元素顺序相反的数组 |
| 30 | array_count_values() | 统计数组中所有值的出现的次数 |
| 31 | array_rand() | 从数组中随机抽取一个或多个元素,注意是键名 |
| 32 | array_unique() | 删除重复值,返回剩余数组 |
| 33 | sort() | 按升序对给定数组的值排序,不保留键名 |
| 34 | rsort() | 对数组进行降序排序,不保留键名 |
| 35 | asort() | 对数组排序,保持索引关系 |
| 36 | arsort() | 对数组进行降序排序,保持索引关系 |
| 37 | ksort() | 按键名对数组排序 |
| 38 | krsort() | 将数组按照键名进行降序排序 |
| 39 | natsort() | 用自然顺序算法对数组中的元素排序 |
| 40 | natcasesort() | 自然排序,不区分大小写 |
| 41 | array_filter() | 去掉数组中的空元素或者预定元素 |
| 42 | extract() | 将键变为变量名,将值变为变量值 |
例子:弹出数组中的第一个元素
<?php$mingren = array("test", "test1", "test2", "test3");$dc = array_shift($mingren);echo $dc .'<br />';print_r($mingren);?>正则表达是会在开发中经常看到,它主要用在以下一些地方:匹配邮箱、手机号码、验证码、替换敏感的关键词。例如:涉及政治和骂人的话
PHP 的正则表达示定界符的规定如下:定界符,不能用 a-zA-Z0-9/ 其他的都可以用。必须成对出现,有开始就有结束。
| 字符 | 功能 |
|---|---|
| . | 匹配任意1个字符(除了\n) |
| [] | 匹配[]中列举的字符 |
| \d | 匹配数字,即0-9 |
| \D | 匹配非数字,即不是数字 |
| \s | 匹配空白,即空格、tab键 |
| \S | 匹配非空白 |
| \w | 匹配单词字符,即a-z、A-Z、0-9、_ |
| \W | 匹配非单词字符 |
| 字符 | 功能 |
|---|---|
| ^ | 匹配字符串开头 |
| $ | 匹配字符串结尾 |
| \b | 匹配一个单词的边界 |
| \B | 匹配非单词边界 |
| 字符 | 功能 |
|---|---|
| * | 匹配前一个字符出现0次或者无限次,即可有可无 |
| + | 匹配前一个字符出现1次或者无限次,即至少有1次 |
| ? | 匹配前一个字符出现1次或者0次,即要么有1次,要么没有 |
| {m} | 匹配前一个字符出现m次 |
| {m,} | 匹配前一个字符至少出现m次 |
| {m,n} | 匹配前一个字符出现在m到n次 |
| 字符 | 功能 |
|---|---|
| |
匹配左右任意一个表达式 |
(ab) |
将括号中字符作为一个分组 |
\num |
引用分组num匹配到的字符串 |
(?P<name>) |
分组起别名 |
(?P=name) |
引用别名为name分组匹配到的字符串 |
举例说明正则符号的定义方式:
例子 说明/中间写正则/ 正确$中间写正则$ 正确%中间写正则% 正确^中间写正则^ 正确@中间写正则@ 正确(中间写正则) 错误 /\//A中间写正则A 错误注:\ 是转义字符,如果在以后正则表达示里面需要匹配/,如下:
/ / /这个时候真要匹配/ 的时候,需要把定界符里面的/ 用转义字符转义一下,写成下面的例子:
/ \/ /如果你觉得麻烦,遇到这种需要转义的字符的时候可以把两个正斜线(/ /)定界,改为其他的定界符(# #)。
正则表达式格式:preg_match ( string $正则 , string $字符串 , array&$结果] )
功能:根据正则变量 ,匹配字符串变量。如果存在则返回匹配的个数,把匹配到的结果放到$结果变量里。如果没有匹配到结果返回 0。
<?php$zz = '/wq/';$string = 'ssssswqaaaaaa';if(preg_match($zz, $string, $matches)){ echo '匹配到了,结果为:'; var_dump($matches);}else{ echo '没有匹配到';}?>| 序号 | 函数信息 | 说明 |
|---|---|---|
| 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() | 通过一个正则表达式分隔字符串 |
有点像
Linux命令
我们会点鼠标右键删除文件、会 control(ctrl)+c(或右键)复制、粘贴文件,会新建一些文件,检测这个文件是不是只读文件。在电脑里面进行的这些操作,在代码里面如果能操作就好了。因为,如果有了这些操作。我们能做很多事情了:可不可以写入修改配置文件、是不是可以做 PHP 安装的时候检测文件的权限、是不是可以做生成 Html 文件等等很多不同的操作,总之其他太多太多的地方用到了文件操作。
readfile读取文件函数readfile ( string: $文件名)//功能:传入一个文件路径,输出一个文件。例:
<?php //linux类的读了方式 readfile("/home/paul/test.txt"); //windows类的读取方式 readfile("c://oldboy/oldboy/boot.ini");?>//注意:上面的代码中windows的斜线是\斜线,可能会转义掉一些字符。因此,我们写的时候最好写上两个斜线。(上面没改)file_get_contents打开文件函数<?php $filename = 'NoAlike.txt'; $filestring = file_get_contents($filename); echo $filestring;?>file_get_contents打开文件的方式简单、粗暴。
fopen、fread、fclose操作读取文件resource fopen ( string $文件名, string 模式)string fread ( resource $操作资源, int 读取长度)bool fclose ( resource $操作资源 )fopen 的模式有下面几个,我们来讲一下 fopen 的模式:
| 序号 | 模式 | 说明 |
|---|---|---|
| 1 | r | 只读方式打开,将文件指针指向文件头。 |
| 2 | r+ | 读写方式打开,将文件指针指向文件头。 |
| 3 | w | 写入方式打开,将文件指针指向文件头并将文件大小截为0。如果文件不存在则尝试创建。 |
| 4 | w+ | 读写方式打开,将文件指针指向文件头并将文件大小截为0。如果文件不存在则尝试创建。 |
| 5 | a | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建。 |
| 6 | a+ | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建。 |
| 7 | x | 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建。 |
| 8 | x+ | 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建。 |
<?php //你可以创建一个NoAlike.txt,以只读模式打开 $fp = fopen('NoAlike.txt', "r"); //var_dump()操作一下$fp看看效果,输出的是不是只有类型提示的是resource var_dump($fp);?>file_put_contents写入文件file_put_contents ( string $文件路径, string $写入数据)//功能:向指定的文件当中写入一个字符串,如果文件不存在则创建文件。返回的是写入的字节长度例:
<?php $data = "在PHP中文网学好PHP,妹子票子不再话下!"; $numbytes = file_put_contents('test.txt', $data); if($numbytes){ echo '写入成功,我们读取看看结果试试:'; echo file_get_contents('test.txt'); }else{ echo '写入失败或者没有权限,注意检查'; }?>fwrite配合fopen进行写入操作<?php $filename = 'test.txt'; $fp= fopen($filename, "w"); $len = fwrite($fp, '我是一只来自北方的狼,却在南方冻成了狗'); //关闭这个文件 fclose($fp); print $len .'字节被写入了\n';?>/*代码说明:· 不论有没有新建都会打开文件重新写入· 原有的文件内容会被覆盖掉· 文件不存在会创建*/有以下几种模式:
| 序号 | 模式 | 说明 |
|---|---|---|
| 1 | r | 只能读不能使用 fwrite 写 |
| 2 | r+ | 可操作读、写 |
| 3 | w | 只可以写功能 |
| 4 | w+ | 即可读又可以写 |
| 5 | x | 每次写入会干掉原有文件的内容,文件不存在都会创建 |
| 6 | a | 每次写入都会向文件的尾部追加内容 |
注:a+ 是增强的追加功能。可以读取时也可以使用。
我们之前创建的文件都是永久文件,而创建临时文件在我们平时的项目开发中也非常有用,创建临时文件的好处:文件操作完成后即删除,不需要去维护这个文件的删除状态。
tmp 是临时文件的意思
<?php //创建了一个临时文件 $handle = tmpfile(); //向里面写入了数据 $numbytes = fwrite($handle, '写入临时文件'); //关闭临时文件,文件即被删除 fclose($handle); echo '向临时文件中写入了'.$numbytes . '个字节';?>rename($旧名,$新名);//功能:这个函数返回一个bool值,将旧的名字改为新的名字。例:
<?php //旧文件名 $filename = 'test.txt'; //新文件名 $filename2 = $filename . '.old'; //复制文件 rename($filename, $filename2);?>copy(源文件,目标文件)//功能:将指定路径的源文件,复制一份到目标文件的位置。例:
<?php //旧文件名 $filename = 'copy.txt'; //新文件名 $filename2 = $filename . '_backup'; //修改名字。 copy($filename, $filename2);?> //说明:会通过上面的例子,发现多出来了一个文件。这个删除是直接删除,在回收站看不到这个文件
unlink(指定路径的文件)例:
<?php $filename = 'test.txt'; if (unlink($filename)) { echo "删除文件成功 $filename!\n"; } else { echo "删除 $filename 失败!\n"; }?>假设安装界面的网址是:install.php,安装的锁文件是 install.lock。我们就可以检测 install.lock 文件是否存在。
<?phpif(file_exists('install.lock')){ echo '已安装,请不要再次进行安装'; exit;}?>常用文件属性函数:
| 序号 | 函数信息 | 说明 |
|---|---|---|
| 1 | file_exists() | 文件是否存在 |
| 2 | is_readable() | 文件是否可读 |
| 3 | is_writeable() | 文件是否可写 |
| 4 | is_executable() | 文件是否可执行 |
| 5 | is_file() | 是否是文件 |
| 6 | is_dir() | 是否是目录 |
| 7 | clearstatcache() | 清除文件的状态缓存 |
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); }}?>chmod主要是修改文件的的权限
<?php//修改linux系统/var/wwwroot/某文件权限为755chmod("/var/wwwroot/index.html", 755);chmod("/var/wwwroot/index.html", "u+rwx,go+rx");chmod("/somedir/somefile", 0755);?>我们经常会遇到处理文件路径的情况。例如:
文件后缀需要取出来
路径需要取出名字不取目录
只需要取出路径名中的目录路径
或者把网址中的各个部份进行解析取得独立值
甚至是自己组成一个 url 出来
很多地方都需要用路径处理类的函数。把常用的路径处理函数为大家做了标注,对着这个路径处理函数进行处理即可:
| 序号 | 函数信息 | 说明 |
|---|---|---|
| 1 | pathinfo() | 返回文件的各个组成部分 |
| 2 | basename() | 返回文件名 |
| 3 | dirname() | 文件目录部分 |
| 4 | parse_url() | 网址拆解成各部分组成 |
| 5 | http_build_query() | 生成 url 中的 query 字符串 |
| 6 | http_build_url() | 生成一个 url |
例:
<?php$path_parts = pathinfo('d:/www/index.inc.php');echo '文件目录名:'.$path_parts['dirname']."<br />";echo '文件全名:'.$path_parts['basename']."<br />";echo '文件扩展名:'.$path_parts['extension']."<br />";echo '不包含扩展的文件名:'.$path_parts['filename']."<br />";?>下面要使用的文件结构:
index.php 展示输入框和留言内容write.php 向message.txt写入数据message.txt 存入聊天内容编写 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>看了刚刚的展示内容,我们知道文件存储时:
1、段与段之间进行了分割
2、内容与用户之前用一个特殊的符号进行了分割
编写 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');?>注释:
分享你的想法,与大家交流讨论
Twikoo 加载失败
Twikoo 脚本加载失败