PHP 标准规范

参考原文

PSR 是 PHP Standard Recommendations 的简写,由 PHP FIG 组织制定的 PHP 规范,是 PHP 开发的实践标准。

PHP FIG,FIG 是 Framework Interoperability Group(框架可互用性小组)的缩写,由几位开源框架的开发者成立于 2009 年,从那开始也选取了很多其他成员进来(包括但不限于 Laravel, Joomla, Drupal, Composer, Phalcon, Slim, Symfony, Zend Framework 等),虽然不是「官方」组织,但也代表了大部分的 PHP 社区。

项目的目的在于:通过框架作者或者框架的代表之间讨论,以最低程度的限制,制定一个协作标准,各个框架遵循统一的编码规范,避免各家自行发展的风格阻碍了 PHP 的发展,解决这个程序设计师由来已久的困扰。

已通过的规范:

序号 标题 撰稿者 协调者 发起人
1 基础编码规范 Paul M. Jones N/A N/A
2 编码风格规范 Paul M. Jones N/A N/A
3 日志接口规范 Jordi Boggiano N/A N/A
4 自动加载规范 Paul M. Jones Phil Sturgeon Larry Garfield
6 缓存接口规范 Larry Garfield Paul Dragoonis Robert Hafner
7 HTTP 消息接口规范 Matthew Weier O’Phinney Beau Simensen Paul M. Jones

PSR-3 日志接口规范

本文制定了日志类库的通用接口规范。

本规范的主要目的,是为了让日志类库以简单通用的方式,通过接收一个 Psr\Log\LoggerInterface 对象,来记录日志信息。 框架以及CMS内容管理系统如有需要,可以 对此接口进行扩展,但需遵循本规范, 这才能保证在使用第三方的类库文件时,日志接口仍能正常对接。

关于「能愿动词」的使用

为了避免歧义,文档大量使用了「能愿动词」,对应的解释如下:

  • 必须 (MUST):绝对,严格遵循,请照做,无条件遵守;
  • 一定不可 (MUST NOT):禁令,严令禁止;
  • 应该 (SHOULD) :强烈建议这样做,但是不强求;
  • 不该 (SHOULD NOT):强烈不建议这样做,但是不强求;
  • 可以 (MAY)可选 (OPTIONAL) :选择性高一点,在这个文档内,此词语使用较少;

参见:RFC 2119

1. 规范说明

1.1 基本规范

  • LoggerInterface 接口对外定义了八个方法,分别用来记录 RFC 5424 中定义的八个等级的日志:debug、 info、 notice、 warning、 error、 critical、 alert 以及 emergency 。
  • 第九个方法 —— log,其第一个参数为记录的等级。可使用一个预先定义的等级常量作为参数来调用此方法,必须 与直接调用以上八个方法具有相同的效果。如果传入的等级常量参数没有预先定义,则 必须 抛出 Psr\Log\InvalidArgumentException 类型的异常。在不确定的情况下,使用者 不该 使用未支持的等级常量来调用此方法。

1.2 记录信息

  • 以上每个方法都接受一个字符串类型或者是有 __toString() 方法的对象作为记录信息参数,这样,实现者就能把它当成字符串来处理,否则实现者 必须 自己把它转换成字符串。
  • 记录信息参数 可以 携带占位符,实现者 可以 根据上下文将其它替换成相应的值。其中占位符 必须 与上下文数组中的键名保持一致。占位符的名称 必须 由一个左花括号 { 以及一个右括号 } 包含。但花括号与名称之间 一定不可有空格符。

    占位符的名称 应该 只由 A-Za-z0-9、下划线 _、以及英文的句号 . 组成,其它字符作为将来占位符规范的保留。

    实现者 可以 通过对占位符采用不同的转义和转换策略,来生成最终的日志。 而使用者在不知道上下文的前提下,不该 提前转义占位符。

    以下是一个占位符使用的例子:

