您的位置:首页 > 其它

lamp兄弟连视频笔记

2009-10-19 13:44 323 查看
第一章
1.2
一 分号
结构定义语句 如for(;;){} if(){} while(){}...
功能执行语句,需要加";" 如$name = "zhang"; echo $name;
离php脚本结束最近的分号可以省略如<?php echo $name ?>
二php注释
单行注释 //
多行注释 /*
*/
文本注释
/**
*
*/
注释功能
a写过的程序不要删
b调试程序,在程序中加输出、关掉程序中的部分功能
c写帮助代码 在代码上面或右边 不要在下面
三、变量与常量
变量:区分大小写,其它并不区分
用$定义
变量类型 查看变量类型函数[getType($name)<需要echo输出> var_dump($name)<不需echo >]
a四种标量类型
布尔 整型 浮点型 字符型
b两种复合类型
数组 对象
c两种特殊类型
资源 Null
注意(变量名或函数名)
a变量名有意义
a不要以数字开头,中间不能有"."或空格,不能为系统关键字
isset()检查变量是否存在
常量 遵循常量命名规则
用define()定义常量 一般用大写 如 define("NAME","新军"); echo NAME;
注:
a常量只能包含标量类型(boolean,integer,float,srting)
b只能在声明时赋值,并不能在运行时改变
变量和常量的区别
a常量前不能用$,变量必须
b常量用define()函数定义,不能通过赋值语句赋值
c常量不必理会变量范围的规则,可在任意地方定义和访问,常量定义不能重新赋值或取消
d常量的值只能是标量
defined检查常量是否已定义 返回 1 为真 返回 空 为假

第二章
1整数

十进制

八进制 以0开头如0100

十六进制 以0x开头如0xff 或0XFF(大小写对应)

2浮点数

$a=1.2345

可以使用科学计数法 $a=1.2e-4

3字符串

$a="abd" $a='abcd' 注意单双引号的区别

4布尔型

$a=true; $b=false;

其它七种类型都可转换为布尔型

整型 浮点型 0代表假其它为真;字符串中空字符串和"0"代表假 字符串空格" "(有空格)代表真

没有成员的数组代表假,在php4中没有单元的对象代表假php5已不支持

任何资源类型代表真,null类型代表假

5变量类型的相互转换

自动转换与强制转换

自动转换 如 $a="100abd";$b="300abd";$c=$a+$b;echo $c;(输出400)

强制转换

a在要转换的变量之前加上用括号括起来的目标类型 $b=(int)$a

(int) (integer) ;(bool) (boolean);

(float) (double) (real); (string);(array);(object)

这种类型转换不会把原来的类型转换,而是形成一个新的类型

b用函数 setType() 如 setType($a,"integer");//在原有变量上转换,原来的类型发生转换

c使用php中的转换函数,作用类似于第一种方式,形成新的类型

intval() 如 $b=intval($a);

floatval()

srtval()

注 null转换为字符串为空字符串

2.2
外部变量

$_GET

$_POST

$_FILES

$_COOKIE

$_SESSION

环境变量

$_SEVER

$_ENV

2.3-2.4
运算符

算术运算符 +、-、*、/、%、++、--

比较运算符 == 、 === 、 != 、 <> 、 !== 、 < 、 > 、 <== 、 >== 、 ? :

逻辑运算符 and && 、 or || 、 not ! 、 xor

位运算符 & 、 | 、 ^ 、 ~ 、 << 、 >> 、 >>>(无符号右移)

赋值运算符 = 、 += 、 -= 、 *= 、 /= 、 %=

其它运算符 . 、 .=

一、算术运算符

取余的作用是求一个数的范围。

$a=6;$b=-5;$c=$a%$b;echo $c;(1) $a=-6;$b=-5;$c=$a%$b;echo $c;(-1) 结果取决于第一个变量或数值$a

++ --

$a=10; $a++ //$a=$a+1 $a-- //$a=$a-1 (先用变量,然后再加/减)

++$a //$a=$a+1 --$a //$a=$a-1 (先自增/减,然后再使用变量)

$b=$a++ //$b=10 $a=11 $c=$b-- //$c=10 $b=9 $d=--$c //$d=9 $c=9 $e=++$d //$e=10 $d=10

10 - 8 2 + 4

