自己总结的PHP

来源:互联网 发布:福建省来宝网络 编辑:程序博客网 时间:2024/06/05 19:18

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

php的三种注释方法
//单行注释
/**/多行注释
#脚本注释

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

php就是超文本预处理器,超文本一般是指html,预处理器就是经过php处理的到我们看到的网页.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

php的四种风格
标准风格<?php 代码 ?>
长风格 <script language="php">代码</script>
短风格<? 代码 ?>
asp风格<% 代码 %>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

ob后面有数的是二进制,0x后面有数的是十六进制,0
阿斯科码中a=97

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

变量
变量就是用来存储数据的容器,以$符号开头,严格区分字母,不能以数字开头,由字母数字下划线组成,例如$bianliang=222;做好采用驼峰式命名
变量中存的数据类型有八种
,四种标量类型(int整型 float浮点型boolean布尔型 string字符串类型)两张特殊(null空型resource资源型)两张复合类型(array数组类型 object对象型)


整型就是整数,正负二十一忆, 浮点型就是浮点数,布尔型就是真假值,string就是字符串,值要用单引号或双引号引起来
双引号和单引号的区别:带引号不支持解析变量,双引号支持解析变量.双引号中的变量最好用大括号括起来,防止一些不必要的错
单引号不能插入单引号,双引号中不能插入双引号,单引号中可以插入双引号,双引号中也可以插入单引号,
单引号中要想插入单引号必须插入转义符(\)右斜杠,单引号只支持转义单引号和反斜线.单引号的执行速度要比双引号的执行速度快.
双引号中要想插入双引号也要用转义字符反斜线,双引号中可以插入所有的转义字符




定界符<<<,定界符一般用的比较少.通常定义一大段文字,字符串的时候才用到,定义方式如下,
<<<定界符的名称 然后是要定义的文字,结束要顶格写定界符的名称,然后加上分号结束




null型 它表示一种状态,以下三种方式表示空,1.变量的值为空.2.不存在的变量 3.被销毁的变量。


自动类型转换
在条件判断中这七个的 值为false。1布尔型false 2整型的0.3浮点型的0.0 4,string型的0  5string的空字符串,  6空数组   7不存在的变量

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在进行数学运算的时候自动转为的其他类型的标量
布尔型的false将转为0,true将转为1,null型转为0.


在进行字符串运算的时候会自动转为字符串的有
布尔型true转为1,false转为空字符,null转为空字符串


强制类型转换
settype(原变量名,"转成的类型");强制设置一个变量的类型,除了资源类型,其他的都可以强转
新的变量名=(将被转成的类型)被转的变量名;例如$a="100";是一个字符串,将字符串转成一个int型的,$b=(integer)$a;


gettype(变量名);这个函数是为了获取到一个变量值的类型.
is_bool(变量名);判断一个变量是不是一个布尔型的值
is_标量类型名(变量名);判断一个变量时不是某种类型
isset(变量名);判断一个变量是否被设了值,返回值是布尔类型,设置了为真.
empty(变量名);判断一个变量是否为空,

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

引用变量和可变变量
引用变量:引用地址就是相当于两个变量共用一个地址,无论对变量谁的值进行改变,另一个变量的值也会改变,当一个变量被销毁的时候,另一个变量的值不会改变,
注意:每声明一个变量就会在内存中开辟一块空间来存放内存地址值,内存地址值是十六进制的数,这个内存地址值会指向变量所赋的那个值,当一个新的变量$a的地址值是$b的地址值的时候,即$a=&$a;注意这个位置比普通的赋值多了一个& 符,这个符号在这里就表示是赋的是内存地址值.


可变变量就是一个逗比,从概念上讲,他是把一个变量的值作为自己的变量名,要注意的是变量的值不能是数字,因为变量名不能以数字开头,当你看到一个变量名前有多个美元符号的时候,他就是一个可变变量,

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

常量
常量的定义方式:define('常量名' ,'常量值');注意常量名最好大写,其主要作用就是好看,常量的使用方式很简单,直接写入常量名就行了,不加任何的符号,常量的值不能被覆盖,只能定义一次.第二次赋值会报错,常量名不能被销毁,常量多用于比较重要的地方,例如一个网站的配置文件.
查看一个常量是否已经被定义,defined(常量名);注意这个比定义常量的关键字要多一个d.
注意,用echo输出一个不存在的常量名,系统会以字符串的形式进行解析,只不过我们不建议以这样的方式输出字符串,因为一方面系统会报错,另一方面它输出的速度要比字符串慢8倍.

php中各种符号
算术运算符
一元运算符有两个就是++和---,注意一个数字加加在前,则先运算后取值,例如++$a;执行这行代码后$a是指先加的一,而$a++是后取的值.加加在前值要比在后大,减减也是一样.


二元运算符 符号左右都要有值,如加减乘除取余,都是二元运算符
三元运算符       只学了一个,表达式1?表达式2:表达式3;他的格式就是表达式1是一个值为布尔类型的条件表达式,当表达式的值为真的时候,他执行表达式二,当表达式1的值为假的时候,他执行表示式三,这个类似于if判断,见到要知道if的功能要比他强大的多




赋值运算符
=是赋值运算符,他把等号右边的值赋给左边的变量,另外赋值运算符还有加等减等乘等除等取余等,他们的基本都一样,本质上是先进行加减乘除取余的运算,然后再把左边的值赋给左边的那个变量.