1.3 上下文

  • 每个记录函数都接受一个上下文数组参数,用来装载字符串类型无法表示的信息。它 可以 装载任何信息,所以实现者 必须 确保能正确处理其装载的信息,对于其装载的数据, 一定不可 抛出异常,或产生PHP出错、警告或提醒信息(error、warning、notice)。
  • 如需通过上下文参数传入了一个 Exception 对象,必须exception 作为键名。 记录异常信息是很普遍的,所以如果它能够在记录类库的底层实现,就能够让实现者从异常信息中抽丝剥茧。 当然,实现者在使用它时,必须 确保键名为 exception 的键值是否真的是一个 Exception,毕竟它 可以 装载任何信息。

1.4 助手类和接口

  • Psr\Log\AbstractLogger 类使得只需继承它和实现其中的 log 方法,就能够很轻易地实现 LoggerInterface 接口,而另外八个方法就能够把记录信息和上下文信息传给它。
  • 同样地,使用 Psr\Log\LoggerTrait 也只需实现其中的 log 方法。不过,需要特别注意的是,在 traits 可复用代码块还不能实现接口前,还需要 implement LoggerInterface
  • 在没有可用的日志记录器时, Psr\Log\NullLogger 接口 可以 为使用者提供一个备用的日志「黑洞」。不过,当上下文的构建非常消耗资源时,带条件检查的日志记录或许是更好的办法。
  • Psr\Log\LoggerAwareInterface 接口仅包括一个 setLogger(LoggerInterface $logger) 方法,框架可以使用它实现自动连接任意的日志记录实例。
  • Psr\Log\LoggerAwareTrait trait可复用代码块可以在任何的类里面使用,只需通过它提供的 $this->logger,就可以轻松地实现等同的接口。
  • Psr\Log\LogLevel 类装载了八个记录等级常量。

2. 包

上述的接口、类和相关的异常类,以及一系列的实现检测文件,都包含在 psr/log 文件包中。

3. Psr\Log\LoggerInterface

4. Psr\Log\LoggerAwareInterface

5. Psr\Log\LogLevel

鸡尾酒配方

Bloody Mary血腥玛丽

zJsZJ.jpg

①原料:

45ml 伏特加

130ml 番茄汁

10ml 柠檬汁

8ml 糖浆

3 滴塔巴斯科辣椒酱(Tabasco)

3 滴安格斯特拉苦酒(Angostura bitters)

3 滴伍斯特酱(Worcestershire sauce)

②方法:

用柠檬沾湿杯口后在海盐和黑胡椒堆里转一圈,做装饰。将全部原料放进搅拌杯子,加冰搅拌,过滤后倒入长饮杯中。最后插入一根芹菜,做装饰物。

③小变化:

印度风格——装饰用咖喱粉代替海盐和黑胡椒,然后在原料里加入姜黄粉或者别的印度香料,喝起来别有一番滋味。

烟熏风格——可以加入一些拉加维林 16 年(Lagavulin),然后杯子换成番茄汤的铝罐子,考究一点的话可以自己做番茄酱,将番茄烤到微焦放入搅拌机,尝起来会有烟熏或焦糖味。

中国风——可以用研磨过的生姜末、酱油、蒜粉、蒜盐以及四川辣椒泡的水调制中国风“血腥玛丽”,看到这么多调料是不是很惊讶?很有趣的是英国厨师杰米·奥利弗(Jamie Oliver)曾经用 Bloody Mary 作为调料做过菜,所以大胆发挥你的创意吧。

Moscow Mule莫斯科之骡

zJCmQ.jpg

①原料:

45ml 伏特加

15ml 莱姆汁

1 滴安格斯特拉苦酒

姜汁啤酒(Ginger beer) 适量

②方法:

全部原料倒入铜的马克杯,然后加入碎冰,最后倒入姜汁啤酒,直至倒满,装饰可以是黄瓜,也可以是手捏下青柠角丢在顶上。

③小变化:

觉得喝不习惯姜汁啤酒可以换姜味汽水,有条件可以自制姜汁啤酒。

– 自制姜汁啤酒配方 –

①原料:

2.2L 温水

300ml 姜汁

480ml 柠檬汁

840ml 糖浆

1 包香槟酵母

②方法:

原料全部搅拌均匀,一定要充分地搅拌,不要懒。其次,酵母的量很重要,一般是拿把尖头菜刀,刀尖 1.5cm 长度去沾一些酵母一起搅拌,再用漏斗装瓶密封48小时,之后冰镇就可以用了。

