Keep-Alive
的做用Keep-Alive
:使客户端到服务器端的链接持续有效,当出现对服务器的后继请求时,Keep-Alive
功能避免了创建或者从新创建链接。Web服务器,基本上都支持HTTP Keep-Alive
。php
对于提供静态内容的网站来讲,这个功能一般颇有用。可是,对于负担较重的网站来讲,虽然为客户保留打开的连 接有必定的好处,但它一样影响了性能,由于在处理暂停期间,原本能够释放的资源仍旧被占用。当Web服务器和应用服务器在同一台机器上运行时,Keep-Alive
功能对资源利用的影响尤为突出。html
Keep-Alive: timeout=5, max=100
数据库
timeout
:过时时间5秒(对应httpd.conf
里的参数是:KeepAliveTimeout
),max
:是最多一百次请求,强制断掉链接。就是在timeout
时间内又有新的链接过来,同时max
会自动减1
,直到为0
,强制断掉。php
数组函数常见的那些?list(); //不是真正的函数,而是PHP的语言结构,用于给一组变量赋值,仅能用于索引数组 each(); //返回数组当前元素的键值对,并将指针移动到下一个元素位置 while(); //可配合list或each使用:while(list($key, $value) = each($arr)){each $key, $value; }
current(); //读取指针位置的内容 key(); //读取当前指针指向内容的索引值 next(); //将数组中的内部指针指向下一单元 prev(); //将数组内部指针倒回一位 end(); //将数组内部指针指向最后一个元素 reset(); //将目前指针指向第一个索引位置
array_values($arr); //得到数组的值 array_keys($arr); //得到数组的键名 array_flip($arr); //数组中的值与键名互换(若是有重复前面的会被后面的覆盖) array_search('PHP',$arr); //检索给定的值,加true则是严格类型检查 array_reverse($arr); //将数组中的元素翻转(先后顺序) in_array("apple", $arr); //在数组中检索apple array_key_exists("apple", $arr); // 检索给定的键名是否存在数组中 array_count_values($arr); // 统计数组中全部值出现的次数 array_unique($arr); // 删除数组中重复的值
array_filter(); //使用回调函数过滤数组中的元素,若是回调返回true则当前的元素被包含到返回数组中 array_walk(); //回调函数处理数组,自定义函数要有两个参数,本函数第三个参数能够做为回调第三个参数返回 array_map(); //能够处理多个数组,每一个数组的长度应该相同,传入数组的个数和回调函数参数个数应该一致
array_slice($arr, 0, 3); //将数组中的一段取出,此函数忽略键名(数组的分段) array_splice($arr, 0, 3,array("black","maroon")); //将数组中的一段取出,返回的序列从原数组中删除 array_chunk($arr, 3, TRUE); //将一个数组分割成多个,TRUE为保留原数组的键名(分割多个数组)
array_push($arr, "apple", "pear"); //将一个或多个元素压入数组栈的末尾(入栈),返回入栈元素的个数 array_pop($arr); // 将数组栈的最后一个元素弹出(出栈) array_shift($arr); //数组中第一个元素移出并返回(长度减1,其余元素向前移动一位,数字键名改成从零计数,文字键名不变) array_unshift($arr,"a",array(1,2)); //在数组的开头插入一个或多个元素
sort($arr); //由小到大,忽略键名 rsort($arr); //由大到小,忽略键名 asort($arr); //由小到大,保留键名 arsort($arr); //由大到小,保留键名 ksort($arr); //按照键名正序排序 krsort($arr); //按照键名逆序排序
array_sum($arr); //对数组内部的全部元素作求和运算(数组元素的求和) array_merge($arr1, $arr2); //合并两个或多个(相同字符串键名,后面覆盖前面,相同的数字键名,后面的附加到后面) array_diff($arr1, $arr2); //返回差集结果数组 array_diff_assoc($arr1, $arr2, $arr3); //返回差集结果数组,键名也作比较 array_intersect($arr1, $arr2); //返回交集结果数组 array_intersect_assoc($arr1, $arr2); //返回交集结果数组,键名也作比较
array_unique($arr); //移除数组中重复的值,新的数组中会保留原始的键名 shuffle($arr); // 将数组的顺序打乱
PHP
中几个输出函数echo
,print()
,print_r()
,sprintf()
,var_dump()
的区别echo
:是语句不是函数,没有返回值,可输出多个变量值,不须要圆括号。不能输出数组和对象,只能打印简单类型(如int
,string
)。print
:是语句不是函数,有返回值 1 ,只能输出一个变量,不须要圆括号。不能输出数组和对象,只能打印简单类型(如int
,string
)。print_r
:是函数,能够打印复合类型,例如:stirng
、int
、float
、array
、object
等,输出array
时会用结构表示,并且能够经过print_r($str,true)
来使print_r
不输出而返回print_r
处理后的值printf
:是函数,把文字格式化之后输出(参看C语言)sprintf
:是函数,跟printf
类似,但不打印,而是返回格式化后的文字(该函数把格式化的字符串写写入一个变量中,而不是输出来),其余的与printf
同样。$str = "Hello"; $number = 123; $txt = sprintf("%s world. Day number %u",$str,$number); //输出: Hello world. Day number 123 var_dump():函数,输出变量的内容、类型或字符串的内容、类型、长度。经常使用来调试。
能够经过function_exists('函数名称')
进行测试json
var_dump(function_exists('print')); //bool(false) var_dump(function_exists('echo')); //bool(false) var_dump(function_exists('print_r')); //bool(true
heredoc
Heredoc
在正规的PHP
文档中和技术书籍中通常没有详细讲述。他是一种Perl
风格的字符串输出技术。使用heredoc
技术能够实现界面与代码的准分离,好比phpwind
模板。heredoc
的语法是用”<<<”
加上本身定义成对的标签,在标签范围內的文字视为一个字符串数组
<<<End
开始标记开始,以End
结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号。开始标记和开始标记相同,好比经常使用大写的EOT
、EOD
、EOF
来表示,也可使用其余标记,只要保证开始标记和结束标记不在正文中出现就行。在heredoc
中,变量不须要用链接符 .
或 ,
来拼接,好比:$a=2; $b= <<<EOF "zing"$a "zing" EOF; echo $b; //结果连同双引号一块儿输出:"zing"2 "zing"
heredoc
经常使用在输出包含大量HTML
语法文档的时候。他要比传统的echo
输出精炼不少,以下所示:浏览器
function getHtml(){ echo "<html>"; echo "<head><title>Title</title></head>"; echo "<body>Content</body>"; echo "</html>"; } function getHtml(){ echo <<<EOT <html> <head><title>Title</title></head> <body>Content</body> </html> EOT; }
cookie
的session
使用方案,设置session
过时的方法,对应函数经过url
传值,把session id
附加到url
上(缺点:整个站点中不能有纯静态页面,由于纯静态页面session id
将没法继续传到下一页面)
经过隐藏表单,把session id
放到表单的隐藏文本框中同表单一块提交过去(缺点:不适用<a>
标签这种直接跳转的非表单的状况)
直接配置php.ini
文件,将php.ini
文件里的session.use_trans_sid= 0
设为1
,(好像在win上不支持)
用文件、数据库等形式保存Session ID
,在跨页过程当中手动调用服务器
// 第一种 setcookie() 直接用setcookie设置session id的生命周期。 $lifetime=60; //保存1分钟 session_start(); setcookie(session_name(), session_id(), time()+$lifetime, "/"); // 第二种 session_set_cookie_params() $lifetime=60;//保存1分钟 session_set_cookie_params($lifetime); session_start(); session_regenerate_id(true); // 其中session_regenerate_id();方法用于改变当前session_id的值,并保留session中数组的值。参数默认为 false,若是设置为true则改变session_id的值,并清空当前session数组。
json
格式数据有哪些特色JSON
一种轻量级的数据交换格式(JavaScript Object Notation
, JS 对象标记)。它基于ECMAScript
的一个子集。 JSON
采用彻底独立于语言的文本格式,可是也使用了相似于C语言家族的习惯(包括C
、C++
、C#
、Java
、JavaScript
、Perl
、 Python等
)。这些特性使JSON
成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速率)。cookie
"名称/值"
对的集合 不一样语言中,它被理解为对象(object
),记录(record
),结构(struct
),字典(dictionary
),哈希表(hash table
),键列表(keyed list
)等file_get_contents
获得文件的内容(能够以get
和post
的方式获取),整个文件读入一个字符串中fopen
打开url
, 以get
方式获取内容(借助fgets()
函数)fsockopen
函数打开url
(能够以get
和post
的方式获取),以get
方式获取完整的数据,包括header
和body
curl
库获取内容,使用curl
库以前,须要查看php.ini
,查看是否已经打开了curl
扩展__construct();
说明:具备构造函数的类会在每次建立新对象时先调用此方法,适合在使用对象以前作一些初始化工做。若是子类中定义了构造函数则不会隐式调用其父类的构造函数。要执行父类的构造函数,须要在子类的构造函数中调用 parent::__construct()
。若是子类没有定义构造函数则会如同一个普通的类方法同样从父类继承。网络
__destruct();
说明:析构函数会在到某个对象的全部引用都被删除或者当对象被显式销毁时执行。session
__call();
说明:在对象中调用一个不可访问方法时,__call();
方法会被调用。
__callStatic();
说明:用静态方式中调用一个不可访问方法时,__callStatic();
方法会被调用。
__get();
说明:读取不可访问属性的值时,__get()
会被调用。
__set();
说明:在给不可访问属性赋值时,__set()
会被调用。
__isset();
说明:当对不可访问属性调用 isset()
或 empty()
时,__isset()
会被调用。
__unset();
说明:当对不可访问属性调用 unset()
时,__unset()
会被调用。
__sleep();
说明:序列化时调用,serialize()
函数会检查类中是否存在该魔术方法。若是存在,该方法会先被调用,而后才执行序列化操做。
__wakeup();
说明:unserialize()
会检查是否存在一个 __wakeup()
方法。若是存在,则会先调用该方法,用在反序列化操做中,例如从新创建数据库链接,或执行其它初始化操做
__toString();
说明:方法用于一个类被当成字符串时调用,例如把一个类当作字符串进行输出
__invoke();
说明:当尝试以调用函数的方式调用一个对象时,__invoke()
方法会被自动调用。
__set_state();
说明:当调用 var_export()
导出类时,此静态方法会被调用。 本方法的惟一参数是一个数组
__clone();
说明:当复制完成时,若是定义了__clone()
方法,则新建立的对象(复制生成的对象)中的__clone()
方法会被调用,可用于修改属性的值。
__autoload();
说明:该方法能够自动实例化须要的类。当程序要用一个类但没有被实例化时,改方法在指定路径下查找和该类名称相同的文件。不然报错。
__debugInfo();
说明:php5.6增长的特性,var_dump()
一个类时触发,返回一个包含对象属性的数组
PHP 将全部以__
(两个下划线)开头的类方法保留为魔术方法。因此在定义类方法时,除了上述魔术方法,建议不要以__
为前缀。在命名本身的类方法时不能使用这些方法名,除非是想使用其魔术功能。
__LINK__//文件中的当前行号。 __FILE__//文件的完整路径和文件名。若是用在被包含文件中,则返回被包含的文件名。 __DIR__ //文件所在的目录。若是用在被包括文件中,则返回被包括的文件所在的目录,它等价于 dirname(__FILE__)。 __FUNCTION__//函数名称。自 PHP 5 起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4 中该值老是小写字母的。 __CLASS__ //类的名称。自 PHP 5 起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4 中该值老是小写字母的。 __METHOD__//类的方法名(PHP 5.0.0 新加)。返回该方法被定义时的名字(区分大小写)。 __NAMESPACE__//当前命名空间的名称(大小写敏感)。这个常量是在编译时定义的(PHP 5.3.0 新增)
php.ini
中safe mod
关闭 影响哪些函数和参数,至少写6个?move_uploaded_file(); exec(); system(); passthru(); popen(); fopen(); mkdir(); rmdir(); rename(); unlink(); copy(); chgrp(); chown(); chmod(); touch(); symlink(); link(); parse_ini_file(); set_time_limit(); max_execution_time; mail();
isset()
、empty()
与is_null
的区别is_null()
和“参数自己”是不容许做为参数判断的,会报Notice
警告错误;empty
, isset
首先都会检查变量是否存在,而后对变量值进行检测。而is_null
和 “参数自己”只是直接检查变量值,是否为null
,所以若是变量未定义就会出现错误!isset()
:仅当null
和未定义,返回false
;empty()
:""
、0
、"0"
、NULL
、FALSE
、array()
,未定义
,均返回true
;is_null()
:仅判断是否为null
,未定义报警告;empty()
一致,但接受未定义变量时,报警告;MVC
的优缺点MVC
的优势MVC
的不足之处session
与cookie
的联系和区别(运行机制),session
共享问题解决方案使用session_start()
调用session
,服务器端在生成session
文件的同时生成session ID哈希值
和默认值为PHPSESSID
的session name
,并向客户端发送变量为PHPSESSID(session name)
(默认)值为一个128
位的哈希值。服务器端将经过该cookie
与客户端进行交互,session
变量的值经php内部系列化后保存在服务器机器上的文本文件中,和客户端的变量名默认状况下为PHPSESSID
的cookie
进行对应交互,即服务器自动发送了http
头:header(‘Set-Cookie: session_name()=session_id(); path=/’);
即setcookie(session_name(),session_id());
当从该页跳转到的新页面并调用 session_start()
后,PHP将检查与给定ID
相关联的服务器端存贮的session
数据,若是没找到则新建一个数据集。
session
,就算服务器宕机了也没事,session
照样在。
问题:程序须要定制;每次请求都进行数据库读写开销不小,另外数据库是一个单点,能够作数据库的
hash
来解 决这个问题。
memcache
来保存session
, 这种方式跟数据库相似,内存存取性能比数据库好不少。
问题:程序须要定制,增长了工做量;存入
memcached
中的数据都须要序列化,效率较低,断电或者重启电脑容易丢失数据;
cookie
,在A服务器上登陆,在用户的浏览器上添加加密的cookie
,当用户访问B服务器时,检查有无Session
,若是没有,就检验 Cookie
是否有效,Cookie
有效的话就在B服务器上重建session
。简单,高效, 服务器的压力减少了,由于session
数据不存在服务器磁盘上。根本就不会出现session
读取不到的问题。问题:网络请求占用不少。每次请求时,客户端都要经过cookie
发送session
数据给服务器,session
中数据不能太多,浏览器对cookie
的大小存在限制。不适合高访问量的状况,由于高访问量的状况下。