比较运算符 值为布尔型.主要有,大于,小于,大于等于,小于等于,!=不等于,
==只判断两侧值是否相等,===判断是否全等.q全等的概念就是值和类型以及长度要保持一致

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

字符串的连接符是一个英文的点(.),.=会把两边的字符串进行链接,得到的值再赋值给左边.注意(点.)连接是不限制连接的类型的


逻辑运算符   值是布尔型  包括 and与&  or或|| not非!
逻辑或的表达式中有一个为真则为真,逻辑与的表达式有一个为假则为假,逻辑与和逻辑或都具有短路效应,或找的是真,与找的是假,一旦找到目标,后面的就不再执行,这就是短路效应.逻辑非在php中就是取反的意思.


位运算符 包括位与&和位或|,一般不用,与是同一为一,或是有一个为一则为一.这里有一个面试题2变成8最快的方法是左位移两位


其他运算符
@是错误抑制符,针对警告等不致命的错误,可以让出现警告的那一行代码不报错.
''反引号运算符可以执行linux系统或window系统下的道斯命令行,不推荐使用


小括号包裹的内容在运行的时候可以提升优先级,具体的什么运算优先还是看手册.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

如何接收form表单提交的数据,根据提交方式的不同分为两种,一种是post,一种是get方式,$变量名=$_POST['表单中提交部分的name名字'];
$变量名=$_GET['表单中提交部分的name名字'];注意所有的url传值都是get传值,有的时候我们对一些数据不需要保密的部分就通过url来进行传值


页面中乱码的处理方式1,设置编码格式,
2在html中写上<meta charset="utf-8"/>
3.在php文档中设置编码格式为utf-8,代码为header("content-type:text/html;charset=utf-8");

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

分支结构if...else和switch


if(条件表达式){
当表达式的值为true的时候执行这个部分的代码段
}else if(条件表达式){
当满足这个条件表达式的时候执行这段代码}else{
当上面两个都不执行的时候就执行这里的代码}
-----------------------------------------------------------------------
switch(要匹配的变量名){
case "值1" :代码段;break;
case "值2": 代码段;break;
case "值3" :代码段;break;
default :代码段;break;
}
注意如果switch后括号内的变量名或者值与值1相同则执行值1后的代码段,然后执行break,跳出当前switch,如果不与值1相同,则再去匹配值2和值3,一直到值n,如果最后一个都匹配不成功的话则会执行default后的代码段,然后执行break,跳出当前switch.
注意每一个case后都要有一个break,否则程序会走不出switch.
---------------------------------------------------------------------------switch和if并不是单独的,也可以嵌套使用.语言本来就是靠配合才能表达出完整的意思

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

循环结构  while------do...while-----for循环三种
while循环
while(条件表达式){
符合条件要执行的循环体;
自增或者自减条件;}
while的执行顺序是,首先判断是否符合条件表达式,符合了才能执行循环体,然后再进行自增或者自减,以达到一种对执行次数或者执行标准的控制,当不符合条件的时候才会跳出循环.条件表达式是布尔值.自增或者自减设置的不好会出现死循环
-----------------------------------------------------------------------
do{}while();循环
do{循环体;自增或者自减条件}while(条件表达式);
do..while的执行顺序是先把循环部分执行一遍,然后再自增自减,最后再对条件表达式进行判断,注意不要忘记while后的分号.如果自增自减设置的不好的话会出现死循环,while和do...while的区别是while是先判断后执行,dowhile是先执行后判断
------------------------------------------------------------------------for循环
for(表达式1,表达式2,表达式3){循环体;}
表达式1,一般是对一个变量进行赋值,表达式2一般是一个判断条件,值为布尔类型,表达式3一般是自增或者自减,以达到对循环多少次的控制.
for循环的执行顺序是: 表达式1--->表达式2判断,符合条件了就执行循环体,--->表达式3,进行自加或者自减,然后再执行表达式2进行判断,符合则执行循环体,然后是表达式3,直到不符合表达式2,才跳出循环
-------------------------------------------------------------------------循环总注意:外循环控制行数,内循环控制列数,循环是根据需要来进行嵌套的,一般每加一个判断就会多一层控制,多一层控制就会多一层嵌套,后面用到嵌套的部分一定要注意死循环以及如何对循环次数的控制,打印表格就是外循环和内循环的嵌套使用,九九乘法表也是,他的控制主要是行和列的显示出来的算术式子的关系
数组的遍历会用到for循环,当然一般用的是foreach,到了再说

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

循环和分支语句都属于对流程的控制,他们可以是一个大的结构,以后必然内部会有许多小的执行部分以及分支的循环和分支.
break,代表的是终止一个循环,或者结束switch的一个分支.switch是当匹配上一个case值的时候会跳出整个switch分支结构.
continue,结束当前的循环,进入下一个循环,用在循环中.
die,程序用到这个会结束整个脚本,die后面也可以加上一个小括号括号内的内容将会输出.另外exit与die的作用和用法是一模一样的

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

echo :"输出的内容";以字符形式输出一段内容.


var_dump(变量名);括号内是一个变量名,这个函数可以打印出变量的长度,类型,内容.echo可以说是给用户看的,var_dump是给程序猿看的

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