White Russian白俄罗斯
zJacn.jpg
①原料:

45ml 伏特加

25ml 咖啡甜酒

25ml 浓奶油(heavy cream)

②方法:

杯子里倒入伏特加和咖啡甜酒加冰块搅拌,然后浓奶油用搅拌机打成厚厚的搅打奶油浇在杯子里。

③小变化:

通常如果要用装饰的话可以用烤过的咖啡豆,如果是更激进的或天马行空的做法,可以试试看用杏仁去点缀咖啡甜酒,配合帕尔玛奶酪和新鲜的无花果,这样的话名字可以改 White Italy 了。

Cosmopolitan大都会
zJZbp.jpg
①原料:

50ml 伏特

10ml 君度

30ml 蔓越梅汁

10ml 莱姆汁

②方法:

全部原料倒入摇酒器(shaker),摇匀后倒入马丁尼杯。装饰的话可以刨一片厚一点的橙子皮放在酒中。如果想耍帅的话,可以再切一片橙子皮,点燃火柴,用拇指食指挤压橙子皮,让油喷射在火柴的外焰,会出现火光四溅,视觉效果很赞。另外做这个最重要的是蔓越莓汁只是为了颜色而不是口感,不要贪多,好喝的大都会应该是酸的而不是甜的。

③小变化:

比较英式的做法是一半的莱姆汁和一半的青柠汁组合。如果想要更浓郁一点的话可以用柑曼怡香橙甜酒(Grand Marnier )代替君度, 白兰地的香气和口感比利口酒要丰厚很多。

Aviation飞行
zJJ96.jpg
①原料:

40ml 金酒

15ml黑樱桃利口酒(Maraschino Liqueur)

10ml 紫罗兰糖浆利口酒(Creame de violette Liqueur)

25ml 柠檬汁

②方法:

全部原料倒入摇酒器,摇匀后倒入马丁尼杯。装饰是柠檬皮。

备注一下,这是笔者最喜欢的调酒之一,绝对的撩妹利器,完美的口感酸甜平衡外加一抹紫色沉淀在杯底,简直是要什么有什么的调酒典范。

③小变化:

可以变化为日本风格,用日本柚子蜂蜜和芝麻代替黑樱桃酒,然后用芝麻和盐作为杯口装饰,味道非常有意思。

此外,虽然紫罗兰的颜色很好看,但是不拘泥于这一种花的形式,可以试试别的花的糖浆或利口酒比如洋甘菊、薰衣草等等。

Gimlet金雷
zJvnK.jpg
①原料:

60ml 金酒

10ml 莱姆汁

20ml Rose’s Lime Cordial

②方法:

全部原料倒入摇酒器,摇匀后倒入马丁尼杯。装饰是莱姆皮。

③小变化:

金雷作为极度老牌的调酒,变化其实相当多,因为本尊实在是朴实,所以各种果汁和香草都可以把这枯燥的老古板变得活泼起来。用柚子皮、柚子汁、百里香、百里香利口酒、糖浆以及香菜和苦酒来做。

如果觉得上一个版本过于花哨的话,可以从金酒本身出发,汤力水是金酒最好的朋友,那我们可以自己做汤力水糖浆,很简单,把汤力水收汁到原来的一半,混入等量的糖就好,最后放入金酒就可以了。

Gin Basil Smash金酒罗勒混合鸡尾酒
zJPWG.jpg
实在抱歉把这个 08 年的新生儿混到了经典里面,应为这款实在是太好喝了,这股风潮席卷了整个欧洲,好比是三国里的张辽在江南那么有名。

①原料:

1 把罗勒叶

45ml 金酒

30ml 柠檬汁

23ml 糖浆

②方法:

把罗勒叶放到摇酒器底部,用搅拌棒轻轻挤压,再把全部原料倒入摇酒器,摇匀后倒入平底玻璃杯中,再用罗勒叶作简单装饰。

③小变化:

这款调酒真的是用再多词去形容都不为过,笔者每次喝,脑海里都浮现出“重剑无锋,大巧不工”这句话。简单好喝到几乎不需要变化。如果真想加一点点的话,可以试试看菠萝汁(要是新鲜菠萝榨的,不是人工甜的罐装)或者自己做的菠萝糖浆。

