分享

php 学习笔记

 忘川书阁 2018-04-11

一、了解php
    1.什么是php
        PHP 超文本预处理器;服务器端的脚本语言;是一种被广泛应用的开放源代码的多用途脚本语言;他可以嵌入到html中;尤其适用web开发。
    2.php在web中的应用
        服务器端的 、嵌入到html中、 脚本语言
    3.php能做什么
        收集表单数据、生成动态页面、字符串处理、处理服务器端文件系统、编写数据库支持页面、会话控制、服务器端的相关操作。
    4.为什么要用php
        php 运行与各种平台(windows,linux,unix,mac os X 等等);php 兼容几乎所有服务器(apache iis);php支持多种数据库;
        php是免费的 请从哪官方网站下载 www. ;php易于学习并且高效的运行在服务器端。
    5.php主要应用的领域:服务器端脚本、命令行脚本。
二、 PHP内容
    1. 第一个php脚本程序
        a、php文件必须以.php为后缀,或者apache等web服务器的其他后缀名
        b、php文件必须放置在服务器根目录下才能运行 比如说  www目录 htdocs目录
        c、根目录下的文件与文件夹命令都不能用中文
        d、不能直接在本地打开 必须通过浏览器来访问php文件(localhost或者 127.0.0.1)
    2. php标记语言
        php文件中的代码 需要放置在这对标记中才能运行<?php  内容 ?>
    3. php代码嵌入html中的位置
        html文档中可以嵌套多个<?php ?> 开始和结束标记
        url传值的方式一定是get方式 请使用get方式接收
    
    4.PHP 解读开始和结束标记
        标准风格<?php  ?>     asp风格 <% %>    推荐使用标准风格
        注意:整个代码中只有php语言的时,请将结束标记省略。
    5. 指令分隔符 “;”
        PHP语法中的流程控制语句、定义函数的语句、定义类的语句都没有分号,除了上面的不需要加分号其他的都需要加分号。
    6. 程序的注释
        html <!-- -->
        css  /* */
        php 注释
            /**/ 多行注释        多行注释里面不能嵌套多行注释
            //   单行注释
            #  单行注释
    7. 在程序中的空白的处理
        空格和回车都是用来排版的,让你的代码可读性更高。
三、 php 基础语法
    1、变量  变量就是可变的量,可以把它看做一个容器。变量被声明后,在整个脚本中都是可以动态的改变变量的值。
    2、变量的命名(全名)规则
        a.以$开头 b.由字母数字下划线组成,但是不能以数字开头 c.可以使用中文,但是不推荐使用
        d.变量名严格区分大小写e.变量定义要起到见名知意的作用f.变量使用前必须先声明后使用。
    3、变量的相关函数
        echo 用来打印字符串或者打印变量(不能打印数组)
        print_r 打印变量信息(一般用来打印数组)
        var_dump 打印变量的相关信息(打印出所有信息)(照妖镜 什么妖魔鬼怪 一照变出原形)
        isset  检测一个变量是否被声明  如果声明返回 true,否则返回false
        unset  释放给定的变量
    4、可变变量
        $a = ’hello';
        $hello = 'world';
        echo $a;
        echo '<br/>';
        echo $hello;
        echo '<hr/>';
        echo $$a; // world
    5、变量的引用赋值
        变量总是传值赋值,内存开辟空间
        引用赋值: 在将要赋值的变量上加上&  ,内存不开辟空间
        如果加上&,两个变量就是一个值,任意改变其中一个变量的值,另一个也随着改变。