函数就是能够实现某种功能的语句,函数可以分为两大类,一种是系统函数,我们只需要了解,记住并会调用这类函数就好,另一种是自定义函数,当我们为了实现某种功能而系统中又没有这类函数,就需要我们自己去办法分步骤一步一步实现单个功能,并最终组合到一起实现一个系统的功能.
函数主要是三个部分,功能是什么,参数有什么,返回值是什么
函数的名字不区分大小写,不能重复定义,不能是关键字名,不能以数字开头,
当程序执行了一段代码的时候,会优先执行函数,php代码中同一行,函数的优先级最高,


函数的声明,function 函数名(参数列表){代码段;}
函数的调用, 函数名(参数列表);

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

函数库就是一个专门用来存放函数的文件,我们可以把程序所需要的所有的函数都写到一个函数库文件中,然后调用的时候直接从库文件中直接进行调用就行了,然而调用之前要先把这个函数库文件引入到当前脚本文件中,引入库文件有两种方式,1--include("路径");2--require("路径");当前脚本中有了其中任何一种就可以直接调用函数库里的函数了,需要注意的是一个文本文件中有且只有一次引入函数库文件的机会,如果引入两次系统就会报错,引入两次就相当与把一个函数定义了两次,另外引入库文件的脚本,在当前文件中不能定义与库文件中同名的函数.
-----------------------------------------------------------------------
include和require的区别:include();一般用于引入一些不太重要的函数库,require()一般引入的都是对当前脚本比较重要的函数库.include()引入库文件如果失败的话,系统会报一个warning级别的错误,而require()引入失败的话会结束当前脚本,错误级别为fatal.
-------------------------------------------------------------------------如果重复的引入一个函数库文件,用include_once("路径"),表示只引入一次这个库文件,require_once();也是一样的,所以以后再引入函数库文件的时候可以用include_once()和require_once("路径");小注意,小括号其实是可以去掉的,只留一个双引号就行.

可变参数个数的函数
如果一个函数的参数只有两个,调用的时候却写了六个,这个时候系统是不会报错的,但是后面的四个参数也是没有任何作用的,如果想要得到调用函数时所传过来的参数的个数是多少,参数列表的具体的值是多少,php都是可以做到的,具体的函数如下
func_num_args();//获取实参总个数,
func_get_args();//获取实参列表的每一个参数可变参数个数的函数
如果一个函数的参数只有两个,调用的时候却写了六个,这个时候系统是不会报错的,但是后面的四个参数也是没有任何作用的,如果想要得到调用函数时所传过来的参数的个数是多少,参数列表的具体的值是多少,php都是可以做到的,具体的函数如下
func_num_args();//获取实参总个数,
func_get_args();//获取实参列表的每一个参数

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

引用函数
function demo(&$num){
$num=200;}
$num=100;
demo($num);
echo $num;//200
注意demo参数的位置是一个内存地址值,一般函数在定义的时候会写上一个形参,但是我们传的却是一个内存地址值,如果不是参数不是内存地址值的话,我们得到的结果就是$num的值是一百,因为我们打印的是一个全局的,而当把一百作为参数传入到demo函数中的时候,其实传入的是$num的地址值,而在代码体中,把二百的值赋给了$num 的内存地址值,所以我们才改变了$num的值,让他由一百变成了二百
由此总结,参数类表的位置除了放变量,形参实参还可以放内存地址值

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

变量函数
变量函数在我看来就是卖萌的,他就是把一个字符串赋给一个变量名,而这个字符串就是一个函数的名字,大家都知道调用函数式用函数名加上一个括号调用的,而变量函数调用函数的方法是用那个字符串的变量名加上一个小括号来调用那个函数的,没有太多的实际意义,总的来说,迷惑人罢了,容易把他看成一个变量.


回调函数
回调函数其实非常的简单,就是一个函数在执行自己的代码段的时候,要用到另外一个在当前函数外的函数,执行完了外面的函数才会再回到代码段内部执行自己的代码段,直到执行到当前函数结束,才结束,这时候函数外的一般起到一个开关,或者取到主函数想用的值的作用.回调函数可以让维护起来更加容易,

回调函数是自己调用别人,而递归函数是自己调用自己
递归函数是自己调用自己,最先做的一件事,反而是在最后才完成,
由代码到人,进入到一个人第一层的心理防线想要改变一些东西,结果发现改变不了,就有进入第二层的想办法去改变,结果发现第二层也无法改变那个人的想法,于是就进入到第三层,发现第三层要改变有些困难,于是就进入了第四层,当你接触到一个人本质的时,在他本质上面做一些操作,更容易改变他的一些复杂的行为.
faction huiwei($num){
echo $num;
if($num>0){
huiwen($num-1);}
echo $num;
}
huiwei(3);//32100123

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

参数包括形参和实参,形参是在声明函数的时候用来占位的,实参是在函数调用的时候实际需要调用的值,注意有形参的函数调用的时候要加上实参,如果形参设置了默认值的话,不加也是可以的,这时系统也不会报错,
-----------------------------------------------------------------------x形参可以定义多个,一定要有意义,形参的个数原则上可以有无数个,但是用到多少就写多少,这是准则,实参也可以写多个,但是一定要和形参一一对应,实参的值可以是存值的变量.
--------------------------------------------------------------------------函数的形参给了默认值之后,调用的时候,可以只写不给定默认值形参,一般给默认值的形参会放到参数列表的后面,如果形参给了默认值之后,我不想要函数自己给的默认值,我可以用一个新的值覆盖掉原来系统给的默认值.
---------------------------------------------------------------------------函数的调用可以在函数之前也可以在函数之后,程序在执行脚本的时候,会把脚本中所有的函数存放到内存中的缓冲区,所以函数在脚本的任何位置都可以被调用.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

