PHP动态网站开发项目教程课件 项目6 拉取组织和人员信息_第1页
PHP动态网站开发项目教程课件 项目6 拉取组织和人员信息_第2页
PHP动态网站开发项目教程课件 项目6 拉取组织和人员信息_第3页
PHP动态网站开发项目教程课件 项目6 拉取组织和人员信息_第4页
PHP动态网站开发项目教程课件 项目6 拉取组织和人员信息_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

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

文档简介

项目6

拉取组织和人员信息项目知识要点学时6.1文件操作6.1.1文件属性6.1.2文件的打开和关闭6.1.3向文件写入数据6.1.4读取文件数据6.1.5读取CSV文件6.1.6读取整个文件内容6.1.7其他文件操作6.2目录操作6.2.1解析目录6.2.2遍历目录6.2.3创建和删除目录6.3文件上传6.3.1文件上传设置6.3.2编写文件上传表单6.3.3编写PHP上传处理脚本4项目知识要点知识能力目标学时【知识目标】了解文件属性的访问方法掌握目录的基本操作方法学会文件的基本操作方法熟悉网络文件的上传方法【能力目标】能够运用文件及目录操作功能满足数据存取需求能够实现文件的上传与下载,满足文件交互需求【素质目标】提高编码过程中对错误和异常的警惕性和防范意识,以提高代码的鲁棒性培养安全意识,对需要上传或下载的文件进行文件类型、大小等验证,防范恶意文件攻击4项目实训2项目目标6.1.1文件属性程序中有时需要使用文件的一些属性,如文件类型、文件大小、文件时间、文件权限等。filetype($file):返回文件类型。Windows系统中文件类型为file、dir或Unknown。filesize($file):返回文件大小,单位为字节。filectime($file):返回文件创建时间的时间戳(一个整数),通常需格式化为日期时间进行显示。fileatime($file):返回文件上次访问时间。filemtime($file):返回文件上次修改时间。fileperms($file):返回文件权限,返回值为整数。该整数通常包含文件是否可读写及其他的信息。is_writable($file):返回文件是否可写,返回值为布尔数。is_readable($file):返回文件是否可读,返回值为布尔数。stat($file):以数组形式返回文件的全部信息。6.1.1文件属性<?php$fn="D:\\soft\\xampp\\php";//先在XAMPP的安装目录下指定php文件夹echo'D:\soft\xampp\php<br>';echo'文件类型:',filetype($fn);echo'<br>文件创建时间:';echodate("Y-m-dG:i:s",filectime($fn)),'<br><br>';$fn=$fn."\php.ini";echo$fn,'<br>';if(is_readable($fn))echo'文件可读。<br>';elseecho'文件不可读。<br>';if(is_writable($fn))echo'文件可写。<br>';elseecho'文件不可写。<br>';echo'文件类型:',filetype($fn);echo'<br>文件大小:';【例6-1】使用文件属性函数,代码如下。(源代码:\test\chapter6\test1.php)6.1.1文件属性echofilesize($fn).'字节';echo'<br>文件创建时间:';echodate("Y-m-dG:i:s",filectime($fn));echo'<br>文件上次访问时间:';echodate("Y-m-dG:i:s",fileatime($fn));echo'<br>文件上次修改时间:';echodate("Y-m-dG:i:s",filemtime($fn));echo'<br>文件权限:';echoprintf("%o",fileperms($fn));echo'stat()函数返回的文件属性数组:<br>';$a=stat($fn); //获取包含文件信息的数组$n=0;echo'<tableborder=0width=100%><colwitdth=20%/><colwitdth=20%/>'.'<colwitdth=20%/><colwitdth=20%/>';foreach($aas$k=>$v){$n++; //$n用于控制每行输出5个数据