四、变量的数据类型
    1.类型
        标量类型: 布尔型 整型 浮点型 字符串
        复合类型:  数组  对象
        特殊类型:  资源 null
    2. 布尔型    true  false
        布尔值false、整型值0、浮点的0、空字符串和字符串0、空数组、空对象(只适用于php4)、特殊类型null的值是false,其他值都认为是true。
    3. 整型   正整数  负整数  0
        整型的最大值  相对于32位操作系统 我们的最大值是 2147483647
        整型的最小值  相对于32位操作系统 我们的最小值是 - 2147483647
        可以使用十进制  八进制  十六进制  二进制来表示整型。
        整型的值不能超过最大最小范围 如果超过了 将会被解析称为float;
        整型中如果转换为布尔型 除0以外的所有值都会被转换为true值。
    4. 浮点型    就是小数
        浮点数的最大值 相对于32位系统来说 1.7E 308。
        浮点数的最小值 -1.7E308  精确到小数点后15位。
        超出范围出现inf 无穷大。
    5. 字符串
        字符串,可以用单、双引号和定界符来定义,字符串没有长度限制。
        单引号: a、单引号不解析变量,效率高,推荐使用 
                b、单引号不能包含单引号,如果需要显示的单引号需要加上转义字符(\)
                c、在单引号中,如果试图转义特殊字符 ,反斜线本身会被显示出来 
                d、单引号可以使用转义字符串,但是只能转义单引号和转义字符本身。
        双引号: a、双引号解析变量 
                b、双引号可以解析特殊字符 
                c、双引号如果解析变量,请在变量后加上空格或者{}
                d、双引号可以插入单引号 单引号中可以插入双引号(可以互插)
                e、但是双引号中不能插入双引号,单引号中不能插入单引号
                f、如果想在双引号中使用双引号那么请使用转义字符(相当于润滑剂)
    6.定界符
        <<<    声明方式 :在定界符后面给一个标识符开始然后以这个标识符结束
        例如:
                <<<aaa
                aaa;
            定界符的结束表示必须写在第一列,而且必须作为一个单行,后面不能有任意字符。
            定界符的标识符必须遵循php中的命令规范:只能包含数字、字母下划线、但是不能以数字开头。
            定界符的作用和双引号相同,常用于文本和大段落数据输出文档使用。
    7.数组  
        数组就是一组数的集合,用array来声明数组
        根据下标区分:关联数组、索引数组、混合数组
        根据维度来区分:一维数组、二维数组、多维数组
    8.对象   对象和类  
        资源类型(resource) 电脑中存放的都是资源,通常是通过php函数打开一个文件或者图片,或者数据库连接等产生。
    9.null   浮云的意思, 神马都是浮云     null 不区分大小写
        认为是null的情况:
             a.将变量直接赋值null 
             b.声明的变量尚未被赋值 
             c.被unset函数销毁的数值
    10.isset  检测变量是否被声明,如果声明返回true 否则返回false
    11.empty 判断变量值是否是空零假,如果是返回true 否则返回false
五、判断类型
    is_int(),is_integer() 和is_long()  判断是否是整型
    is_float(),is_double()和is_real()  判断是否是浮点型
    is_bool()        判断是否是布尔型
    is_string()      判断是否是字符串
    is_array()       判断是否是数组
    is_object()      判断是否是对象
    is_resource()    判断是否是资源
    is_null()        判断是否是null
    is_scalar()      判断是否是标量
    is_numeric()     判断是否是任何类型的数字或数字字符串
    is_callable()    判断是否是有效的函数名
六、类型转换
    1、自动转换
        四种标量通过运算的时候会自动转换
        只有标量才是用自动类型转换,一般是在运算时
        布尔型参与运算 true ->1   false->0
        null 参与运算  null ->0
        integer 和float 运算 把integer 转换为float在运算
        字符串和数字运算,字符串先转换为数字 在参与运算
        字符串转换为数字,从前开始到第一个不是数字的字符结束
        整型转换为浮点数精度不改变
        浮点数转换整型舍弃小数点 保留整数部分 如果浮点数超过整数范围 答案不确定
        null 值转换为字符串是空字符串
    2、强制转换
        两种方式:
        a.使用括号加目标类型进行类型转换(int) (integer)、(bool)(boolean)、float)(double)(real)、
          (string)、(array)、(object)
        b.使用类型转换函数    intval()、floatval()、strval()、settype()
        设置类型:第一个参数 变量  第二个参数 要转换的类型
七、常量
    1、常量用来表示程序中一些需要经常用到的固定的值
        定义常量:
            define()
            define(‘常量名’,’标量’,false);//false 常量名区分大小写 默认值  推荐使用默认值
            define(‘常量名’,’标量’,true);//true 不区分大小写(不推荐使用)
        常量的方式:
            const 常量名= 常量值
        常量名的定义规范:
            a.常量名不能以$开头 
            b.常量名以字母数字下划线组成 
            c.不能以数字开头 
            d.常量名可以使用中文,但是不推荐使用
            e.常量一旦定义不能取消不能重新定义 
            f.常量全局有效
    2、常量值 数据类型可以有多种(php5.6以下是这样的是四种  php7 类型限制没有到四)
    3、用来检测常量的函数
       defined() 用来检测常量是否被声明,被声明返回true,否则false。括号中一定要有引号
八、系统常量
    PHP_OS   php运行系统名称   区分大小写
    PHP_VERSION php 版本       区分大小写     
    TRUE
    FALSE
    NULL
九、魔术常量
    1、__FILE__  返回当前文件全路径包括文件名
    2、__LINE__  返回当前行数

PHP 运算符
-------------------------
一、什么是运算符
    运算符是可以通过给出的一个或多个值(用编程的语言来说 叫做表达式),来产生另一个值(因而整个结果成为一个表达式)的东西.