再要花哨一点的话从罗勒出发,加入番茄、马苏里拉芝士,最后淋上意大利黑醋。

Tommy’s Margarita汤米玛格丽特
zJEZ2.jpg
①原料:

45ml Light Tequila (100% Agave)

20ml 莱姆汁

10ml 龙舌兰糖浆

②方法:

全部原料倒入摇酒器,摇匀后倒入平底玻璃杯,装饰是莱姆瓣。

这款 1965 年的经典本来就是从普通玛格丽特的变化而来,因为加了龙舌兰的糖浆,甜度上的平衡其实比经典的好喝很多,但要注意的是不要贪多放多糖浆,不然会毁了整体口感。

③小变化:

可以再加入 15ml 左右的泰斯卡单麦芽,给予一些泥煤的香气,融合得很自然,并不突兀。

Manhattan曼哈顿鸡尾酒
zJciE.jpg

①原料:

60ml 波旁酒

30ml 甜味美思酒

3 滴安格斯特拉苦酒

②方法:

将全部原料放进搅拌杯子,加冰搅拌后倒入马丁尼杯,装饰可以用樱桃。不过市面上的罐头可能不是很好,可以自己买来新鲜的樱桃,用石榴汁、糖、柠檬汁、八角以及新鲜橙皮泡制即可。

③小变化:

曼哈顿鸡尾酒本身就有很多经典变化,比如酸曼哈顿鸡尾酒就是用酸味美思酒(dry Vermouth) ,然后完美曼哈顿鸡尾酒(perfect Manhattan)则是 15ml 甜味美思酒(sweet Vermouth)和 15ml 的酸味美思酒的平衡。比较常见的另一种变化则是用黑朗姆酒比如萨凯帕朗姆酒(Zacapa)来代替波旁酒,少了波旁酒的特有香气,多了朗姆酒的甜度和巧克力味。

Old fashioned古典鸡尾酒
zJhK3.jpg

①原料:

60ml 波旁酒

10ml 糖浆

3 滴安格斯特拉苦酒

②方法:

最传统的做法有点麻烦,在杯底放上糖块,滴入 1 滴安格斯特拉苦酒然后将糖块碾碎,再倒入波旁酒和 2 滴安格斯特拉苦酒后,分 3 次每次加入 2 块冰块,每次加入后都要搅拌,这么做是因为搅拌的过程里冰块的融化可以带来最舒适的饮用温度,装饰则是橙子皮。

③小变化:

常见款——这款的变化比较多,常见的有用黑朗姆酒,如萨凯帕朗姆酒,代替波旁酒,然后不用安格斯特拉苦酒而是用巧克力苦酒来呼应萨凯帕朗姆酒的巧克力味;或者是杯底碾碎糖块时,加入一片生姜和一点点的姜味啤酒。

甜香型——笔者自己也尝试过用波旁酒来浸泡印度拉茶(Chai Tee)做了 Chai Bourbon Fashioned,因为印度拉茶有独特的香料味和糖浆简单的甜味有很好融合。

咸香型——笔者还试过用咸的新鲜的黑松露爆米花来浸泡波旁酒然后加入爆米花,糖浆做成黑松露爆米花,这个要注意一点就是浸泡后的波旁酒需要 3 次以上的滤纸过滤掉爆米花的油脂,要保证看起来很干净,喝起来咸甜浓郁。

创意型——最后的大招就是用培根来浸泡波旁酒,上好的培根或者意大利白豚能给波旁酒带来很意想不到的咸度和香气,然后再次融合糖浆就等于一道菜,咸甜交织可以演奏出一曲脑海里爆发的乐章,装饰是煎得硬硬的培根,咬一口培根喝一口酒,何其快哉!

作者:李斯特
链接:http://www.jianshu.com/p/9a855cea52ff

git常用命令

1 常用

2 别名Alias

3 创建版本库

4 修改和提交

5 查看提交历史

6 撤消

 

7 分支与标签

8 合并与衍合

9 远程操作

10 打包

git打包命令会自动忽略 <span class="hljs-selector-class">.gitignore</span>中指定的目录和文件,以及 <span class="hljs-selector-class">.git</span>目录。

