静态网络特点:
1.静态网页是实实在在保存在服务器上的文件,每个网页都是一个独立的文件
2.内容相对稳定,容易被搜索引擎检索
3.没有数据库的支持,当网站信息量很大时完全依靠静态网页制作方式比较困难
4.交互性比较差,在功能方面有较大的限制
动态网络特点
1.交互性:网络会根据用户的要求和选择动态地改变和响应,浏览器作为客户端,成为一个动态交流的桥梁,交互性也是今后web发展的潮流
2.自动更新:即无需手动更新html文档,便会自动生成心也面,大大节省工作量。
3.因时因人而变:即当不同时间、不同用户访问同一网址会出现不同页面
IP的概念
网络之间互连的协议也就是为计算机网络相互连接进行通信而设计的协议。ip地址具有唯一性(每台电脑都有一个唯一的ip地址)
域名
由一串用点分隔的名字组成的internet上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。一个域名的目的是便于记忆和沟通的一组服务器的地址。
DNS
域名系统,因特网上作为域名和ip地址相互映射的一个分布式数据库,使用户更方便的访问互联网,不用记住ip数串。通过主机名,最终得到该主机名对应的ip地址的过程叫做域名解析、
端口
设备与外界通讯交流的出口,分为虚拟端口和物理端口,虚拟端口指计算机内部或交换机路由器内的端口,不可见
用户输入域名 localhost:端口——>DNS(localhost 127.0.0.1)——>服务器电脑——>端口软件(服务)
WEB程序访问流程
web分为两类:静态网站和动态网站
浏览器发起访问-》dns解析域名->服务器电脑->软件
静态网站访问流程:
动态网站访问流程:
和静态差不多,但是会多出几个内容:服务器端解析,数据库
apache目录说明
httpd.exe的详细应用
1.服务器进程:运行之后才能工作
2.用来查看apache具有哪些功能以及配置文件是否有错:httpd或者httpd.exe(文件所在目录)
static静态加载:apache启动就加载好了,可以直接使用
shared动态加载:在使用到的时候才会加载
php基础
php是一种运行在服务器端的脚本语言,可以嵌入到HTML中。
php代码标记
asp标记:<%php代码%>
短标记:<?php代码?>
以上弃用
脚本标记:<script language="php">php代码</script>
标准标记(常用):<?php php代码?>
在www下建立的文件名称就是项目名称
除了可以通过localhost访问,还可以通过ip地址访问
特殊说明
1.php中标记结束符?>有自带语句结束符的效果,最后一行php代码可以没有语句结束符
2.PHP中很多代码的书写并不是嵌入到html中,而是单独存在,通常书写习惯中就不建议使用标记结束符?>
变量的使用
定义变量:在PHP中不需要任何关键字来定义变量(赋值)
访问变量
echo $var2; //通过var2变量名字找到存储的内容1,然后输出
删除变量
使用unset(变量名字)
unset($var2);
变量命名规则
1.php中的所有变量都必须使用“$”符号
2.名字由字母、数字和下划线“_"组成,但是不能以数字开头
3.在php中本身还允许中文变量(不建议)
预定义变量
预定义变量:提前定义的变量,系统定义的变量,存储许多需要用到的数据(预定义的变量都是数组)
可变变量
可变变量:如果一个变量保存的值刚好是另外一个变量的名字,那么可以直接通过访问一个变量得到另外一个变量的值:在变量前再多加一个$符号
$a='b';
$b='bb';
echo $$a;
变量传值
将一个变量赋值给另外一个变量
两种方式:值传递,引用传递
值传递:将变量保存的值赋值一份,然后将新的值给另外一个变量保存(两个变量没有关系)
引用传递:将变量保存的值所在的内存地址传递给另外一个变量:两个变量指向同一块内存空间(两个变量是同一个值)
$a=1;
$b=&$a;
常量
与变量一样,都是用来保存数据的
常量定义形式
两种定义方式
1.使用定义常量的函数:define(‘常量名’,常量值);
2.const关键字定义,const 常量名=‘值’
命名规则
1.常量不需要使用$符号,一旦使用系统会认为是变量
2 .名字由字母、数字和下划线“_"组成,但是不能以数字开头
3. 常量的名字通常是以大写字母为主(为了区别变量)
4.命名规则较松散,可以使用一些特殊字符,该方式只能使用define定义
系统常量
系统帮助用户定义的常量,用户可以直接使用
数据类型转换
1.布尔true为1,false为0
2.字符串数值有自己的规则
2.1以字母开头的字符串,永远为0
2.2以数字开头的字符串,取到碰到字符串为止(不会同时包含两个小数点)
类型判断
通过一组类型判断函数,来判断变量,最终返回这个变量所保存的数据类型:是一组以is开头跟类型名字的函数:is-xxx(变量名)
bool类型不能用echo查看,可以使用var-dump结构查看
还有一组函数可以用来获取以及设定数据的类型
Gettype(变量名):获取类型
settype(变量名,类型):设定数据类型
1.强制转换(类型)变量名:是对数据值复制的内容进行处理(不会处理实际存储的内容)
2.settype会直接改变数据本身
整数类型
$a=120; 10进制
$a=0b110; 2进制
$a=0120; 8进制
$a=0x120; 16进制
Decbin(): 十进制转二进制
Decoct():十进制转八进制
Dechex():十进制转十六进制
Bindec():二进制转十进制
连接运算符
连接运算:是php中将多个字符串拼接的一种符号
. 将两个字符串连接到一起
.= 复合运算,将左边的内容与右边的内容连接起来,然后重新赋值给左边变量
A.=b ==== A=A.b
错误抑制符
在php中有一些错误可以提前预知,但是这些错误可能无法避免,但是又希望报错给用户看,可以使用错误抑制符处理。
@:在可能出错的表达式前面使用@符号
计算机码
原码,反码和补码,数值本身最左边一位是用来充当符号位:正数为0,负数为1
原码:数据本身从十进制转换成二进制得到的结果
正数:左边符号位为0(正数的原码,反码,补码就是原码本身)
负数:左边符号位为1
反码:针对负数,符号位不变,其他位取反
补码:针对负数,反码+1
位运算符
~:按位非,一个位如果为1则变成0,否则反之
^:按位异或,两个相同则为0,不同则为1
<<:按位左移,整个位,向左移动一位,右边补0 乘二
>>:按位右移,整个位向右移动一位,左边补符号位对应内容(正数补0,负数补1)除二
注意:
1.系统进行任何位运算的时候都是使用的补码
2.运算结束之后都必须转换成原码才是最终要显示的数据
流程控制替代语法
分支和循环结构的替代语法
php本身是嵌入到html中的脚本语言,需要在html中书写一些关于判断或者循环的结构语法,必须符合php标签规范,需要html与php进行混搭,如果使用原始的php代码那么会非常不美观。
替代语法:
左大括号{使用:替代
右大括号使用end+对应的起始标记替代
if:if() endif:
文件包含
文件包含:在一个php脚本中,去将另外一个文件包含进来,去合作完成一件事情
意义:
1.要么使用被包含文件中的内容,实现代码的共享(重用):向上包含(索要)
向上包含:在当前脚本要用某个代码之前包含别的文件
2.要么自己有东西可以给别的文件使用,实现代码的共享(重用):向下包含(给予)
向下包含:在自己有某个东西的时候,需要别的脚本来显示(自己代码写完之后包含其他文件)
作用:
分工协作,使用协作方式,让多个脚本共同完成一件事情
包含基本语法
include:‘文件名字’;
include(‘文件名字’);
文件加载原理
在php中被包含的文件是单独进行编译的
include与require的区别
报错形式不一样
include:系统会碰到一次,执行一次;如果对同一个文件进行多次加载,那么系统会执行多次:
include once:系统碰到多次,也只会执行一次
文件加载路径
1.绝对路径
从磁盘的根目录开始(本地绝对路径)
从网站根目录开始(网络绝对路径)
2.相对路径
从当前文件所在目录开始的路径
函数
函数是一种结构不会自动运行,必须通过调用才会执行
//定义函数
function display(){
echo ‘hello world’;
}
//调用函数
display();
函数是在代码执行阶段,碰到函数名字才会调用,不是在编译阶段
函数的调用可以在定义之前
引用传递
实参在调用时会将值赋值给形参,那么实际上使用的方式就是一种简单的值传递:将实参(如果是变量或者是常量或者其他表达式)的结果(值)取出来赋值给形参:形参与外部实际传入的参数本身没有任何关联关系:只是结果一样
有的时候,希望在函数内部拿到的外部数据,能够在函数内部改变,那么就需要明确告知函数(定义时),函数才会在调用的时候去主动获取外部不数据的内存地址。
返回值
1.return在函数内部存在的价值:返回当前函数的结果(当前函数运行结束)
2.return还可以在文件中直接使用(不在函数里面):代表文件将结果return后面的内容,转交给包含当前文件的位置。(通常在系统配置文件中使用较多)return之后的内容不会执行
作用域
变量(常量)能够被访问的区域
静态变量
静态变量:static,在函数内部定义的变量,使用static关键字修饰,用来实现跨函数共享
数据的变量:函数运行结束所有局部变量都会清空,如果重新运行一下函数,所有的局部变量又会重新初始化。
语法:
function 函数名(){
statec $变量名=值;
}
作用:跨函数共享数据(同一函数被多次调用)
函数在调用的时候,会自动跳过static关键字这一行
使用:
1.为了统计当前函数被调用的次数
2.为了统筹函数多次调用得到的不同结果
可变函数
$变量=‘display’
function display(){
闭包
函数内部有一些局部变量(要执行的代码块)在函数执行之后没有被释放,是因为在函数内部还有对应的函数在引用(函数的内部函数:匿名函数)
ps:参数的标识是从0开始
字符串转义
php中常用的转义符号:
/‘:在单引号字符串中显示单引号
/’‘:在双引号字符串中显示双引号
/r:代表回车
/n:代表新一行
/t:类似tab键
/$: 特定识别
1.单引号能识别/’,双引号不能识别/‘
2.双引号中可以解析变量,单引号不可以
双引号中变量识别的规则
1.变量本身系统能够和后面的内容区分:应该保证变量的独立性,不要让系统难以区分
2.使用变量专业标识符,给变量加上一组大括号{}
结构化定义字符串变量的规则:
1.结构化定义字符串对应的边界符有条件:
1.1 上边界符后面不能跟任何内容
1.2 下边界符必须定格:最左边
1.3 下边界同样后面只能跟分号,不能跟任何内容
2.结构化定义字符串的内部(边界符之间)的所有内容都是字符串本身
$str =<<<EOD
hello
world
EOD;
中文在utf8字符集下占3个字节
Mbstring扩展针对的是一些关于字符统计:strlen只是针对标准交换码ASCII,mbstring会针对不同字符集
遍历
Foreach遍历语法
Foreach($数组变量 as[$下标 =>]$值
//通过$下标访问元素的下标;通过$值访问元素的值
)
表单传值
浏览器通过表单元素将用户的选择或者输入的数据提交给后台服务器语言
为什么使用表单传值
动态网站的特点是后台根据用户的需求定制数据,所谓的需求就是用户通过当前的选择或者输入的数据信息,表单就是这些数据的承载者
表单传值方式
get传值
1.通过get将数据传过去
2.?+后面的数据
post传值
php接收数据的三种方式
get/post/request关系
证明request中post会覆盖get
php处理复选框数据
复选框表单项的命名方式
复选框:通常将一类内容以同样(同名)的形式传递给后台,数据库存储通常是一个字段存储。
特点:选中才会提交
1.在浏览器端,checkbox的name属性的值不论什么都会被浏览器毫无保留的提交
2.在php中$_post/$_get都会对同名name属性进行覆盖
解决方案:浏览器不识别【】(浏览器不认为有特殊性),但是php认为【】有特殊性:系统自动认为该符号是数组的形式,所以php就会自动的将同名的但是带有【】的元素组合到一起形成一个数组
复选框数据的接收形式
php会自动组合同名元素的为数组
复选框数据的常见处理
1.单选按钮的数据处理
radio button:可以出现多个选择项,但是只能选择其中一个
1.表单中使用的name属性,使用同名即可:只能选中一个
2.后台接收数据也不需要额外处理
3.数据库存储的话只需要一个字段存储普通数据即可(数字或者字符串)
name必须一样
4.php拿到数据之后,组织sql直接存储到数据表即可
2.多选按钮的数据处理
1.表单中name属性使用数组格式:名字【】(一类复选框数据使用一个)
2.后台接收到数据之后,是一个数组(数组不能存储到数据库)
3.php需要将数组转换成指定格式的字符串:使用分隔符分隔每一个元素并且形成字符串
implode(‘分隔符’,数组)
4.php组织sql直接存储到数据库
5.如果反过来操作,那么取出数据之后使用explode把字符串变成数组
2.在html显示当中,通过判断复选框元素是否在数组中存在,来确定复选框checkbox是否有 checked=’checked‘属性:in-array()
3.其他常规的同名表单项的数据处理
除开radio button单选框和checkbox复选框,很少会出现同名的表单项。如果非要使用同名的来进行管理,那么可以采用checkbox方式进行操作
1.表单中同名增加【】
2.php接收时数组处理
3.php转换成有格式的字符串
4.数据库字符串存储
复选框细节
如果复选框没有选中,那么浏览器就不会提交。因此在php接收使用复选框(单选框)数据的时候,应该先判断是否存在该数据
文件上传
原理
文件上传:文件从用户本地电脑通过传输方式(web表单)保存到服务器所在电脑指定的目录下。
1.增加文件上传的表单:浏览器请求一个服务器的html脚本(包含文件上传表单)
2.用户从本地选择一个文件(点击上传框(按钮))
3.用户点击上传:文件会通过互联网传输到服务器上
3.服务器操作系统会将文件保存到临时目录:是以临时文件格式保存
5.服务器脚本开始工作:判断文件有效
6.服务器脚本将有效文件从临时目录移动到指定的目录下(完成)
表单写法
1.method属性:表单提交方式必须为post
2.enctype属性:form表单属性,主要是规范表单数据的编码方式
3.上传表单:file表单
在PHP中,有一个预定义变量$_files是专门用来存储用户上传的文件的
$_files变量详解
1.name:文件在用户(浏览器端)电脑上实际存在的名字(实际用来保留后缀)
2.tmp-name:文件上传到服务器后操作系统保存的临时路径(实际用来给php后期使用)
3.type:mime(多功能互联网邮件扩展)类型,用来在计算机中客户端识别文件类型(确定软件)
4.error:文件上传的代号,用来告知应用软件(php)文件接收过程中出现了什么问题(php后期根据代码进行文件判断)
5.size:文件大小(php根据实际需求来确定是否该保留)
移动临时文件到目标位置
文件上传之后会保存到$_files中,那么访问文件信息的形式就是$_files【表单 name 属性值】【元素信息】
1.判断是否为上传的文件:is-uploaded-file()
2.移动文件:move-uploaded-file()
多文件上传
当商品需要上传多个图片进行展示的时候:那么需要使用多文件上传
针对一个内容但是不同文件说明:同名表单
当商品需要进行多个维度图片说明的时候:需要使用多文件上传
针对是不同内容所以表单名字不一样:批量解决问题
多文件上传的$_files变量的数据结构形式
批量上传:同名表单:将表单名字形成一个数组,而且同时将文件对应的五个要素:name,tmp-name,size,type,error都形成对应数量的数组,每个文件上传数组元素的下标都是一样的:name【0】和type【0】是属于同一个文件
批量上传:不同名上传 :每个文件都会形成一个属于自己独立的5个元素的数组
对多文件的遍历读取和处理
1.不同名多文件上传处理方式:按照表单名字从$_files中取出来就可以直接使用(明确知道表单中有多少文件上传);如果不确定表单中有多少个文件上传,不适合挨个去取(效率不高),可以通过遍历$_FILES数组,挨个取出来实现文件上传
2.同名多文件上传:想办法得到一个文件对应的五个元素数组。从$_filrs中把对应的五个元素挨个取出来,然后存放到不同的数组中。
文件上传后续问题
实现上传功能代码的重复利用:封装文件上传函数
功能:上传文件
条件:条件判断
需要上传的文件信息:对应的5个元素数组
1.文件类型是否合适?外部指定mime类型,媒体类型
2.文件存储到什么位置
3.文件格式限制(文件后缀)?外部限定
4.文件大小限制?外部指定
结果:实现文件上传
1.成功:结果能够在以后看到:需要将文件的路径和文件名字返回(存储到数据库)
2.失败:返回false,指定错误原因(引用参数)
1.封装出一个上传函数
2.判断文件是否有效
3.判断保存路径有效
4.判断文件本身上传的过程中是否有错误
5.文件类型的处理:通过mime匹配即可
6.文件格式的处理:后缀名的问题
7.文件大小的处理
8.移动到指定目录
8.命名冲突的处理:上传同名文件?中文名字文件怎么办?
mysql扩展
php针对mysql数据库操作提供的扩展:允许php当作mysql的一个客户端连接服务器进行操作。
连库基本操作
连接数据库服务器
1.资源 musql-connect(服务器地址,用户名,密码)
连接资源默认也是超全局的,任何地方都可以使用该资源进行数据库的其他操作
mysql_connect默认是对一个服务器只连接一次(如果再次运行,返回的是同一个资源),但是如果有需要连接同一个资源两次,那么可以使用第四个参数:true
设置连接编码
保持客户端与服务器之间的沟通顺畅:同一’语言’(字符集)
1.形式1:mysql_querty(‘set name xxx’)
2.形式2:mysql_set_charset(‘xxx’)
PHP最新版改了:$res = mysqli_query($link,'set names utf8');
3.怎么确定要使用何种编码
客户端当前执行脚本的界面是什么字符集,就设定成什么字符集
选定要使用的数据库
1.形式1:mysql_query('use xxx')
2.形式2:mysql_select_db('xxx')
关闭连接
主动释放连接:mysql服务器的连接资源是有限的,不用了需要释放(脚本执行结束也会自动释放)
1.mysql_close()
执行增删改操作
mysql-query函数执行结果返回的是true或者false,false代表执行失败:
失败原因分两种:一种是sql指令本身语法错误;第二种是执行失败;
做个专门负责数据库初始化的脚本:之后要操作数据库包含该脚本即可
1.mysqli_query('insert...'):通过insert指令向指定表插入对应的数据
2.mysqli_query('delete...')
3.mysqli_query('update...')
判断执行结果
1.执行成功,结果为true,只代表sql指令执行成功
2.执行失败,结果为false,代表sql指令错误或者操作对象不存在
执行查询操作
执行查询语句
1.mysqli_query(‘select’)
2.其他类型查询语句,比如show语句,desc语句
以上两种情况的总结:凡是执行操作希望拿到数据库返回的数据进行展示的(结果返回:数据结果)
3.执行结果的处理:成功为结果集,失败为false
成功返回结果:sql指令没有错误,但是如果查询结果本身为空返回也是true(结果集是一种资源:转换成bool永远为true)
失败为false:sql指令有错误
获取结果集行数
1.mysql-num-rows():获取结果集中待敌有多少行记录
解析结果集
将一种结果集资源(php不能直接用),转换成一种php能够解析的数据格式:通过从结果集中(结果集指针:类似数组指针),按照结果集指针所在位置取出对应的一条记录(一行),返回一个数组,同时指针下移,直到指针移出结果集。
1.mysqli-fetch-assoc():获取关联数组,表的表单名字作为数组下标,元素值作为数组元素值
2.mysqli-fetch-row():获取索引数组,只获取数据的值,然后数组的下标从0开始索引
通常结果集的操作:一般是获取里面的所有(全部记录)
其他相关函数
有关字段信息
1.mysqli_num_fields():获取一个指定结果集中所有的字段数
2.mysqli_field_name():获取一个指定结果集中指定位置字段的名字
有关出错信息
1.mysqli_error($link):获取出错对应的提示信息
2.mysqli_errno($link):获取出错对应的错误提示代号
错误的判断:基于mysqli-query这个函数执行的结果:结果返回false就代表执行错误
其他函数
1.mysqli_insert_id($link):获取上次插入操作产生的自增长id,如果没有自增长id返回0
HTTP协议
http请求
请求行
1.形式:请求方式 资源路径 协议版本号
例子:get/index.php http/1.1
最早的时候 http协议有过1.0,请求行独占一行
请求头
请求头为各项协议内容:具体的协议内容不会每次都是用全部
1.host:请求的主机地址(必须)
2.accept:当前的请求能够接受服务器返回的类型(mime类型)
3.accept-language:接受的语言
4.user-agent:客户浏览器所在点的一些信息
请求头不固定数量,每一个请求协议独占一行,最后会有一行空行(用来区分请求头和请求体)
请求体
请求数据:post请求会有请求体。get请求所有的数据都是跟在url之后,会在请求行中的资源路径上体现
格式:资源名字 =资源值&资源名字=资源值
http响应
响应行
响应头
实际服务器相应给浏览器的内容
服务器正在处理过程中
服务器正常且正确处理
请求的目标已经转移或者需要更新
客户端出错了
服务器出错
refresh:重定向,定时跳转(响应体会解析)
延时重定向:浏览器会根据具体时间延迟后再访问指定跳转链接:浏览器在准备跳转访问之前,会继续解析http协议(响应头和响应体)
content-type:内容类型,mime类型
通过内容告知(mime类型),浏览器正确解析内容
content-disposition:内容类型,mime类型扩展,激活浏览器文件下载对话框
浏览器在解析内容的时候,默认是直接解析:那么有时候需要浏览器不解析,当作内容下载成文件
php模拟HTTP请求
3.重启apache应用
1.建立连接:curl-init():激活一个curl连接功能
3.执行请求:curl-exec():执行选项(与服务器发起请求),得到服务器返回的内容
乱码原因:select.php中的内容有告知浏览器,但是当前是被服务器脚本curl-http.php访问的,没有做解析;输出给浏览器之后,需要当前curl-http.php告知浏览器对应的字幕
4.关闭连接:curl-close():关闭资源
文件编程
目录操作
文件操作创建目录结构
1.mkDir(路径名字):创建成功返回true,创建失败返回false
有些操作为的就是得到一个想要的结果,如果结果本身就存在,那么可以忽略得到过程的错误:抑制错误
删除目录
1.rmDir(指定文件夹路径):移除文件夹
读取目录
读取方式:将文件夹(路径)按照资源方式打开
1.openDir():打开资源,返回一个路径资源,包含指定目录下的所有文件(文件夹)
2.readDir():从资源中读取指针所在位置的文件名字,然后指针下移,直到指针移出资源
.:代表./,自己目录
.. :代表../,上级目录
读取所有内容:遍历操作
关闭目录
1.closeDir():关闭资源
其他目录操作
1.dirname(一个路径):得到的是路径的上一层路径
2.realparh(一个路径):得到真实路径(目录路径),如果是文件那么得到的结果是false
3.is-dir():判断指定路径是否是一个目录
4.scandir():封装版的opendir/readdir/closedir,获取一个指定路径下的所有文件信息,以数组形式返回
递归遍历目录
指定一个目录的情况下,将其下的所有文件和目录,及其目录内部的所有内容都输出出来。
递归算法:将大问题切成相似的小问题(最小单位),然后可以调用解决大问题的方法来解决小问题。
递归函数:函数如果自己内部调用自己,该函数称之为递归函数。
递归遍历目录的思维逻辑
1.设计一个能够遍历一层文件的函数
创建函数
安全判定:是路径才访问
读取全部内容,遍历输出
2.找到递归点:遍历得到的文件是目录,应该调用当前函数(调用自己):
需要构建路径(遍历得到的结果只是文件的名字)
需要排除.和..
判断是路径还是文件
递归调用函数
3.找到递归出口:遍历完这个文件夹之后,发现没有任何子文件夹(函数不再调用自己):
自带递归出口
4.如何显示层级关系?函数第一次运行遍历的结果是最外层目录,内部调用一次说明进入一个子目录,子目录再调用一次函数进行孙子目录,如果能够在第一次调用的时候给个标记,然后在进入的时候,通过标记的变化来识别层级关系就可以达到目的:该标记还能代表层次关系:缩进
1.在函数参数中增加一个标记:默认值为0
2.递归调用函数的时候也需要使用该参数: 但是是属于当前层级的子层,所以+1
3. 根据层级来实现缩进:str-repeat()
文件编程
文件操作
php5常见文件操作函数
1.file_get_contents(文件路径):获取指定文件的所有内容,如果路径不存在,最好做安全处理
2.file_get_contents(文件路径,内容):将指定内容写入到指定文件内:如果当前路径下不存在指定的文件,函数会自动创建(如果路径不存在,不会创建路径)
返回的结果是写入的字符串长度(字节)
php4常见文件操作函数
1.fopen(文件路径,打开模式):打开一个文件资源,限定打开模式
2.fread(资源,长度):从打开的资源中读取指定长度的内容(字节)
3.fwrite(资源,内容):向打开的资源中写入指定的内容
4.fclose(资源):关闭资源
文件下载
php下载:读取文件内容,以文件流的形式传递给浏览器:在响应头中告知浏览器不要解析,激活下载框实现下载
1.指定浏览器解析字符集
2.设定响应头
a 设定文件返回类型:image/jpg ||application/octem-stream
b 设定返回文件计算方式:accept-ranges:bytes
c 设定下载提示:content-disposition:attachment;filename=‘文件名字’
d 设定文件大小:accept-length:文件大小(字节)
3.读取文件
4.输出文件
方案1:如果文件较小,可以使用php5的文件函数操作:
方案2:文件较小,可以使用php4的文件操作方式:一次读一点
会话技术
会话技术初步认识
会话技术介绍
会话技术分类
1.小文本文件(http协议响应头设置),连接到服务器(http请求携带数据)
2.session技术是依赖cookie技术的
两种会话技术区别