二、运算符类型
    1.一元运算符:只运算一个值 例如:$a++, ++$a, !$a
    2.二元运算符: 有两个操作数的  $a+$b $a-$b...
    3.三元运算符: ?: 他应该被用来根据一个表达式在另两个表达式中选择一个,而不是用来在两个语句或者程序中选择,将整个三元表达式放在括号中是个好办法.
三、运算符功能分类
    1.算术运算符      +    -    *    /    %
            ++  前加加(++$a) 先运算后赋值   后加加($a++) 先赋值后运算
            --  前减减(--$a) 先运算后赋值   后减减($a--) 先赋值后运算
    2.连接运算符(字符串运算符)    . 神奇的米粒
        a. 字符串和字符串连接时候需要使用
        b. 字符串和变量连接时候需要使用
        c. 变量和字符串连接时候需要使用
        d. 变量和变量连接时候需要使用
    3. 赋值运算符  注意: 请记住等号在这里不是等于的意思是赋值的意思
        =   将一个值或者表但是的结果赋予给变量
        +=  将变量与所赋的值相加后的结果赋给变量
        -=  将变量与所赋的值相减后的结果赋给变量
        *=  将变量与所赋的值相乘后的结果赋给变量
        /=  将变量与所赋的值相除后的结果赋给变量
        %=  将变量与所赋的值求模后的结果赋给变量
        .=  将变量与所赋的值相连后的结果赋给变量
    4. 比较运算符
        >   大于       当左边大于右边的时候返回true 否则返回false
        <   小于       当左边小于右边的时候返回true 否则返回false
        >=  大于等于   当左边大于等于右边的时候返回true 否则返回false
        <=   小于等于  当左边小于等于右边的时候返回true否则返回false
        ==   等于      两边操作数的值相等时返回true 否则返回false
        ===  全等于    两边值相等并且类型也相等返回true 否则返回false
        !=或者<>不等于 两边值不相等时返回true 否则返回false
        !==  非全等于  两边的值与类型相同的时候返回false 否则返回true
    5. 逻辑运算符
        逻辑与:     &&   或者(and) 判断条件 一边为假 即为假(洗脸)
        逻辑或:     ||   或者(or)  判断条件  一边为真 即为真(丢钱包)
        逻辑非:     !    判断条件  真变假  假变真(去泰国)
        逻辑异或:   xor  判断条件  相同为假 不同为真(生小孩)
    6. 其他运算符
        ? :  三元运算符 可以提供简单的逻辑判断 ?后面的为真区间 : 后面的为假区间
        ``   反引号(``)是执行运算符php 将尝试将反引号的内容作为外部命令来执行 并将其处输入的内容返回
        @    错误控制运算符 ,将其放置在一个php表达式前面,用来控制可能产生的任何错误。可以忽略点错误信息。
        =>   数组下标指定符  通过此符号指定数组的下标和值
        ->   对象成员访问符号  访问对象中的成员属性和成员方法
        instanceof   类型运算符  用来 测定一个对象是否来自指定的对象类

PHP 流程控制
--------------------------
一、流程控制
    1.顺序结构   
        自上而下 从左到右
    2.条件分支结构
        a. 单向分支结构
            if() 只能管理一条指令 这条指令是和他紧跟着的指令
            if(){} 只能管理整个花括号里面的代码 我们管这段代码叫做代码块或者语句体
            if(): endif; 替换语法 模版模式
        b. 双向分支结构
            if() else if只能控制一条语句所有if后面不能写多个语句写多个语句会报语法错误
            if(){}else{}
            if(): else: endif;
        c. 多向分支结构(if else从句)
            if(){}elseif(){}else(){}
        d. 多向分支结构(switch case从句)
            switch(){
                case 1:
                case 2:
                    }
            注意: switch从句 case后面可以是分号也可以是冒号但是推荐使用冒号
            switch 语句中 每个case条件后面一个要写一个break进行跳出,匹配的类型可以是不相同的
        e. 巢状分支结构
    3.循环结构
        循环三要素: 初始值   循环条件    改变条件
        for计数循环
            格式: for(表达式1;表达式2;表达式3){循环体语句}
                表达式1: 用来循环的初始值
                表达式2: 用于循环的判断条件是否执行循环  true 执行 false 不执行 执行n+1次
                表达式3  用于改变条件 循环中$i++
    
            for循环执行顺序:
                表达式1->表达式2->循环体语句->表达式3->表达式2->循环体语句->表达式3->
                表达式2->循环体语句->表达式3->表达式2(不满足条件)->跳出循环
                for 可以将表达式123全部拿出来
        布尔循环
            while  do..while
            while(循环条件){循环体}    
    
二、特殊流程控制
    1.break  跳出整个循环,执行下面代码
    2.continue 跳出当次循环,进入下次循环
    3.exit 别名 终止整个程序执行,不会再次执行下面内容
    4.die  终止整个程序执行,不会再次执行下面内容