11 全局和局部配置

  • 全局配置保存在: <span class="hljs-variable">$Home</span>/.gitconfig
  • 本地仓库配置保存在: .git/config

12 远程与本地合并

如果在远程创建了代码仓,而且已经初始化,本地是具体的源代码,那么工作流程应该是:

git教程

Linux 下挂载硬盘,分区操作命令

在linux里,存数设备上现在大部分接口都是SATA或者SCSI.对应在 etc下的文件名字为 /dev/sd[a-p].

如果我们用命令 fdisk -l 来查看信息的话,会看到sda1,sda2,sdb1等这种名字.这是因为每个文件名下可以划分4个分区,就好像windows下的C,D,E,F.

我们来看下信息:

root用户下.

命令: fdisk -l

这里只看到一个盘,如果还有其他硬盘就会有sdb等其他的信息出现了.

fdisk可以用m命令来看信息:
a:命令指定启动分区;                      d:命令删除一个存在的分区;         l:命令显示分区ID号的列表;
m:查看fdisk命令帮助;                    n:命令创建一个新分区;                 p:命令显示分区列表;
t:命令修改分区的类型ID号;          w:命令是将对分区表的修改存盘让它发生作用。

那如果我们要对sda的硬盘进行分区,需要的操作为:

fdisk /dev/sda

保存完,可以再fdisk -l 查看分区信息. 我习惯用df -h 这个信息看着比较清楚.

要想用这个分区就先格式化:

mkfs.ext4 /dev/sda2           //注:命令将/dev/sda2格式化为ext4类型.

格式化好了我们就可以挂在使用了.

比如我们打算在根下 创建一个backup文件夹 然后用sba2来挂载.

那我们先在 跟下创建文件夹: 命令 mkdir backup

挂载命令: mount /dev/sda2 /backup

之后我们 命令 : df -h 查看信息.

因为mount挂载在重启服务器后会失效,所以我们将分区信息写到/etc/fstab文件中让它永久挂载:
命令 vim /etc/fstab
插入一行信息():
/dev/sda2(挂载硬盘分区)              /data1(要挂载的目录)          ext4(分区格式)         defaults  0 0(两个是数字0)

之后就可以 reboot ,之后在 df -h 查看我们有没有成功挂在.

卸载命令 mount /dev/sda2            卸载我们之前的挂载操作

注意:

如果你挂在的目录有文件,资料可以提前打包移动其他位置,挂载后再拷贝到里面.否则你发现挂载后文件不见了(卸载后还可以找到文件).

 

Linux查询硬件命令

1.显卡信息
dmesg | grep -i vga
lspci | grep -i vga //查看显卡信息
2.主板信息
dmidecode | grep -i ‘serrial number’ //查看主板信息,查看主板的序列号
3.CPU信息
#通过/proc文件系统
cat /proc/cpuinfo
dmesg | grep -i cpu
#通过查看开机信息
dmidecode -t processor
4.硬盘信息
fdisk -l //分区情况
df -h //大小情况
du -h //使用情况
dmesg | grep sda
5.内存信息
cat /proc/meminfo
dmesg | grep mem
free -m
vmstat
dmldecode | grep -i mem
6.网卡信息
dmesg | grep -i eth
lspci | grep -i eth
7.鼠标键盘和USB信息
cat /proc/bus/input/devices 查看键盘和鼠标
cat /proc/bus/usb/devices 查看USB设备
cat /proc/interrupts
8.声卡信息
lspci | grep -i vga
dmesg | grep -i vga
9.其他命令
lspci (显示外设备信息,如USB,网卡等信息)

国内外公共CDN静态资源网站

CDN公共库是指将常用的JS库存放在CDN节点,以方便广大开发者直接调用。

与将JS库存放在服务器单机上相比,CDN公共库更加稳定、高速。

一般的CDN公共库都会包含全球所有最流行的开源JavaScript、JQuery等库,可以在自己的网页上直接通过<script>标记引用这些资源。

这样做不仅可以节省流量,还能通过CDN加速,获得更快的访问速度。