$f=$e-- - --$e; //$f=2 $e=8 $g=$f++ + ++$f; //$g=6 $f=4

二、比较运算符

等号为“==”而非单个“=”后者为赋值运算符

===

三、逻辑运算符

两边放布尔型的值返回布尔型的值

四、位运算符——右移相当于除2.左移相当于乘2(详见视频)

每一个整数都是有32位组成

8421

$a=15; // 00000000 00000000 00000000 00001111 最高位为符号为0代表正数,1代表负数

$b=13; // 00000000 00000000 00000000 00001101

$c=$a & $b; 00000000 00000000 00000000 00000000

按位与两个同为1为1,按位或有一个1即为1,抑或相同为0不同为1,^求反,~

$ |可以作为逻辑运算符使用,注意逻辑$$和||“短路”问题

运算符的优先级 没必要硬记,可以用括号解决

第三章
一 分支结构

if ... else ... switch ... case ... default ... try ... catch ...

if(){};if(){}else{};if(){}else if(){}elseif(){}else{};

巢状结构

if(){if(){if(){}else{}}else{}}else{if(){}else{}};

switch(变量——标量即可) //注意其格式

{

case 值:

echo //表达式

break;

case 值:

echo //表达式

break;

case 值:

echo //表达式

break;

default :

echo //表达式

}

单个值匹配时选用switch ... case ... 比较方便;

求范围用 if 语句;

循环结构

while(布尔型){};

do{

}while(); //注意分号 与while的区别是while先判断后执行,而do..while.则先执行后判断,无论条件真假都执行一次

$i=0;

$k=0;

while($i<100)

{

echo "<tr>";

$j=0; //j不应该放在外围循环外面

while($j<10)

{

echo "<td>".$k++."</td>"; //注意k的值

$j++;

}

echo "</tr>";

$i++;

}

for 循环

break (n); //退出(n层)循环

continue (n);//退出本次(n层)循环,本循环以后的循环继续

while中使用continue注意死循环



$i=0;

while($i<100)

{

if($i==3)

continue; //死循环,因为程序执行到continue后退出本次循环,后面的代码未执行,$i的值还是3,if语句继续执行,形成死循环,for循环的执行原理?为啥其不成为死循环?

echo "#########".$i."<br>";

$i++;

}

第四章

函数
函数是一段完成指定任务的已命名代码

函数定义:
function 函数名(参数1,参数2,参数3,...) //注意函数的命名规则参照变量命名规则,函数名不能重名,函数名不区分大小写,只有变量区分大小写
{
函数体;

return 返回值;
}

声明函数时,函数的参数一般称为形参;调用函数时,传入的参数称为实参;

函数调用注意函数名后要有括号;

函数如果有返回值,那么调用函数时的带参数的函数名也就代表函数中return后面的值,即此时其有两个作用一是调用函数二是代表return后面的值。

函数执行到return语句就不再 执行后面的语句。

4.2
函数的帮助文档
/*写出函数的作用
*函数有几个参数,每个参数是什么类型的,哪些参数是必须的,哪些参数是可选的
*函数执行后返回什么样的结果
*/

变量的作用范围——全局变量和局部变量
在函数内要访问函数外面的值有两种方式即:
使用global关键字或者使用全局数组$GLOBALS[ ];
要在函数外部访问函数内部的变量需要借助return返回值

在函数形参里声明的变量和函数内部声明的变量是一回事(局部变量),[调用函数传值时就相当于在函数内部声明了一个变量?]
两者区别在于,在函数内部定义的变量在函数调用时不可以赋值,在参数里面声明的变量在函数调用时可以通过传值的方式给其赋值。

传值与传址 fun($a) fun(&$a)

静态变量 static $a;
一个静态变量在所有对该函数调用之间共享,并且仅在脚本执行期间第一次调用时被初始化
通常静态变量第一次调用是赋予一个初始值。