if($n==1)echo'<tr>';echo"<td>stat[$k]=$v</td>";if($n==5){echo'</tr>';$n=0;}}echo'</table>';6.1.1文件属性例6.1的代码在浏览器中的显示结果如图6.1所示。图6.1例6.1的代码在浏览器中的显示结果6.1.2文件的打开和关闭在读写文件时,通常需要先打开文件。fopen()函数用于打开文件,返回指向打开文件的文件指针,其基本格式如下:$handle=fopen($fname,$mode);其中,$handle变量保存返回的文件指针,其数据类型为resource。$fname为文件路径,可以是本地文件的文件路径,也可以是远程文件的URL。$mode为文件打开模式,用于指定文件的读写方式。6.1.2文件的打开和关闭r:只读方式打开,将文件指针指向文件头。r+:读写方式打开,将文件指针指向文件头。w:只写入方式打开,将文件指针指向文件头,文件原有内容被删除。若文件不存在,则用指定文件名创建文件再打开。应注意,只要用w方式打开文件,即使没有向原文件写入任何内容,原文件内容也将被删除。w+:读写方式打开,其他行为与w相同。a:只写入方式打开,将文件指针指向文件末尾,始终在文件末尾写入数据。若文件不存在,则用指定文件名创建文件再打开。a+:读写方式打开,其他行为与a相同。x:创建新文件并以只写入方式打开,将文件指针指向文件头。若文件已存在,则打开失败,函数返回FALSE,并生成一条E_WARNING级别的错误信息。x+:创建新文件并以读写方式打开,其他行为与x相同。c:只写入方式打开,将文件指针指向文件头,文件原有内容保留。若文件不存在,则用指定文件名创建文件再打开。c+:读写方式打开,其他行为与c相同。6.1.2文件的打开和关闭=文件使用结束后,应及时使用fclose()函数将其关闭。fclose()函数的基本格式如下:fclose($handle);其中,$handle为已打开的文件指针。例如,下面的代码分别用不同的方式打开文件,然后将其关闭。$handle=fopen('d:/temp/data.txt','r'); //只读方式打开,使用UNIX风格路径分隔符fclose($handle); //关闭文件$handle=fopen('d:\\temp\\data.txt','w'); //只写入方式打开,使用Windows风格路径分隔符fclose($handle); //关闭文件$handle=fopen('http://localhost/chapter6/tt.php','r'); //只读方式打开远程文件fclose($handle); //关闭文件6.1.3向文件写入数据=fwrite()函数用于向文件写入数据,其基本格式如下:fwrite($handle,$data,$len);其中,$handle为打开的文件指针,$data为要写入的字符串,$len指定写入的字符串长度。若$data长度超过$len,多余的字符不会被写入文件。$len可以省略,省略时该函数将$data全部写入文件。fwrite()函数在成功执行时会返回写入的字符数,如果写入过程中出现错误则返回FALSE。6.1.3向文件写入数据<?php$fname='test2_data.txt';$mode='w';$handle=fopen($fname,$mode);$n=fwrite($handle,'PHPbook');echo"写入$n个字符<br>";fwrite($handle,"\n");$n=fwrite($handle,123);echo"写入$n个字符<br>";fwrite($handle,"\n");$n=fwrite($handle,12.34);【例6-2】打开文件并写入数据,代码如下。(源代码:\test\chapter6\test2.php)echo"写入$n个字符<br>";fwrite($handle,"\n");$n=fwrite($handle,true);echo"写入$n个字符<br>";fwrite($handle,"\n");$n=fwrite($handle,serialize(array(1,'ab')));echo"写入$n个字符<br>";fclose($handle);echo'文件操作结束';6.1.3向文件写入数据例6.2的代码在浏览器中的显示结果如图6.2所示。图6.2例6.2的代码在浏览器中的显示结果6.1.4读取文件数据=下面对读取文件数据的3个函数分别进行介绍。fgetc($handle)读取一个字符01fgets($handle,$len)省略$len

时,读取一行;若指定了$len,则当行中的字符数大于$len

时读取$len

个字符,否则读取整行内容02fgetss($handle,$len,$tags)与fgets()函数类似,区别在于fgetss()函数会删除读取字符串中的HTML和PHP标记036.1.4读取文件数据<?php$fname='test3_data.txt';$mode='r';$handle=fopen($fname,$mode);echofgetc($handle); //读取1个字符