return关键字
可以把函数的值保存下来抛出去,注意return值后的所有内容都不会再执行,return也可以认为他把函数的结果返回到了调用处,并保存下来.
echo输出字符串用双引号引起来,输出变量或函数调用就不用加引号了.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


变量:是用来存储数据的容器
变量有局部变量,全局变量,超全局变量,静态变量
变量都是有自己的作用范围也就是作用域,
局部变量的作用域是自己所定义的函数内,
全局变量的作用域是整个脚本,若想把全局变量引入到函数内部调用,则需要用global关键字来引入,到函数内部.在函数的内部做一个声明就可以
<?php


$var1 = 1;
function test(){
    global $var1;
    unset($var1);
}


超全局变量:$GLOBAS包含了所有的超全局变量,最常用的有$_GET,$_POST等以后用到那个就单独介绍哪个.
静态变量:用static修饰,他赋初始值只赋一次,就是只初始化一次,所以第一次调用有静态变量的函数时,函数才会给静态变量赋一次值,这段代码执行一次,以后再用到此静态变量的时候,系统会去内存中找这个静态变量.静态变量存放在内存中的静态区,无就创建,点击率和阅读量用静态变量来进行计数
超全局变量:在项目哪一个文件中都能用,并且这个变量时系统提供的,$_开头,字母全部大写(我在这里先小写,为了好认)
$_server;获取服务器的一些相关的信息.
$_server['http_referer'];获取上一页面的url地址
$_server['remote_addr'];获取客户端的ip地址
$_server['server_addr'];获取服务器端的ip地址
$_server['document_root'];获取服务器端的web目录的路径
$_server['request_url'];获取当前文件的根路径
$_post[];获取用post方式传的值
$_get[];获取用get方式传的值
$_request传值比较慢,可以接收get和post传值,不推荐使用
<pre></pre>格式化代码,数组打印的时候是输出一行,用这个标签夹住打印是一行一个单元
print_r(数组名);//这个函数可以打印数组

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

数组array
数组有两种,一种是关联数组(下标值是字符串的),另一种是索引数组(下标是数字的)
数组由键和值组成,数组中一组对应的键和值叫做一个单元,一个数组可以存储多个值,而变量只能存储一个值
数组的定义方法有
1.$数组名=array(值1,值2,值3,值n);//$a = array(10,20,30,40,50);
2.$数组名=[值1,值2,值3,值n];//$a = [10,20,30,40,50];
3.$数组名=array(键名=>值名,键名=>值名,键名=>值名;);//$stu =array('name'=>'楠','sex'=>'','age'=>16,'money'=>true,'tall'=>180);
4.$数组名['键值']=值;//$b[20] = 40;
------------------------------------------------------------------
数组包括一维数组和多维数组,多维数组的本质是数组内还是数组,是数组的嵌套,注意数组值与值之间使用逗号隔开的,多层数组嵌套的时候,子数组一定要用逗号隔开
-----------------------------------------------------------------------
数组的应用
由数组下标拿到下标对应的值
$value=$数组名[下标值];
注意取二维数组下的子数组的值的时候,是用数组名[子数组下标值][要取的值的下标];
注意打印数组不能用echo,因为它是用来输出一段字符串内容的,数组要用var_dump(数组名);来打印数组内的信息
count(数组名);//获取数组的长度,单元数,
array_value(数组名);改变数组键的值,从新为键排序,(0,1,2,3.....)

遍历数组的方法
-------------------------------------------------------------------------1.使用for循环遍历
count(要获取的长度数组名,true);//得到数组中有多少个单元.
定义一个要遍历的数组
$arr=array(1,2,3,4,56,7);
for($i=0; $i<count($a); $i++ ){
echo $a[$i]."<br/>";}
------------------------------------------------------------------------2.使用foreach遍历
foreach(遍历的数组名  as   $key=>$value){
echo $key."=>".$value."<br/>";
}
注意当as后不是两个变量的时候,只有一个变量的时候,则变量表示的是数组的值,即foreach(遍历的数组名  as   $value){
echo $value."<br/>";}
-------------------------------------------------------------------------注意二维数组的遍历用foreach只用一层就行了,具体的取值,是用数组名[子下标][要取值部分的下标];如果是二维以上的话就哟啊用到foreach的嵌套了

 3.数组的遍历使用while循环,list,each,reset函数配合使用,
each(数组名);取出当前单元的键和值,并用索引和关联两种方式对数组进行存储,并且下次调用这个函数的时候,自动执行下一个单元解析存储.
list不是函数,是一种语言结构,里面放值,只能放索引数组的值,
list(变量1,变量2......);list可用参数列表的变量来接收索引数组的值,list的返回值是一个数组.
reset(数组名);重置数组下标到0的位置,
array_values(数组名);将数组的下标从0开始排序.
代码如下 $a=array(10,20,5=>30,40,55);
reset($a);
while(list($key,$value)=each($a)){
echo $key."=>".$value;}
--------------------------------------------------------------------------4使用do...while来进行遍历
end和prev配合是倒着遍历,reset和next配合是正着遍历
end(数组名);将指针指向最后一个单元.
key可以获取当前指针指向的键.
current返回数组中的当前单元,也就是说是第几个.
next(数组名);可以将数组中的指针指向下一个单元,如果已经是最后一个单元的话,会返回一个false.
prev可以将数组当中的指针倒一位
reset(数组名);可以将数组中的指针迅速重置到首位
代码如下 $arr=array(10,20,30,333);
end($arr);
do{
echo key($a)."=>".current($a);}while(prev($a));

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