判断函数是否存在 function_exsit({"fun");

4.3
任意参数
php中调用函数时可以使用任意参数。实参大于形参或形参大于实参皆可;

默认参数(实参少于形参)
默认参数必须列在所有没有默认参数的后面

任意参数列表(形参多于实参)
使用php系统函数:Func_get_args()——返回一个数组,数组中为传进的参数值

变量函数——把一个函数赋给变量【函数名称不加括号——代表整个函数(函数指针)】
function test()
{
echo "####################<br>";
echo "####################<br>";
}
$a=test;//注意不加括号,如果加上就相当于先调用函数,再将函数值赋给变量$a
$a();//调用函数$a代表整个函数体

如果一个变量名后面有括号,php将寻找与变量的值同名的函数并尝试执行它,可用于实现回调函数函数表等

变量函数不能用于语言结构,系统中的函数不能用于变量函数:echo() print() unset()
empty() include() require()

递归函数——自己调用自己 注意退出条件 防止死循环
function demo()
{
if($a > 1)
{
$r=$a*demo($a-1);

}else
{
$r=$a;
}
return $r;

}

echo demo(4);

4.4
内部函数——在函数内部再声明一个函数
在父函数没有被调用的情况下,父函数里面的函数不能被调用

重用函数
include(); //include("demo.php"); 或者 include "demo.php";
require(); //同上 类似的还有echo

include_once(); //防止函数等重复定义错误,比如多个页面(都包含过同一函数文件)之间互相调用
require_once();

require()在预处理期间导入,相当于将文件完全拷贝,与有无条件逻辑无关
include()每次都要重新计算文件名,在处理错误上,include产生一个警告,require产生一个致命错误

第五章

字符串
字符串的定义
双引号定义的字符串"",
特点:可以在双引号里面执行变量;可以使用转义字符;双引号中可以包含单引号
$num=1000; $a="##### $num aaaaa";如果不像在输出结果中有空格可以用两种方式解决:$a="#####".$num."aaaa";或者$a="#####$(num)aaaaa";
echo "this is a \"string\" test!";

单引号定义的'',不能在单引号的字符串里面执行变量(只能使用连接的办法);只能使用部分转义字符(可以使用转义单引号和转义斜杠\)

反引号``,在反引号里使用的是服务器的命令,将命令的输出结果返回到字符串中

定界符,和双引号一样但可以在里面使用任何多的双引号;
heredoc
<<<定界符

定界符;

字符串的相关函数
输出函数
echo(); 不用括号可以输出多个参数,参数之间用“,”号隔开,用括号则不可
print(); 有返回值 1,0,只能输出一个参数
die(); 输出里面的内容并推出程序(类似 echo+exit)
mysql_connect("localhost","root","") or die("连接失败!")
or的用法:如果前面的执行成功则不执行后面的语句,如果前面的执行失败则马上执行后面的语句
printf();按格式输出

sprintf();用法类似于printf()但不知接输出结果而是将结果保存于变量中
print_r();只用于输出数组
var_dump();检测变量类型

修正字符串函数
itrim()去掉字符串左空格
rtrim()去掉字符串右空格
trim()去掉字符串两边空格
以上三个函数不改变原字符串,返回去掉空格后的新的字符串

strrev()将字符串前后颠倒
函数不改变原字符串,返回新的字符串

strlen()求字符串长度

strtolower()将字符串转换成小写
strtoupper()将字符串转换成大写
函数不改变原字符串,返回新的字符串

ucfirst()将字符串中第一个字符转为大写
ucwords()将字符串中每个单词第一个字母改成大写
函数不改变原字符串,返回新的字符串

explode(string srparater,string string[,inc limit])使用一个字符串分割另一个字符串,返回数组

implode(string glue,array pleces)用一组较小的字符串创建一个大字符串,返回字符串
别名:join()用法与implode相同

substr(string string,int start[,int length])取部分字符串

strstr(str,str)别名:strchr()返回字符串中某字符串开始处至结束的字符串

int strpos(str,char[,int offset])寻找字符串 、中某字符最先出现的位置
strrpos()最后出现的位置

str strrchr()返回最后出现的字符到结尾的字符串

str _pad(str str,in length,str add,STR_PAD_LEET|STR_PAD_RIGHT|STR_PAD_BOTH)字符串的填补函数

字符串比较
<>==
按字节进行字符串比较
strcmp() 区分大小写,返回值为-1 0 1
strcasecmp()不区分大小写的比较

按自然排序法进行字符串比较
strnatcmp()

字符串的模糊比较
soundex()按发音比较键
similar_text()计算两个字符串的相似度,返回匹配个数,
如果有第三个参数则此参数为百分比

替换字符串
str_replace(str ,str,str)返回替换后的字符串,源字符串为改变(str_replace(被替换串,替换串,母串))
str_replace(array,string,string)
str_replace(array,array,string)两个数组对应好

字符串翻译函数
strtr(string,string from,string to)字符串的翻译函数
strtr(string,array)(数组键值互换)

stripslashes();
addslashes()

htmlentities()
htmlspecialchars()

strip_tags()删除/过滤HTML标签

处理URL
对URL字符串的解析
parse_str()
parse_url()

对URL编码处理函数
rawurlencode()
urlencode()
urldecode()

构造查询字符串等
http_build_query()

第六章

1.PHP中数组的声明
2.PHP数组的遍历
3.PHP数组的相关处理函数

什么是数组?
数组是一个可以存储一组或一些列数值的变量

可以存储任何类型的数据(多数据类型);
数组长度可变

下标:可以视为资料内容在此数组中的识别名称,
数组的声明
PHP数组分两类
索引数组:数组的索引值是整数,以0开始
关联数组:数组以字符串作为索引值并且

$arr[0]=1;$arr[1]=2;$arr[2]=3;

$数组变量名[索引值]=资料内容;$[0]=12;$["name"]="zhangsan";
$arr[]=1;$arr[]=100;

$数组变量名=array(资料内容,资料内容,。。。)
$arr=array(1,"abc",2);$arr-array("one"=>1,100=>"abc",2)//2的下标为101,索引下标依据前面的索引小标递增
$arr=array("age"=>1,2,"name"=>"one",3.333,true)//关联数组与索引
数组混合使用,如果索引数组不指定下标,下标从0开始

二维数组的声明:

遍历数组
foreach循环结构
while() list() each()//详见视频6.2

6.3
指针控制函数
current(数组的名称) :得到目前指针位置内容的资料(不移动指针)
key(数组的名称):读取目标指针所指向资料的索引的值

next(数组名称)往下移动一个
prev()前一个
end()结尾的
reset()重回第一个

count():求数组长度
sizeof():求数组长度

array_change_key_case(目标数组,形态常数)//适用PHP4.2.0以后版本
将数组中字符串索引的英文字母转换为全部大写或小写形态去不
形态常数:CASE_UPPER转换为大写 CASE_LOWER转换小写

array_chunk(目标数组,索引个数[,boolean]):将指定的数组分为小数组_分解数组

array_count_values(数组名称):计算数组中各值出现的次数

array_fill(起始索引位置,区段大小,指定字元):初始化数组

array_filter(目标数组,使用者定义的函数):过滤函数——字符串默认等于0???????
array_walk()
array_map()

array_flip(目标数组):目标数组中的索引与值对调,注意翻转后相同键名的覆盖!!!!

array_sun(目标数组):计算数组中所有元素值得总和

array_unique():去除数组中重复的值

6.4
array_values()返回数组中所有值形成一个新数组,忽略原有键名,重新使用数字索引值
array_keys()返回包含数字或字符串的键名数组

数组检索
in_array()查找每个某一个值是否在数组里面,返回布尔值:第一个参数:要检索的元素;第二个要检索的数组,第三个参数,是否严格按照数据类型进行检索
array_search()与in_array()参数相同,存在返回值为相对应的键名,不存在返回FALSE
array_key_exists();判断下标是否在数组中,返回布尔值

数组与变量转换——元素的键名与变量名,元素的值与变量值保持对应关系
extract()数组转换成变量
compact()变量转换成数组

数组与栈
栈“后进先出”
array_push()将一个或多个元素压入数组,返回数组元素个数
array_pop()将数组中最后一个元素弹出(将元素从数组删除),返回弹出的元素

数组与队(队列)
array_unshift()在队列的开头插入一个或多个元素,返回数组长度
array_shift()在数组的开头弹出数据,返回删除的元素

数组排序
sort()
忽略键名的数组排序
sort()
rsort()
usort()
保留键名的数组排序
asort()
arsort()
uasort()
根据键名对数组排序
ksort()
krsort()
uksort()
按自然数顺序排序
natsort()
natcasesort()

数组元素计算的函数
array_sum()计算数组元素之和
array_merge()数组合并
array_merge_recursive()数组合并
array_diff()求差集
array_diff()_assoc()

数组交集
array_intersect()
array_intersect_assoc()

第七章

PHP面向对象

oop

什么是类

什么是对象

类和对象之间的关系

什么是成员属性

什么是成员方法

7.2
如何去抽象一个类
class 类名
{
成员属性;
成员方法;

}

7.3
如何实例化对象
$对象名称=new 类名称()
$对象名称->成员属性;$p->name="张三"
$对象名称->成员方法;$p->say();

7.4

特殊的引用$this使用

构造方法特点:名称和类名相同,对象一产生的时候,自动调用构造方法,
用构造方法初始化成员属性
__construct()//构造方法
{

}
__destruct()//析构方法——栈
{

}

7.5
封装性
private
就是将对象内部的属性或方法封装在自己对性的内部,在对象内部可以被使用或访问,但在对象的外部或在其它对象里不能使用封装的成员属性或成员方法

7.6
__set()对私有属性赋值时自动调用
__get()对私有属性取值时自动调用
__isset()判断对象里面的私有属性是否存在时调用的
__unset()删除对象内部私有属性时自动调用
在某一时刻自动调用的方法

7.7
类的继承
继承就是对原有类的“扩展”

7.8
类方法的重载

访问类型
private protected public

private protected public

同一个类中 ok ok ok

子类中 ok ok

外部 ok

7.9
常用关键字:final static const
final:只能用来定义类和方法
作用:使用final定义的类不能被继承
使用final定义的方法不能被重载

static :可以修饰属性,也可以修饰方法
静态成员使用 类名::$成员 的形式访问

this:在对象中代表本对象
self:在类中代表本类

用static声明的方法里面不能使用非静态的成员

const:是一个在类里面定义成员属性为常量的关键字
类名::成员属性(没有$)
只能修饰属性,只用在声明的时候给初始值
const country="中国";

7.10
自动调用的方法

__toString() __clone() __call() __autoload()

__toString()在直接输出对象是自动调用

__clone()在克隆对象时自动调用的方法;作用:对新克隆出来的副本进行初始化
$this 代表副本 $that 代表原本(不好用)

__call()调用对象里面不存在的方法时自动调用

__autoload()写在类外面,加载类时自动调用

7.11
对象的串行化与反串行化
两个过程:串行化,就是把对象转为二进制的字符串 serialize():参数为对象名,返回值是串行化后得到的二进制串
反串行化,就是把二进制的字符串转化为对象 unserialize()函数
需要串行化的两种情况:
第一种:对象在网络中传输的时候;
第二种:将对象写入文件或者是写进数据库时

部分序列(串行化)化
__sleep() //有选择的序列化
{
$arr=array("name","age");
return $arr;
}

__wakeup() 作用类似于:__clone()方法,反序列化初始化对象
{

}

7.12
抽象类与接口

抽象方法:在类里面没有方法体的方法就是抽象方法,即没有{}以及其中的内容,在方法名后面加一个分号结束,另外在方法声明时还要加上关键字“abstract”来修饰;

抽象类:如果一个类里面有一个类是抽象的,那么这个类就是抽象类;
这个类就要使用“abstract”关键字来修饰

注意:抽象类不可以实例化对象

用途:抽象类就相当于一个规范,

7.13
接口声明与使用
class Demo //普通类
{
可以有成员属性
可以有成员方法
}

abstract class Demo // 抽象类
{
可以有成员属性,可以有普通方法,至少有一个抽象方法
}

interface Dema //接口
{
所有的成员属性必须是常量(const),所有的方法都是抽象的(不需要abstract关键字),所有的成员都必须是public
}

作用:接口也是一种规范,与抽象类相似

实现接口时使用implements 关键字 == extends 都是创建一个类的子类

可以使用抽象类去实现一个接口的部分方法
使用类去实现接口中全部方法

访问常量用类名::常量名

接口之间可以继承 用extends关键字

一个类可以实现多个接口
class Demo implements One,Two,Three
{
}
class Demo extends Test implements One //继承一个类的同时可以实现多个接口,一定先继承再实现
{
}

7.14
多态的应用

第八章

正则表达式

是用于描述字符排列模式的一种语法规则。
作用:字符串的模式分割、匹配、查找、替换
8.1
正规字符:a_z 0_9 A_Z
特殊字符:()?^$

原子:(普通字符,如:英文字符、数字、标点符号等)
单个字符,数字,如a-z A-Z 0-9
模式单元,如(abc)
原子表,如[abc],使用[]里面每个原子地位相等,只匹配其中一个原子
[^abc] “^”排除原子表 ,匹配除原子表内原子之外的任何一个字符
[a-z] [a-zA-Z0-9]

转义字符组成
\d 匹配一个数字 0-9 [0-9]
\D 匹配除数字意外的任何一个字符 [^0-9]
\w 匹配一个英文字母,数字或下划线(_)[0-9a-zA-Z_]
\W 匹配除英文字母,数字下划线外任何一个字符[^0-9a-zA-Z_]
\s 匹配一个空白字符(\f\n\r\t\v) [\f\n\r\t\v]
\S 匹配一个除空白字符外的任意字符[^\f\n\r\t\v]
\f 换页
\n 换行
\r 回车
\t 制表符
\v 垂直制表符
\oNN 八进制
\xNN 十六进制
\cC 匹配一个控制字符

8.2
元字符:(有特殊功能用途的字符)*+?.|^$——如果元字符想匹配原意加\转义即可
*:0,1或多次匹配其前的原子——/go*gle/可以与ggle匹配
+:1或多次匹配其前的原子与*相比,*可以没有即/go*gle/可以与ggle不匹配
?:0次或1次匹配其前的原子
.:匹配除换行符外任何一个字符,相当于[^\n](linux)[^\n\r](win)
|:或得意思,匹配两个或多个选择,优先级比较低
^:匹配字符串串首的原子,即必须以什么开头 /^abc/
$:匹配字符串串尾的原子,即必须以什么结尾 /abc$/
\b:匹配单词边界 /\bis\b/ is两边必须都有边界
\B:匹配单词边界以外的部分
{}的应用:
{m}:表示其前原子恰好出现m次
{m,n}:表示其前的原子至少出现m次,最多出现n次
{m,}:表示其前的原子出现不少于m次
():括号里面内容整体表示一个原子,一个模式单元中的表达式将被优先匹配或运算,系统自动
将这些模式匹配单元依次储存起来,需要时可以用“\1 \2 ”的形式进行引用,当正则表达式包含有相同的匹配单元时这种方式是比较便于管理的

8.3
模式匹配的顺序,由左到右 依次匹配
优先级
模式单元 () 1
重复匹配 ?*+{} 2
边界限制 ^$ \b \B 3
模式选择 | 4

模式修正字符:(i,u,s,x):模式修正符扩展了正则表达式在字符匹配替换操作时的某些功能,增强了正则表达式的处理能力
标记在整个模式之外,如"/abc/i",模式修正符可以组合,如"/abc/iUsx"

详见手册
i:不区分大小写的匹配
m:将字符串视为多行
s:将字符串视为单行,换行符作为普通字符
x:将模式中的空白忽略
e:
A:
D:
U:匹配到最近的字符串
S:

两种函数库,功能相似效率不同
PCRE preg_ //效率较高
POSIX ereg_

正则表达式模式定界符除了字母 数字和正斜线(\)之外都可作为定界符,通常用/

8.4(8.5)
preg_match()
preg_match_all()
preg_grep()

8.5(8.4)

8.6
UBBCode转义
正则中文匹配:\x7f-\xff

第九章

PHP文件系统(文件操作)
9.1
php对文件系统的操作是基于unix或者linux的

fopen("目的文件名称","文件打开模式参数")//打开成功返回文件指针,如果打开失败返回假
目的文件名称:
windows:c:\\test\\test.txt 两个“\”是转义,windows也接受"/"的格式 c:/test/test.txt 出于可移植性的考虑,使用"/"格式
linux:/root/test/test.txt “DIRECTORY_SEPAPATOR”常量

fopen("../test/test.txt","r");当前目录上一级目录下的test目录下的test.txt文件

fopen("http://www.cunlicunwai.com/index.php%22,%22r"); 远程文件不能写只能读 http https
fopen("ftp:root:pass@www.cunlicunwai.com/a.txt","r") ftp可以以只写的方式打开,不能以读写的方式打开 ftp ftps

文件打开模式参数
r:只读方式打开 文件指针指向开头 文件必须先存在
r+:读写方式打开 文件指针指向开头 文件必须先存在
w:以写的方式打开 文件指针指向文件开头并将文件大小清空 文件不存在创建文件
w+:读写方式打开 文件指针指向文件开头并将文件大小(截为零)清空 文件不存在创建文件
a:以写的方式打开 文件指针指向文件结尾 写的内容在文件末尾追加 文件不存在创建文件
a+:以读写方式打开
x:创建并以写入方式打开 将文件指针指向文件开头 如果文件存在则fopen()调用失败并返回假,并生成一个
错误信息,文件不存在尝试创建文件,只是用于本地文件
x+:创建并以读写方式打开
b:只限于windows系统 附加在上述模式的末尾,明确操作的是一个二进制文件
t:只限于windows系统 附加在上述模式末尾,透明的将行结束符(\n)转换成\r\n

fwrite() //别名 fputs()
fclose() //关闭 失败返回假

9.2
fread();
fgets():从文件指针中读取一行
fgetc():从文件中读取一个字符

file():不用打开文件和关闭文件,直接读取文件,返回数组,文件有多少行数组有多少变量

readfile():读取文件内容并直接输出

9.3
fopen()打开远程文件

file_get_contents(读取的文件名) 可以打开本地或远程文件——读取
file_put_contents(写入的文件名,写入的内容,)——写入

flock(文件指针,访问的权限) 锁定
访问权限:
LOCK_SH:共享锁定,读文件时使用
LOCK_EX:独占锁定,写入文件时使用
LOCK_UN:释放锁定,释放共享或独占锁定
LOCK_NB:附加锁定, flock($file,LOCK_EX+LOCK_NB) flock($file,LOCK_UN+LOCK_NB) 防止锁定阻塞

9.4
ftell(文件指针):返回文件指针当前位置
fseek(文件指针,移动的字节数,起始位置):移动文件指针到指定位置 //读取成功返回0,否则返回-1
起始位置:SEEK_CUR:当前位置 SEEK_SET:默认,从开始位置开始读 SEEK_END:从文件末尾开始读(第二个参数负数倒着读)
rewind():移动文件指针到文件开头

如果要使用此函数,必须提供一个由fopen()打开的合法的文件指针,指针位置是以从文件开头的字节数来定的

下面四个函数,操作成功返回真,失败返回假
copy():复制
unlink():删除
rename():重命名
ftruncate(文件指针,截取长度):截取文件

9.5
获取文件属性的函数,所需参数-文件名称

filectime():文件创建时间 返回时间戳
filemtime():文件修改时间
fileatime():最后访问时间

file_exists():判断文件是否存在
filesize():文件大小
filetype():判断文件类型

is_dir():判断是否为目录文件
is_file():判断是否为常规文件
is_link():判断是否为链接文件
is_executable():判断文件是否为可执行文件
is_readable():判断文件是否可读
is_writable():判断文件是否可写

linux文件权限——rwx(文件拥有着) rwx(文件所在组) rwx(其它用户) r-读 4 w-写 2 x-执行 1
chmod(文件名,权限常数):改变文件权限
chowm(文件名,用户id):改变文件拥有者 普通用户id从500开始
chgrp(文件名,组id):改变文件拥有组 普通组id从500开始

fileowner(文件名):获取文件拥有者,返回拥有者id(管理员id为0)
filegroup(文件名):获取文件拥有组,返回拥有组id

9.6
目录操作

遍历目录
fopen()
fread()
fclose()

opendir(目标路径):返回目录的引用句柄,否则返回假及错误警告e_warnine
readdir(目录的引用句柄-上一个函数返回的):返回目录下的文件或目录名,且指针向下移动一次 ("."代表当前目录,".."代表上一级目录)
rewinddir():把指针返回目录开始处
closedir():

检索目录 * ? {}
glob()

9.7
建立目录
mkdir($pathname[,mode]):成功返回真

删除目录
rmdir(dirname):指定的目录必须为空目录
目录非空时没有现成的删除函数,自己用递归的方法写函数
function deleteDir()
{
$handle=opendir($pathName);
readdir($handle); //删除"."
readdir($handle); //删除".."

while(($file=readdir($handle))!==false) //进入目录删除其中的文件
{
$file=$pathNme.DIRECTORY_SEPARATOR.$file;
if(is_dir($file))
{
deleteDir($file);
}else
{
if(unlink($file))
{
echo "文件 $file 删除成功<br>";
}else
{
echo "文件 $file 删除失败<br>";
}
}

}
closedir($handle);//关闭打开的目录
if(rmdir($pathName)) //删除目录
{
echo "目录<b>$pathName</b>删除成功<br>";
}else
{
echo "目录<b>$pathName</b>删除失败<br>";
}

}

复制目录

没有现成函数,使用递归创建

function copydir($dirfrom,$dirto)
{
if(is_file($dirto))
{
die("无法创建目录 $dirto");
}

if(!file_exists($dirto))
{
mkdir($dirto);
}

$handle=opendir($dirfrom);
readdir($handle);
readdir($handle);

while(($file=readdir($handle))!==false)
{
$filefrom=$dirfrom.DIRECTORY_SEPARATR.$file;
$fileto=$dirto.DIRECTORY_SEPARATR.$file;

if(is_dir($filefrom))
{
copydir($fielfrom,$fileto); //递归
}else
{
copy($filefrom,$fileto);
}

}

closedir($handle);
}

第十章

10.1
文件上传
1.表单提交
2.对文件的操作

表单必须要改两个值
1.method="post"
2.enctype="multipart/form-data" //文件上传时改成此值,其它情况默认即可
隐藏表单

$_FILES:接收文件上传,二维数组

文件下载

10.2

标准的MIME(多用途网络邮件扩展协议)类型
主要用于网络文件、电子邮件的传输或下载等,MIME类型规定了各种文件的格式的类型
text:文本类型
text/html .html .htm
text/plain .txt .log
image:图像类型
image/gif .gif
image/jpeg .jpeg .jpg
image/png .png
autio:声音
audio/x-midi .mid .midi
audio/x-wav .wav
video:视频
video/quicktime .qt .mov
video/mpeg .mpeg
application:应用程序
application/pdf .pdf
application/msword .doc .dot
application/vnd.ms-excel .xls
application/vnd.mspowerpoint .ppt
application/zip .zip
application/rar .rar
application/xml .xml .xsl
application/mshelp .hlp .chm
application/octet-stream .exe .bin .com .dll .class
multipart:多组件
message:处理消息的

每一种MIME类型定义了大量的子类型,子类型使用需用"/"分割

move_uploaded_file()

is_uploaded_file():判断是否是上传文件

错误代码($_FILES[$filename]["error"])

10.3
上传多个文件和文件下载
<form action="todo.php" method="post" enctype="multipart/form-data">

//注意name为数组名称,此时$_FILES变为三维数组,
<input type="file" name="myfile[]"><br>
<input type="file" name="myfile[]"><br>
<input type="file" name="myfile[]"><br>
<input type="file" name="myfile[]"><br>
<input type="hidden" name="MAX_FILE_SIZE" value="100000"> //隐藏表单
<input type="submit" value="上传">
</form>

//$_FILES内部组成为
$_FILES["myfile"]["name"][o]
$_FILES["myfile"]["name"][1]
$_FILES["myfile"]["name"][2]
$_FILES["myfile"]["name"][3]

$_FILES["myfile"]["size"][o]
.......

下载文件
下载文件需要向浏览器发送必要的头信息,通知浏览器将要进行下载文件的处理,发送信息包含以下内容:
文件下载的类型使用MIME类型
下载文件的描述,如给出文件的名称等
下载文件的长度以字节为单位
发送头信息,使用header()函数,此函数前面不能有任何输出包括空行空格都不可以
此函数接收一个头信息的字符串作为参数,之后需要将文件内容输出到浏览器以便进行下载

$filename="one.html";
header("Content-type:text/html"); //指定文件类型
header('Content-Disposition:attachment;filename="download.html"') //指定文件的描述
附件 文件名
header("Content-Length:".filesize($filename)); //指定文件大小

$fp=fopen($filename,"r");
while(feof($fp)==false) //循环从里面读字节输出
{
echo fread($fp,1024);
}
fclose($fp);

$filename="图片.jpg";
header("Content-type:image/jpeg"); //指定文件类型
header('Content-Disposition:attachment;filename="tutudown.jpg"') //指定文件的描述
附件 文件名 随便命名
header("Content-Length:".filesize($filename)); //指定文件大小

readfile($filename); //读取全部文件内容并直接输出到浏览器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: