PHP环境搭建介绍 LAMP
L:Linux 服务器
A:Apache Web 服务器
M:Mysql 数据库
P:PHP动态程序
LNMP
L:Linux 服务器
N:Nginx Web 服务器
M:Mysql 数据库
P:PHP动态程序
WAMP
W:Windows 服务器
A:Apache Web 服务器
M:Mysql 数据库
P:PHP动态程序
WNMP
W:Windows 服务器
N:Nginx Web 服务器
M:Mysql 数据库
P:PHP动态程序
Apache
Web 服务器 和 Nginx
Web 服务器 优缺点:
Apache
:稳定、并发数少(3千左右)、配置简单
Nginx
:稳定性差、并发性高(同时连接服务器人数)(3万左右)、配置复杂
Windows下PHP环境(wamp)产品
appserv
wampserver
phpstudy
easyphp
xamp
phpnow
Linux下PHP环境(lamp) 方式一
源代码安装
Apache + Mysql + PHP软件包
方式二
lamp集成包
phpstudy
网站访问流程图解
如果访问的是静态网页,那么Apache 服务器直接找到静态网页直接返回给客户端
如果访问的是动态网页,Apache是无法解析php代码的,需要通过PHP解析器解析成html代码,然后再把网页返回给客户端
如果涉及到数据库操作,那么还需要从数据库取出数据,然后Apache再通过PHP解析器解析成html代码再返回给客户端。
静态网页和动态网页 静态网页
直接访问html文件并返回给客户端
动态网页
需要利用php,jsp,asp解析器先解析php、asp、jsp脚本
安装window下AMP运行环境 Appserv 下载地址:https://www.appserv.org/en/
直接安装
调试
Win + R 输入cmd 进入命令窗口
tasklist
: 查看所有进程
tasklist | find "http"
:查看Apache服务器是否正常启动
tasklist | find "mysql"
:查看Mysql服务器是否正常启动
如何关闭Apache 和Mysql
net stop apache24
:关闭Apache
net stop mysql57
:关闭Mysql
net start apache24
:启动apache
net start mysql57
:启动Mysql
错误提示:发生系统错误 5 拒绝访问。以管理员身份运行cmd命令窗口即可
网站根目录:www
localhost/index.php 等价于 localhost/
Apache 配置文件中默认索引
优先级 index.html > index.htm > index.php
1 2 3 <IfModule dir_module> DirectoryIndex index.html index.htm index.php </IfModule>
切换PHP版本
修改Apache的配置文件
位置:C:\AppServ\Apache24\conf\httpd.conf
1 2 3 4 5 6 LoadModule php7_module C:/AppServ/php7/php7apache2_4.dll PHPIniDir "C:/AppServ/php5/"
注意:修改了Apache配置文件,需要重启Apache
第一段PHP测试代码
Wamp 下载地址:https://www.wampserver.com/
建议下载2.5版本,直接下载安装即可。
mysql默认密码为空
mysql数据库设置密码
1 set password=password ("wamp12345678" )
当设置了密码之后,phpadmin会报错
解决方法如下
找到phpmyadmin的配置文件,注释以下这行命令
示例路径:C:\wamp\apps\phpmyadmin4.1.14\config.inc.php
php版本切换
1.把php5.5.12中的 phpForApache.ini
和 wampserver.conf
拷贝到php5.6.33
下
2.phpForApache.ini
修改扩展模块路径
1 extension_dir = "c:/wamp/bin/php/php5.6.33/ext/"
3.重启Apache
PHP与Sublime编辑器的结合 打开Sublime
工具 -> 编译系统 -> 编译新系统
1 2 3 4 5 { "cmd" : ["php" , "$file " ], "file_regex" : "php$" , "selector" : "source.php" }
变量 变量的定义和输出
1 2 3 4 5 6 7 8 9 10 11 <?php $name = "xyz\n" ; echo "my name is {$name} " ; ?>
注:单引号不能解析变量,字符串连接使用使用点 ,$name
是一个变量
在PHP中有一种比较奇怪的用法
1 2 3 4 5 6 7 8 $a = 'hello' ;$hello = '你好' ;echo $$a ;
变量命名 严格区分大小写
变量输出 1 2 3 4 5 $name = "xyz" ;var_dump ($name );print ($name );echo $name ;
变量的本质 请看示例代码
1 2 3 4 5 6 7 8 9 $a = 1 ;$b = $a ;$b = 2 ;echo $a ; $c = 1 ;$d = &$c ;$d = 2 ;echo $c ;
变量回收 示例代码如下
1 2 3 4 5 6 7 $name = "xyz" ;echo $name ;unset ($name );echo $name ;
常量 常量的定义 1 2 3 define ('HOST' , 'www.baidu.com' );echo HOST;
判断常量是否存在defined()
1 2 3 define ('HOST' , 'www.baidu.com' );var_dump (defined ('HOST' ));
预定义常量 PHP事先定义的一些内置常量
示例代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 <?php echo M_PI; echo __FILE__ ; echo __LINE__ ; function sum ( ) { echo "函数名:" .__FUNCTION__ ; } sum (); ?>
数据类型 整数、浮点数、字符串、数组、对象、资源、NULL、布尔
数组
1 2 3 $arr = array (1 , 3 , 5 );echo ($arr [0 ]);
类与对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 class Person { public $name = "xyz" ; public $age = 18 ; public function say ( ) { echo "my name is " .$this ->name; } }$p = new Person ();$p ->say ();
什么是资源?
我觉得下面这个例子能够很好的理解资源这个概念
什么是资源?举个例子:好比打一口井,我们首先需要不断地往地下挖,水源就在地下15米深处的地方,我们需要挖出一条通道出来,才能够取得到水。这个过程就好比连接数据库的过程,数据库就是一个资源,摆在那里等着我们开采,我们首先需要建立起一条通道,连接到数据库,这条通道其实就是连接资源。只有建立起通道,我们才能取到数据,如果没有连接通道,也就是说没有连接资源(通道是一种资源,好比在一条河之间,架设了一块木板,木板就是一种连接资源)我们是无法取到数据的。
类型测试
示例代码如下
1 2 $age = 18 ;echo gettype ($age );
具体类型测试
(1)is_bool()
(2)is_string()
(3)is_float()
(4)is_int()
(5)is_array()
(6)is_object()
(7)is_null()
(8)is_resource()
(9)is_scalar() 是否是标准类型,如int
float
(10)is_callable() 是否是一个函数
示例代码如下
1 2 3 $age = 18 ;var_dump (is_int ($age ));
变量是否存在isset()
为false
的两种情况
(1)null
(2)未定义
1 2 3 var_dump (isset ($name ));
变量是否为空empty()
变量为空的几种情况
(1)0
(2)0.0
(3)””
(4)fasle
(5)”0”
(6)null
(7)空数组
(8)未定义
1 2 $a = '0' ;var_dump (empty ($a ));
类型转换 示例代码如下
1 2 3 4 5 $str = "12.56abc" ;$price = (float )$str ;echo $price ;
运算符 PHP中的运算符和其他语言并没有太大区别,一起来看一下运算符优先级的问题
运算符优先级 运算符存在优先级的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <?php $a = 3 ; $b = 5 ; if ($a =3 && $b =4 ){ $a +=1 ; $b +=1 ; } echo $a ; echo $b ; ?>
&&
||
运算符优先级大于=
赋值运算符
再来看一个例子
1 2 3 4 5 6 7 8 9 10 $a = 2 ;$b = 3 ;if ($a =0 || $b =5 ){ $a ++; $b ++; }echo $a ; echo $b ;
要想解释上面这个结果,需要搞清楚echo
输出的情况
1 2 3 4 5 6 7 8 9 10 echo true ; 输出1 echo fasle; 输出空$a = true ;$a ++;echo $a ; 输出1 $a = false ;$a ++;echo $a ; 输出空;
位运算
这两个符号是位运算符,与其他语言很不一样哦,如java
示例代码如下
流程控制 与js
的语法没有太大区别
阻断脚本执行,这个在别的语言没有,如python
示例代码如下
1 2 3 4 5 6 echo 1 ;exit (); echo 2 ;
字符串 字符串拼接 1 2 3 $a = "my name is " ;$b = "czx" ;echo $a .$b ;
字符串操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 $a = " hello word HELLO WORLD --" ;echo strlen ($a );$b = trim ($a );$b = trim ($a ,"-" );$b = ltrim ($a );$b = rtrim ($a );$b = str_Pad ($a ,40 ,"-" ,STR_PAD_LEFT); $b = str_repeat ($a ,40 ); echo $b ;echo strlen ($b );
大小写互转 1 2 3 4 5 6 7 8 9 10 11 12 $a = "hello word HELLO WORLD" ;$b = strtolower ($a );$b = strtoupper ($a );$b = ucfirst ($a );$b = ucwords ($a );echo $b ;
字符实体 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $a = "<h1>hello\nword\nHELLO\nWORLD</h1>" ;$new_str ="<h1>123'456</h1>" ;$b = nl2br ($a );$b = strip_tags ($a );$b = addslashes ($new_str ); $b = htmlspecialchars ($new_str ); $b = htmlspecialchars_decode ($b );echo $b ;
增删改查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 $a = "hello world" ;$num = "876432" ;$path = '/web/home/index.php' ;$b = strlen ($a );$b = strrev ($a );$b = number_format ($num ); $b = md5 ($a ); $b = str_shuffle ($a );$b = substr ($a ,0 ,3 ); $b = strpos ($path ,'/' ); $b = strrpos ($path ,'/' ); $b = str_replace ('home' , 'admin' , $path ); echo $b ;
字符串解析 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 $str = "我是中国人" ;$path = '/web/home/index.php' ;$url = 'https://fanyi.baidu.com/index.php?id=10&u=12' ;$b = mb_substr ($str , 2 ); $arr = pathinfo ($path );$b = basename ($path ); $b = dirname ($path ); $arr = parse_url ($url );parse_str ($arr ['query' ],$new_arr );echo $b ;echo "<pre>" ;print_r ($new_arr );echo "</pre>" ;
数组 数组定义 1 2 3 4 5 $arr = [1 ,3 ,5 ,7 ,9 ]; echo "<pre>" ;print_r ($arr );echo "</pre>"
数组的类型 索引数组(索引是数字)
1 2 3 4 5 <?php $arr = [1 ,3 ,5 ,7 ,9 ]; ?>
关联数组(下标为字符串)
1 2 3 4 5 6 7 8 9 10 11 12 <?php $arr = array ( "name" => "逍遥子" , "age" => 18 );echo $arr ["name" ]; ?>
混合数组(下标为既有数字,又有字符串)
1 2 3 4 5 6 7 8 9 10 11 12 <?php $arr = array ( "逍遥子" , "age" => 18 );echo $arr [0 ]; ?>
数组赋值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <?php $arr = array ( "逍遥子" , "age" => 18 );$arr [] = "PHP工程师" ; echo "<pre>" ;print_r ($arr );echo "</pre>" ?>
数组遍历 方式一
1 2 3 4 5 6 7 8 9 <?php $arr = array (1 ,3 ,5 ,7 ,9 );for ($i =0 ;$i <4 ;$i ++){ echo $arr [$i ]; } ?>
方式二
list用法
1 2 3 4 5 6 7 8 9 <?php list ($a , $b , $c ) = [1 ,2 ,3 ];echo $a ; echo $b ; echo $c ; ?>
list 只能解包索引数组
each用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 <?php $arr1 = array ( "item1" => "PHP" , "item2" => "Python" , "item3" => "Java" );$arr2 = each ($arr1 );$arr3 = each ($arr1 );echo "<pre>" ;print_r ($arr2 );echo "</pre>" ;echo "<pre>" ;print_r ($arr3 );echo "</pre>" ?> ?>
利用list的解组特性和each的取值依次特性来遍历数组
1 2 3 4 5 6 7 8 9 10 $arr1 = array ( "item1" => "PHP" , "item2" => "Python" , "item3" => "Java" );while (list ($key ,$val ) = each ($arr1 )){ echo $val ; }
方式三
1 2 3 4 5 6 7 8 9 10 $arr1 = array ( "item1" => "PHP" , "item2" => "Python" , "item3" => "Java" );foreach ($arr1 as $key => $val ) { echo $val ; }
超全局数组 说白了,就是作者预定义的一些数组,可以直接使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $_SERVER echo "<pre>" ; print_r($_SERVER); echo "</pre>" ?> /** 输出 Array ( [HTTP_HOST] => localhost [HTTP_CONNECTION] => keep-alive [SERVER_NAME] => localhost [SERVER_PORT] => 80 [DOCUMENT_ROOT] => C:/AppServ/www [REQUEST_SCHEME] => http ) **/
服务器和客户端请求信息
接收get请求参数
接收post请求参数
接收get/post请求参数
包含其他超全局数组,用的比较少
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 echo "<pre>" ;print_r ($GLOBALS );echo "</pre>" ?> $_COOKIE
数组操作 数组相关操作 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 <?php $arr = array ( "subject1" => "PHP" , "subject2" => "Python" , "subject3" => "Linux" , "subject4" => "JS" );$new_arr = array_values ($arr );$new_arr = array_keys ($arr );$new_arr = array_flip ($arr );$new_arr = array_reverse ($arr );$isExist = in_array ("PHP" , $arr );$isExist = array_key_exists ("subject1" , $arr );var_dump ($isExist );echo "<pre>" ;print_r ($new_arr );echo "</pre>" ; ?>
统计 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $arr = array ( "subject1" => "PHP" , "subject2" => "Python" , "subject3" => "Linux" , "subject4" => "JS" , "subject5" => "JS" );$num = count ($arr );$new_arr = array_count_values ($arr );$new_arr = array_unique ($arr );echo "<pre>" ;print_r ($new_arr );echo "</pre>" ;
数据清洗 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 $arr = array (0 ,1 ,2 ,3 ,4 ,5 );$new_arr = array_filter ($arr );function odd ($val ) { return $val %2 == 1 ; }$new_arr = array_filter ($arr ,'odd' );function mod ($val ) { return $val +=2 ; }$new_arr = array_map ("mod" ,$arr );echo "<pre>" ;print_r ($arr );echo "</pre>" ;echo "<pre>" ;print_r ($new_arr );echo "</pre>" ;
排序 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 $arr = array (0 ,3 ,7 ,8 ,4 ,9 );$arr2 = array (10 =>"PHP" ,2 =>"Python" ,5 =>"JS" ,6 =>"js" );$arr3 = array ( "title1" =>"linux" , "title2" =>"linux is very good" , "title3" =>"php is very good" , "title4" =>"js" );sort ($arr );rsort ($arr );asort ($arr );arsort ($arr );ksort ($arr2 );krsort ($arr2 );natsort ($arr2 );natcasesort ($arr2 );array_multisort ($arr2 );foreach ($arr3 as $key => $val ) { $row [] = strlen ($val ); }array_multisort ($row ,SORT_ASC,$arr3 ); echo "<pre>" ;print_r ($arr3 );echo "</pre>" ;
截取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 $arr = array (0 ,3 ,7 ,8 ,4 ,9 );$arr2 = array (10 =>"PHP" ,2 =>"Python" ,5 =>"JS" ,6 =>"js" ,3 ,5 );$str = "2020-08-15" ;$new_arr = array_slice ($arr ,2 ,3 ); $new_arr = array_splice ($arr ,2 ,3 ); $new_arr = array_splice ($arr ,2 ,3 ,[1 ,2 ,3 ]); $new_arr = array_combine ($arr ,$arr2 );$new_arr = array_merge ($arr ,$arr2 );$new_arr = implode ("-" , $arr ); $new_arr = explode ("-" , $str );echo "<pre>" ;print_r ($new_arr );echo "</pre>" ;echo "<pre>" ;print_r ($arr );echo "</pre>" ;
增删改查 1 2 3 4 5 6 7 8 9 10 11 12 13 14 $arr = array (0 ,3 ,7 ,8 ,4 ,9 );$val = array_pop ($arr );$val = array_shift ($arr );$val = array_push ($arr ,1 );$val = array_unshift ($arr ,1 );echo "<pre>" ;print_r ($arr );echo "</pre>" ;
其他 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $arr = range (0 ,9 );$arr = range (0 ,9 );$sum = array_sum ($arr );shuffle ($arr );$key = array_rand ($arr );echo $key ;echo "<pre>" ;print_r ($arr );echo "</pre>" ;
函数 函数检测
1 2 3 4 5 function sum ($n1 , $n2 ) { return $n1 + $n2 ; }var_dump (function_exists ("sum" ));
php函数,变量作用的界限非常明确,函数外部的变量称为全局变量,函数内部的变量称为局部变量,局部变量想要访问外部变量,需要使用global
关键字
1 2 3 4 5 6 7 8 9 10 $i = 10 ;function show ( ) { global $i ; $i ++; }show ();echo $i ;
静态变量,计数器累加,和其他语言的闭包 很像,PHP语言简化了该流程。
1 2 3 4 5 6 7 8 function show ( ) { static $i ; $i ++; echo "该函数被调用了{$i} 次\n" ; }show ();show ();
函数参数 和其他语言大同小异,我们这里只说异的地方
这种传参方式和传统语言相比,如java
相比,太奇怪了。
引用参数
1 2 3 4 5 6 7 8 9 10 $i = 10 ;function add (&$i ) { $i ++; }add ($i );echo $i ;
可变参数个数
示例代码如下
1 2 3 4 5 6 7 8 9 10 function sum ( ) { $arr = func_get_args (); $num = func_num_args (); print_r ($arr ); echo $num ; }sum (1 , 2 , 3 , 4 )
回调参数 1 2 3 4 5 6 7 8 9 10 function show ($n1 , $n2 , $sum ) { return $sum ($n1 , $n2 ); }function sum ($n1 , $n2 ) { return $n1 + $n2 ; }echo show (1 , 2 , 'sum' );
变量函数 1 2 3 4 5 6 7 8 9 10 function sum ($n1 , $n2 ) { return $n1 + $n2 ; }$sumInt = 'sum' ;$res = $sumInt (1 , 2 );echo $res ;
递归函数 1 2 3 4 5 6 7 8 9 function sum ($n1 ) { if ($n1 == 1 ){ return 1 ; }else { return sum ($n1 -1 ) + $n1 ; } }$res = sum (5 );echo $res ;
数学函数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $arr = array (65 ,78 ,92 );$num = 10.57 ;echo max ($arr );echo min ($arr );echo round ($num );echo ceil ($num );echo floor ($num );echo mt_rand ();echo mt_rand (0 ,10 );
日期函数 1 2 3 4 5 6 7 8 9 10 $time = time ();$date = date ("Y-m-d H:i:s" ,time ());$time = strtotime ("2021-8-15" );$time = microtime (); echo $date ;
随机数
模块 1 2 include xx.phprequire xx.php
一旦包含脚本代码出错,那么require
会阻断脚本执行。
图片处理 绘图步骤
1、创建画布资源
2、准备颜色
3、在画布上绘图
4、输出图像或保存
5、释放画布资源
示例代码如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 $img = imagecreatetruecolor (300 , 200 ); $white = imagecolorallocate ($img , 255 , 255 , 255 ); $black = imagecolorallocate ($img , 0 , 0 , 0 );$red = imagecolorallocate ($img , 255 , 0 , 0 );imagefill ($img , 0 , 0 , $red ); imagefilledellipse ($img , 150 , 100 , 100 , 100 , $white ); imagejpeg ($img ,"a.jpg" );imagedestroy ($img );
常见图形绘制 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 $img = imagecreatetruecolor (300 , 200 ); $white = imagecolorallocate ($img , 255 , 255 , 255 ); $black = imagecolorallocate ($img , 0 , 0 , 0 );$red = imagecolorallocate ($img , 255 , 0 , 0 );$blue = imagecolorallocate ($img , 0 , 0 , 255 );imagefill ($img , 0 , 0 , $red ); imagefilledellipse ($img , 150 , 100 , 100 , 100 , $white ); imagesetpixel ($img , 50 , 50 , $white ); imageline ($img , 0 , 0 , 300 , 200 , $black ); imagerectangle ($img , 50 , 50 , 100 , 100 , $black ); imagefilledrectangle ($img , 20 , 20 , 30 , 30 , $blue ); imagepolygon ($img , array (40 ,40 ,20 ,60 ,60 ,60 ), 3 , $blue ); imagefilledpolygon ($img , array (40 ,40 ,20 ,60 ,60 ,60 ), 3 , $blue ); imagearc ($img , 90 , 90 , 60 , 60 , 0 , 30 , $blue ); imagefilledarc ($img , 90 , 90 , 60 , 60 , 0 , 30 , $blue ,IMG_ARC_PIE); imagettftext ($img , 18 , 0 , 120 , 120 , $blue , "1.TTF" , "hello" ); header ('content-type:image/jpeg' ); imagejpeg ($img );imagedestroy ($img );
干扰点的绘制 1 2 3 4 for ($i =0 ;$i <100 ;$i ++){ imagesetpixel ($img , mt_rand (0 ,300 ), mt_rand (0 ,200 ), $black ); }
图片缩放 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $src_image = imagecreatefromjpeg ('imgs/img1.jpeg' ); $dst_image = imagecreatetruecolor (450 , 150 ); imagecopyresampled ($dst_image , $src_image , 0 , 0 , 0 , 0 , 450 , 150 , 900 , 383 ); header ('content-type:image/jpeg' ); imagejpeg ($dst_image ,'dst_image.jpg' );imagedestroy ($img );
图片裁剪 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $src_image = imagecreatefromjpeg ('imgs/img1.jpeg' ); $dst_image = imagecreatetruecolor (450 , 150 ); imagecopyresampled ($dst_image , $src_image , 0 , 0 , 0 , 0 , 450 , 150 , 300 , 200 ); header ('content-type:image/jpeg' ); imagejpeg ($dst_image ,'dst_image.jpg' );imagedestroy ($img );
图片水印 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 $dst_image = imagecreatefromjpeg ('imgs/img1.jpeg' ); $src_image = imagecreatefromjpeg ('a.jpg' );imagecopy ($dst_image ,$src_image , 0 , 0 , 0 , 0 , 300 , 200 ); header ('content-type:image/jpeg' ); imagejpeg ($dst_image ,'water_image.jpg' );imagedestroy ($img );
文件操作 文件测试 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 $file = "imgs" ;$img = "a.jpg" ;echo filetype ($file ); var_dump (is_dir ($file )); var_dump (is_file ($file )); var_dump (file_exists ($file )); echo filesize ($img );
文件读取 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 $file = "test.txt" ;$fp = fopen ($file ,'r' ); $content = fread ($fp ,filesize ($file )); echo $content ;fclose ($fp );$file = "a.txt" ;$fp = fopen ($file ,'a' ); $str = "abc" ;fwrite ($fp ,$str );fclose ($fp );$sfile = "a.txt" ; $dfile = "b.txt" ; copy ($sfile ,$dfile );$sfile = "a.txt" ; $dfile = "b.txt" ; rename ($sfile ,$dfile );$file = "a.txt" ;unlink ($file );$file = 'a.txt' ; readfile ($file ); $content =file_get_contents ($file ); echo $content ;$file = 'http://www.baidu.com/' ; $content =file_get_contents ($file );$rule = '/<title>(.+)<\/title>/' ;preg_match ($rule , $content ,$result );echo $result [1 ];$file = 'a.txt' ;file_put_contents ($file , "1234567" );
遍历 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 $rd = opendir ('imgs' ); function filter_dir ($rd ) { readdir ($rd ); readdir ($rd ); }filter_dir ($rd );while ($file = readdir ($rd )){ echo $file ; }closedir ($rd );$dir = "imgs" ;$files = scandir ($dir );foreach ($files as $key => $val ) { if ($val !="." && $val !=".." ){ echo $val ; } }
目录创建和删除 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $dir = "pages" ;mkdir ($dir );$dir = "pages" ;rmdir ($dir );$dir = "pages" ;function deldir ($dir ) { $files = scandir ($dir ); foreach ($files as $file ) { if ($file !="." && $file !=".." ){ $path = $dir .'/' .$file ; if (is_dir ($path )){ deldir ($path ); }else { unlink ($path ); } } } rmdir ($dir ); }deldir ($dir );
复制目录 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 $srcdir = "pages" ;$dstdir = "pages2" ;function copydir ($srcdir ,$dstdir ) { if (!file_exists ($dstdir )){ mkdir ($dstdir ); } $files = scandir ($srcdir ); foreach ($files as $file ) { if ($file !="." && $file !=".." ){ $srcpath = $srcdir .'/' .$file ; $dstpath = $dstdir .'/' .$file ; if (is_dir ($srcpath )){ copydir ($srcpath ,$dstpath ); }else { copy ($srcpath ,$dstpath ); } } } }copydir ($srcdir ,$dstdir );
文件上传 文件可以是图片、视频、PPT、Word、Excel文档等
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 <!doctype html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 文件上传</title > </head > <body > <h3 > 文件上传:</h3 > <hr > <form action ="up.php" method ='post' enctype ='multipart/form-data' > <p > 上传图片</p > <p > <input type ="file" name ="img" > </p > <p > <input type ="submit" value ="上传" > </p > </form > </body > </html > up.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 <?php echo " <pre>" ;print_r ($_FILES );echo "</pre>" ;$erroreCode = $_FILES ['img' ]['error' ];if ($erroreCode ==0 ){ $allowType = array ('png' ,"jpg" ,"jpeg" ); $allowSize = 500 *1024 ; $tmp_name = $_FILES ['img' ]['tmp_name' ]; echo $temp_name ; $name = $_FILES ['img' ]['name' ]; $size = $_FILES ['img' ]['size' ]; $ext = array_pop (explode ("." ,$name )); $fileName = time ().mt_rand ().'.' .$ext ; $targetPath = 'upload/' .$fileName ; if ($size <$allowSize ){ if (in_array ($ext , $allowType )){ if (move_uploaded_file ($tmp_name , $targetPath )){ echo $name ."文件上传成功" ; } }else { echo "只允许上传jpg或png图片" ; } }else { echo "只允许上传500k以下的图片" ; } }elseif ($erroreCode ==1 ) { echo '文件大小超过限制' ; }elseif ($erroreCode ==4 ){ echo "请选择图片" ; } ?>
文件上传错误码
0——文件上传成功。
1——上传的文件超过限制
在php.ini
中配置
[1]文件上传框文件大小限制
1 <input type ="file" name ="img" >
1 upload_max_filesize = 200 M
[2]form
表单文件上传大小限制
4——没有文件被上传,是空字符串
文件下载
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <?php $dir = "imgs" ;$files = scandir ($dir ); ?> <!doctype html> <html lang="en" > <head> <meta charset="UTF-8" > <title>文件下载</title> </head> <body> <h3>文件下载:</h3> <hr> <?php foreach ($files as $file ) { if ($file !="." && $file !=".." ){ $filePath = $dir ."/" .$file ; echo "<p>{$file} <a href='download.php?file={$file} '>下载</a> </p>" ; } } ?> </body> </html>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 <?php $file = $_GET ['file' ];$filePath = "imgs/" .$file ;$size = filesize ($filePath );header ("content-type:application/octet-stream" );header ("content-disposition:attachment;filename={$file} " );header ("content-length:{$size} " );readfile ($filePath ); ?>
面向对象 类的定义 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class Person { public $skin = '黄皮肤' ; public function cry ( ) { echo "我会哭" ; } }$user1 = new Person ();echo $user1 ->skin;echo $user1 ->cry ();
构造方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 class Person { public $name ; public function __construct ($name ) { $this ->name = $name ; } public function say ( ) { echo "my name is {$this->name} " ; } }$user1 = new Person ('小明' );echo $user1 ->say ();
析构方法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 class Person { public $name ; public function __construct ($name ) { $this ->name = $name ; } public function say ( ) { echo "my name is {$this->name} " ; } public function __destruct ( ) { echo $this ->name; } }$user1 = new Person ('小明' );$user2 = new Person ('小黄' );
对象链 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 class Person { public function say ( ) { echo "this is say 方法" ; return $this ; } public function eat ( ) { echo "this is eat 方法" ; } }$user1 = new Person ('小明' ,18 );echo $user1 ->say ()->eat ();
封装 protected protected : 被保护的,子类在继承父类的时候,如果父类有受保护的属性或方法,子类只能在子类中调用,我们无法访问受保护的属性或方法。如果一个类中设置了被保护的属性和方法,那么只能在类中调用,我们同样无法访问其属性或方法。也就是说,受保护的属性或方法可以被继承,但无法访问
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 class Person { protected $name ; public function __construct ($name ,$age ) { $this ->name = $name ; $this ->age = $age ; } public function say ( ) { echo "my name is {$this->name} " ; } public function eat ( ) { echo "{$this->name} 正在吃饭" ; } }class Student extends Person { public function __construct ($name ,$age ,$height ) { parent ::__construct ($name ,$age ); $this ->height = $height ; } public function learn ( ) { echo "{$this->name} 正在学习" ; } }$student1 = new Student ('小李' ,18 ,165 );$student1 ->learn ();
private private :私有属性和方法,只能自在自己的类中调用,我们无法访问其属性或方法。就算子类也无法继承了父类的私有属性和私有方法。
注意:如果子类存在和父类的同名方法,子类的同名方法权限必须不大于父类的同名方法,否则会报错。
继承 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 class Person { public $name ; public function __construct ($name ,$age ) { $this ->name = $name ; $this ->age = $age ; } public function say ( ) { echo "my name is {$this->name} " ; } public function eat ( ) { echo "{$this->name} 正在吃饭" ; } }class Student extends Person { public function __construct ($name ,$age ,$height ) { parent ::__construct ($name ,$age ); $this ->height = $height ; } public function learn ( ) { echo "{$this->name} 正在学习" ; } }$student1 = new Student ('小李' ,18 ,165 );echo $student1 ->height;$student1 ->learn ();
多态 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 interface Usb { public function start ( ) ; public function load ( ) ; public function unload ( ) ; }class Upan implements Usb { public function start ( ) { echo "U盘正在启动" ; } public function load ( ) { echo "U盘正在加载" ; } public function unload ( ) { echo "U盘正在卸载" ; } public function Virus ( ) { echo "添加杀毒功能" ; } }class Udisk implements Usb { public function start ( ) { echo "硬盘正在启动" ; } public function load ( ) { echo "硬盘正在加载" ; } public function unload ( ) { echo "硬盘正在卸载" ; } public function Virus ( ) { echo "添加杀毒功能" ; } }class Ucharge { public function start ( ) { echo "充电宝正在启动" ; } public function load ( ) { echo "充电宝正在加载" ; } public function unload ( ) { echo "充电宝正在卸载" ; } }$Upan = new Upan ();$Udisk = new Udisk ();$Ucharge = new Ucharge ();function UsbStandand (Usb $obj ) { $obj ->start (); $obj ->load (); $obj ->unload (); }UsbStandand ($Upan );UsbStandand ($Udisk );
抽象类 什么是抽象类呢?含有抽象方法的类就是抽象类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 abstract class Usb { public function start ( ) { echo "USB正在启动" ; } public function load ( ) { echo "USB正在加载" ; } abstract function unload ( ) ; }class Upan extends Usb { public function unload ( ) { echo "USB正在卸载" ; } public function Virus ( ) { echo "添加杀毒功能" ; } }$usb = new Upan ();$usb ->start ();$usb ->load ();$usb ->unload ();$usb ->Virus ();
接口 只含有抽象方法的类,说白了,接口是抽象类的一种
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 interface Usb { public function start ( ) ; public function load ( ) ; public function unload ( ) ; }class Upan implements Usb { public function start ( ) { echo "U盘正在启动" ; } public function load ( ) { echo "U盘正在加载" ; } public function unload ( ) { echo "U盘正在卸载" ; } public function Virus ( ) { echo "添加杀毒功能" ; } }$Upan = new Upan ();$Upan ->start ();$Upan ->load ();$Upan ->unload ();$Upan ->Virus ();
接口继承 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 interface Usb { public function start ( ) ; public function load ( ) ; public function unload ( ) ; }interface Usb2 extends Usb { public function run ( ) ; }class Upan implements Usb2 { public function start ( ) { echo "U盘正在启动" ; } public function load ( ) { echo "U盘正在加载" ; } public function unload ( ) { echo "U盘正在卸载" ; } public function run ( ) { echo "U盘正在运行" ; } public function Virus ( ) { echo "添加杀毒功能" ; } }$Upan = new Upan ();$Upan ->start ();$Upan ->load ();$Upan ->unload ();$Upan ->Virus ();
注:子类可以实现多个接口,只能继承一个父类
魔术方法 其他 设置浏览器解析编码 1 header ("content-type:text/html;charset:utf-8;" );
前后端数据交互 a链接传参 表单传值 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <title > 表单传值</title > <style > textarea { height : 100px ; resize : none; padding : 10px ; } </style > </head > <body > <form action ="reg.php" method ="POST" > <p > 用户名:</p > <p > <input type ="text" name ="username" > </p > <p > 密码:</p > <p > <input type ="password" name ="password" > </p > <p > 单选框:</p > <p > <label > <input type ="radio" name ="love" value ="篮球" > 篮球 </label > </p > <p > <label > <input type ="radio" name ="love" value ="羽毛球" > 羽毛球 </label > </p > <p > 多选框:</p > <p > <label > <input type ="checkbox" name ="love[]" value ="篮球" > 篮球 </label > </p > <p > <label > <input type ="checkbox" name ="love[]" value ="羽毛球" > 羽毛球 </label > </p > <p > 下拉菜单框:</p > <p > <select name ="day" > <option value ="星期一" > 星期一</option > <option value ="星期二" > 星期二</option > <option value ="星期三" > 星期三</option > </select > </p > <p > 多选下拉菜单框:</p > <p > <select name ="fruit[]" multiple > <option value ="苹果" > 苹果</option > <option value ="香蕉" > 香蕉</option > <option value ="梨子" > 梨子</option > </select > </p > <p > 文本域:</p > <p > <textarea name ="mess" cols ="30" rows ="10" > </textarea > </p > <p > 隐藏域:</p > <p > <input type ="hidden" name ="num" value ="100" > </p > <p > <input type ="submit" value ="登陆" > <input type ="reset" value ="重置" > </p > </form > </body > </html >
文件上传 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 <!DOCTYPE html> <html lang="en" > <head> <meta charset="UTF-8" > <title>文件上传</title> </head> <body> <form action="reg.php" method="POST" enctype="multipart/form-data" > <p>选择图片:</p> <p> <input type="file" name='img' > </p> <p> <input type="submit" value="登陆" > <input type="reset" value="重置" > </p> </form> </body> </html>
文件上传,只能采用POST请求,需要$_FILES接收