echo'<br>';echofgets($handle); //读取1行,第1行中已读取1个字符,此时读取该行剩余字符

echo'<br>';echofgets($handle); //读取第2行数据

echo'<br>';echofgetss($handle); //读取第3行,删除HTML标记

echo'<br>';echofgetss($handle,255,'<h1>'); //已知行中字符数小于255,所以可读取第4行,保留<h1>echo'<br>';fclose($handle);echo'文件操作结束';【例6-3】使读取文件数据,代码如下。(源代码:\test\chapter6\test3.php)6.1.4读取文件数据PHPbookC++book<h1>phpprogramming</h1><ahref=#>PHP编程</a><h1>c++programming</h1><ahref=#>C++编程</a>其中,test3_data.txt文件中的数据如下:例6.3的代码在浏览器中的显示结果如图6.4所示。图6.4例6.3的代码在浏览器中的显示结果6.1.5读取CSV文件=CSV文件是用分隔符(分号、逗号等)分隔数据的文件。在PHP中,可用fgetcsv()函数读取CSV文件,并解析数据,其基本格式如下:$a=fgetcsv($handle,$len,$csv);与fgets()函数类似,fgetcsv()函数从$handle指定的文件中读取一行或$len指定数量的字符($len为0也表示读取一行)。读取的字符串按指定的分隔符分解为数组返回。6.1.5读取CSV文件<?php$fname='test4_data.txt';$mode='r';$handle=fopen($fname,$mode);$a=fgetcsv($handle,0,';');foreach($aas$value)echo$value,'<br>';fclose($handle);echo'文件操作结束';【例6-4】读取CSV文件,代码如下。(源代码:\test\chapter6\test4.php)test4_data.txt文件内容如下:PHPbook;C++book;PHP编程;C++编程6.1.5读取CSV文件例6.4的代码在浏览器中的显示结果如图6.5所示。图6.5例6.4的代码在浏览器中的显示结果6.1.6读取整个文件内容file()函数不需要使用fopen()函数打开文件,即可读取文件的全部内容并将其放入一个数组,文件的每行数据为数组中的一个元素值。file_get_contents()函数可将整个文件的内容读取为一个字符串。<?php$a=file("test5_data.txt");echo'file("test5_data.txt")读取的文件内容如下:<br>';foreach($aas$value){echo$value,'<br>';}$a=file_get_contents("test5_data.txt");echo'<br>file_get_contents("test5_data.txt")读出的文件内容如下:<br>';echo$a;echo'<br>处理换行符号后的文件内容:<br>',nl2br($a);【例6-5】将文件内容读入数组。(源代码:\test\chapter6\test5.php)6.1.6读取整个文件内容100123.45PHPbookC++booktest5_data.txt文件内容如下:例6.5的代码在浏览器中的显示结果如图6.6所示。图6.6例6.5的代码在浏览器中的显示结果6.1.7其他文件操作file_exists($filename):测试指定的文件是否存在,文件存在则返回TRUE,否则返回FALSE。copy($filename,$filename2):将文件$filename复制为$filename2。操作成功则返回TRUE,否则返回FALSE。rename($filename,$filename2):将文件$filename名称修改为$filename2。操作成功则返回TRUE,否则返回FALSE。ftruncate($handle,$n):截取文件,即将$handle指定的已打开文件的长度缩短为$n字节。注意,如果文件长度小于$n字节,则会用NULL填充并将文件扩展到$n字节。操作成功则返回TRUE,否则返回FALSE。unlink($filename):删除指定文件,操作成功则返回TRUE,否则返回FALSE。6.2.1解析目录目录解析函数处理文件路径,可用于获取一个路径中的目录部分、文件名和扩展名等信息。下面对目录解析函数分别进行介绍。01basename($path)返回路径中的文件名(含扩展名)。02dirname($path)返回路径中的目录部分。03pathinfo($path):以数组形式返回文件名中的目录部分、文件名和扩展名。6.2.1解析目录<?php$path='D:\\soft\\xampp\\htdocs\\test\\chapter6\\test6.php';//根据自己的目录而定