三、goto 了解即可
    goto 操作符用来跳转到程序中的另一个位置,这个位置可以用操作符名称加上冒号标记。


PHP 函数
------------
一、函数定义
    1、定义: 就是一个被命名的、独立的代码段、他可以执行特定任务,并且返回给调用他的程序一个返回值
    2、函数是被命名的:每个函数都是有唯一的名称,在程序的其他部分使用该名称可以执行函数中的语句,称为调用函数
    3、函数是独立的: 无须其他程序干预,函数可以自己执行其任务
    4、函数执行特定任务: 任务就是我们要运行的特定代码和具体工作,比如输出一行字、算出立方根  对数组进行排序等
    5、函数可以将一个返回值返回给调用的程序:程序调用函数时,将执行该函数中的语句 而这些语句可以将信息返回给调用他们的程序
二、函数的优越性
    a.提高程序的重用性    
    b.提高软件的可维护性    
    c.提高软件的开发效率    
    d.提高软件的可靠性    
    e.控制程序设计的复杂性
三、自定义函数
    1、函数的声明
        a、语法格式
            function 函数名([参数1,参数2,参数3,....参数n])
            {
                函数体//可以是多条代码 可以是代码块
                return 返回值
            }    
        说明:参数可以没有,也可以有多个如果没有参数小括号要保留
        return 返回值 可以没有 但是没有返回值的函数是不完整的
        return 语句结束后,不要在写其他代码 因为不会被执行
    2、函数的命名
        命名规则
            a.函数名命名遵循php命名规则,字母数字下划线组成但是不能以数字开头
            b.函数名不区分大小写
            c.不能重复声明函数名一样的函数
    3、函数的调用
        格式:
            函数名();
    4、检测函数名是否被定义
        function_exists(); 判断函数名是否被声明
    5、参数列表
        a.形参 
            形参就是在函数声明的时候小括号里面的参数我们就叫做形参
            形参可以有默认值,也可以没有默认值
            没有默认值的时候,必须有实参传递过来(默认值相当于小三 ,实参就是老婆)
            如果有默认值请将默认值放在参数的最右边,没有默认值的请放在左边
            多个形参的时候中间使用逗号隔开
        b.实参
            实参是在函数调用的时候小括号里面的参数我们叫做实参
            实参的个数可以比形参多,多出来的参数没有用,所以我们实参的个数需要按照形参的个数去写,
            但是如果你的形参有默认值可以少写你的实参。    
     6、return 返回值
            作用:
                1.return   语句可以返回一个函数体任意值
                2.return   相当于退出函数所以 return后面的代码不会被执行
                3.函数中没有return就只能算是一个执行过程,不能将函数里面的值拿到,也就是说只能看看
                           这个函数不能使用了函数。
四、各种各样的函数
    1.常规参数的函数 就是实参和形参应该的个数相等 类型一致
    2.可变个数参数的函数(不需要写形参)  实参(任意)个数大于形参个数的函数   参数长度不固定
        a.func_get_args() 获取参数列表并且以数组的形式返回
        b.func_num_args() 获取参数个数
        c.func_get_arg(index)  通过下标取出我们数组中的值
    3. 变量函数
        变量函数:如果一个变量后面有括号 $var = ‘hello’;$var() 就会寻找与变量值同名的函数进行调用
    4.回调函数
        回调函数:有一个参数值是另一个函数的函数名并且会自动调用该函数
        例:将函数名sum,函数名xo,函数名chicken 函数名shang,作为字符串参数
        传递给result函数那么我们就说sum,xo,chicken,shang,就是result函数的回调函数。
    5.匿名函数  ☆☆☆
        声明格式:    $user= function($a,$b){};
        匿名函数后面必须加分号 算作功能型语句;扩展use 会自动把外部的同名变量引入到内部使用;
        使用use的时候 被引入的变量必须存在。
    6.递归函数
        就是自己调用自己的函数就是递归函数。
五、PHP变量的范围
    1.全局变量    
        在函数外声明的变量就是全局变量
        全局变量在局部中使用,在函数内部使用全局变量需要借助$GLOBALS 超全局数组。
    2.局部变量
        在函数内声明的变量就是局部变量
        局部变量在全局中使用,需要借助关键字 global  global关键字声明变量。
        注意: global关键字声明变量的时候不能再声明上直接赋值。
    3.根据存储方式上可以分为动态存储和静态存储 
        i. 普通变量(动态存储)
             $变量名 = 变量值    函数调用一次声明一次释放一次。
        ii. 静态变量
             static $变量名= 变量值 声明的静态变量会在第一次运行函数的时候,
            就存储到内存中不会释放,每调用一次都会直接在内存中取出来。    
