PHP程序设计基础第7章-文件与图像技术_第1页
PHP程序设计基础第7章-文件与图像技术_第2页
PHP程序设计基础第7章-文件与图像技术_第3页
PHP程序设计基础第7章-文件与图像技术_第4页
PHP程序设计基础第7章-文件与图像技术_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

PHP文件与图像技术第七章目录01文件概述03文件上传与下载04PHP图像基础02文件操作05图像常见操作01文件概述文件流文件在程序中是以流的形式来操作的。流是指数据在数据源(文件)和程序(内存)之间经历的路径。所谓文件流,是指在通过HTTP协议POST或GET数据的过程中,传输一方直接以二进制流的方式传送某个文件的内容,这样就形成了一条文件流,接收方只要将接收的流内容直接写进文件即可。流根据数据的传输方向可分为输入流和输出流。输入流是指数据从数据源(文件)到程序(内存)的路径,输出流是指数据从程序(内存)到数据源(文件)的路径。为了方便理解,可以把输入流和输出流比作两根“水管”,如图所示:如上图中,输入流被看成一个输入管道,输出流被看成一个输出管道,数据通过输入流从数据源输入到程序,通过输出流从程序输出到数据源,从而实现数据的传输。由此可见,文件流中的输入输出都是相对于程序而言的。01文件概述文件类型计算机中的文件可分为多种类型,如文本文件、图片、MP3、视频、可执行程序等。接下来通过下表来列举常见的文件类型。常见文件类型01文件概述文件类型描述block块设备文件,如某个磁盘分区、光驱等char字符设备,是指在I/O传输过程中以字符为单位进行传输的设备,如键盘dir目录类型,目录也是文件的一种fifo命名管道,常用于将信息从一个进程传递到另一个进程file普遍文件类型,如文本文件、图片、可执行文件等link符号链接,是指向文件的指针,类似于windows中的快捷方式unknown未知类型01文件概述上表中列出了常用的文件类型,由于PHP对文件系统的操作是基于UNIX系统模型的,因此在Windows系统中只能获得“file”、“dir”或“unknown”三种文件类型。而在UNIX系统中,可以获得上表中所示的七种类型。为了方便获取文件的类型,PHP中提供了filetype()函数,filetype()函数声明方式如下:上述代码中,$filename表示文件名,函数的返回值为该文件的类型,如果文件不存在,则返回false。stringfiletype(string$filename)文件属性操作文件时,经常需要获取文件的一些属性,如文件的大小、权限和访问时间等。PHP内置了一系列函数用于获取这些属性,如下表所示。01文件概述函数功能intfilesize(string$filename)获取文件大小intfilectime(string$filename)获取文件的创建时间intfilemtime(string$filename)获取文件的修改时间intfileatime(string$filename)获取文件的上次访问时间boolis_readable(string$filename)判断给定文件是否可读boolis_writable(string$filename)判断给定文件是否可写boolis_executable(string$filename)判断给定文件是否可执行boolis_file(string$filename)判断给定文件名是否为一个正常的文件boolis_dir(string$filename)判断给定文件名是否是一个目录arraystat(string$filename)给出文件的信息01文件概述注意:上表中所列举的函数都需要提供一个$filename作为参数,即文件名(包括普通文件和目录),然后获取该文件的相关信息。除了使独立函数分别获取文件的属性外,还可以使用stat()函数获取文件的统计信息。使用stat()函数返回的统计信息,既包括索引数组,也包括关联数组。其具体含义如下表所示。01文件概述数字下标关联键名说明0dev设备名1ino号码2modeinode保护模式3nlink被连接数目4uid所有者的用户id5gid所有者的组id6rdev设备类型,如果是inode设备的话7size文件大小的字节数8atime上次访问时间(Unix时间戳)9mtime上次修改时间(Unix时间戳)10ctime上次改变时间(Unix时间戳)11blksize文件系统IO的块大小12blocks所占据块的数目需要注意的是,上表中所列出的文件统计信息是以UNIX系统为基础的,而在Windows下并没有uid、gid、blksize和blocks等属性,所以在Windows下它们的值分别取默认值0或-1。01文件概述打开和关闭文件1、打开文件在PHP中打开文件使用的是fopen()函数,其声明方式如下:上述声明中,$filename表示指定打开的文件,$mode表示文件打开的模式,可选参数$use_include_path表示是否需要在$inlcude_path中搜寻文件,可选参数$content表示上下文,通常用来设置一些其它的协议。02文件操作resourcefopen(string$filename,string$mode[,bool$use_include_path=false[,resource$context]])通常在使用fopen()函数的时候,$filename参数的值不仅可以是本地文件,还可以是以http或者ftp开头的网络URL地址,而参数$mode指定文件的打开模式也有很多种,常见的模式如下表所示。02文件操作