echo"path=$path<br>basename(\$path)=";echobasename($path);echo'<dirname($path)=>';echodirname($path);echo'<br>';foreach(pathinfo($path)as$key=>$value){echo"pathinfo[$key]=$value<br>";}【例6-7】解析目录,代码如下。(源代码:\test\chapter6\test7.php)6.2.1解析目录例6.7的代码在浏览器中的显示结果如图6.8所示。图6.8例6.7的代码在浏览器中的显示结果6.2.2遍历目录opendir($dirname):打开指定目录,返回指向打开目录的指针。如果打开失败,则返回FALSE。readdir($dir_handle):返回目录中的下一个文件名。closedir($dir_handle):关闭打开的目录。scandir($dirname):无须打开目录,直接以数组形式返回目录中的文件和子目录。disk_total_space($dirname):返回指定目录所在磁盘分区的总空间大小(单位为字节)。disk_free_space($dirname):返回指定目录所在磁盘分区的可用空间大小(单位为字节)。6.2.2遍历目录<?php$dirname='D:\\soft\\xampp\\htdocs\\test\\chapter6';//使用本项目示例所在目录echo"path=$dirname目录总空间:",disk_total_space($dirname);echo"目录可用空间:",disk_free_space($dirname);echo"使用readdir()遍历目录:<br>";if($dir_handle=opendir($dirname)){//正确打开目录后,才继续执行后续目录操作

echo'<tableborder=1width=100%><colwitdth=25%/><colwitdth=25%/>'.'<colwitdth=25%/>';echo'<tr><thalign="left">文件名</th><thalign="left">文件类型</th>'.'<thalign="left">创建时间</th><thalign="left">文件大小</th></tr>';while(($file=readdir($dir_handle))!==false){$filename=$dirname.'/'.$file;echo'<tr><td>',$file,'</td>';echo'<td>',filetype($filename),'</td>';echo'<td>',date("Y-m-dG:i:s",filectime($filename)),'</td>';echo'<td>',filesize($filename),'</td></tr>';}【例6-8】遍历目录,代码如下。(源代码:\test\chapter6\test8.php)6.2.2遍历目录echo'</table>';closedir($dir_handle);//关闭打开的目录}else{echo'打开目录失败!';}echo'<br>';echo"path=$dirname使用scandir()遍历目录:<br>";echo'<tableborder=1width=100%><colwitdth=25%/><colwitdth=25%/>'.'<colwitdth=25%/>';echo'<tr><thalign="left">文件名</th><thalign="left">文件类型</th>'.'<thalign="left">创建时间</th><thalign="left">文件大小</th></tr>';foreach(scandir('e:\temp')as$file){$filename=$dirname.'/'.$file;echo'<tr><td>',$file,'</td>';echo'<td>',filetype($filename),'</td>';echo'<td>',date("Y-m-dG:i:s",filectime($filename)),'</td>';echo'<td>',filesize($filename),'</td></tr>';}echo'</table>';6.2.2遍历目录例6.8的代码在浏览器中的显示结果如图6.9、图6.10所示。图6.9例6.8的代码在浏览器中的显示结果(使用readdir()遍历目录)6.2.2遍历目录图6.10例6.8的代码在浏览器中的显示结果(使用scandir()遍历目录)6.2.3创建和删除目录01mkdir($pathname)创建指定目录,成功时返回TRUE,失败时返回FALSE。02rmdir($dirname)删除指定目录,成功时返回TRUE,失败时返回FALSE。6.2.3创建和删除目录<?php$dirname='D:\\soft\\xampp\\htdocs\\test\\chapter6';if(mkdir($dirname.'/subdir')){echo'创建目录:'.$dirname.'\subdir,操作成功!';}if(mkdir($dirname.'\subdir')){//再次创建相同目录,测试是否失败