六、使用自定义函数库
    1.include
        写法:
            a)include ‘function.php’
            b)include(‘function.php’)
    2.require
        写法:
            a)require ’function.php’
            b)require(‘function.php’)
    3.include_once
        作用:如果该文件中代码已经被包含了,则不在被包含否则在进行包含,以确保文件只被包含一次。
    4.require_once
        作用:如果该文件中代码已经被包含了,则不在被包含否则在进行包含,以确保文件只被包含一次。
        区别:include 弹出的错误会继续执行 require 弹出的错误不会继续执行


  数组
---------------
一、数组的概念
    a)概念: 数组的本质是存储、管理和操作一组变量,属于复合类型的一种。
    b)关于键值对的概念:$arr = array('id'=>1,'name'=>'wuli涛','sex'=>'人妖','age'=>34);
      每个数组可以有多个值,多个值之间用逗号隔开,每个逗号内的数据称为一个单元,每个单元都
      是由键(下标)=>值 也就是键值对的组成,如果不写下标(键)默认会使用整数作为下标,每个单元的值必
      须有下标,通过下标来定位每个值在数组中的位置 每个单元有些只有一个种类型的下标,索引(整数)或
      者关 联(字符串)。
二、数组的定义(声明)方法
    1.直接赋值法
        a)直接赋值法如果声明时不指定下标 默认从0分配索引下标。
        b)如果给出索引下标  下一个下标就会从最大的开始每次增加一,如果后面出现前面的下标
          就会覆盖前面的赋值
        c)混合数中索引序列不会被关联下标影响。
    2.使用array方法
    
    3.使用[]定义                  注意:php5.3.60以后版本支持此方法
三、数组的分类
    1. 按下标(键)不同分
        a)索引数组        使用整数作为下标(键)
        b)关联数组        使用字符串作为下标(键)
        c)混合数组        即使用整数又使用字符串作为下标(键)
          注意:下标(键) 是用来定位值在数组中的位置,每个值只能使用一种类型下标. 下标也称为键。 
    2. 按照维度不同分
        a)一维数组        数组内再也没有数组元素
        b)二维数组        数组内还有数组
        c)多维数组        数组内还有数组  数组内还有数组  各种嵌套
        一维数组、二维数组、多维数组、声明方式都是一样的 三种。

四、数组遍历方式
    数组的遍历概念:使用一种特定的规则来逐个读取数组中的键和值。
    1.for语句
        for语句只能遍历索引数组,并且下标是连续的 而且要注意$i的值 不能遍历关联数组。
    2.foreach() 语句(专业)
        a.只遍历值    foreach(要遍历的数组 as 值){}
        b.遍历键和值  foreach(要遍历的数组 as 键=>值){}  
        注意: $key与$value 变量名不是固定的  可以任意命名    foreach 是有循环的功能
    
        注意:推荐使用的遍历二维数组的方式
                foreach($arr as $key=>$value){
                //var_dump($value);
                echo $value['name'].'<br/>';
                echo $value['age'].'<br/>';
                echo $value['sex'].'<br/>';
                }
          
    3.while_list_each  语句遍历数组
        list可以将一组索引数组单元逐个赋值给一组变量,把每个值赋给list内的变量
        list 只能给索引数组的单元赋值,不能将关联数组的值赋值 而且这个索引数组必须是从0开始
    4.指针的方式遍历数组
        current() 返回当前指针指向的数组单元的值  
        key()     返回当前指针指向数组单元的键
        next()    返回下一个指针位置指向的单元的值
        prev()    返回上一个指针位置指向的单元的值
        end()     返回最后一个单元的值
        reset()   重置指针返回初始状态
五、预定义数组(超全局数组)
    i.服务器变量 : $_SERVER
        1.$_SERVER['SERVER_ADDR']; 客户端ip地址
        2.$_SERVER[‘HTTP_REFERER’] 上级来源地址
        3.$_SERVER['DOCUMENT_ROOT'] 根目录的绝对路径
        4.$_SERVER['SCRIPT_NAME'] 当前运行脚本名
        5.$_SERVER['QUERY_STRING'] get请求所带的参数列表字符串形式表现
    ii.HTTP GET变量: $_GET       使用get方式传递值的时候接收使用
    iii.HTTP POST变量:$_POST     使用post方式传递值的时候接收使用
    iv.request变量:$_REQUEST     接收get、post、cookie 传递值的时候接收使用
    v.HTTP 文件上传变量:$_FILES  用来打印文件上传是否成功的文件信息
    需要使用enctype="multipart/form-data"来配合文件上传,只有写了才可以使用$_FILES 打印上传的文件信息
    vi.HTTP cookies: $_COOKIE
    vii.session变量:$_SESSION   
    viii.GLOBAL 变量: $GLOBALS


 错误处理和时间函数