字符串
strtoupper(字符串或者变量名);//将字符串中的小写字母变成大写
strtolower(字符串或者变量名);//将字符串中的大写字母变成小写
ucfirst();将字符串首字母大写,只大写一个
ucwords();将字符串首字母大写,遇到单词就首字母大写
htmlspecialchar(字符串变量名);格式化字符串中的函数标签,用这个是为了防止有人sql注入,破换文档结构,操控数据库,系统遇到这个函数会把内容实体化,不解析
strlen();获取字符串的长度
md5(字符串);把密码进行加密传送,用ver_dump进行打印也看不出来这段字符到底是什么
similar_text(字符串1,字符串2);得到两个字符串的相似度,当第三个参数为一个变量的时候,则打印第三个参数他的值是一个百分比.
substrate(字符串,从第几开始截取,截取多少字符);从字符串中截取一部分
strpos(字符串,要查找的字符);//查找一个字符在字符串中首次出现的位置
str_replace(字符串,替换后的字符,要被替换掉的字符串);\\字符串替换,返回值还是一个字符串,将字符串中的一些字符换成另一种字符
去除多余的字符
去除右侧多余的字符rtrim(字符串,多余的字符串);
去除左侧多余的字符ltrim(字符串,多余的字符串);
去除左右两侧多余的字符串trim(字符串,多余的字符串);
explode(拆分的标记符号,字符串);按照参数一的特殊字符将字符串进行拆分,返回值是一个数组.
implode(字符串,一维数组);将一个一维数组的值逐个取出,用参数一的字符作为连接部分,返回值是一个字符串.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

时间
1970年1月1日到现在是多少秒,就是time();这个函数的值.time()函数得到的是一个时间戳.date('Y-m-dH:i:s');这个函数得到的是一个有年月日时分秒的时间,但是也不是中国的时间,他是英国的伦敦时间,我们在东八区,要在小时的位置加上八个小时,或者更改php配置文件里的时间.获取本地时间的函数必须记住,date_default_timezone_set('PRC');
date();函数参数一是一个日期显示的格式,参数2是一个时间戳,要注意的是参数一值有很多,除了完整的日期显示格式,还有一些单个的字母也很重要,比如当为小w时,得到的值是当前时间戳的日期是周几,当参数一的值为t的时候表示这个月有几天
时间重要的函数
date();time();
mktime(时分秒月日年);有六个参数,中间有逗号隔开,他的作用是将当前给的这个具体的时间,转换成一个时间戳,一般会与date()配合使用,作为date的参数2.
strtotime("字符串");双引号引着的是一个英文的时间如+ 1day,加一天,
+ 1 week,加一周 这个函数式在当前时间为起点,向前或者向后多少,返回值也是一个时间戳,一般与date(),作为他的参数2来用.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

文件
file_get_contents("路径url");将整个文件内容读取出来,给一个他接收的变量,文件的内容会变成字符串的形式,这个函数的返回值也是一个字符串
file_put_contents(文档名字,参数2);参数二可以是字符串,数组,资源,将参数2的内容写入到当前文档中,返回值是int型,应该是一个二进制的文件吧,注意这样的写法是直接覆盖之前文件中的内容.
file_put_contents(文档名字,参数2同上,FILE_APPEND);加上第三个参数的意思是在原来文档内容的基础上追加参数2的内容.

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

window.location.href='要跳转的文件名';(js里的固定用法,)
注意a连接中的传值是用的get传值,因为a链接是url传值,是能在地址栏中看到的,form表单的传值是用的post传值.
 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


错误日志
错误的种类主要有1语法错误,2运行时错误,3,逻辑错误
处理错误的方法1输出调试法,就是用var_dump进行打印,边打印边调试,这样做能有效的防止逻辑错误.
2,断点调试,就是用die(),终止程序
3,删除法,把认为可能出错的位置删除掉
----------------------------------------------------------------------
错误的级别
E_NOTICE提示级别的错误,级别最低,不影响程序的执行
E_WARNING警告级别的错误,报错行不再输出,不会影响脚本的运行
E_ERROR最高级别的错误,会直接终止脚本运行
------------------------------------------------------------------------E_ALL所有的错误提示信息
在配置文件php.ini中,搜索,error_reportting=E_ALL该选项用来设置php错误的显示方式,注意&表示并,|表示或,~表示除了,关闭注意和警告和错误的提示
ERROR_repprting=E_ALL&~ENTICE&~E_WARNING&~ERROR
_____________________________________________________________--在配置文件中把display_error设置为off也关了所有的提示错误信息
在php脚本中设置,获取php配置文件中的函数ini_get_all();可以用var_dump()打印
ini_get(配置名);//括号内想要获取的配置项的名字
ini_set(配置名,配置值);//在脚本中设置某个配置的值
错误日志,日志的存储位置,wamp-->logs文件夹里都是
设置错误日志是否开启,在php.ini配置文件中搜log_errors,on表示开启,off表示关闭
修改错误日志的存储位置,在php.ini内搜error_log.我们可以把他的值改为我们想存储的路径
-------------------------------------------------
真正的项目在上线之前,需要查看错误日志的情况
1.开发环境允许报错
2.测试环境允许报错
3.上线运行不允许报错
要上线的项目的设置
display_error=off;设置报错的信息不在脚本中显示
error_reporting=E_all设置php报错机制为所有级别的错误
log_errors=on;开启错误日志 的位置
error_log="设置你要存储错误日志的位置";
设置这些可以保证错误不在脚本中显示,保证自己的路径暴漏

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