模式说明r只读方式打开,将文件指针指向文件头。r+读写方式打开,将文件指针指向文件头。w写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。w+读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。a写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。a+读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。x创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则进行创建。x+创建并以读写方式打开,其他的行为和'x'一样。2、关闭文件在PHP中关闭文件使用的是fclose()函数,其声明方式如下:上述代码中,fclose()函数只有一个参数,该参数类型为fopen()函数成功打开文件时返回的文件指针,如果文件关闭成功时返回true,失败则返回false。02文件操作boolfclose(resource$handle)02文件操作读取文件1、fread()函数fread()函数用于在打开文件时读取指定长度的字符串,其声明方式如下:fread()函数中的handle参数表示文件系统指针,length参数用于指定读取的字节长度。该函数在读取指定length个字节数,或读取到文件末尾时就会停止读取文件,返回所读取的字符串,如果出错返回false。stringfread(resource$handle,int$length)2、fgetc()函数和fgets()函数fgetc()函数用于在打开的文件中读取一个字符,其声明方式如下:上述声明中,$handle参数表示一个文件指针。该函数每次只能读取一个字节。返回一个包含一个字符的字符串,如果遇到文件结束标志EOF时,则返回false。02文件操作stringfgetc(resource$handle)02文件操作和fgetc()函数相对应,fgets()函数用于在打开的文件中读取一行,其声明方式如下:上述声明中,$length是可选参数,指定了读取的字节数。该函数一次至多从打开的文件中读取一行内容。碰到换行符、EOF或者已经读取了length-1字节后停止(看先碰到那一种情况)。如果没有指定$length,则默认为1024字节。stringfgets(int$handle[,int$length])3、file_get_contents()函数file_get_contents()函数用于将文件的内容全部读取到一个字符串中,其声明方式如下:file_get_contents()函数中,$filename指定要读取的文件名,$use_include_path为可选参数,如果也想在$use_include_path中搜寻文件的话,可以将该参数设为1。$context为可选参数,指定文件指针的上下文,可用于修改流的行为,若为null,则忽略。$start为可选参数,指定在文件中开始读取的位置,默认从文件头开始。$maxlen为可选参数,指定读取的最大字节数,默认为整个文件的大小。02文件操作stringfile_get_contents(string$filename[,bool$use_include_path[,resource$context[,int$offset[,int$maxlen]]]])02文件操作4、file()函数file()函数的作用是将整个文件读入到数组中,如果该函数执行成功,则返回一个数组,数组中的每个元素都是文件中的一行,包括换行符在内。如果执行失败,则返回false。其声明方式如下:$filename参数指定了要读取的文件名,也就是说该函数不需要使用fopen()函数打开文件。可选参数$use_include_path表示需要在该路径中搜索文件,$content表示句柄的环境,若使用null则忽略。arrayfile(string$filename[,int$use_include_path[,resource$context]])写入文件在PHP中提供了fwrite()和file_put_contents()等函数用于将数据写入到文件的操作,下面将针对这两个函数进行详细讲解。1、fwrite()函数fwrite()函数用于写入文件,其声明方式如下:上述声明中,参数$handle表示fopen()函数返回的文件指针,参数$string表示要写入的字符串。参数$length为可选参数,指定写入的字节数,如果指定了$length,则写入指定$length长度的字节,如果省略,则写入整个字符串。02文件操作intfwrite(resource$handle,string$string[,int$length])2、file_put_contents()函数在PHP中,file_put_contents()函数也可以用来对文件进行写入操作,而且不需要使用fopen()函数打开文件,其声明方式如下:上述声明中,参数$filename表示指定要写入的文件,参数$data表示指定要写入的字符串内容。可选参数$flags表示指定写入的特征,例如FILE_USE_INCLUDE_PATH,FILE_APPEND表示追加写入,参数$context表示一个资源,该函数执行成功时返回写入到文件内数据的字节数,失败则返回false。02文件操作intfile_put_contents(string$filename,string$data[,int$flags[,resource$context]])其它操作1、拷贝文件copy()函数用于实现拷贝文件的功能,其声明方式如下:上述声明中,参数$source表示指定源文件,参数$dest表示指定目标文件,当文件拷贝成功时其返回值为true,失败时返回值为false。02文件操作

