PHP笔记(PHP中级篇)
初级了解PHP的语法,中级就要学习PHP操作DateBase以及各种复杂的实现了!
文件系统处理
- 作用:
- 项目需要
- 长时间保存数据
- 服务器中文件操作
- 特点
- 都是使用系统函数完成的
- 基于Linux/Unix为模型
- 文件处理
- 文件类型
- 在Windows中,只能获取file、dir、unknow类型
- 在Linux中,可获取block、char、dir、fifo、file、link、unknow类型
- block:块设置文件,就是一些储存数据, 以提供系统随机存取的接口设备
- char:字符设备文件,即串行端口的接口设备
- dir:目录文一种特殊的文件类型,他主要的目的在解决多个程序同时存取一个文件所造成的错误问题
- file:普通的文件类型
- link:与Windows下的快捷方式相似
- unknown:其他文件
- filetype($string):获取文件类型
- 使用is_*判断文件类型及权限,如is_dir(是否目录)、is_file(是否文件)等
- file_exists($file):判断文件是否存在
- filesize($file):获取文件大小
- is_file($file):判断是否为文件
- is_readable($file):判断文件是否可读
- is_writable($file):判断文件是否可写
- is_executable($file):判断文件是否可执行
- filectime($file):文件的创建时间
- fileatime($file):文件的访问时间
- filemtime($file):文件的修改时间
- stat($file):返回文件的状态
- 与文件目录相关
- /
- 表示根目录
- 在服务器中,根在文档根目录
- 在客户端中,根在系统根目录
- 路径分隔符
- 表示根目录
- basename($url):获取路径文件名
- dirname($url):获取路径目录部分
- pathinfo($url):返回数组,包含路径及文件的信息
- /
- 文件打开与关闭
- 文件读取
- file_get_contents($file):读取文件的内容,返回字符串
- file($file):读取文件,返回数组,文件中的一行字符串将成为数组的一个元素
- readfile($file):读取文件并直接输出
- 文件写入
- file_put_contents($file,$string):如果存在文件,写入文件覆盖原来内容,如果不存在,则创建文件并写入内容
- 文件打开
- fopen($file,mode):打开文件,返回资源
- r:以读形式打开文件
- r+:读+写,文件不存在,会出错
- w:以写的形式打开文件,若文件不存在,则创建文件,若文件存在,则清除内容
- w+:写+读
- a:以写的形式打开文件,若文件不存在,则创建文件,若文件存在,则在文件末尾追加内容
- a+:写+读
- b:以二进制模式打开文件(图片、电影等)
- t:以文本方式打开文件(Windows才有效)
- fwrite($resource,$string):向打开的资源中写入内容
- fread($resource):读取文件指定大小
- fgetc($resource):一次读取文件一个字符
- fgets($resource):一次读取文件一行内容
- feof($resource):检测文件读取是否已到末尾,若已到末尾,返回true
- 读取未知大小文件