1 国内
BootCDN – http://www.bootcdn.cn/
CDNBee – https://cdnbee.com/
新浪云计算公共库 – http://lib.sinaapp.com/
百度静态资源公共库 – http://cdn.code.baidu.com/
奇虎360前端静态资源库(新版) – https://cdn.baomitu.com/
极客族公共加速服务 – https://cdn.geekzu.org/cached.html
又拍云常用JS库CDN服务 – http://jscdn.upai.com/
七牛静态资源CDN服务 – https://www.staticfile.org/
360网站卫士CDN前端公共库 – http://libs.useso.com/
CDNJS.NET – http://cdnjs.net/
2 国外
Jquery CDN – http://code.jquery.com/
CDNJS – https://cdnjs.com/
Google Hosted Libraries – https://developers.google.com/speed/libraries/
Microsoft ASP.net CDN – http://www.asp.net/ajaxlibrary/cdn.ashx
jsDelivr – http://www.jsdelivr.com/

百度会限制在本地引用其静态资源,在开发时不太方便。

建议在 CDN 读取失败的时候,从自己服务器提供:

 

Session原理简述

看着讲的很清楚,分享一下.原文

Session存在的意义,估计每个用做web开发的人都是了解的,就为了解决HTTP是个无状态协议所带来的问题,不多说了。这里主要想说的是服务端与客户端是如何利用session进行交互的。

Session工作的大体流程

先看下面这幅流程图:

Session工作流程

当用户第一次访问站点时,PHP会用session_start()函数为用户创建一个session ID,这就是针对这个用户的唯一标识,每一个访问的用户都会得到一个自己独有的session ID,这个session ID会存放在响应头里的cookie中,之后发送给客户端。这样客户端就会拥有一个该站点给他的session ID。

当用户第二次访问该站点时,浏览器会带着本地存放的cookie(里面存有上次得到的session ID)随着请求一起发送到服务器,服务端接到请求后会检测是否有session ID,如果有就会找到响应的session文件,把其中的信息读取出来;如果没有就跟第一次一样再创建个新的。

通常站点的退出功能,实际上就是调用一下session_destroy()函数(也有可能更复杂些),把该用户的session文件删除,再把用户的cookie清除。这样客户端和服务端就算没有联系了。

图中的红框部分就是一次完整的HTTP请求,因为HTTP是无状态的,所以一次请求完成后客户端和服务端就不再有任何关系了,谁也不认识谁。但由于一些需要(如保持登录状态等),必须让服务端和客户端保持联系,session ID就成了这种联系的媒介了。

客户端的工作

通过上面的分析我们可以知道session实际上是依赖与cookie的,当用户访问某一站点时,浏览器会根据用户访问的站点自动搜索可用的cookie,如果有可用的就随着请求一起发送到了服务端。每次接收到服务端的响应时又会更新本地的cookie信息。

当然也可以用GET方式来传递session ID,但不推荐用GET,这样不安全。

服务端的工作

由上面的流程图可以看到,服务端实际上是把产生的一些数据存放在了session文件中,该文件的名字就是”sess“加上session ID,这些文件的存放位置就是phpinfo()查到的session.savepath值。

session-id

由上图我们可以很清楚的看到,服务端和客户端保存着同样的session ID信息,这就是两者保持联系的钥匙。

Session的反面影响

有好处必然也有坏处,session带来的最主要问题就是对性能的影响,可以想象一下,对于一个千万用户级的web站点,如果每个用户都保存session文件,那每次用户访问光寻找相应的session文件就要耗掉不少系统资源的。所以这时就要对session的存储做一些自定义的设定了,如分目录或哈希等等。除了保存到session文件,也可以抛弃PHP自带的session功能,自己实现session,将session信息存放到数据库当中,这样做最好对数据库进行一下缓存的设置了,不然对上千万的数据进行太频繁的检索,也是蛮耗资源的。

Session的清除

客户端和服务端的这种联系必然是需要有时间的规定的,所以需要定期清除session。这个问题就需要在两方面考虑了,一个是清除服务端session文件,一个是清除客户端的cookie信息,因为两者都各保存着一半的信息。