boolcopy(string$source,string$dest)2、重命名文件rename()函数用于实现文件或目录的重命名功能,其声明方式如下:上述声明中,变量$oldname表示指定源文件的名称,变量$newname表示指定新的文件名称,如果该函数执行成功返回true,失败则返回false。02文件操作boolrename(string$oldname,string$newname[,resource$context])3、删除文件unlink()函数的作用是删除文件,其声明方式如下:上述声明中,参数$filename表示文件名或文件路径,如果删除成功返回值为true,失败则返回false。02文件操作boolunlink(string$filename)解析目录在程序中经常会对文件的目录进行操作,如获取目录名,文件的拓展名等,在PHP中提供了basename()、dirname()和pathinfo()三个函数来完成对文件目录的解析操作。接下来分别进行讲解。1、basename()函数basename()函数用于返回路径中的文件名,其声明方式如下:在上述声明中,$path用于指定路径名,$suffix是可选参数,如果指定了该参数,且文件名是以$suffix结尾的,则返回的结果中会被去掉这一部分字符。02文件操作stringbasename(string$path[,string$suffix])2、dirname()函数dirname()函数用于返回路径中的目录部分,其声明方式如下:在上述声明中,该函数只有一个参数path,即路径名,该函数的返回值为文件的目录。02文件操作stringdirname(string$path)3、pathinfo()函数pathinfo()函数用于以数组的形式返回路径的信息,包括目录名、文件名、文件基本名和扩展名。其声明方式如下:在上述声明中,参数$path表示指定的路径名,可选参数$options指定要返回哪些项,默认返回全部。该函数的返回值是一个关联数组。02文件操作mixedpathinfo(string$path[,int$options])遍历目录在程序中有时需要对某个目录下的所有的子目录或文件进行遍历,在PHP中提供了opendir()、readdir()、closedir()和rewinddir()等函数用于实现目录的遍历。接下来针对这四个函数进行详细的讲解。1、opendir()函数opendir()函数用于打开一个目录句柄,其声明方式如下:在上述声明中,$path指定要打开的目录路径,$context是可选参数表示上下文,通常省略。函数如果执行成功,则返回目录句柄的$resource,否则返回flase。02文件操作resourceopendir(string$path[,resource$context])2、readdir()函数readdir()函数用于从目录句柄中读取条目,其声明方式如下:在上述声明中,函数只有一个参数$dir_handle,它用于接收一个目录句柄的$resource。函数执行成功返回目录中下一个文件的文件名,否则返回false。02文件操作stringreaddir(resource$dir_handle)3、closedir()函数closedir()函数用于关闭目录句柄,其声明方式如下:在上述声明中,函数只有一个参数$dir_handle,它用于接收一个目录句柄的$resource。没有返回值。02文件操作voidclosedir(resource$dir_handle)4、rewinddir()函数rewinddir()函数用于倒回目录句柄,其声明方式如下:在上述代码中,函数只有一个参数$dir_handle,它指定由opendir()函数打开的目录句柄的$resource。执行该函数将$dir_handle指定的目录流重置到目录的开头,没有返回值。02文件操作voidrewinddir(resource$dir_handle)创建和删除目录在PHP中进行文件管理时,经常需要对文件目录进行创建和删除,为此PHP提供了mkdir()和rmdir()函数来实现文件目录的创建和删除,接下来将对这两个函数进行详细讲解。02文件操作1、mkdir()函数在PHP中,mkdir()函数用于新建目录,其声明方法如下:在上述声明中,$pathname指定要创建的目录,$mode为可选参数,指定目录的访问权限,默认值为0777。$recursive为可选参数,指定是否递归创建目录,默认值为false。$context为可选参数,指定上下文,通常可以忽略。该函数执行成功返回true,失败则返回false。02文件操作boolmkdir(string$pathname[,int$mode[,bool$recursive[,resource$context]]])2、rmdir()函数 与mkdir()函数相对应,rmdir()函数用于删除目录,其声明方式如下:在上述声明中,函数只有一个参数$dirname,即指定要删除的目录名。函数执行成功时返回true,否则返回false。需要注意的是,在删除文件时必须保证该目录是空的,且具备相应的权限。02文件操作boolrmdir(string$dirname)统计目录中所有文件的大小在实际生活中,经常会向电脑中拷贝一些文件,在拷贝文件的过程中,通过需要看下该目录有多少文件以及文件的总大小,这个文件总大小是通过计算机统计的。在程序中如果要想实现统计目录中所有文件的总大小,则需要使用递归思想,首先读取一个目录,然后遍历该目录,对该目录下的每一个文件进行判断,如果是普通文件,则计算其大小并纳入统计结果,如果是目录,则进入该目录重复上述操作,直至遍历完所有的文件夹和文件。02文件操作文件上传文件上传的过程实质上就是文件复制的过程。首先需要在浏览器端通过HTTP协议将文件上传到服务器端的文件夹,然后再将其移动到指定的目录,从而完成文件的上传。在文件上传的过程中,会涉及到客户端表单设置和服务器端文件操作,接下来针对这两部分的操作分别进行讲解。03文件上传与下载1、文件上传表单在实现文件上传时,首先需要设置文件上传表单,这个表单的提交方式必须为POST。另外,还需要添加上传的属性enctype=”multipart/form-data”,该属性说明浏览器可以提供文件上传功能,服务器端提交的数据中包含文件的数据。03文件上传与下载通过上述表单可以完成文件的上传操作,该表单与普通表单有一些不同之处,具体如下:表单的提交方式为POST,并且有一个enctype属性提示表单中有二进制文件数据。第1个input标签的type属性为hidden表示隐藏,通过value值指定允许上传文件的最大尺寸。第2个input标签的type属性为file显示一个文件输入框,并提供“浏览”按钮用于选择文件。03文件上传与下载2、PHP处理上传文件当用户通过上传表单选择一个文件并提交后,PHP会自动生成一个$_FILES二维数组,该数组保存了上传文件的信息。例如上传表单中选择文件的代码如下:03文件上传与下载<inputtype="file"name="userfile"/>关于该文件的所有信息都包含在$_FILES[“userfile”]数组中,并且该数组包含了多个键,具体如下:$_FILES[‘userfile’][‘name’]:上传文件的名称,如girl.jpg、boy.png等;$_FILES['userfile']['type']:上传文件的MIME类型,如image/png等;$_FILES['userfile']['size']:上传文件的大小,以字节为单位;$_FILES['userfile']['tmp_name']:存储在服务器文件的临时名称;$_FILES['userfile']['error']:由文件上传导致的错误代码。03文件上传与下载上传文件出现错误时,$_FILES[‘userfile’][‘error’]会返回不同的常量值表示不同的错误,具体如下表所示。