- ftell($resource):返回指针当前位置
- fseek($resource,$int):移动指针相应字符
- rewind($resource):复位文件指针
- fopen($file,mode):打开文件,返回资源
- 文件关闭
- fclose($file):关闭文件
- 若不使用此函数,脚本结束后,才关闭
- 没有关闭的资源不能再打开
- fclose($file):关闭文件
- 文件读取
- 权限设置有关的函数
- filegroup($file):返回文件所属组
- fileowner($file):返回文件所有者
- chgrp($file,$group):改变文件所属组
- chmod($file,$int):改变文件模式,$int为四个数字,第一个必须为0,其余三个依次为所有者权限、组权限和其他人权限
- chown($file,$owner):改变文件拥有者
- 文件操作
- 创建文件:touch($file)
- 删除文件:unlink($file)
- 移动/重命名文件:rename($oldfile,$newfile)
- 复制文件:copy($oldfile,$newfile)
- 文件锁定
- flock($resource,lock,block):给文件上锁和解锁
- LOCK_SH:读取锁,共享锁
- LOCK_EX:写入锁,独占锁
- LOCK_UN:解锁
- LOCK_NB:防止锁定时堵塞
- flock($resource,lock,block):给文件上锁和解锁
文件属性:以当前目录为基准
- 文件类型
- 目录处理
- 目录的遍历
- opendir($dirname):打开目录文件
- readdir($resource):读取目录中的文件,返回指针所在的文件名
- rewinddir():复位目录指针
- closedir():关闭目录资源
- 目录的创建
- mkdir($dir):新建空目录
- 目录的删除
- rmdir($dir):删除空目录
- 删除非空目录,自定义函数
- 目录的复制
- 系统并未提供,需自定义
- 目录的移动/重命名
- rename($old,%new):将旧的目录移动到新目录位置,并更名
- 目录的统计
- 文件上传和下载
- 上传
- php.ini配置
- file_uploads = on
- upload_tmp_dir //上传的临时目录,脚本结束时,文件会删除
- upload_max_filesize //允许文件上传的最大值
- post_max_size //Php可接收的post数据的最大值,设置需大于upload_max_filesize
- 上传表单需要注意事项
- 表单的提交方法必须为http post,即method = 'post'
- 上传需要使用type = 'file'
- form标签中的enctype = 'multipart/form-data'
- PHP处理上传的数据
- $_FILES接收上传的数据,$_POST接收非上传的数据
- 使用$_FILES[name]['error']检查上传错误
- 0表示无错误,1~7代表各种错误,可翻查手册
- 使用$_FILES[name]['size']限制文件大小
- 使用$_FILES[name]['type']或扩展名限制文件类型
- 建议使用扩展名
- 将上传后的文件改名
- $_FILES[name]['tmp_name'],可获取上传文件的路径
- 可使用年月日时分秒+三个数字作为文件名
- 将文件从临时目录拷到指定目录
- 使用is_uploaded_file()函数判断是否上传函数
- 使用move_uploaded_file()函数移动上传文件
- 建议添加<input type='hidden' name='MAX_FILE_SIZE' value='设定值'>,用于提示用户文件超出最大值
- php.ini配置
- 下载
- 使用header("Content-Disposition: attachment; filename=$file_name")指定要下载的文件
- 使用输出函数将文件信息输出,如readfile()

