基本的语法与编写两篇总结应该就差不多了,PHP自带各种强大函数基本都封装好了,学起来也不是很难
这篇记录 cookie、session以及IO和异常等
还有点操作数据库的一些库的使用没整理,框架级开发就先不看了
cookie相关
PHP通过setcookie函数进行Cookie的设置,任何从浏览器发回的Cookie,PHP都会自动的将他存储在$_COOKIE
的全局变量之中,因此我们可以通过$_COOKIE['key']
的形式来读取某个Cookie值。
设置cookie
PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个:
- name( Cookie名)可以通过
$_COOKIE['name']
进行访问 - value(Cookie的值)
- expire(过期时间)Unix时间戳格式,默认为0,表示浏览器关闭即失效
- path(有效路径)如果路径设置为’/‘,则整个网站都有效
- domain(有效域)默认整个域名都有效,如果设置了’www.imooc.com’,则只在www子域中有效
因为Cookie是通过HTTP标头进行设置的,所以也可以直接使用header方法进行设置。header("Set-Cookie:cookie_name=value");
;在values后面可加分号追加有效期
删除cookie没有专门的函数,也是为了不让请求过于复杂,可以通过设置有效时间来达到删除目的:setcookie('test', '', time()-1);
session
相比cookie,session是将用户的会话数据存储在服务端,没有大小限制,不像cookie只能是4kb,通过一个session_id进行用户识别,PHP默认情况下session id是通过cookie来保存的,因此从某种程度上来说,seesion依赖于cookie。但这不是绝对的,session id也可以通过参数来实现,只要能将session id传递到服务端进行识别的机制都可以使用session。
1 |
|
session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等。
默认情况下,session是以文件形式存储在服务器上的,因此当一个页面开启了session之后,会独占这个session文件,这样会导致当前用户的其他并发访问无法执行而等待。可以采用缓存或者数据库的形式存储来解决这个问题.
关于删除,值得注意的是,session_destroy并不会立即的销毁全局变量$_SESSION
中的值,只有当下次再访问的时候,$_SESSION
才为空,因此如果需要立即销毁$_SESSION
,可以使用unset函数。
如果需要同时销毁cookie中的session_id,通常在用户退出的时候可能会用到,则还需要显式的调用setcookie方法删除cookie中的session_id值。
文件读取
PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents($src)
,当然也可以是url,可以将整个文件全部读取到一个字符串中.
一般情况下在对文件进行操作的时候需要先判断文件是否存在,PHP中常用来判断文件存在的函数有两个is_file
与file_exists
.
如果只是判断文件存在,使用file_exists
就行,file_exists不仅可以判断文件是否存在,同时也可以判断目录是否存在
而is_file
是确切的判断给定的路径是否是一个文件。
更加精确的可以使用is_readable
与is_writeable
在文件是否存在的基础上,判断文件是否可读与可写。
通过filesize
函数可以取得文件的大小,文件大小是以字节数表示的。如果需要转换要自己写函数,并且不支持目录级的计算,要用到递归实现
拓展:
fileowner:获得文件的所有者
filectime:获取文件的创建时间
filemtime:获取文件的修改时间
fileatime:获取文件的访问时间
当然在PHP也可以使用文件指针的方式进行读写文件
1 |
|
时间和日期
PHP提供了内置函数time()
来取得服务器当前时间的时间戳。date()
函数,来取得当前的日期;date(时间戳的格式, 规定时间戳【默认是当前的日期和时间,可选】)
返回值是:函数日期和时间
比如:date("Y-m-d",'1396193923');
结果就是2014-03-30;默认第二个参数是当前的时间戳,也就是按照格式打印当前时间
还可以使用strtotime('2014-04-29 00:00:01');
类似的获取指定日期的时间戳
strtotime函数预期接受一个包含美国英语日期格式的字符串并尝试将其解析为 Unix 时间戳。参数是要解析的时间字符串, 当然也可以不填,默认是当前的时间
echo strtotime("now");
//相当于将英文单词now直接等于现在的日期和时间,并把这个日期时间转化为unix时间戳。这个效果跟echo time();
一样。
echo strtotime("+1 seconds");
//相当于将现在的日期和时间加上了1秒,并把这个日期时间转化为unix时间戳。这个效果跟echo time()+1;
一样。
echo strtotime("+1 day");
//相当于将现在的日期和时间加上了1天。
echo strtotime("+1 week");
//相当于将现在的日期和时间加上了1周。
echo strtotime("+1 week 3 days 7 hours 5 seconds");
//相当于将现在的日期和时间加上了1周3天7小时5秒。
gmdate('Y-m-d H:i:s', time())
函数能格式化一个GMT的日期和时间,返回的是格林威治标准时(GMT),我们是在GMT+8区,所以时间会比现在慢八小时
设置时区可以使用date_default_timezone_set("Asia/Shanghai");
函数完成
图形图像操作
GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或者直接生成新的图片。
PHP除了能进行文本处理以外,通过GD库,可以对JPG、PNG、GIF、SWF等图片进行处理。GD库常用在图片加水印,验证码生成等方面。
PHP默认已经集成了GD库,只需要在安装的时候开启就行。
1 | header("content-type: image/png"); |
然后使用imagestring函数来进行文字的绘制,这个函数的参数很多:imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col )
,可以通过$font来设置字体的大小,x,y设置文字显示的位置,$s是要绘制的文字,$col是文字的颜色。例子:imagestring($img, 5, 0, 0, "Hello world", $red);
通过imagecreatefromjpeg可以直接从图片文件创建图像。
1 | $im = imagecreatefromjpeg($filename); |
创建图像对象以后,我们就可以通过前面的GD函数,绘制字符串到图像上。如果要加的水印是一个logo图片,那么就需要再建立一个图像对象,然后通过GD函数imagecopy将logo的图像复制到源图像中。
1 | $logo = imagecreatefrompng($filename); |
当将logo图片复制到原图片上以后,将加水印后的图片输出保存就完成了加水印处理。
异常
Exception具有几个基本属性与方法,其中包括:
message —- 异常消息内容
code —- 异常代码
file —- 抛出异常的文件名
line —- 抛出异常在该文件的行数其中常用的方法有:
getTrace —- 获取异常追踪信息
getTraceAsString —- 获取异常追踪信息的字符串
getMessage —- 获取出错信息
当然也是可以进行自定义异常
1 |
|
评论框加载失败,无法访问 Disqus
你可能需要魔法上网~~