echo'创建目录:'.$dirname.'\subdir,操作成功!';}if(mkdir($dirname.'\subdir\subdir2')){echo'创建目录:'.$dirname.'\subdir\dir2,操作成功!';}if(rmdir($dirname.'\subdir')){//目录不为空,删除操作会失败

echo'删除目录:'.$dirname.'\subdir,操作成功!';}if(rmdir($dirname.'\subdir\subdir2')){echo'删除目录:'.$dirname.'\subdir\dir2,操作成功!';}if(rmdir($dirname.'\subdir')){echo'删除目录:'.$dirname.'\subdir,操作成功!';}【例6-9】创建和删除目录,代码如下。(源代码:\test\chapter6\test9.php)6.2.3创建和删除目录例6.9的代码在浏览器中的显示结果如图6.11所示。图6.11例6.9的代码在浏览器中的显示结果6.3.1文件上传设置01OPTION02OPTION表单字符编码方式设置在通过客户端表单上传文件时,应将表单编码方式设置为“multipart/form-data”格式,例如:<formenctype="multipart/form-data"…>客户端文件大小设置在通过客户端表单上传文件时,通常应添加一个“MAX_FILE_SIZE”隐藏字段,用于设置文件大小限制。例如:<inputtype="hidden"name="MAX_FILE_SIZE"value="83886080"/>6.3.1文件上传设置php.ini中有关文件上传的设置03OPTIONpload_max_filesize:上传文件最大值,默认为2MB。客户端设置的MAX_FILE_SIZE值不能超过该值。post_max_size:允许客户端POST请求发送的最大数据量。max_input_time:脚本接收输入的最长时间,包括文件上传时间。默认值为60

s。file_upload:文件上传功能开关,若设置为On则允许上传文件,若设置为Off则禁止上传文件。upload_tmp_dir:设置上传文件的临时存储目录,默认使用操作系统临时目录。max_file_uploads:允许同时上传的最大文件数,默认值为20个文件。6.3.2编写文件上传表单=典型的文件上传表单如下:<formenctype="multipart/form-data"action="getUpload.php"method="POST"><inputtype="hidden"name="MAX_FILE_SIZE"value="8388608"/>

上传文件:<inputname="myfile"type="file"/><inputtype="submit"value="上传"/></form>表单的action属性指定用于处理上传文件的PHP脚本。当用户提交包含文件上传字段的表单时,PHP会将上传的文件信息存储在$_FILES全局数组中。文件选择输入字段“<inputname="myfile"type="file"/>”的name属性值“myfile”将作为$_FILES数组的键名,供PHP脚本访问上传的文件信息。6.3.3编写PHP上传处理脚本PHP会在全局数组$_FILES中创建一个数组元素($_FILES['myfile']),用于保存上传的文件信息。$_FILES['myfile']数组包含下列元素。Part01[name]上传文件的文件名Part02[type]文件的类型,如text/plain、image/jpeg等Part03[tmp_name]上传文件的临时文件名Part05[size]上传文件的大小Part04[error]错误信息代码。0表示未发生错误,文件上传操作完成;1表示文件超过了php.ini中的upload_max_filesize

值;2表示文件超过了表单中的MAX_FILE_SIZE值;3表示文件部分上传;4表示文件没有上传;6表示没有找到临时文件夹;7表示文件写入失败6.3.3编写PHP上传处理脚本<html><head><title>上传单个文件</title><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"></head><body><!--必须指明enctype="multipart/form-data",否则无法上传--><formenctype="multipart/form-data"action="test10_getUpload.php"method="POST"><!--字段名“myfile”将作为PHP全局数组$_FILES中的键名,保存上传文件信息-->

上传文件:<inputname="myfile"type="file"/><inputtype="submit"value="上传"/></form></body></html>【例6-9】实现单个文件上传。(源代码:\test\chapter6\test10_getUpload.php、test10_client.html)test10_client.html文件实现文件上传表单,其代码如下。6.3.3编写PHP上传处理脚本<

温馨提示

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

评论

0/150

提交评论