-----------------------、
一、错误处理
    a)错误报告级别
        1.语法错误: error 会给一个致命错误  终止程序继续执行
        2.运行时错误: notice warning  运行代码的时候错了 有错误提示,但是他们不会影响程序运行 
          但是结果不是我们想要的
        3.逻辑错误:逻辑出现错误  最大的难就就是不报错,不好排除
        4.notice: 本身不是一个错误  只是一个提示,这个错误可以忽略
        5.warning: 警告只要产生warning错误 程序的执行结果就不是我们想要的,但是这个级别的错误,
          不会终止程序执行 但是这个错误必须解决掉
        6.error:致命错误  必须排除
    b)调整错误报告级别
        E_ERROR   1 致命的运行时错误(阻止代码执行)
        E_WARNING 2 运行时警告
        E_NOTICE  8 运行时注意
        E_ALL       所有的错误,警告的注意信息
    
    c)trigger_error 代替die()
        trigger_error 可以模拟一个报错信息输出
    d)自定义错误处理
    1.屏蔽错误
        a.
        ini_set()  设置php.ini中的配置项
        ini_get()  获取php.ini中的配置项    
        b.
        error_reporting() 设置错误报告级别
        E_ALL^E_NOTICE
        E_ALL^E_NOTICE^E_WARNING
    2.手动修改错误
        a); Possible Values:
        b); Off = Do not display any errors
        c); stderr = Display errors to STDERR (affects only CGI/CLI binaries!)
        d); On or stdout = Display errors to STDOUT
        e); Default Value: On
        f); Development Value: On
        g); Production Value: Off
        h); http:///display-errors
        i)display_errors = On 将on 改成off屏蔽错误
    或者
        ; Common Values:
        ; E_ALL (Show all errors, warnings and notices including coding standards.)
        ; E_ALL & ~E_NOTICE  (Show all errors, except for notices)
        ; E_ALL & ~E_NOTICE & ~E_STRICT  (Show all errors, except for notices and coding 
            standards warnings.)
        ; E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR  (Show only errors)
        ; Default Value: E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
        ; Development Value: E_ALL
        ; Production Value: E_ALL & ~E_DEPRECATED & ~E_STRICT
        ; http:///error-reporting
          error_reporting =E_ALL & ~E_NOTICE
    3.自定义错误日志
        error_log() 使用指定的文件记录错误报告日志
        error_log写入wamp下面的php日志中
        ; Log errors to specified file. PHP's default behavior is to leave this value
        ; empty.
        ; http:///error-log
        ; Example:
        error_log ="c:/wamp/logs/php_error.log"
        ; Log errors to syslog (Event Log on Windows).
        ;error_log = syslog
    4.以下几种情况可以考虑自定义错误处理
        a)可以记下错误信息 及时发现一些生产环境出现的问题
        b)可以屏蔽错误
        c)可以控制错误的输出
        d)可以作为调试工具
二、时间函数
    1.UNIX 时间戳
        自从Unix纪元(格林威治时间1970年1月1日 00:00:00)到现在的秒数
    2.获取事件戳
        time() 函数返回一个当前系统的时间戳
    3.格式化时间戳
        date() 有两个参数 第一个参数是要以什么格式输出  第二个参数是时间戳
        返回将整数时间戳 按照给定的格式字符串而产生字符串 如果没有给出时间
        戳则使用本地当前时间戳 换句话来说就是时间戳可选 如果没有就默认当前时间戳.
    4.获取指定时间的时间戳
        mktime取的一个日期的unix时间戳
        mktime(时,分,秒,月,日,年)
    5.时区
        date_default_timezone_set() 设置时区
        参数值:
        PRC 中华人民共和国
        Asia/Shanghai 亚洲/上海
        Asia/ChongQing 亚洲/重庆
        Asia/Hong_Kong 亚洲/香港
        date_default_timezone_get() 获取时区
    6.用英文文本来描述时间
        strtotime() 将任何英文文本的日期和时间描述成时间戳
        unix时间戳的有效期
        
    
正则表达式
------------------
一、什么时候用正则表达式?
    当字符串函数已经不能胜任某个功能的时候,用正则表达式来搞定。
    其作用就是用来对字符串进行匹配查找,替换以及分割等操作。
二、学习正则表达式可以做什么
    1. 操作字符串是正则表达式的唯一作用
    2. 验证用户名,长度
    3. 验证电话号
    4. 验证密码是否符合规则符合标准
    5. QQ聊天表情
    6. 新闻采集器/小偷程序