PHP GC进程可以扫描session存放目录清除session文件,但这个进程是特别耗资源的,所以PHP默认是1%的几率在一个sessioin启动时去清理一次过期的sesssion,所以并不是说一个用户session过期了,他对应的session文件就马上被清除,99%的几率是没被清除的。这就需要我们程序员自己动手了。可以在session信息中存放一个过期时间,值为用户最后一次访问的时间。当用户一访问,就用当前时间减去上次访问时间看是否超时,如果超时了就删除相应session文件,并设置cookie的Expires属性为负值,使其客户端的cookie信息也过期,这样浏览器就自动把它删掉了。

PHP的相关Session常用函数

  • session_start() : 启动session,这个没什么说的了。根据session ID打开session文件,如果没有session ID就创建一个ID和对应的session文件
  • $SESSION[]数组 : 存放用户信息的全局数组,session文件中除了存放$SESSION中的数据实际也会存放其他的信息,如id等
  • sessionunset() : 清空$SESSION数组,它是把数组里的值清空了,而$SESSION这个变量还是存在的,和unset($SESSION)是完全不同的概念
  • sessioncommit() : 提交session数据并结束session,把$SESSION数据写到文件里并结束session,实际上当一个页面执行结束后,php会自动执行与这个函数相同的操作。所以这个函数也很少能用上
  • session_destroy() : 注销session,这个就是关闭session并删除掉相应的session文件了。切断了客户端和服务端的联系。

参考资料

PHP程序员进阶学习书籍参考指南

我根据这个书单,找到了大部分的pdf文件.看完不知道需要多久了.
书山有路勤为径,学海无涯苦作舟.
@heiyeluren原文
lastmodify: 2016/2/18
【初阶】(基础知识及入门)
01. 《PHP与MySQL程序设计(第4版)》  http://item.jd.com/10701892.html
02. 《深入浅出MySQL 数据库开发 优化与管理维护 第2版》 http://item.jd.com/11381295.html
03. 《实战Nginx:取代Apache的高性能Web服务器》 http://dwz.cn/2K1ryn
04. 《Redis 实战》 http://item.jd.com/11791607.html
06. 《MongoDB权威指南 第2版》 http://item.jd.com/11384782.html
07. 《Linux系统命令及Shell脚本实践指南》 http://item.jd.com/11354663.html
【中阶】(基本系统知识相关,可阅读类似书籍)
01. 《图解HTTP》 http://item.jd.com/11449491.html
02. 《图解TCP/IP 第5版》 http://item.jd.com/11253710.html
03. 《大话设计模式》 http://item.jd.com/10079261.html
04. 《大话数据结构》 http://item.jd.com/10663703.html
05. 《编译原理(第2版)》 http://item.jd.com/10058776.html
06. 《Linux C 编程一站式学习》 http://dwz.cn/2K1C3n
07. 《PHP应用程序安全编程》 http://dwz.cn/2K317p
08. 《高性能PHP应用开发》  http://dwz.cn/2K1kcy

09. 《PHP核心技术与最佳实践》 http://item.jd.com/11123177.html