正则表达式
正则的主要做的是分割,匹配,查找,替换
php中的正则是pcre规则
正则表达式是一串特殊的字符串,我们可以用这一串字符串对另外的一个字符串进行一系列的操作
正则的中组成部分包括 正则定界符原子   元字符模式修正符
正则函数等
----- ---------------------------------------------------------------
preg_match();匹配一次,参数有三1,正则表达式2要匹配的字符串3,匹配后返回的数组用来接收的变量
preg_match_all();匹配多次,参数有三同上.
查找preg_grep();对数组中的值进行匹配,返回值是一个索引数组,参数有2,1正则表达式,2要匹配的数组的名字
替换preg_replace();参数三个,1是正则表达式,2是替换成什么字符串,要替换掉的字符串,注意可以进行多个值的替换,数组值换成数组值,正则多次匹配放到数组里,详情看手册的例子.
分割preg_split();参数一是正则表达式,参数2是要分割的字符串,返回值是一个数组,分割后留下的部分,组成的数组,可以分割不同的符号,explode只能分割一个固定的字符,正则可以一次用不同的字符分割多个.
------------------------------------------------------------------------模式修正符:修正符是写在我们正则定界符的右边的.
i表示不区分大小写,s表示正则匹配忽略换行符,U表示拒绝贪婪匹配
正则和字符串函数都能进行字符串的操作,但是正则比较慢,字符串函数比较快,正则适合大范围的使用,字符串函数适合小范围
----------------------------------------------------------------------
定界符,和定义字符串是一样的,我们定义正则表达式也是需要定界符的,一般我们用"/正则表达式/"双斜线来夹住我们的正则表达式的,定界符原则上是除了字母数字下划线之外的任意符号,


原子正则模式中的最小单位,
a-z表示从a到z之间的所有小写字母
A-Z表示从a到z之间的所有大写字母
0-9表示所有的数字
\d相当于[0-9]代表一个任意的阿拉伯数字
\D表示除了数字以外的任意的内容
\w表示任意字母数字下划线
\W表示除了字母数字下划线的任意的字符


非打印字符\n换行 \r回车\t制表符


正则中的特殊符号都是有特殊的含义的,匹配的时候要转义


.点代表任意的原子,除了换行符
*星表示匹配的次数,代表星号之前的原子是任意的长度,相当于{0,}
+加号,表示匹配的次数代表+号之前的原子是至少一次,没有上限,相当于{1,}
?匹配的次数,代表问号之前的原子可有可无,
^有两种含义,如果放到原子表的外面,表示以原子表中的内容开头,当放在原子表内的时候,也就是表内最开始的位置,表示除了
$放在正则定界符的右边内侧,表示以$之前的原子结尾,
注意,如果是一个正则以^开头,以$结尾,则说明这是一个精准匹配,代表我们匹配的字符源必须符合他们中间的正则的模式内容,才能匹配成功.
.*表示贪婪匹配(点星)
.*表示非贪婪匹配
{n}匹配次数花括号之前的原子必须出现n次
{n,}花括号之前的原子至少出现n次,长度无上限
{n,m}花括号之前的原子至少出现n次,最多出现m次,注意大括号是控制次数
()有三种含义,1提升优先级,2子存储,被小括号包裹的部分会在匹配成功的数组里有一个专门的键来对应存储,3重复使用单元模式
关于单元模式重复使用,重复的部分用小括号括起来,以后要使用这个模式时,可以用\\数字来代替,数字代表的是第几个小括号


原子表[]
方括号就是原子表,原子表内的所有的原子都是或关系,




注意正则表达式所匹配到的内容会在数组的零下标下显示,其他的大部分是子存储的部分占用的下标

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

文件
file_get_contents("路径url");将整个文件内容读取出来,给一个他接收的变量,文件的内容会变成字符串的形式,这个函数的返回值也是一个字符串
file_put_contents(文档名字,参数2);参数二可以是字符串,数组,资源,将参数2的内容写入到当前文档中,返回值是int型,应该是一个二进制的文件吧,注意这样的写法是直接覆盖之前文件中的内容.
file_put_contents(文档名字,参数2同上,FILE_APPEND);加上第三个参数的意思是在原来文档内容的基础上追加参数2的内容.

文件是用来存储数据的,PHP中的变量存储数据生命周期比较短,且只能存在脚本中来执行,脚本结束了数据也就没了,所以我们需要用文件这种介质来永久的存储不同类型的数据,

window系统下的文件有三种类型,1file文件,2dir目录,3unknown,
在linux/unix系统下分为7种不同:block、char、dir、fifo、file、link和unknown七种类型
________________________________________________
 路经的方式:
windows系统:D:/a/b/c.php 或 D:\a\b\c.php正反斜杠都行
linux/unix系统: /a/b/c.php正斜杠

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

is_file( ) -- 判断给定文件名是否为一个正常的文件
语法结构:bool is_file(名称)
返回类型:如果文件存在且为正常的文件则返回 true 。
__________________________________________
is_dir( ) -- 判断给定文件名是否是一个目录
语法结构:bool is_dir(名称)
返回类型:如果文件名存在并且是一个目录则返回 true,否则返回 false。
---------------------------------------
is_readable( ) -- 判断给定文件名是否可读
语法结构:bool is_readable(文件名称)
返回类型:如果文件存在并且可读则返回 true 。
---------------------------------------
is_writable( ) -- 判断给定的文件名是否可写
语法结构:bool is_writable(文件名称)
返回类型:如果文件存在并且可写则返回 true 。
------------------------------------
is_executable( ) -- 判断给定文件名是否可执行
语法结构:bool is_executable(名称)
返回类型:如果文件存在且可执行则返回 true ,否则返回 false
------------------------------------------------
file_exists( ) 检查文件或目录是否存在
-----------------------------------
is_link( ) -- 判断给定文件名是否为一个符号连接
语法结构:bool is_link(名称)
返回类型:如果文件存在并且是一个符号连接则返回 true。
--------------------------------------------------------
filesize() 取得文件大小(不能获取目录大小)
--------------------------------------
filectime();获取文件的创建时间
--------------------------------------
filemtime();获取文件的修改时间
---------------------------------------
fileatime();获取文件的访问时间
----------------------------------------
stat();获取文件的大部分属性
----------------------------------------
basename(路径);获取路径中的文件名
-----------------------------------------
dirname(路径);获取文件中的目录信息
---------------------------------------
pathinfo(路径);获取文件中的各部分信息,并将各部分信息放到一个数组中,1目录名,2文件名,3文件的类型4,文件的后缀名,
--------------------
下标:dirname 路径名
basename 文件名
extension 后缀名
filename 文件名(去掉后缀的)
____________________
如果后面有两个参数,第二个参数如下PATHINFO_DIRNAME将只获取到目录名PATHINFO_BASENAEM
PATHINFO_EXTENSION
PATHINFO_FILENAME
$url = "http://www.baidu.com/a/b/c.php";
*echo pathinfo($url,PATHINFO_DIRNAME); //http://www.baidu.com/a/b
*echo pathinfo($url,PATHINFO_EXTENSION); //php 后缀名
*echo pathinfo($url,PATHINFO_BASENAME); //c.php 文件名
------------------------------------------------
filetype() --获取文件类型的函数:
 

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


realpath()--获取指定文件的绝对路径
示例: echo realpath("1.php"); //D:\AppServ\www\lamp45\09_file_dir\1.php


