<?php
// 定义一个变量
$a = range(0, 1000);
var_dump(memory_get_usage());
// 定义变量b,将a变量的值赋值给b
// COW Copy On Write
$b = $a;
var_dump(memory_get_usage()); //两个变量指向同一内存地址
// 改变了变量a的值,这时要分配内存
$a = range(0, 1000);
var_dump(memory_get_usage());
// 引用变量
$a = range(0, 1000);
var_dump(memory_get_usage());
// 定义变量b,将a变量的值赋值给b
$b = &$a;
var_dump(memory_get_usage());
// 对a进行修改
$a = range(0, 1000); //引用变量分配内存,直接在当前内存更改值
var_dump(memory_get_usage());
//面试真题(考察循环和引用变量)
$data = ['a', 'b', 'c'];
foreach ($data as $key=>$val)
{ //首先:引用变量,不同变量名指向同一地址
$val = &$data[$key]; //第一次循环结束时:$key->1,$val->下一个地址的值 $val->b,所以$data[0]->b
//var_dump($data);
} //2:$val->c ,$data[1]->c
//最后一次结束时,$key不自增,$val->c,$data[3]->c
var_dump($data); //1:b,b,c
//2:b,c,c
//3:b,c,c
$dir = './test';
// 打开目录 opendir();
// 读取目录当中的文件 readdir();
// 如果文件类型是目录,继续打开目录 filetype();
// 读取子目录的文件
// 如果文件类型是文件,输出文件名称
// 关闭目录
//
function loopDir($dir)
{
$handle = opendir($dir);
while(false!==($file = readdir($handle)))
{
if ($file != '.' && $file != '..')
{
echo $file. "\n"; //输出文件的名字
if (filetype($dir. '/'. $file) == 'dir') //目录的类型为dir
{
loopDir($dir. '/'. $file);
}
}
}
}
loopDir($dir);
//静态变量
<?php
function myfunc(){
static $a=1; //静态变量仅在函数中使用,只会初始化一次,程序执行后不会释放,即$a不会再次被赋值,
//可以记录函数的调用次数,可以用在函数的递归调用上,从而终止递归。
echo $a++;
}
myfunc();
myfunc();
myfunc();
//系统内置函数
//正则表达式:后向引用,贪婪模式
//会话控制技术
php——会话控制
1.什么叫做会话控制
允许服务器根据客户端做出的连续请求。
2.为什么需要会话控制?
因为当你打开一个网站,并想访问该网站的其他页面的时候,如果没有会话控制,当跳转到其他页面的 时候,就需要再次输入账户和密码。
3.Cookie的原理和作用
将客户端的简单信息保存在个人PC中,其他程序获取PC的Cookie,来获取使用者的资料。 这样就不需要用户自己输入账户和密码了
注:setCookie()必须在php输出第一句话之前使用,否则无效
4.如何使用Cooike(一般情况)
创建Cookie
setCookie("key","value",retainTime);//创建Cookie
调用Cookie
if ($_COOKIE["key"] == "admin"){ //Cookie是php提供的超级数组
echo "获取数据成功";
}
删除Cookie
//第一种方法
setCookie("key");//只需要输入键名即可
//第二种方法
setCookie("key","",time()-1000);//让保留的时间小于当前时间
Cookie支持变成多维数组
setCookie("user[key]","values"); //相当于$_COOKIE["user"]["key"]
简单的例子:基于Cookie用户的登陆
5.Session的原理和作用
将信息存储在服务器中而不是存储在个人PC上。
6.如何使用Session
(1).配置php.ini选项 (不展开,自己查询相关文档)
(2).启动session
session_start();//在使用session之前都必须先调用该方法
作用:将和Session相关的内建环境变量预先载入到内存中。
(3)调用
$_SESSION["key"] = "value";//$_SESSION也是超级数组,并以数组方式调用
(4)删除
//单个删除
unset($_SESSION["key"]);
//全部删除
$_SESSION = array(); //设置成空数组
//将这个用户在服务器端对应的Session文件删除
session_destory();
HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。
HTTP状态码主要有5种,代表5种不同类型的响应:
- 1xx:信息性状态码,代表接收到请求,正在处理
- 2xx:成功状态码,代表请求正常处理完毕
-
200 OK
表示从客户端发来的请求在服务端被正常处理了 -
204 No Content
服务器接收的处理已经全部处理完毕,但是返回的响应报文中不含有实体的主体部分,另外也不允许返回任何的主体,浏览器接收到204响应之后页面不更新。 -
206 Partial Content
客户端进行了范围请求,服务器成功执行了这部分的GET请求。响应报文中包含由Content-Range指定的实体内容。
-
- 3xx:重定向,表明浏览器需要执行某些特殊的处理以正确处理请求。
-
301 Moved Permanenty
永久重定向,301表示请求的资源已经被分配了新的URI,以后应使用资源现在所指的URI。 - 302 Found
临时重定向,该状态码表示请求的资源已被分配了新的URI,希望用户(本次)能够使用新的URI访问。
与301不同,302是临时重定向,已移动的资源对应的URI在将来可能还是会发生改变。 -
303 See Other
表示请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源。 -
304 Not Modified
304虽然被划分在3xx中,但是和重定向并没有关系。该状态码表示客户端发送附带条件的请求时,服务器允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304 Not Modified(服务器资源未改变,可直接使用客户端未过期的缓存)。304状态码返回时,不包含任何响应的主体部分。 -
307 Temporary Redirect
临时重定向。该状态码与302 Found 有着相同的含义。尽管302标准禁止POST变换成GET,但实际使用时大家并不遵守。
307会遵照浏览器标准,不会从POST变成GET,但是对于处理响应的行为,每种浏览器有可能出现不同的情况。
-
- 4xx:客户端错误,表示服务器无法处理请求,错误是由于客户端引起的。
-
400 Bad Request
请求报文中存在语法错误。当错误发生时,需修改请求的内容再次发送请求。 -
401 Unauthorized
表示发送的请求需要有通过HTTP认证(BASIC认证、DIGEST认证)的认证信息。若之前已经进行过1次请求,则表示用户认证失败。
返回含有401的响应必须包含一个使用于被请求资源的WWW-Authenticate首部用以质询(challenge)用户信息。当浏览器第一次接收401的时候,会弹出认证用的对话窗口。 -
403 Forbidden
对请求资源的访问被服务器拒绝了。 -
404 Not Found
服务器上无法找到请求的资源。
-
- 5xx:服务器错误,表示服务器在处理请求时出错
-
500 Internal Server Error
服务器在执行请求时发生了错误,也有可能是web应用存在的bug或临时的故障。 -
503 Server Unaviabilable
服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。
-
OSI七层模型
http://www.cnblogs.com/qishui/p/5428938.html 这篇文章讲的很详细了。
- 物理层 : 建立、维护、断开物理连接。
- 数据链路层 : 建立逻辑连接、进行硬件地址寻址、差错检验等功能。
- 网络层 : 进行逻辑地址寻址,实现不同网络之间的路径选择。
- 运输层 : 定义传输数据的协议端口号,以及流控和差错校验。
协议有:TCP UDP ,数据包一旦离开网卡即进入网络传输层。 - 会话层 : 建立、管理、终止会话。
- 表示层 : 数据的表示、安全和压缩。
- 应用层 : 网络服务与最终用户的一个接口。
协议有:HTTP FTP TFTP SMTP POP3 SNMP DNS TENNET HTTPS DHCP
HTTP协议的工作特点与工作原理
工作特点
- 基于B/S模式
- 通信开销小、传输快速、传输成本低
- 使用灵活、可使用超文本传输协议
- 节省传输时间
- 无状态
工作原理
客户端发送请求给服务器,创建一个TCP连接,指定端口号(默认为80),服务器监听浏览器请求,一旦监听到客户端请求,分析请求类型后,服务器会向客户端返回状态信息和数据内容。
HTTP协议常见的请求/相应头
-
Content-Type :实体主体内对象的媒体类型,和Accept一样,字段值用type/subtype形式赋值。
Content-Type: text/html; charset=UTF-8
-
Accept :可通知服务器用户代理能够处理的媒体类型及媒体类型的相对优先级。可使用 type/subtype 这种形式,一次指定多种媒体类型。
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
-
文本类型
text/html, text/plain, text/css ...
application/xhtml+xml, application/xml ... -
图片类型
image/jpeg, image/gif,image/png ... -
视频文件
video/mpeg, video/quicktime ... -
应用程序使用的二进制文件
application/octet-stream, application/zip ...
-
- Origin :最初的请求来源与哪,主要用与post请求
- Cookie :HTTP请求发起时,发送给服务端的cookie值
- Cache-Control :指定请求和响应的缓存机制
- User-Agent :用户信息
- Referrer :上级请求路径
- X-Forwarded-For :强求端的真实IP(做代理的时候可以用次来获取)
- Access-Control-Allow-Origin :允许特定的域名来进行访问,通常用做跨域使用
-
Last-Modified :指明资源最终修改的时间
HTTP协议的请求方法
- GET
- POST
- HEAD
- OPTIONS
- PUT
- DELETE
- TRACE
GET 和 POST 的区别:
- GET在刷新和后退时,没影响,而POST会重新提交信息。
- GET可以被收藏为书签,而POST不行。
- GET 可以被缓存,POST不行。
- GET 请求时,编码类型为 application/x-www-form-urlencoded,POST 除了这个,还可以是Multipart/form-data(文件上传)
- GET 参数直接显示在url中,post看不到
- 由于url限制,GET 的数据量是有限的
- POST比GET更安全
HTTPS 的工作原理
HTTPS 是一种基于SSL/TLS的HTTP协议,所有的HTTP数据都是在SSL/TLS协议封装之上传输的。
HTTPS 协议在HTTP 协议的基础上,添加了SSL/TLS握手以及数据加密传输,也属于应用层协议。
常见网络协议含义及端口
- FTP :文件传输协议(21)
- Telnet :用于远程登录的端口(23)
- SMTP :定义了简单邮件传输协议(25)
- POP3 :接收邮件(110)
- HTTP :超文本传输协议(80)
- DNS :域名解析服务(53)