三、看看正则的几个特点
    正则表达式也是一个字符串
    由有特殊的意义的字符串组成,具有一定编写规则,也是一种模式看做是一种编程语言。
    注意: 如果正则表达式不和函数一起使用则他就是普通字符串 如果将正则表达式放入函数中使用,
          才能发挥正则表达式的作用。
    preg_match() 进行一次正则表达式匹配
    preg_match_all() 进行全局正则表达式匹配
    第一个参数: 正则表达式
    第二个参数: 要匹配的变量
    第三个参数: 匹配出来的数组
四、学习流程
    1.语法学习   就是一个字符串
    2.函数学习   查找替换匹配等
    以上内容缺一不可
五、正则表达式的语法
    1.正则定界符
    2.正则表达式中的原子
    3.正则表达式的元字符(原子修饰符)
    4.正则表达式模式修饰符
六、定界符
        是用来声明正则表达式的边界符号,常用的是’/’ 推荐使用。实际上数字、字母、 ’\’ 之外都可以。
        如果你要将$作为定界符的情况下外面必须使用单引号作为字符串的定界符不能是双引号,因为双引号会
        解析变量。
    注意:
        正则表达式有两个定界符
        一个是字符串的引号的边界符
        一个是正则的定界符
七、原子符
        是正则表达式的最小单位,所有可见的字符都是原子,大部分不可见字符也是原子,如:空格、转义
    字符。
    1. 普通字符   数字  字母 下划线
    2. 特殊字符   ! @ # $ % ^ & *
    3. 非打印字符
    \f -- 分页符
    \n -- 换行符
    \r -- 回车符
    \t -- 制表符
    \v -- 垂直制表符
    ☆☆☆
    \d   匹配所有数字
    \D   匹配非数字
    \s   匹配所有空白字符 包括 \r  \n  \t 等
    \S   匹配非空白字符
    \w   匹配字母数字下划线
    \W   匹配非字母 数字 下划线
    .    匹配所有内容 但是除了\n以外
    \V   匹配转义字符串
八、正则表达式的元字符(原子修饰符)
    1、原子列表
        [abc]   可选列表  只能是原子列表中的一个字符
        [4-6]   连续的列表  4,5,6 可以匹配
        [^abc]  排除列表  除了 a,b,c 都可以
    2、原子修饰符
    +    表示一个或者多个
    ?    表示0个或者一个
    *    表示从0个到n个
    {}
        {m,n} 表示m到n个
        {m,}  表示m个以上
        {m}   表示m个
九、词边界修饰符
    可以分割单词的都是词边界,非字母数字下划线。
    \b    词边界
    \B    非词边界        
    注意: 词边界只对英文有效
十、字符串边界
    ^  以指定字符开头的
    $  以指定字符结尾
    ^ 字符串$  精确匹配字符串
十一、选择修饰符
    |    逻辑或
     /a|b/          匹配 a或者 匹配b
     /abc|def/      匹配abc或者def  字符串的结合优先于选择
    /ab(c|d)ef/     匹配 abcef 或者 abdef
十二、模式单元 ()
        改变优先级
        将多个原子视为一个原子
        可以将括号的内容在函数的辅助下反向引用
        $preg ='/\d{2}(\d{2})-\1-\1\s*\1:\1:\1/';
        $str = "2018-18-18 18:18:18";
        ☆☆☆
        反向引用 是目标字符串中有重复内容的时候可以这么用 但是如果只是模式一样 那是不行的
        第几个括号 后面就用\几来代替。
十三、模式修正符
    i    忽略大小写
    x    忽略正则表达式空白
    s    视为一行  .可以匹配\n的
    m    视为多行  .不可以匹配\n
    U    改变贪婪模式  .*默认就是贪婪模式  .*? 默认就是非贪婪模式。


文件系统
------------------
一、文件系统概念
    php的文件系统不是一个系统,是php处理文件的一个扩展模块,给我们提供了一组操作文件的函数。
二、文件类型及属性
    1.文件类型
        函数filetype() 获取文件的具体类型
            windows 类型:
                file   文件类型
                dir     目录类型
                unknown 未知类型
            linux 下类型:
                file 文件类型
                dir  目录类型
                unknown 未知类型
                block 块设备类型,例如某个磁盘、软驱、光驱CD-ROM等
                char  字符设备,就是输入端  键盘 打印机等
                link  符号链接,快捷方式
    2. 文件类型判断
        is_dir            -- 判断给定的文件是否是一个目录
        is_file()         -- 判断给定的是不是一个正常文件
        is_executable()   --判断给定的文件是否是可执行
        is_readable()     -- 判断给定的文件名是否可读
        is_writable()     -- 判断给定的文件名是否可写
    3. 文件的属性
        file_exists() 检测文件是否存在 文件名  存在返回true 不存在false    
        filesize()    获取文件的大小   文件名 返回大小 字节数  出错:false
            注意:filesize不能统计目录大小,只能获取文件大小。
        filectime()  获取文件的创建时间 文件名 返回 unix时间戳格式
        filemtime()  获取文件的修改时间  文件名  返回 unix时间戳格式
        fileatime()  获取文件的访问时间 文件名 返回unix时间戳格式
        (和我们的系统有关系 如果你是linux 系统可以使用 windows系统有差别)
        stat()  获取文件大部分属性  文件 返回一个给定的属性信息的数组
        关联键名(自 PHP 4.0.6)说明
        dev    device number - 设备名
        ino    inode number - inode 号码
        mode   inode protection mode - inode 保护模式
        nlink  number of links - 被连接数目
        uid    userid of owner - 所有者的用户 id
        gid    groupid of owner- 所有者的组 id
        rdev   device type, if inode device * - 设备类型,如果是 inode 设备的话
        size   size in bytes - 文件大小的字节数
        atime  time of last access (unix timestamp) - 上次访问时间(Unix 时间戳)
        mtime  time of last modification (unix timestamp) - 上次修改时间(Unix 时间戳)
        ctime  time of last change (unix timestamp) - 上次改变时间(Unix 时间戳)
        blksize  blocksize of filesystem IO * - 文件系统 IO 的块大小
        blocks number of blocks allocated - 所占据块的数目

三、 目录操作
    1.解析目录路径
        常用的文件目录路径格式:
        $unixpath = ‘/var/www/html/index.php’;
        在unix系统中的绝对路径 必须使用’/’分隔
        $winpath =’C:\wamp\www\oto\ss19\A24_php14\demo.php’;
        在window系统中的绝对路径 默认使用’\’分隔
        $winpath =’C:/wamp/www/oto/ss19/A24_php14/demo.php’;
        在window系统中也可以使用’/’分隔
        注意使用绝对路径与相对路径
        basename -- 返回路径中的文件名部分
        dirname  --返回路径中的目录部分
        pathinfo() -- 返回文件路径信息 返回一个数组 你可以根据下标来获取里面的值
            PATHINFO_DIRNAME   获取目录部分
            PATHINFO_BASENAME 获取文件名部分
            PATHINFO_EXTENSION  获取后缀名
            PATHINFO_FILENAME   获取文件名
    2.遍历目录
        opendir() -- 打开目录  返回一个资源
        readdir() -- 读取目录  
        closedir() -- 关闭目录
    3. 统计磁盘大小
        disk_free_space() -- 返回目录可用空间 单位为字节
        disk_total_space() -- 返回目录总空间  单位为字节
    4. 建立与删除目录
        mkdir -- 新建目录
            第一个参数 要创建的目录路径
            第二个参数 是权限 ‘777’
            第三个参数 是否递归
        rmdir -- 删除空目录
    5. 创建与删除文件
        touch  --  创建一个空文件
        unlink  -- 删除文件
    6.打开文件
        fopen()  --打开文件 返回值是一个资源  我们也叫做文件句柄
            第一个参数 要打开文件的路径
            第二个参数 要以什么模式打开
                r   只读方式
                w   只写方式 清空文件,从头开始写 如果文件不存在则创建
                a   只写方式 追加模式 如果文件不存在则创建
                r+  读写方式打开   从头开始覆盖
                w+  读写方式打开  清空文件 从头开始写
                a+  读写方式打开 如果写则是追加方式
                x   只写方式开打  如果文件存在则报错
                x+  创建并读写方式打开 将文件指针指向文件头如果文件已存在则报错,如果文件
                    不存在则尝试创建之
     7.写入文件
        fwrite -- 写入文件
            第一个参数  打开文件的资源
            第二个参数  要写的字符串
        file_put_contents()-- 写入文件
            第一个参数: 要写入的文件名
            第二个参数:写入的内容
    8.读取文件内容
        fread() 读取文件内容
            第一个参数  打开文件的资源
            第二个参数 要读取文件的大小
        file_get_contents() --将文件读入字符串,一个参数 文件名
        fgets() 从打开的文件中读取一行
        fgetc() 从打开的文件中读取一个字节
        file()  把文件读入一个数组中
        readfile() 把文件直接读取到当前页面 不需要打印
    9.重置指针
          rewind() -- 重置指针 一个参数 打开文件的资源
    10.复制文件
          copy -- 拷贝文件(不能拷贝目录)
            第一个参数 你要拷贝的文件路径
            第二个参数  你要拷贝到什么地方的路径
    11.通过操作
        rename -- 重命名一个文件或目录
            第一个参数 老文件名(路径)
            第二个参数 新文件名(路径)
        统计目录大小
        删除目录(如果你是删除目录 请一定要注意你的两个特殊目录必须排除)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多