10. 《高性能MySQL(第3版)》 http://item.jd.com/11220393.html
11. 《深入理解MariaDB与MySQL》  http://item.jd.com/11835700.html
12. 《构建高可用Linux服务器(第3版)》 http://item.jd.com/11557939.html
【中高阶】(深入理解系统)
1. 《深入理解计算机系统(原书第2版)》 http://item.jd.com/10360906.html
2. 《现代操作系统(原书第3版)》  http://item.jd.com/10058893.html
3. 《数据库系统概念(原书第6版)》 http://item.jd.com/10954261.html
4. 《数据库系统实现(第2版)》 http://item.jd.com/10060181.html
5. 《UNIX环境高级编程(第3版)》 http://item.jd.com/11469694.html
6. 《UNIX网络编程 卷1 套接字联网API(第3版)》 http://item.jd.com/11728741.html
7. 《Linux高性能服务器编程》 http://item.jd.com/11252777.html
【高阶】(深入理解服务原理)
01. 《深入理解PHP内核》 http://www.php-internals.com/book/
02. 《深入理解MySQL》 http://item.jd.com/10063042.html
03. 《MySQL技术内幕:InnoDB存储引擎(第2版)》 http://item.jd.com/11252326.html
04. 《深入剖析Nginx》 http://item.jd.com/11226514.html
05. 《深入理解Nginx:模块开发与架构解析》 http://item.jd.com/11217076.html
06. 《Redis设计与实现》 http://item.jd.com/11486101.html
【架构及升级】(Web架构、分布式、云计算、机器学习等方向)
01. 《大规模Web服务开发技术》 http://dwz.cn/2K2o1d
02. 《大型分布式网站架构设计与实践》 http://item.jd.com/11529266.html
03. 《大型网站技术架构 核心原理与案例分析》 http://item.jd.com/11322972.html
04. 《大规模分布式系统架构与设计实战》 http://item.jd.com/11417660.html
05. 《大规模分布式存储系统:原理解析与架构实战》 http://item.jd.com/11310547.html
06. 《分布式系统:概念与设计(原书第5版)》 http://item.jd.com/11194499.html
07. 《Hadoop权威指南(第3版 修订版)》 http://item.jd.com/11566298.html
08. 《Cassandra权威指南》 http://item.jd.com/10794341.html
09. 《云计算架构技术与实践》 http://item.jd.com/11537731.html
10. 《OpenStack开源云王者归来》 http://item.jd.com/11521443.html
11. 《数据挖掘 概念与技术(原书第3版)》 http://item.jd.com/11056660.html
12. 《机器学习》 http://item.jd.com/10131321.html
13. 《图解机器学习》 http://item.jd.com/11676112.html
14. 《机器学习实战》 http://item.jd.com/11242112.html
【番外篇】(可以参考延展学习)
01. 《深入PHP:面向对象、模式与实践(第3版)》 http://item.jd.com/10794350.html
02. 《Linux网络编程(第2版)》 http://item.jd.com/11397772.html
03. 《Linux多线程服务端编程 使用muduo C++网络库》 http://item.jd.com/11163782.html
04. 《Linux运维之道》 http://item.jd.com/11375254.html
05. 《Linux性能优化大师》 http://item.jd.com/11734651.html
06. 《PostgreSQL修炼之道:从小工到专家》 http://item.jd.com/11684063.html
07. 《图解网络硬件》 http://item.jd.com/11506709.html
08. 《网络安全基础:网络攻防、协议与安全》 http://item.jd.com/10550797.html
09. 《密码学原理与实践(第3版)》 http://item.jd.com/10067358.html
10. 《黑客大曝光:网络安全机密与解决方案(第7版)》 http://item.jd.com/11307435.html
11. 《黑客攻防技术宝典 Web实战篇 第2版》 http://item.jd.com/11020022.html
12. 《精通正则表达式(第3版)》 http://item.jd.com/11070361.html
13. 《Go语言编程》 http://item.jd.com/11067810.html
14. 《Python基础教程(第2版 修订版)》 http://item.jd.com/11461683.html
15. 《快学Scala》 http://item.jd.com/11113845.html
16. 《Erlang/OTP并发编程实战》 http://item.jd.com/11037265.html
17. 《函数式编程思维》 http://item.jd.com/11763847.html
18. 《Android从入门到精通》 http://item.jd.com/11078112.html
19. 《iOS开发指南》 http://item.jd.com/11681585.html
20. 《搜索引擎:信息检索实践》 http://item.jd.com/10059723.html
21. 《统计自然语言处理(第2版)》 http://item.jd.com/11314362.html
22. 《这就是搜索引擎:核心技术详解》 http://item.jd.com/10893803.html
23. 《Elasticsearch服务器开发(第2版)》 http://item.jd.com/11615450.html
24. 《实战Elasticsearch、Logstash、Kibana》 http://item.jd.com/11706768.html

25. 《推荐系统实践》 http://item.jd.com/11007625.html

26. 《机器学习实践指南:案例应用解析》 http://item.jd.com/11447036.html
27. 《Hadoop实战(第2版)》 http://item.jd.com/11116710.html
28. 《Hadoop大数据分析与挖掘实战》 http://item.jd.com/11837003.html
29. 《Spark大数据处理:技术、应用与性能优化》 http://item.jd.com/11577088.html
30. 《Spark机器学习》 http://item.jd.com/11763016.html

人生的悲剧只有两种:一种是没有得到自己想要的东西,另一种是得到自己想要的东西。
                                —王尔德

标签

打赏