文件上传错误代码03文件上传与下载代码常量值说明0UPLOAD_ERR_OK没有错误发生,文件上传成功1UPLOAD_ERR_INI_SIZE文件超过了php.ini中upload_max_filesize选项限制的值2UPLOAD_ERR_FORM_SIZE文件大小超过了表单中max_file_size选项指定的值3UPLOAD_ERR_PARTIAL文件只有部分被上传4UPLOAD_ERR_NO_FILE没有文件被上传6UPLOAD_ERR_NO_TMP_DIR找不到临时文件夹7UPLOAD_ERR_CANT_WRITE文件写入失败文件上传成功后会暂时存储在服务器端的临时文件夹中(C:\Windows\Temp),为了让文件存储在指定目录中,需要使用is_uploaded_file()函数和move_uploaded_file()函数进行设置。is_uploaded_file()函数用于判断文件是否是通过HTTPPOST上传的,move_uploaded_file()函数用于将上传的文件从临时文件夹移动到新的位置。03文件上传与下载文件下载与文件上传相比,文件下载要简单得多。在实现文件下载时,需要在HTTP消息中设置两个响应消息头,这两个响应消息头用于告诉浏览器不要直接在浏览器中解析该文件,而是将文件以下载的方式打开。03文件上传与下载下面给出一个简单的示例,以下载图片girl.jpg为例,示例代码如下:在上面的代码中,“Content-type”用于指定文件MIME类型,常见的有image/gif、image/jpeg、text/html、text/css等。“Content-Disposition”用于文件描述,其中attachment表明这是一个附件,“filename=girl.jpg”则指定了下载后的文件名。03文件上传与下载header("Content-type:

image/jpeg");//指定文件MIME类型 header("Content-Disposition:

attachment;filename=girl.jpg");//指定文件描述在PHP5之后的版本中默认就安装了GD库,默认情况下GD库是没有被加载的。我们需要通过配置php.ini来加载GD库,如图所示。在将图中的语句改为图中所示的形式后重启服务器即可成功加载。当然我们使用的集成环境默认就加载了GD库。当然读者最好打开php.ini文件确认一下。在修改配置后我们可以通过两种方法来验证。04PHP图像基础(1)通过输出PHP信息确认GD库已成功加载。

phphinfo();(2)通过gd_info()取得GD库信息。

print_r(gd_info());04PHP图像基础常见图片格式1.JPEGJPEG是联合图像专家组(JointPhotographicExpertsGroup)的缩写,是第一个国家图像压缩标准。它是目前网络上最流行的图像格式,文件扩展名为JPG或JPEG。2.GIFGIF是图像文件交换格式(GraphicsInterchangeFormat)的缩写,它是一种基于LZW算法的连续色调的无损压缩格式,在减少了文件大小的同时,保证了图片的可视质量。广泛用于网络,用来存储包含文本、直线和单块颜色的图像。04PHP图像基础3.PNGPNG是可移植的网络图像(PortableNetworkGraphics)的缩写,它提供了可变透明度、微细修正和二维空间交错等特性。4.WBMPWBMP是无线位图(WirelessBitmap))的缩写,是一种移动计算机设备使用的标准图像格式,专门为无线通信设备设计的文件格式。5.WebPWebP是由Google公司推出的一种同时兼容有损压缩和无损压缩的图片文件格式。04PHP图像基础在PHP中GD库处理图像的操作都是先在内存中处理,操作完成后再以数据流的方式输出到浏览器或者保存在服务器磁盘中。创建一个图像通常要经过四个步骤:(1)创建画布(2)绘制图像(3)输出图像(4)释放资源下面我们就来分别学习这些步骤。05图像常见操作我们通常使用imagecreate()和imagecreatetruecolor()来创建指定的画布,它们的语法如下图所示。以上两个函数都可以创建一张画布,成功都会返回一个资源句柄,失败则返回FALSE。不同的是它们可以容纳的色彩范围不同,imagecreate()创建一个基于普通调色板的图像,通常支持256色。imagecreatetruecolor()可以创建一个真色彩图像,但是该函数不可以用于GIF格式图像。05图像常见操作创建画布05图像常见操作创建画布由于我们没有在画布上执行任何操作,因此浏览器不会显示出画布。除了使用上面两个函数可以创建一个画布外。我们还可以通过表中的函数打开服务器或者网络文件中已经存在的图像。表中的函数都只接受一个文件路径或者URL,在执行成功后返回文件句柄,失败则返回FALSE。05图像常见操作函数名描述imagecreatefromgif()通过GIF文件或者URL新建一个图像imagecreatefromjpeg()通过JPEG文件或者URL新建一个图像imagecreatefrompng()通过PNG文件或者URL新建一个图像imagecreatefromwbmp()通过WBMP文件或者URL新建一个图像创建画布我们可以通过imagesx()和imagesy()来获取创建图像的尺寸(以像素为单位),它们的语法如图所示。05图像常见操作在PHP中可以使用不同的函数输出不同格式的图像,如表是常用的输出图像函数。05图像常见操作输出图像函数名描述imagegif()输出一个GIF格式图像到浏览器或文件imagejpeg()输出一个JPEG格式图像到浏览器或文件imagepng()输出一个PNG格式图像到浏览器或文件表中函数的语法如图所示。在所示的语法中,如果指定了第二个参数则图像会以文件的形式输出。05图像常见操作输出图像为了保持兼容,我们需要在程序中使用header()来指浏览器以什么形式输出类型,它的语法如图所示。05图像常见操作输出图像在图像的所有资源使用完毕后,我们通常就需要释放图像处理所占用的内存了。在PHP中通过imagedestroy()来释放资源,它的语法如图所示。05图像常见操作释放资源在PHP中通过imagecolorallocate()来设置颜色,它的语法如图所示。imagecolorallocate()会返回一个标识符,代表了由给定的RGB成分组成的颜色。图中所示语法中$red、$green、$blue的取值可以是0到255的整数或者十六进制的0x00到0xFF。05图像常见操作设置颜色通过坐标系统,我们就可以比较准确地定位到一个点,然后通过相关函数来绘制图形。下面我们来学习PHP中绘制各种图形的函数。05图像常见操作绘制图像区域填充不可以用来绘制图像。它可以将一个已存在图像中大面积的颜色很方便地替换为别的颜色。在PHP中通过imagefill()来执行区域填充,它的语法如图所示。imagefill()会将与(x,y)点处颜色相同并且相邻的颜色替换为$color设置的颜色。05图像常见操作区域填充在PHP中,我们可以通过imagesetpixel()来

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论