- 上传
错误处理
- 语法错误
- 脚本停止运行,返回错误信息
- 运行时错误
- 脚本继续运行,返回错误信息
- 逻辑错误
- 脚本继续运行,没有错误信息
- E_ERROE
- E_WARMING
- E_NOTICE
- 错误写入到日志中
- 错误被屏蔽时,将被写入日志中
- log_errors=on,设置日志功能开启
- error_log可设置错误日志所在目录
※建议:开发时,输出所以错误;运行时,不输出任何错误
※ini_get():获取配置文件的值
※ini_set():修改配置文件的值
异常处理
try{
}catch(异常对象){
}
- 如果try{}内的代码没有问题,则不执行catch(){}内的代码
- 如果try{}内的代码有问题,则暂停try{}内的代码,执行catch(){}内的代码,在继续执行try{}内的代码
- catch(){}最好能解决try{}内的问题,如果不行,建立友好提示
- throw抛出异常,如throw new Exceptiong("这是一个异常")
- 自定义异常
- 必须继承Exception类
- 只能覆盖父类的构造方法和toString方法
日期和时间
- UNIX时间戳
- 以32位整数表示格林威治标准时间,单位是秒
- 起始时间为1970年1月1日0时0分0秒
- 时间范围:1970-2038
- 主要作用:方便计算使用
- 获取日期和时间
- time():获取当前时间戳(一般存储、计算使用)
- getdate($time):获取时间的信息
- gettimeofdate()
- date_sunrise()
- date_sunset()
- 日期和时间的格式化输出
- date($string,$time):将时间戳$time转换为$string格式输出
- 将时间戳转换为用户看得懂的格式,常用于显示输出使用
- date($string,$time):将时间戳$time转换为$string格式输出
- 将日期和时间转变为UNIX时间戳
- mktime():将时分秒月日年转换为时间戳
- 如果时间越界,会自动校正
- mktime():将时分秒月日年转换为时间戳
- 修改php的默认时区
- 在php.ini中修改date.timezone
- 使用date_fault_timezone_set($string)设置默认时区(PHP5后使用)
- 使用微秒计算php脚本执行时间
- microtime($bool):返回当前时间戳及微秒数,当$bool为true时,返回一个浮点数,整数部分表示时间戳,小说部分表示微秒
PHP图像处理
- 安装GD库
- 开启GD库,将php.ini中extensionextension_dir="ext"和extension=php_gd2.dll前的“;”去掉
- 画图:验证码、统计图
- 创建画布----创建资源类型----高度和宽度
- imagecreatetruecolor($width,$height):创建指定大小画布
- 定制各种颜色
- imagecolorallocate($res,$red,$green,$blue):创建颜色
- imagefill($res,$x,$y,$color):与坐标($x,$y)点颜色相同且相邻的点都会被填充
- 绘制图像
- 每个图形对应一个函数
- imagefilledrectangle()(imagerectangle()):画一个矩形,有颜色填充(无颜色填充)
- imageline():画一条直线
- imagechar():水平画一字母
- imagecharup():垂直画一字母
- imagestring():水平画一字符串
- imagestringup():垂直画一字符串
- imagettftext():以特定字体合角度画一字符串
- 输出/保存处理好的图像
- header('content-type:image/*'):告诉浏览器,这是一个图片文件,否则会当作文本文件处理
- image*($res,[$url]):如不使用第二个参数,则输出浏览器,输入第二个参数,设置保存的位置
- 释放资源
- imagedestory($res):释放资源
- 创建画布----创建资源类型----高度和宽度
- 处理原有的图像:图片缩放、加水印、电子相册
- 创建图片资源
- 创建什么类型的图片就用相应的函数
- imagecreateform*():创建相应类型图片
- 创建什么类型的图片就用相应的函数
- 获取图片属性
- imagesx($res):获取图片的宽度
- imagesy($res):获取图片的高度
- getimagesize($url):获取图片的信息,包括宽度、高度、类型等
- 处理图片
- 与画图的绘制图像一致
- 图片等比例缩放
imagecopyresized($ dst_image,$ src_image,$ dst_x,$ dst_y,$ src_x,$,src_y,$ dst_w,$ dst_h,$ src_w,$ src_h):处理速度比较快,但效果比较粗糙
- imagecopyresampled($ dst_image,$ src_image,$ dst_x,$ dst_y,$ src_x,$,src_y,$ dst_w,$ dst_h,$ src_w,$ src_h):处理速度比较慢,但效果比较好
header("content-type:image/jpeg"); $image = './image/Peacock.jpg';
$nSize = 0.5; list($width,$height) = getimagesize($image);
$nWidth = $nSize*($width);
$nHeight = $nSize*($height); $n_img = imagecreatetruecolor($nWidth,$nHeight); //设置画布
$o_img = imagecreatefromjpeg($image); imagecopyresampled($n_img,$o_img,0,0,0,0,$nWidth,$nHeight,$width,$height); //将图片缩小为$nWidth、$nHeight的图片,并输出至画布中
imagejpeg($n_img); imagedestroy($o_img);
imagedestroy($n_img);透明处理
- png、jpeg透明色都正常,只有gif不正常
- imagecolortransparent($res,$color):将某颜色设置为透明色
- 用fillcolor()将画布设置为透明
header("content-type:image/gif"); $image = './image/cir.gif';
$nSize = 0.5; list($width,$height) = getimagesize($image);
$nWidth = $nSize*($width);
$nHeight = $nSize*($height);
$n_img = imagecreatetruecolor($nWidth,$nHeight); //设置画布 $color=imagecolorallocate($n_img,255,255,255); //设置白色
imagecolortransparent($n_img,$color); //设置白色为透明色
imagefill($n_img,0,0,$color); //用透明色填充画布
$o_img = imagecreatefromgif($image); imagecopyresampled($n_img,$o_img,0,0,0,0,$nWidth,$nHeight,$width,$height); //将图片缩小为$nWidth、$nHeight的图片,并输出至画布中
imagegif($n_img); imagedestroy($o_img);
imagedestroy($n_img);
- 图片裁剪
- 使用imagecopyresized()和imagecopyresampled()进行裁剪
- 添加水印
- imagealphablending($res,$bool):$bool设置为true,开启混色模式
- 文字水印
- 使用imagettftext()将文字输入图片中
- 图片水印
- 使用imagecopy()将图片水印复制到图片中
- 图片的旋转
- imagerotate():设置图片逆时针旋转一定角度
- 图片翻转
- 沿y轴旋转
- 使用imagecopy()将图片沿y轴拷贝
- 沿x轴旋转
- 使用imagecopy()将图片沿x轴拷贝
- 沿y轴旋转
- 锐化:原理是将原来的颜色取出,将颜色加深
- imagecolorat():取得某位置的颜色
- imagecolorforindex():取得某颜色的rgb值,返回数组
- 输出/保存图片
- image*($res,[$url]):如不使用第二个参数,则输出浏览器,输入第二个参数,设置保存的位置
- 销毁图片
- imagedestory():销毁图片
- 创建图片资源
※可使用<img> 标签直接引用
PHP笔记(PHP中级篇)的更多相关文章
- SQL笔记:中级篇
1.LIMIT 查询前多少条数据 例如:查询user表前三条数据 SELECT * FROM user LIMIT 3 ORACLE: SELECT name FROM user WHERE RO ...
- Python 正则表达式入门(中级篇)
Python 正则表达式入门(中级篇) 初级篇链接:http://www.cnblogs.com/chuxiuhong/p/5885073.html 上一篇我们说在这一篇里,我们会介绍子表达式,向前向 ...
- AngularJS in Action读书笔记6(实战篇)——bug hunting
这一系列文章感觉写的不好,思维跨度很大,原本是由于与<Angularjs in action>有种相见恨晚而激发要写点读后感之类的文章,但是在翻译或是阐述的时候还是会心有余而力不足,零零总 ...
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(3)
25个增强iOS应用程序性能的提示和技巧(中级篇)(3) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
- 25个增强iOS应用程序性能的提示和技巧(中级篇)(2)
25个增强iOS应用程序性能的提示和技巧(中级篇)(2) 2013-04-16 14:42 破船之家 beyondvincent 字号:T | T 本文收集了25个关于可以提升程序性能的提示和技巧,分 ...
- 25个增强iOS应用程序性能的提示和技巧--中级篇
25个增强iOS应用程序性能的提示和技巧--中级篇 标签: ios性能优化内存管理 2013-12-13 10:55 738人阅读 评论(0) 收藏 举报 分类: IPhone开发高级系列(34) ...
- Python3学习(2)-中级篇
Python3学习(1)-基础篇 Python3学习(2)-中级篇 Python3学习(3)-高级篇 切片:取数组.元组中的部分元素 L=['Jack','Mick','Leon','Jane','A ...
- django-url调度器-中级篇
在初级篇中,我们接触了: 1.url 的简单编写 2.两种传参的方式 3.捕获的参数总是字符串 4.为视图设置默认参数 …… 在中级篇中将更进一步. 包含其它的URLconfs 当网站非常大的时候,将 ...
- Noah的学习笔记之Python篇:命令行解析
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
- Noah的学习笔记之Python篇:函数“可变长参数”
Noah的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 3.命令行解析 注:本文全原创,作者:Noah Zhang (http://www.cnblogs.com/noahzn/) ...
随机推荐
- 解决ArcGIS中因SDE或数据库配置问题而导致服务宕掉的一种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 最近连续有两个项目现场出现了AGS服务荡掉的问题,一个是通州 ...
- 将文本文件的内容存储在DataSet中的方法总结
项目中比较多的会对文件进行操作,例如文件的上传下载,文件的压缩和解压等IO操作.在.NET项目中较多的会使用DataSet,DataTable进行数据的缓存. 项目中对文本文件的操作比较简单,但是如果 ...
- Net设计模式实例之建造者模式(Builder Pattern)
一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...
- [开源 .NET 跨平台 数据采集 爬虫框架: DotnetSpider] [二] 基本使用
[DotnetSpider 系列目录] 一.初衷与架构设计 二.基本使用 三.配置式爬虫 四.JSON数据解析与配置系统 使用环境 Visual Studio 2015 or later .NET 4 ...
- VS2012 C#使用/配置Log4Net
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本节探讨如何在VS2012中使用Log4Net 1. ...
- 【Win10开发】如何在页面之间传值
我们知道UWP是通过不同的页面来展示不同的内容的,那么我们该怎么进行页面之间的传值呢? 首先我们在MainPage里面写一个ListView来展示一些英文单词. List<English> ...
- 比较牛X的互联网公司都有哪些作死的行为
以下为近乎家的小近吐血整理: 1流氓行为 臭表碾说的就是你们! 百度 还有这种伪造网页弹窗: 360 不经同意,也不弹窗提醒,直接给我们安装推广软件.比较典型的是 腾讯 腾讯一直走在行业最前端,买 ...
- java堆和栈的区别
java 的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这 ...
- windows对象模型分类
- WinFrom窗体始终置顶
调用WindowsAPI使窗体始终保持置顶效果,不被其他窗体遮盖: [DllImport("user32.dll", CharSet = CharSet.Auto)] privat ...