PHP语言基础知识
变量以$
符号开始,后面跟着变量的名称,变量名必须以字母或者下划线字符开始
变量名只能包括字母、数字以及下划线(A-z、0-9和_)变量名不能包括空格
变量名是区分大小写的($y 和 $Y
是两个不同的变量)
局部和全局作用域global
<?php
$x=5;
function myTest()
{
global $x; // 访问全局变量
$y=10; // 局部变量
echo "<p>测试函数内变量</p>";
echo "变量x为: $x";
echo "<br>";
echo "变量x为: $y";
}
myTest();
?>
Static作用域
当一个函数完成时,它的所用变量通常会被删除。然而,有时候您希望某个局部变量不要被删除。要做到这一点,请在第一次声明变量时使用 static 关键字
<?php
function myTest()
{
static $x = 0; // static关键字删除之后 所有结果都是 0
echo $x;
$x++;
echo PHP_EOL; // 换行符
}
myTest();
myTest();
myTest();
?>
带参函数
<?php
function myTest($x)
{
echo $x;
}
myTest(5);
?>
第二章 PHP代码基本语法
2.1 PHP函数知识介绍
<?php
phpinfo()
?>
1、phpinfo是一个函数(功能),这个函数会显示一个当前电脑(服务器)的详细的PHP信息。
2、电脑是一个很笨的东西,需要我们人为的告诉他,代码写完了。我们用分号(;)来告诉他代码写完了。因此只要写完一段代码,就需要在后面加分号。
3、而前后两行的回车空行,是为了让代码更加好看,避免叠在一起,看着不舒服。其实中间有多少个回车空行都没有关系的,保证好看就行了。PHP的语法解释器(PHP最核心部分)不会处理这些空行的。
代码编写注意事项:
1、PHP的代码信息全部要用半角的英文、很多人容易写成全角的英文/中文和符号造成PHP代码报错。
2、PHP代码的最后一行可以加也可不加分号。由于很多学习者特别是初学者经常犯一个毛病,写完一行代码不加分号,因此容易犯错,某些公司规定一行代码写完,就必须加分号。
3、我们在写文件test.php这个文件命名的时候,只要英文半角(a-z A-Z 0-9 _-)这些字符来命名文件,文件命名不要用中文,不要用特殊符号,不要中间加空格,严格区分大小。
2.2 PHP常量变量介绍
2.2.1 PHP变量知识:
<?php
$iphone7 = 5880;
$iphone7plus = 6088;
echo $iphone6 + $iphone7plus; //echo是在PHP里面最常用的一个输出、显示功能的命令
?>
$叫作美元符,英文单词:dollar。PHP的变量必须以美元符开始。说明搞PHP有”钱”途。
变量的几个特点介绍:
1、必须要以开 始 , 如变量x必须要写成x
2、变量的首字母不能以数字开始
3、变量的名字区分大小写
4、变量不要用特殊符号、中文,_不算特殊符号
5、变量命名要有意义(别写xxx,aaa,ccc)这种变量名
变量的分类情况说明:
可变变量,外部变量,环境变量
1、可变变量举例说明
<?php
// 服务器读取的 编码设置
header('Content-type:text/html;charset=utf-8');
//定义了一个变量叫作$shu 将$shu这个变量的值设为字符串的biao
$shu = 'biao';
//定义了一个变量叫作$biao 将他的值设置为鼠标
$biao = '鼠标';
//$$shu就是可变变量;在已声明的变量$shu前又加上了一个变量符
echo $$shu; // 鼠标
?>
2、外部变量举例说明
PHP的外部变量是PHP在使用过程中规定好的一些变量。这个变量的规定是这样定的。
<html>
<head>
</head>
<body>
<!-- 这一行method 对应的值改为post --->
<form action="req.php" method="post">
<input type="text" name="username"/>
<input type="password" name="pwd"/>
<input type="submit" name="提交"/>
</form>
</body>
</html>
PHP代码调用以上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 />';
?>
通过上面的实验我们知道了,通过$_POST这个外部变量,可以得到从表单输入的值。另外我们总结一些外部变量,要求知识点的学习级别:了解含义,默写这个单词的写法和作用。
序号 | 全局变量 | 变量解释说明 |
---|---|---|
1 | $_COOKIE | 得到会话控制中的cookie传值信息 |
2 | $_SESSION | 得到会话控制中的session传值信息 |
3 | $_FILES | 文件上传的结果 |
4 | $_GET | get传值的结果 |
5 | $_POST | post传值的结果 |
6 | $_REQUEST | 可以得到get的传值结果,也能得到post传值的结果 |
其它环境变量
<?php
echo $_SERVER["REQUEST_METHOD"]; // 请求当前PHP页面的方法
echo "<br/>";
echo $_SERVER["REQUEST_URI"]; // 请求当前PHP页面的URI
echo "<br/>";
echo $_SERVER["SERVER_SOFTWARE"]; // 用的是哪一种网站服务程序
echo "<br/>";
echo $_SERVER["REMOTE_ADDR"]; // 客户端的IP地址
echo "<br/>";
echo $_SERVER["SERVER_ADDR"]; // 当前服务器的IP地址
echo "<br/>";
echo $_SERVER["SERVER_NAME"]; // 服务器的主机名
echo "<br/>";
echo $_SERVER["SCRIPT_FILENAME"]; // 当前请求文件的路径信息
echo "<br/>";
echo $_SERVER["HTTP_USER_AGENT"]; // 当前访问的电脑和浏览器情况
echo "<br/>";
echo $_SERVER["HTTP_REFERER"]; // 上级来源(用户从哪个地址进入当前网页)
echo "<br/>";
echo $_SERVER["REQUEST_TIME"]; // 当前的访问时间信息
?>
2.2.2 PHP常量知识:
常量就是长久不变的值,常量在代码中的定义,以及书写方式如下所示:
define(常量名, 常量值)
1、常量名可以小写,但是通常大写
2、常量名使用时不加引号,但是声明时加上引号
3、在字符串中调用常量的时候,必须在引号外面
4、常量名建议只用字母和下划线
<?php
define('MY_NAME','PHP中文网');
echo MY_NAME;
//下面是错误的调用方式
echo '我的名字是MY_NAME';
//下面是正确的调用方式
echo '我的名字是'.MY_NAME;
?>
系统变量.
<?php
echo "当前行号".__LINE__."<br>";
echo "文件路径:" . __FILE__."<br>";
function test() {
echo "函数名:" . __FUNCTION__;
}
test(); // 输出:函数名:test
echo "<br>";
class MyClass {
public function showClass() {
echo "类名:" . __CLASS__;
}
public function myMethod() {
echo "方法名:" . __METHOD__;
}
}
$obj = new MyClass();
$obj->showClass(); // 输出:类名:MyClass
echo "<br>";
$obj->myMethod(); // 输出:方法名:MyClass::myMethod
echo "<br>";
echo "操作系统:" . PHP_OS; // 输出:操作系统:Linux(或 WINNT、Darwin 等)
echo "<br>";
echo "PHP版本:" . PHP_VERSION; // 输出:PHP版本:7.3.4
echo "<br>";
trait MyTrait {
public function showTrait() {
echo "Trait名:" . __TRAIT__;
}
}
class MyCl {
use MyTrait;
}
$obj = new MyCl();
$obj->showTrait(); // 输出:Trait名:MyTrait
echo "<br>";
echo "文件目录:" . __DIR__;
// 输出:文件目录:/var/www/project
?>
2.3 PHP注释信息介绍
1、对重点进行标注
2、时间长了容易忘记代码,方便快速回忆,以及方便查找信息
3、可以让其他人更容易看懂配置信息
4、还可以生成文档,代码写完相关的文档就写完了,提高工作效率
5、拥有注释、空行、回车之后的代码看起来更优美
6、注释可用来排错,不确定代码中哪一块写错了,可以将一大段注释,确定错误区域。
7、注释中的部分的内容,电脑不会执行它
单行注释
// 注释
多行注释
/*
多行注释
*/
多行注释举例演示:
<?php
/*
作者:Taichi
时间:2025-4-1
功能:这是一个多行注释例子
*/
?>
2.4 PHP数据类型介绍
boolean
布尔型integer
整数型float/double
浮点型string
字符型array
数组object
对象resource
资源类型 和null
空白
2.4.1 整形数据类型
八进制
<?php
//8进制的取值范围是0-7,即0、1、2、3、4、5、6、7
$bajinzhi=033145; // 使用 0 开头
echo $bajinzhi;
?>
10进制声明方式:
<?php
//为了方便大家记忆和前期学习,英文不好的朋友可用拼音来声明变量。
//声明变量整数,英文int
$int=1000;
$zhengshu=1000;
echo $int;
echo $zhengshu;
?>
十六进制
<?php
//16进制的取值范围是0-f,即0、1、2、3、4、5、6、7、8、9、a、b、c、d、e、f
//声明变量整数,英文int
$shiliujinzhi=0x6ff; // 使用 0x
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 |
2.4.2 布尔数据类型
布尔类型举例说明:
<?php
//声明一个变量(拼音)为布尔
$buer=true;
//声明一个变量(英文)
$bool=false;
?>
2.4.3 字符串数据类型
在PHP语言中声明字符串有三种方式:
1、用单引号声明
2、用双引号声明
3、用字界符声明
单引号声明
<?php
//声明字符串变量$zifu
$zifu='好好学习吧';
echo $zifu;
?>
双引号声明
<?php
//声明字符串变量$str
$str="我想好好学习";
echo $str;
?>
字界符声明
1、在变量后面的等号写三个小于号 <<<
2、然后在<<<后面写上字符(建议英文大写字符)
3、然后换行写上任意想写的字符
4、写完后,顶行。在行最开始处,再写上<<<后面的字符和分号。
<?php
$dingjie = <<<ABC
如果
非要在这个测试
前
面<br />
加上一段
<i>有趣的话</i>
我想说,<h1>努力学习不好么<h1>
ABC;
echo $dingjie
?>
那双引号和单引号有什么区别呢:
双引号解析变量,但是单引号不解析变量
在双引号里面插入变量,变量后面如果有英文或中文字符,会把这个字符和变量拼起来,视为一整个变量。一定要在变量后面接上特殊字符,例如空格等分开。
如果在双引号里面插变量的时候,后面不想有空格,可以拿大括号将变量包起来。
双引号解析转义字符,单引号不解析转义字符。但是单引号能解析\
单引号效率高于双引号,尽可能使用单引号
双引号和单引号可以互相嵌套,双引号中可以插入单引号,单引号当中插入变量,这个变量会被解析。
神奇的字符串拼接胶水——(.)点,用来拼接字符串。
一般将定界符声明字符串视为双引号一样的功能来看待。
2.4.4 浮点型数据类型
所谓浮点类型,可以理解为,我们数学里面的小数。声明方式分为两种:
1、普通声明方式
2、科学声明方式
普通声明浮点数:
<?php
//声明变量fudian的植为12121.3232
$fudian=12121.3232;
echo $fudian;
?>
科学声明浮点数:
<?php
//声明变量$f1的植为0.8873
$f1=0.8873;
var_dump($f1)
?>
var_dump()
函数用于输出变量的相关信息。显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。
2.4.5 PHP数据类型之查看和判断数据类型
查看数据类型:
1、gettype(传入一个变量)能获得变量的类型
2、var_dump(传入一个变量)输出变量类型和值
<?php
//声明一个变量88.8,可以自己多做几次实现换成其他类型看看$type输出是多少。
$float = 88.8;
$type = gettype($float); # 只有类型
echo $type;
echo '<br>';
//多换几个类型试试
$str = '你喜欢男人还是喜欢女人';
$type = var_dump($str); // 类型 + 内容
echo $type;
?>
判断数据类型方法:
使用is_*系列函数,is_types这一系列的函数,来进行判断某个数据属于哪种类型,如果是这个类型返回真,不是这个类型返回假。
<?php
// PHP 数据类型判断函数示例
// 1. 判断整数
$var1 = 42;
if (is_int($var1)) {
echo "变量 \$var1 是整数\n";
}
// 2. 判断布尔值
$var2 = true;
if (is_bool($var2)) {
echo "变量 \$var2 是布尔值\n";
}
// 3. 判断浮点数
$var3 = 3.14;
if (is_float($var3)) {
echo "变量 \$var3 是浮点数\n";
}
// 4. 判断字符串
$var4 = "Hello World";
if (is_string($var4)) {
echo "变量 \$var4 是字符串\n";
}
// 5. 判断数组
$var5 = array(1, 2, 3);
if (is_array($var5)) {
echo "变量 \$var5 是数组\n";
}
// 6. 判断对象
class Test {}
$var6 = new Test();
if (is_object($var6)) {
echo "变量 \$var6 是对象\n";
}
// 7. 判断null
$var7 = null;
if (is_null($var7)) {
echo "变量 \$var7 是null\n";
}
// 8. 判断资源
$var8 = fopen('php://temp', 'r');
if (is_resource($var8)) {
echo "变量 \$var8 是资源\n";
fclose($var8);
}
// 9. 判断标量
$var9 = "scalar";
if (is_scalar($var9)) {
echo "变量 \$var9 是标量\n";
}
// 10. 判断数值
$var10 = "123";
if (is_numeric($var10)) {
echo "变量 \$var10 是数值\n";
}
// 11. 判断可调用
$var11 = function() { return "I'm callable"; };
if (is_callable($var11)) {
echo "变量 \$var11 是可调用的\n";
}
?>
2.5 PHP流程控制语句
<?php
//我们定义一个泡到美女的变量($pao)为true,意思为泡到了
$pao =fales;
if($pao){
echo '林志玲,我爱死你了';
echo '我愿意去死';
}else{
echo '照骗,爱会消失的';
echo '我不愿意去死';
}
?>
2.6 PHP算数运算方法
序号 | 运算符 | 数学名称 | 功能说明 | 正确表达式示例 | 计算结果(假设 x=7 , y=3 ) |
---|---|---|---|---|---|
1 | + |
加号 | 两数相加 | x + y |
10 |
2 | - |
减号 | 两数相减 | x - y |
4 |
3 | * |
乘号 | 两数相乘 | x * y |
21 |
4 | / |
除号 | 两数相除(浮点数结果) | x / y |
2.333... |
5 | % |
取模(取余) | 返回除法后的余数(整数) | x % y |
1 |
2.6.1 PHP程序自加自减运算
序号 | 符号信息 | 说明 | 举例说明 |
---|---|---|---|
1 | $x++ |
先赋值后累加(后置递增) | $a = $x++; |
2 | $x-- |
先赋值后求差(后置递减) | $a = $x--; |
3 | ++$x |
先累加后赋值(前置递增) | $a = ++$x; |
4 | --$x |
先求差后赋值(前置递减) | $a = --$x; |
代码
<?php
// 示例1:后置递增 ($x++)
$x = 5;
$a = $x++; // 先赋值$a=5,然后$x变为6
echo "\$a = $a, \$x = $x"; // 输出: $a = 5, $x = 6
// 示例2:前置递增 (++$x)
$x = 5;
$a = ++$x; // 先$x变为6,然后赋值$a=6
echo "\$a = $a, \$x = $x"; // 输出: $a = 6, $x = 6
// 示例3:在表达式中使用
$x = 3;
$y = 2;
$result = $x * ++$y; // 先$y变为3,再计算3 * 3
echo $result; // 输出: 9
?>
2.6.2 PHP程序比较运算符号
序号 | 符号信息 | 说明 | 正确写法示例 | 典型应用场景 |
---|---|---|---|---|
1 | > |
大于比较 | a > b |
数值/字符ASCII值比较 |
2 | < |
小于比较 | a < b |
数值/字符ASCII值比较 |
3 | >= |
大于或等于 | a >= b |
边界条件判断 |
4 | <= |
小于或等于 | a <= b |
边界条件判断 |
5 | == |
值相等(松散比较) | a == b |
忽略类型的值比较 |
6 | != |
值不相等 | a != b |
值不等判断 |
7 | === |
全等(严格类型与值比较) | a === b |
类型和值必须完全相同 |
8 | !== |
不全等 | a !== b |
类型或值不同 |
==
会进行类型转换后比较(如5 == "5"
返回 true)===
要求类型和值都相同(如5 === "5"
返回 false)
ASCII比较原则
echo ('a' > 'A'); // 输出 true(小写a的ASCII码97 > 大写A的65)
2.6.3 PHP程序逻辑运算符号
序号 | 运算符类型 | 说明 | 符号表示 | 举例说明 |
---|---|---|---|---|
1 | 逻辑与 | 只有当 x 和 x和 x和y都为真时才返回真(并且关系) | $x && $y |
true && false → false |
2 | 逻辑或 | 只要 x 或 x或 x或y有一个为真就返回真(或者关系),仅当两者都为false时才返回false | `$x | |
3 | 逻辑非 | 对布尔值取反,true变false,false变true | !$x |
!true → false |
4 | 逻辑异或 | 当 x 和 x和 x和y的值不同时返回true,相同时返回false | $x xor $y |
true xor false → true |
短路求值特性
&&
:当第一个操作数为false时直接返回false,不计算第二个||
:当第一个操作数为true时直接返回true,不计算第二个
false && die(); // 不会执行die()
true || die(); // 不会执行die()
2.6.4 PHP程序位运算
序号 | 符号信息 | 说明 | 举例说明 |
---|---|---|---|
1 | & (按位与) |
将 a 和 b 中都为 1 的位设为 1 |
a & b |
2 | ` | ` (按位或) | 将 a 和 b 中任何一个为 1 的位设为 1 |
3 | ^ (按位异或) |
将 a 和 b 中一个为 1 另一个为 0 的位设为 1 |
a ^ b |
4 | ~ (按位取反) |
将 a 中所有位取反(0 变 1 ,1 变 0 ) |
~a |
5 | << (左移) |
将 a 的二进制位向左移动 b 位(低位补 0 ,相当于乘以 2 b 2^b 2b) |
a << b |
6 | >> (右移) |
将 a 的二进制位向右移动 b 位(高位补符号位,相当于除以 2 b 2^b 2b取整) |
a >> b |
代码:
<?php
// 定义变量(假设 a=5, b=3)
$a = 5; // 二进制: 0101
$b = 3; // 二进制: 0011
// 1. 按位与 (&)
$result_and = $a & $b; // 0101 & 0011 = 0001 (十进制 1)
echo "按位与: $a & $b = " . $result_and . "\n";
// 2. 按位或 (|)
$result_or = $a | $b; // 0101 | 0011 = 0111 (十进制 7)
echo "按位或: $a | $b = " . $result_or . "\n";
// 3. 按位异或 (^)
$result_xor = $a ^ $b; // 0101 ^ 0011 = 0110 (十进制 6)
echo "按位异或: $a ^ $b = " . $result_xor . "\n";
// 4. 按位取反 (~)
$result_not = ~$a; // ~0101 = 1010 (补码表示,十进制 -6)
echo "按位取反: ~$a = " . $result_not . "\n";
// 5. 左移 (<<)
$result_left = $a << 1; // 0101 << 1 = 1010 (十进制 10)
echo "左移: $a << 1 = " . $result_left . "\n";
// 6. 右移 (>>)
$result_right = $a >> 1; // 0101 >> 1 = 0010 (十进制 2)
echo "右移: $a >> 1 = " . $result_right . "\n";
?>
2.6.5 PHP三元运算符合其它运算符
序号 | 符号信息 | 说明 | 举例说明 |
---|---|---|---|
1 | $x ? 真代码段 : 假代码段 |
三元运算符:根据 $x 的真假执行对应代码段 |
$age = 20; echo $age >= 18 ? '成年' : '未成年'; // 输出"成年" |
2 | 反引号 ``` | 执行反引号内的系统命令,等价于 shell_exec() |
$output = ls -l; // 列出当前目录文件 |
3 | @ |
错误抑制符:隐藏当前行的错误信息(性能开销大,慎用) | @$file = file('nonexist.txt'); // 文件不存在时不报错 |
4 | => |
数组键值关联符:用于定义数组的键和值 | $arr = ['name' => 'Alice', 'age' => 25]; |
5 | -> |
对象成员访问符:访问对象的属性或方法 | $user->name = 'Bob'; $user->save(); |
6 | instanceof |
类型检查:判断对象是否属于某个类或接口 | if ($obj instanceof User) { echo '是User类实例'; } |
$score = 85;
$result = $score >= 60 ? '及格' : '不及格';
// 执行CMD命令
$dir = `dir`; // Windows 下列出目录(Linux 用 `ls`)
// 数组键值符
$indexed = [1, 2, 3]; // 索引数组(键为数字)
$assoc = ['a' => 1, 'b' => 2]; // 关联数组
第三章 PHP流程控制语句
3.1 if条件控制语句
<?php
//定义一个随机变量,判定时间,随机0点至23点
$dida = rand(0,23);
echo "当前时间为 $dida 点\n";
if($dida > 6 && $dida < 10 ){
echo '睡觉';
}elseif ($dida > 10 && $dida < 14){
echo '洗澡';
}elseif($dida >= 19 && $dida < 22){
echo '烧水';
}elseif($dida > 22 && $dida <=23){
echo '看电视';
}elseif($dida >=1 && $dida <3){
echo '看电影';
}else{
echo '工作';
}
?>
3.2 if嵌套语句
<?php
//0表示工作秘书,1表示生活秘书
//用代码模拟随机产生当前的行程安排是生活秘书负责还是工作秘书负责
$mishu=rand(0,1);
if($mishu){
//下雨和不下雨的状态,随机产生;下雨状态为1,不下雨状态为0
$xiayu=rand(0,1);
if($xiayu){
//是否购买雨伞;购买了雨伞为1,未购买雨伞为0
$you=rand(0,1);
if($you){
echo '下雨天,已经购买雨伞';
}else{
echo '下雨天,需要购买雨伞';
}
}else{
//是否购买了防晒霜,购买了为1,未购买为0
$you=rand(0,1);
if($you){
echo '未下雨,已经购买了防晒霜';
}else{
echo '未下雨,需要购买防晒霜';
}
}
}else{
//是否准备好了会议议程,准备好了为1,未准备好为0
$yicheng=rand(0,1);
if($yicheng){
echo '已准备好,可以随时出发';
}else{
echo '没有准备好,需要打印,延迟出发';
}
}
?>
3.3 switch语句使用
//定义出行工具
$tool=rand(1,6);
switch($tool){
case 1:
echo '司机开车';
break;
case 2:
echo '民航';
break;
case 3:
echo '自己家的专机';
break;
case 4:
echo '火车动车';
break;
case 5:
echo '骑马';
break;
case 6:
echo '游轮';
break;
}
3.4 while循环语句说明
//定义需要往返的次数,老外喜欢从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(判断)
$i=0;
do {
echo $i;
}while($i >0);
3.5 for循环语句
<?php
for($i=1;$i<=10;$i++){
echo ‘分手后第’.$i.’年, 我全都忘了你的样子<br />’;
}
?>
3.6 goto循环语句
基本语法:
<?php
goto wan;
echo '天王盖地虎';
wan:
echo '小鸡炖蘑菇';
基本编写:
<?php
for ($i=0;$i<100;$i++){
echo '第'.$i.'每周往返北京大连<br />';
if($i == 17){
goto end;
}
}
end:
echo '集团公司要求停止此项';
?>
第四章 PHP函数基本语法
function name(){}
<?php
function php_cn($one=1,$two=2){
echo "好好学习";
echo $one;
}
php_cn(30);
php_cn();
?>
函数备注说明:
函数名只能是字母,数字,下划线的组合,并且之间不能包含空格,数字不能放在变量名首位.
函数名与变量命名规则一样,但是不同的是,函数名不区分大小写
函数体的参数若是定义了,未传参,代码会报错.
函数后的参数如果有默认值,参数可以不填,代码也不会报错
函数后的参数可以写多个
函数后如果有默认值和无默认值的参数,通常把无默认值的参数写在最前面
函数体的变量与函数体外的变量没有关系
函数体中若有return,return后的代码不执行.
函数执行完后,可把函数体内的值,带到函数体外
函数的执行没有顺序关系,可以在定义外之前的位置调用
代码引入
序号 | 方法 | 关键特性 | 失败处理 | 适用场景 |
---|---|---|---|---|
1 | include |
动态包含,每次调用都会执行包含操作 | 产生警告(E_WARNING) | 非核心模板文件、可选组件 |
2 | require |
静态包含,代码执行前预处理 | 产生致命错误(E_COMPILE_ERROR) | 核心配置文件、必要类库 |
3 | include_once |
仅包含一次,自动检测是否已包含(避免重复定义) | 产生警告 | 函数库文件、可能多次调用的组件 |
4 | require_once |
预处理+单次包含,兼具require和once特性 | 产生致命错误 | 全局配置、重要类定义 |
<?php
//functions-test-02文件
function demo(){
echo 'aaaa';
}
function test(){
echo 'bbbb';
}
?>
<?php
//user.php
include "functions-test-02.php";
//可以直接调用
demo();
test();
?>
内置函数
数字类型
函数信息 | 说明 | 正确实例与输出 |
---|---|---|
abs() |
返回参数的绝对值(整数/浮点数) | $abs = abs(-42); // 输出: 42 |
ceil() |
向上取整(返回不小于参数的最小整数) | echo ceil(9.999); // 输出: 10 |
floor() |
向下取整(返回不大于参数的最大整数) | echo floor(9.999); // 输出: 9 |
fmod() |
返回浮点数取余结果(商的小数部分×除数) | $r = fmod(5.7, 1.3); // 输出: 0.5 |
round() |
四舍五入 | |
intval() |
转为整数 | |
is_nan() |
检查是否为非数值 | |
pow() |
计算数的N次方(支持负数和分数幂) | echo pow(2, 3); // 输出: 8 |
round() |
浮点数四舍五入(可指定小数位数) | echo round(3.14159, 2); // 3.14 |
sqrt() |
计算平方根(参数需≥0) | echo sqrt(9); // 输出: 3 |
max() |
返回参数列表或数组中的最大值 | echo max(1, 3, 5); // 5 |
min() |
返回参数列表或数组中的最小值 | echo min([2, 4, 5]); // 2 |
mt_rand() |
生成更好的随机数(需指定范围) | echo mt_rand(1, 100); // 1~100 |
rand() |
旧版随机数生成器(建议用mt_rand 替代) |
echo rand(1, 6); // 1~6 |
pi() |
返回圆周率常量(约3.1415926535898) | echo pi(); // 3.1415926535898 |
字符串类型
序号 | 函数 | 说明 | 正确用法示例 |
---|---|---|---|
1 | trim() |
删除字符串两端的空白字符 | echo trim(" hello "); → “hello” |
2 | rtrim() |
删除字符串右侧的空白字符 | echo rtrim("hello\n"); → “hello” |
3 | chop() |
rtrim() 的别名(已弃用) |
同rtrim() |
4 | ltrim() |
删除字符串左侧的空白字符 | echo ltrim("\thello"); → “hello” |
5 | dirname() |
返回路径中的目录部分 | echo dirname("/var/www/index.php"); → “/var/www” |
6 | str_pad() |
用指定字符填充字符串到指定长度 | echo str_pad("hi", 5, "*"); → “hi***” |
7 | str_repeat() |
重复字符串指定次数 | echo str_repeat("-", 10); → “----------” |
8 | str_split() |
将字符串分割为数组 | print_r(str_split("hello", 2)); → [“he”, “ll”, “o”] |
9 | strrev() |
反转字符串 | echo strrev("你好"); → “好你” |
10 | wordwrap() |
按指定长度折行字符串 | echo wordwrap("longword", 3); → “lon\ngword” |
11 | str_shuffle() |
随机打乱字符串字符 | echo str_shuffle("hello"); → “ellho” |
12 | parse_str() |
将查询字符串解析到变量 | parse_str("id=23&name=John", $arr); |
13 | number_format() |
格式化数字为千位分隔样式 | echo number_format(1000000, 2); → “1,000,000.00” |
14 | strtolower() |
字符串转为小写 | echo strtolower("HELLO"); → “hello” |
15 | strtoupper() |
字符串转为大写 | echo strtoupper("hello"); → “HELLO” |
16 | ucfirst() |
字符串首字母大写 | echo ucfirst("hello"); → “Hello” |
17 | ucwords() |
每个单词首字母大写 | echo ucwords("hello world"); → “Hello World” |
18 | htmlentities() |
字符转为HTML实体 | echo htmlentities("<a>"); → “<a>” |
19 | htmlspecialchars() |
预定义字符转HTML编码 | echo htmlspecialchars("<"); → “<” |
20 | nl2br() |
换行符转<br> 标签 |
echo nl2br("hello\nworld"); → “helloworld” |
21 | strip_tags() |
去除HTML/XML/PHP标签 | echo strip_tags("<b>bold</b>"); → “bold” |
22 | addslashes() |
在预定义字符前加反斜杠 | echo addslashes("I'm"); → “I’m” |
23 | stripcslashes() |
删除addslashes() 添加的反斜杠 |
echo stripcslashes("I\\'m"); → “I’m” |
24 | addcslashes() |
指定字符前加反斜杠 | echo addcslashes("hello", "h"); → “\hello” |
25 | stripslashes() |
删除反斜杠 | echo stripslashes("hel\\lo"); → “hello” |
26 | quotemeta() |
转义元字符(. \ + * ? [] ) |
echo quotemeta("file.php?page=1"); → “file.php?page=1” |
27 | chr() |
根据ASCII码返回字符 | echo chr(65); → “A” |
28 | ord() |
返回字符的ASCII码 | echo ord("A"); → 65 |
29 | strcasecmp() |
不区分大小写的字符串比较 | echo strcasecmp("HELLO", "hello"); → 0 |
30 | strcmp() |
区分大小写的字符串比较 | echo strcmp("HELLO", "hello"); → -1 |
31 | strncmp() |
比较前n个字符(区分大小写) | echo strncmp("HELLO", "hello", 3); → -1 |
32 | strncasecmp() |
比较前n个字符(不区分大小写) | echo strncasecmp("HELLO", "hello", 3); → 0 |
33 | strnatcmp() |
自然排序法比较(区分大小写) | echo strnatcmp("img2", "img10"); → -1 |
34 | strnatcasecmp() |
自然排序法比较(不区分大小写) | echo strnatcasecmp("IMG2", "img10"); → -1 |
35 | chunk_split() |
将字符串分割成小块 | echo chunk_split("hello", 2); → “he\nll\no\n” |
36 | strtok() |
标记分割字符串 | $token = strtok("hello world", " "); |
37 | explode() |
用分隔符分割字符串为数组 | print_r(explode(" ", "hello world")); → [“hello”, “world”] |
38 | implode() |
将数组元素连接为字符串 | echo implode(",", ["a","b"]); → “a,b” |
39 | substr() |
截取字符串 | echo substr("hello", 1, 3); → “ell” |
40 | str_replace() |
字符串替换(区分大小写) | echo str_replace("a", "b", "apple"); → “bpple” |
41 | str_ireplace() |
字符串替换(不区分大小写) | echo str_ireplace("A", "b", "Apple"); → “bpple” |
42 | substr_count() |
计算子串出现次数 | echo substr_count("lol", "l"); → 2 |
43 | substr_replace() |
替换字符串的子串 | echo substr_replace("world", "hello", 0); → “hello” |
44 | similar_text() |
计算两字符串相似度 | similar_text("hello", "hallo", $percent); → 80 |
45 | strstr() |
查找字符串首次出现位置 | echo strstr("hello@world", "@"); → “@world” |
46 | strchr() |
strstr() 的别名 |
同strstr() |
47 | stristr() |
不区分大小写的strstr() |
echo stristr("Hello", "E"); → “ello” |
48 | strtr() |
字符转换 | echo strtr("hi", "h", "H"); → “Hi” |
49 | strpos() |
查找字符首次出现位置(区分大小写) | echo strpos("hello", "e"); → 1 |
50 | stripos() |
查找字符首次出现位置(不区分大小写) | echo stripos("HELLO", "e"); → 1 |
51 | strrpos() |
查找字符最后出现位置(区分大小写) | echo strrpos("lol", "l"); → 2 |
52 | strripos() |
查找字符最后出现位置(不区分大小写) | echo strripos("LOL", "l"); → 2 |
53 | strspn() |
返回字符串中全部符合mask的起始长度 | echo strspn("hello", "hel"); → 4 |
54 | strcspn() |
返回字符串中不符合mask的起始长度 | echo strcspn("hello", "o"); → 4 |
71 | mb_split() |
用正则分割多字节字符串 | print_r(mb_split(",", "苹果,香蕉")); → [“苹果”,“香蕉”] |
72 | parse_url() |
解析URL为关联数组 | print_r(parse_url("https://example.com/path?q=test")); |
多字节处理重要说明(修正原图错误):
- 编码标准:
- ✅ GBK:双字节编码(原图说三字节错误)
- ✅ UTF-8:汉字占3字节
- 必备扩展:
// 正确处理中文 mb_strlen("你好", "UTF-8"); // 返回2 iconv("GBK", "UTF-8//IGNORE", $text); // 编码转换
时间类型
<?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";
?>
第五章 PHP数组结构
数组的英文是array,可以存入多个不同类型的数据,是一个复合数据类型。
案例:
<?php
$shu = array(1 , 1.5 , true ,'天王盖地虎,小鸡炖蘑菇');
echo '<pre>';
var_dump($shu);
echo '</pre>';
?>
在上例中,我们发现我们存入了:整型、浮点、布尔、字符串
注:上例中echo pre这个标签的主要目的是为原样输出,格式展示的更好看,更清晰。
可以用var_dump()打印出来显示看一下效果:
索引数组的下标必须要从0开始吗?
答:这个问题其实不然,索引数组并不一定要从0开始。
那如何能够不从0开始呢?
答:需要用到大家在上面学的一小块知识哟。就是键值对应符。我们来动手写
<?php
$kele = array('只有不断努力才能博得未来',10 => 'NoAlike', 'PHP中文网' , '去PHP中文网学PHP', 19 => '苹果和梨子我都爱' , '橘子我最爱');
//打印显示$kele
echo '<pre>';
var_dump($kele);
echo '</pre>';
/*
array(6) {
[0]=>
string(36) "只有不断努力才能博得未来"
[10]=>
string(7) "NoAlike"
[11]=>
string(12) "PHP中文网"
[12]=>
string(21) "去PHP中文网学PHP"
[19]=>
string(24) "苹果和梨子我都爱"
[20]=>
string(15) "橘子我最爱"
}
*/
5.1 for循环遍历索引数组
<?php
//声明一个数组,值为1到10
$num = array(1,2,3,4,5,6,7,8,9,10);
//按照索引数组的特点,下标从0开始。所以1的下标为0,10的下标为9
echo $num[0].'<br />';
echo $num[9].'<br />';
//我们可以得到数组中元素的总个数,为10
echo count($num) .'<br />';
//遍历这个索引数组的话,我们就可以定义一个变量为$i
//$i 的值为0,从0开始
//可以设定一个循环条件为:$i 在下标的(9)最大值之内循环
for($i = 0 ; $i < count($num) ; $i++){
echo $num[$i].'<br />';
}
?>
5.2 常用操作数组函数
函数信息 | 说明 | 实例 |
---|---|---|
array_shift() | 弹出数组中的第一个元素 | |
array_unshift() | 在数组的开始处压入元素 | |
array_push() | 向数组的末尾处压入元素 | |
array_pop() | 弹出数组末尾的最后一个元素 | |
current() | 读出指针当前位置的值 | |
key() | 读出指针当前位置的键 | |
next() | 指针向下移 | |
prev() | 向上移 | |
reset() | 指针到开始处 | |
end() | 指针到结束处 |
函数信息 | 说明 | 实例 |
---|---|---|
array_combine() | 生成一个数组,用一个数组的值作为键名,另一个数组值作为值 | |
range() | 创建并返回一个包含指定范围的元素的数组 | |
compact() | 创建一个由参数所带变量组成的数组 | |
array_fill() | 用给定的值生成数组 | |
array_chunk() | 把一个数组分割为新的数组块 | |
array_merge() | 把两个或多个数组合并为一个数组 | |
array_slice() | 在数组中根据条件取出一段值,并返回 | |
array_diff() | 返回两个数组的差集数组 | |
array_search() | 在数组中搜索给定的值,如果成功则返回相应的键名 | |
array_splice() | 把数组的一部分去掉并用其它值取代 | |
array_sum() | 计算数组中所有值的和 | |
in_array() | 检查数组中是否存在某个值 | |
array_key_exists() | 检查给定的键名或索引是否存在于数组中 | |
shuffle() | 将数组打乱,保留键值 | |
count() | 计算数组中的单元数目或对象中的属性个数 | |
array_flip() | 返回一个键值反转后的数组 | |
array_keys() | 返回数组所有的键,组成一个数组 | |
array_values() | 返回数组中所有值,组成一个数组 | |
array_reverse() | 返回一个元素顺序相反的数组 | |
array_count_values() | 统计数组中所有的值出现的次数 | |
array_rand() | 从数组中随机抽取一个或多个元素,注意是键名 | |
array_unique() | 删除重复值,返回剩余数组 | |
sort() | 按升序对给定数组的值排序,不保留键名 | |
rsort() | 对数组逆向排序,不保留键名 | |
asort() | 对数组排序,保持索引关系 | |
arsort() | 对数组逆向排序,保持索引关系 | |
ksort() | 按键名对数组排序 | |
krsort() | 将数组按照键逆向排序 |
函数信息 | 说明 | 实例 |
---|---|---|
natsort() | 用自然顺序算法对数组中的元素排序 | |
natcasesort() | 自然排序,不区分大小写 | |
array_filter() | 去掉数组中的空元素或者预定元素 | |
extract() | 将键变为变量名,将值变为变量值 |
第六章 PHP正则表达式
字符 | 功能描述 | PHP示例 |
---|---|---|
. | 匹配任意1个字符(除换行符) | preg_match("/h.l/", "hello") → 1 |
[] | 匹配列举的字符 | preg_match("/[aeiou]/", "cat") → 1 |
\d | 匹配数字(0-9) | preg_match("/\d+/", "Room 101") → 1 |
\D | 匹配非数字 | preg_replace("/\D/", "", "R2D2") → “22” |
\s | 匹配空白字符(空格/Tab等) | preg_split("/\s+/", "a b c") → [“a”,“b”,“c”] |
\S | 匹配非空白字符 | preg_match_all("/\S+/", "a b c") → 3 |
\w | 匹配单词字符(a-z,A-Z,0-9,_) | preg_match("/\w+/", "$var_1") → 1 |
\W | 匹配非单词字符 | preg_replace("/\W/", "", "a!b@c") → “abc” |
字符 | 功能描述 | PHP示例 |
---|---|---|
* | 前字符0次或多次 | preg_match("/bo*/", "b") → 1 |
+ | 前字符1次或多次 | preg_match("/a+/", "caaandy") → 1 |
? | 前字符0次或1次 | preg_match("/colou?r/", "color") → 1 |
{m} | 前字符恰好m次 | preg_match("/\d{3}/", "1234") → 1 |
{m,} | 前字符至少m次 | preg_match("/a{2,}/", "baaad") → 1 |
{m,n} | 前字符m到n次 | preg_match("/\d{2,4}/", "12345") → 1 |
字符 | 功能描述 | PHP示例 |
---|---|---|
^ | 匹配字符串开头 | preg_match("/^http/", "http://...") → 1 |
$ | 匹配字符串结尾 | preg_match("/\.com$/", "site.com") → 1 |
\b | 匹配单词边界 | preg_replace("/\bcat\b/", "dog", "cat catty") → “dog catty” |
\B | 匹配非单词边界 | preg_replace("/\Bcat\B/", "dog", "category") → “dogegory” |
字符 | 功能描述 | PHP示例 |
---|---|---|
| | 匹配左右任意表达式 | preg_match("/cat|dog/", "dog") → 1 |
(ab) | 创建捕获组 | preg_match("/(\d{3})-(\d{2})/", "123-45", $matches) → $matches[1]=“123” |
\num | 引用第num个分组 | preg_replace("/(\w+) \1/", "$1", "hello hello") → “hello” |
(?) | 命名捕获组 | preg_match("/(?<year>\d{4})/", "2023", $matches) → $matches[‘year’]=“2023” |
(?P=name) | 引用命名分组 | preg_match("/(?<word>\w+) (?P=word)/", "bye bye") → 1 |
PHP正则表达式实用函数示例
<?php
// 1. 基础匹配
$text = "Room 101";
preg_match("/\d+/", $text, $matches); // 匹配数字
echo $matches[0]; // 输出: 101
// 2. 数量匹配
$text = "caaandy";
preg_match("/a+/", $text, $matches); // 匹配连续a
echo strlen($matches[0]); // 输出: 3
// 3. 边界匹配
$text = "cat in the hat";
$result = preg_replace("/\bcat\b/", "dog", $text);
echo $result; // 输出: "dog in the hat"
// 4. 分组匹配
$text = "John Doe <johndoe@example.com>";
preg_match("/<(\w+@\w+\.\w+)>/", $text, $matches);
echo $matches[1]; // 输出: johndoe@example.com
// 综合应用:验证邮箱格式
function validateEmail($email) {
return preg_match("/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/", $email);
}
?>
正则表达式格式:
preg_match ( string $正则 , string $字符串 , array&$结果] )
第七章 PHP文件系统管理
我们会点鼠标右键删除文件、会control+c(或右键)复制、粘贴文件,会新建一些文件,检测这个文件是不是只读文件。在电脑里面进行的这些操作,在代码里面如果能操作就好了。因为,如果有了这些操作。我们能做很多事情了:可不可以写入修改配置文件、是不是可以做PHP安装的时候检测文件的权限、是不是可以做生成Html文件等等很多不同的操作,总之其他太多太多的地方用到了文件操作。
7.1 fopen、fread、fclose操作读取文件
1、readfile读取文件函数
readfile (string: $文件名)
// 功能:传入一个文件路径,输出一个文件。
<?php
//linux类的读了方式
readfile("/home/paul/test.txt");
//windows类的读取方式
readfile("c:\\oldboy\oldboy\boot.ini");
// 注意:上面的代码中windows的斜线是\斜线,可能会转义掉一些字符。因此,我们写的时候写上两个斜线。
?>
2、file_get_contents打开文件函数
<?php
$filename = 'NoAlike.txt';
$filestring = file_get_contents($filename);
echo $filestring;
?>
3、fopen、fread、fclose操作读取文件
上面file_get_contents打开文件的方式简单、粗暴。
resource fopen ( string $文件名, string 模式)
string fread ( resource $操作资源, int 读取长度)
bool fclose ( resource $操作资源 )
PHP文件打开模式详解表
序号 | 模式 | 说明 | 正确实例 | 重要注意事项 |
---|---|---|---|---|
1 | r |
只读方式打开,文件指针位于文件头 | $file = fopen("data.txt", "r"); |
文件必须存在,否则返回false |
2 | r+ |
读写方式打开,文件指针位于文件头 | $file = fopen("data.txt", "r+"); |
文件必须存在,否则返回false |
3 | w |
写入方式打开,清空文件内容,指针位于文件头 | $file = fopen("logs.txt", "w"); |
文件不存在则创建,存在则清空 |
4 | w+ |
读写方式打开,清空文件内容,指针位于文件头 | $file = fopen("temp.txt", "w+"); |
文件不存在则创建,存在则清空 |
5 | a |
写入方式打开,指针位于文件末尾(追加模式) | $file = fopen("access.log", "a"); |
文件不存在则创建,存在则保留内容 |
6 | a+ |
读写方式打开,指针位于文件末尾 | $file = fopen("notes.txt", "a+"); |
文件不存在则创建,读取时需用fseek() 定位 |
7 | x |
创建并以写入方式打开,指针位于文件头 | $file = fopen("new.lock", "x"); |
文件存在则返回false 并触发警告 |
8 | x+ |
创建并以读写方式打开,指针位于文件头 | $file = fopen("unique.dat", "x+"); |
文件存在则返回false 并触发警告 |
<?php
//你可以创建一个NoAlike.txt,以只读模式打开
$fp = fopen('NoAlike.txt', "r");
//var_dump()操作一下$fp看看效果,输出的是不是只有类型提示的是resource
var_dump($fp);
?>
7.2 PHP创建和修改文件内容
1、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 '写入失败或者没有权限,注意检查';
}
?>
2、fwrite配合fopen进行写入操作
<?php
$filename = 'test.txt';
$fp= fopen($filename, "w");
$len = fwrite($fp, '我是一只来自北方的狼,却在南方冻成了狗');
fclose($fp);
print $len .'字节被写入了\n';
?>
代码说明:
· 不论有没有新建都会打开文件重新写入
· 原有的文件内容会被覆盖掉
· 文件不存在会创建
7.3 PHP创建临时文件
我们之前创建的文件都是永久文件,而创建临时文件在我们平时的项目开发中也非常有用,创建临时文件的好处:文件操作完成后即删除,不需要去维护这个文件的删除状态。
<?php
//创建了一个临时文件
$handle = tmpfile();
//向里面写入了数据
$numbytes = fwrite($handle, '写入临时文件');
//关闭临时文件,文件即被删除
fclose($handle);
echo '向临时文件中写入了'.$numbytes . '个字节';
?>
7.4 php移动、拷贝和删除文件
我们日常在处理文件的时候,可以删除文件、重命名文件也可以也可复制文件。
1、重命名文件:
<?php
/*
rename($旧名,$新名);
功能:这个函数返回一个bool值,将旧的名字改为新的名字。
*/
//旧文件名
$filename = 'test.txt';
//新文件名
$filename2 = $filename . '.old';
//复制文件
rename($filename, $filename2);
?>
2、复制文件
<?php
/*
copy(源文件,目标文件)
功能:将指定路径的源文件,复制一份到目标文件的位置。
*/
//旧文件名
$filename = 'copy.txt';
//新文件名
$filename2 = $filename . '_backup';
//修改名字。
copy($filename, $filename2);
?>
说明:会通过上面的例子,发现多出来了一个文件。
3、删除文件
删除文件就是将指定路径的一个文件删除,不过这个删除是直接删除。使用的是windows电脑,你在回收站看不到这个文件,你只会发现这个文件消失了。
<?php
/*
unlink(指定路径的文件)
*/
$filename = 'test.txt';
if (unlink($filename)) {
echo "删除文件成功 $filename!\n";
} else {
echo "删除 $filename 失败!\n";
}
?>
4、检测文件属性函数
假设安装界面的网址是:install.php,安装的锁文件是install.lock。我们就可以检测install.lock文件是否存在。
<?php
if(file_exists('install.lock')){
echo '已安装,请不要再次进行安装';
exit;
}
?>
正确函数语法 | 说明 | 正确实例 |
---|---|---|
file_exists($filename) |
检查文件/目录是否存在 | if(file_exists("data.txt")){ echo "文件存在"; } |
is_readable($filename) |
检查文件是否可读 | if(is_readable("config.ini")){ /* 读取操作 */ } |
is_writable($filename) |
检查文件是否可写(注意正确拼写) | if(is_writable("logs.txt")){ file_put_contents(...); } |
is_executable($filename) |
检查文件是否可执行 | if(is_executable("install.sh")){ exec("./install.sh"); } |
is_file($filename) |
检查路径是否为常规文件(非目录/链接) | if(is_file("image.jpg")){ /* 处理文件 */ } |
is_dir($filename) |
检查路径是否为目录 | if(is_dir("uploads")){ /* 遍历目录 */ } |
clearstatcache() |
清除文件状态缓存(无参数) | clearstatcache(); // 强制刷新缓存 |
5、PHP目录处理函数
php 目录处理函数处理文件夹的基本思想如下:
1.读取某个路径的时候判断是否是文件夹
2.是文件夹的话,打开指定文件夹,返回文件目录的资源变量
3.使用readdir读取一次目录中的文件,目录指针向后偏移一次
4.使用readdir读取到最后,没有可读的文件返回false
5.关闭文件目录
正确函数语法 | 说明 | 返回值类型 | 正确实例 |
---|---|---|---|
opendir($path) |
打开目录句柄,返回资源类型 | resource | $handle = opendir('uploads') or die("无法打开目录"); |
readdir($handle) |
读取目录条目(注意原图拼写错误"readir") | string|false | while(($file = readdir($handle)) !== false){ echo $file; } |
is_dir($path) |
检查路径是否为目录(返回布尔值) | bool | if(is_dir('temp')){ mkdir('temp/subdir'); } |
closedir($handle) |
关闭目录句柄(需配合opendir使用) | void | closedir($handle); // 释放系统资源 |
filetype($path) |
获取文件类型(返回"file"或"dir",原图描述不完整) | string | if(filetype('data') === '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);
}
}
?>
6、php 文件权限设置
chmod主要是修改文件的的权限
<?php
//修改linux系统/var/wwwroot/某文件权限为755
chmod("/var/wwwroot/index.html", 755);
chmod("/var/wwwroot/index.html", "u+rwx,go+rx");
chmod("/somedir/somefile", 0755);
?>
7、php文件路径函数
我们经常会遇到处理文件路径的情况。例如:
1.文件后缀需要取出来
2.路径需要取出名字不取目录
3.只需要取出路径名中的目录路径
4.或者把网址中的各个部份进行解析取得独立值
5.甚至是自己组成一个url出来
正确函数语法 | 说明 | 返回值类型 | 正确实例 |
---|---|---|---|
pathinfo($path, $options) |
返回文件路径的各个组成部分 | array|string | print_r(pathinfo("/var/www/index.php")); // [dirname=>..., basename=>...] |
basename($path, $suffix) |
返回路径中的文件名部分(可去除后缀) | string | basename("/tmp/test.jpg") // "test.jpg" |
dirname($path, $levels=1) |
返回目录部分(支持多级回溯) | string | dirname("/var/www/html") // "/var/www" |
parse_url($url, $component) |
解析URL为关联数组(原图序号错误"40") | array|string|int|null | parse_url("https://example.com/path?q=1") |
http_build_query($data, $numeric_prefix, $arg_separator) |
生成URL查询字符串(原图错误"http_numbers") | string | http_build_query(['id'=>1, 'q'=>'php']) // "id=1&q=php" |
http_build_url($parts) |
组合URL各部分(需安装pecl_http扩展,原图函数名错误) | string | http_build_url(['scheme'=>'https', 'host'=>'example.com']) |
代码:
<?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 />";
?>
8、php实现文件留言本
我们来看一下文件结构:
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');
?>
完结撒花
以上便是在PHP的学习过程中需要掌握的一些基础知识,没有接触过的朋友可能比较吃力,但是多花时间去练一练总是好的,然后多看看参考、一些案例,将PHP和HTML很好的结合,能够熟练地运用更好。
转载