------------------------------------------------------------------
disk_free_space("./");获取当前磁盘的空余有多少,单位是字节
------------------------------------------------------------------
disk_total_space("./");获取当前的磁盘的总的空间有多少,单位是字节
------------------------------------------------------------------
目录的操作
*mkdir() -- 创建一个目录
*rmdir() -- 删除一个目录(只支持删除空目录)
*unlink() -- 删除一个文件
copy() --- 复制文件。不支持目录复制
------------------------------------------------------------------
目录的遍历
目的:是将服务器中的制定目录当中的所有的文件取出,然后才能执行一些操作,复制,删除,移动,
步骤:1定义一个路径(要遍历哪一个文件夹)2打开文件夹,3读取目录,4关闭目录
1.定义目录
$path = "./images/";
2.打开目录
$resource = opendir($path);
3.读取目录
while($file = readdir($resource)){

//过滤特殊目录
if("."==$file || ".."==$file){
continue;
}
//拼装完整文件路径
$filename = rtrim($path,"/")."/".$file;
4.关闭目录
closedir($resource);

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


文件的读写操作也叫流操作,其中流分为字符流(t)和字节流(b 二进制)

*2. fread(打开的文件资源,读取的长度) -- 读取文件内容。


*3. fwrite(打开的文件资源,被写入的字串[,长度]) -- 向文件写入内容。

*4. fclose(打开的文件资源) -- 关闭文件

5. fgets() -- 从文件资源中读取一行

6. fgetc() -- 读取一个字符
*7. file() 将文件读出(内容是数组格式),并返回
*8. readfile() 将文件内容读出,并输出
9. file_get_contents() 读取文件内容
10.file_put_contents() 将指定内容写入文件
----------------------------------------------------
 rename() --修改文件名
ftruncate() — 将文件截断到给定的长度
----------------------------------------------------
 bool flock ( int $handle , int $operation [, int &$wouldblock ] )
轻便的咨询文件锁定
 operation参数:
要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。 
要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。 
要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。 
如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。 
示例:
<?php


$fp = fopen("/tmp/lock.txt", "w+");
if(flock($fp, LOCK_EX)) { // 进行排它型锁定
fwrite($fp, "Write something here\n");
flock($fp, LOCK_UN); // 释放锁定
} else {
echo "Couldn't lock the file !";
}
fclose($fp);


?> 


 文件上传和下载笔记
=====================


一、 php.ini的配置信息
file_uploads = On /Off   是否允许文件上传
upload_max_filesize=2M 上传的文件的最大大小
post_max_size = 8M       POST数据所允许的最大大小
upload_tmp_dir           上传文件放置的临时目录

注意配置:upload_max_filesize的大小一定要小于post_max_size的配置大小。

二、(发送客户端)上传的form表单:
1、 表单必须是post提交
2、 上传的类型:enctype="multipart/form-data"
3、上传使用的表单项
<input type="file" name=".." />
4.(可选)上传大小限制的表单隐藏域:MAX_FILE_SIZE,
<input type="hidden" name="MAX_FILE_SIZE" value="大小字节"/>
注意:此字段必须在文件输入字段之前(常放在form标签后面)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
三、(接收服务器端):
1. 使用$_FILES全局数组来接收上传信息
在每个上传的文件里,$_FILES中都会有5个属性:
error:上传的错误号:0--4
0:表示没有发生任何错误。
1:上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。
3:表示文件只被部分上传。
4:表示没有上传任何文件。
6:找不到临时文件夹
7:文件写入失败
name:上传的文件名
size:文件的大小
type:文件类型
tmp_name: 临时文件


2:is_uploaded_file() //是否是上传文件
3:move_uploaded_file() //执行移动上传文件


四、 下载设置:
header("Content-Type:类型"); //指定响应类型
header("Content-Disposition:attachment;filename=文件名"); //**执行下载文件名
header("Content-Length:文件大小");


readfile("./uploads/".$picname); //读取并输出图片内容;


-------------------------------------------------------------------------------------------------------------------------------------------------------------------
一、支持:需要php支持gd库


二、绘画步骤:
1. 创建一个画布(画板)、画笔、色彩。
2. *开始绘画
3. 输出图像(复制型)
4. 销毁图像资源(释放内存)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
示例:
<?php
//1.创建一个画布,颜色
$im = imagecreate(200,200);
$red = imagecolorallocate($im,255,0,0);  //创建一个颜色:红色
$blue = imagecolorallocate($im,0,0,255);  //创建一个颜色:蓝色 
$c1 = imagecolorallocate($im,200,200,200);


//2.开始绘画
imagefill($im,0,0,$c1); //填充背景
//....


//3.输出图像
header("Content-Type: image/jpeg");//设置响应头信息为一个jpeg的图片
imagejpeg($im);//输出一个jpeg图片
 
//4.销毁
imagedestroy($im); //

-------------------------------------------------------------------------------------------------------------------------------------------------------------------
图片的具体绘制:
3.1 创建一个画布:
imagecreate(宽,高)--创建一个基于256色的画布
imagecreatetruecolor( int x_size, int y_size ) -- 新建一个真彩色图像
//还有基于某个图片的画布
imagecreatefromgif( string filename )
imagecreatefrompng( string filename )
imagecreatefromjpeg( string filename )
3.2 绘画:
//分配定义颜色
$red = imagecolorallocate($im,255,0,0); //分配一个颜色

//填充背景
bool imagefill(resource image,int x,int y, int color ); //填充背景

//画点
bool imagesetpixel(resource image,int x,int y,int color );//画一个像素点

//画一个线段的函数
bool imageline ( resource image, int x1, int y1, int x2, int y2, int color )


//画矩形框(不填充)
bool imagerectangle ( resource image, int x1, int y1, int x2, int y2, int color )
//画矩形框(填充)
bool imagefilledrectangle ( resource image, int x1, int y1, int x2, int y2, int color )


//绘制多边形
bool imagepolygon ( resource image, array points, int num_points, int color )
bool imagefilledpolygon ( resource image, array points, int num_points, int color )

//绘制椭圆(正圆)
imageellipse ( resource image, int cx, int cy, int w, int h, int color )
imagefilledellipse ( resource image, int cx, int cy, int w, int h, int color )


//绘制圆弧(可填充)
imagearc ( resource image, int cx, int cy, int w, int h, int s, int e, int color)
imagefilledarc ( resource image, int cx, int cy, int w, int h, int s, int e, int color, int style )

//绘制字串
bool imagestring ( resource image, int font, int x, int y, string s, int col )
bool imagestringup ( resource image, int font, int x, int y, string s, int col )

//绘制文本:
*array imagettftext ( resource image, float size, float angle, int x, int y, int color, string fontfile, string text )
当上面的字体出现乱码时,使用下面的函数转换编码
string iconv ( string in_charset, string out_charset, string str )

$name="张三";
$str = iconv("ISO8859-1","UTF-8",$name);
$str = iconv("GBK","UTF-8",$name);
$str = iconv("GB2312","UTF-8",$name);


//图片的裁剪、合成、缩放
**bool imagecopyresampled ( resource dst_image, resource src_image, int dst_x, int dst_y, int src_x, int src_y, int dst_w, int dst_h, int src_w, int src_h )

* imagesx — 取得图像宽度
* imagesy — 取得图像高度
* array getimagesize ( string $filename [, array &$imageinfo ] )  取得图像大小





3.3.输出图
header("Content-Type: image/jpeg");//设置响应头信息为一个jpeg的图片
imagejpeg($im);//输出一个jpeg图片
 
header("Content-Type: image/png");//设置响应头信息为一个png的图片
imagepng($im);//输出一个png图片
 
 //输出到指定文件中(另存为)
 imagepng($im,"**.png");


3.4.销毁
imagedestroy($im); //

-------------------------------------------------------------------------------------------------------------------------------------------------------------------
自己总结的PHP完毕