




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
问卷统计工具
——文件和目录操作
项目7计算机系学生会决定策划一项全系范围内的读书活动。作为学生会成员的张华,负责开展调查统计工作。他精心设计了调查问卷,并利用表单完成了前端页面的制作。然而,如何对这些数据进行有效统计,成了摆在他面前的一大挑战。面对这一挑战,张华寻求了李老师的帮助。李老师深知Web开发过程中,文件操作的重要性,涉及上传附件、判断文件存在性、数据保存以及文件删除等核心功能。他向张华解释道,PHP提供了一套全面的文件和目录操作函数,能够极大地简化这些任务的处理过程。李老师结合张华目前的学习情况,给出了一些具体的学习建议和方向,以便他能够循序渐进地掌握所需技能,从而顺利完成统计任务。在李老师的指导下,张华开始深入学习与实践PHP的文件操作技术,期望能为全系的读书活动提供有力的数据支持。
问卷统计工具■
掌握目录的基本操作,包括创建、删除、获取和更改工作目录操作,以及遍历目录操作;■
掌握目录解析和目录句柄的操作;■
掌握文件的基本操作,包括重命名或移动、复制和删除文件等操作;■
掌握读取、写入文件的基本操作;■
了解基本的文件上传原理和流程,掌握上传过程中的错误和异常情况处理的方法。■
能够使用相关函数对目录进行创建、删除、解析、打开等操作;■
能够使用相关函数对文件进行移动、复制、读写等操作;■
能够使用相关函数实现文件上传操作。■
培养良好的文件和目录管理习惯,确保数据的安全性和完整性;■
提高问题解决能力,能够独立解决文件和目录相关的操作问题;■
培养创新思维,能够运用文件和目录知识解决实际问题,为软件开发和系统管理贡献力量。目录操作文件操作目录操作PART017.1.1目录基本操作PHP提供了mkdir()函数、rmdir()函数、getcwd()函数和chdir()函数等,可以利用这些函数完成对目录的基本操作。1.创建目录mkdir()函数用于创建新的目录,其语法格式如下。boolmkdir(string$directory[,int$mode=0777[,bool$recursive=false[,resource$context=null]]])该函数的返回值为布尔值,如果创建目录成功,则返回true,否则返回false。具体示例代码如下。mkdir("./directory");//创建directory目录mkdir("./directory/mode");//创建directory/mode目录mkdir("./directory");//创建directory目录mkdir("./directory/mode");//创建directory/mode目录boolmkdir(string$directory[,int$mode=0777[,bool$recursive=false[,resource$context=null]]])7.1.1目录基本操作2.删除目录rmdir()函数用于删除指定目录,其语法格式如下。boolrmdir(string$directory[,resource$context])该函数的返回值为布尔值,如果删除目录成功,则返回true,否则返回false。具体示例代码如下:rmdir("./directory");//删除非空的directory目录rmdir("./test1/test2");//删除test1/test2的空目录在上述代码中,使用rmdir()函数可以删除空目录,也可以删除非空目录。对于非空目录,如果直接删除非空目录,则会删除失败并提示Warning错误。所以需要先清空目录中的文件,才能够删除非空目录。rmdir("./directory");//删除非空的directory目录rmdir("./test1/test2");//删除test1/test2的空目录boolrmdir(string$directory[,resource$context])7.1.1目录基本操作3.获取当前工作目录getcwd()函数用于获取当前工作目录,其基本语法格式如下。string|falsegetcwd()获取成功则返回当前工作目录,失败则返回false。具体示例代码如下。getcwd(); //获取当前工作目录4.更改当前工作目录chdir()函数用于更改当前工作目录,其语法格式如下。boolchdir(string$directory)更改成功则返回当前工作目录,失败则返回false。具体示例代码如下。chdir('test'); //更改当前工作目录teststring|falsegetcwd()getcwd(); //获取当前工作目录boolchdir(string$directory)chdir('test'); //更改当前工作目录test7.1.1目录基本操作5.判断目录是否存在操作目录时,如果该目录不存在,则会出现错误。为了避免这种情况出现,PHP提供了如下几个函数来检查目录是否存在。file_exists()函数:判断指定的文件或目录是否存在。is_dir()函数:判断指定路径是否是一个目录。//检查'./test1'是否存在(无论是文件还是目录)var_dump(file_exists('./test1'));//如果存在,则输出bool(true)//检查'./test1'是否是一个目录var_dump(is_dir('./test1'));//如果存在并且是一个目录,则输出bool(true);如果是文件或者不存在,则输出bool(false)//检查'./test1'是否存在(无论是文件还是目录)var_dump(file_exists('./test1'));//如果存在,则输出bool(true)//检查'./test1'是否是一个目录var_dump(is_dir('./test1'));//如果存在并且是一个目录,则输出bool(true);如果是文件或者不存在,则输出bool(false)7.1.1目录基本操作6.遍历目录glob()函数用于遍历目录,也可以用于寻找与模式匹配的文件路径,其基本语法格式如下。arrayglob(string$pattern[,int$flags=0])该函数的返回值是查找后的文件列表数组。具体示例代码如下。print_r(glob('./*')); //获取当前目录下的文件列表print_r(glob('./*.docx')); //获取当前目录下所有的以.docx为扩展名的文件列表上述两行代码,均以数组的形式返回当前目录下的所有文件或者指定的以.docx为扩展名的文件。arrayglob(string$pattern[,int$flags=0])print_r(glob('./*')); //获取当前目录下的文件列表print_r(glob('./*.docx')); //获取当前目录下所有的以.docx为扩展名的文件列表7.1.1目录基本操作6.遍历目录scandir()函数也可以遍历目录,该函数返回指定目录中的文件和目录。array|falsescandir($directory,$sorting_order,$context)具体参数说明如下。$sorting_order:可选,规定排列顺序。默认值是0,表示按字母升序排列。如果设置为SCANDIR_SORT_DESCENDING或者1,则表示按字母降序排列。如果设置为SCANDIR_SORT_NONE,则返回未排列的结果。$context:可选,规定目录句柄的环境。array|falsescandir($directory,$sorting_order,$context)【案例实践7-1】使用scandir()函数遍历指定目录使用scandir()函数获取指定目录的文件信息。<?php$dir='test1';$files1=scandir($dir);//获取目录下所有文件和文件夹的数组,默认升序排列$files2=scandir($dir,1);//获取目录下所有文件和文件夹的数组,降序排列if(($files1===false)&&($files2===false))
echo"读取目录失败";else{
echo"<pre>";
print_r($files1);
echo"<hr>";
print_r($files2);
echo"</pre>";}【案例实践7-1】使用scandir()函数遍历指定目录若该函数执行成功,则返回值是Array,包含目录中的文件和文件夹;若执行失败,则返回false。运行结果如图7-1所示。上面的结果中,有.和..这两个特殊的目录。在文件路径中,其中.表示当前目录,..表示上一级目录。这两个是特殊的路径标识符,用于在文件系统中进行相对路径的导航。7.1.2目录与路径解析PHP提供了basename()函数、dirname()函数和pathinfo()函数等用于完成对文件路径的解析。1.获取文件名basename()函数用于返回路径中的文件名,其语法格式如下。stringbasename(string$directory[,string$suffix])具体示例代码如下:$directory='directory/suffix/index.html';echobasename($directory); //输出index.htmlechobasename($directory,'.html'); //输出indexstringbasename(string$directory[,string$suffix])$directory='directory/suffix/index.html';echobasename($directory); //输出index.htmlechobasename($directory,'.html'); //输出index7.1.2
目录与路径解析2.获取目录dirname()函数用于返回文件路径中去掉文件名后的目录部分,其语法格式如下。stringdirname(string$directory[,int$levels=1])具体示例代码如下。$directory='directory/levels/index.html';echodirname($directory); //输出directory/levelsechodirname($directory,2); //输出directory$directory='directory/levels/index.html';echodirname($directory); //输出directory/levelsechodirname($directory,2); //输出directory7.1.2
目录与路径解析3.获取目录信息pathinfo()函数用于以数组形式返回文件路径的信息。array|stringpathinfo(string$directory[,int$options])具体参数说明如下。$directory:表示文件路径。$options:可选参数,用于指定要返回的数组元素,默认返回全部信息。array|stringpathinfo(string$directory[,int$options])【案例实践7-2】解析路径基本信息可通过以下3种方式解析路径的基本信息,包括文件名、目录以及文件的扩展名。<?php$path='test1/test2/text1.txt';echo"1.使用basename()函数和dirname()函数解析路径:";echo"<br>文件名:".basename($path);echo"<br>目录路径:".dirname($path);echo"<br><br>2.使用pathinfo()函数解析路径:<br>";$pathinfoarr=pathinfo($path);echo"<pre>";print_r($pathinfoarr);echo"</pre>";echo"<br>目录路径:".$pathinfoarr['dirname'];echo"<br>文件名:".$pathinfoarr['basename'];echo"<br>文件扩展名:".$pathinfoarr['extension'];echo"<br><br>3.遍历数组解析路径:<br>";foreach(pathinfo($path)as$k=>$v)
echo"$k:$v<br>";【案例实践7-2】解析目录基本信息运行结果如图7-2所示。7.1.3目录句柄PHP提供了opendir()函数、closedir()函数和readdir()函数等用于操作目录句柄。1.打开目录句柄opendir()函数用于打开一个目录句柄,可用于之后的
closedir(),readdir()
和
rewinddir()函数的调用,其语法格式如下。resource|falseopendir(string$directory[,resource$context])具体参数说明如下。$directory:用于打开指定的目录。$context:可选,规定目录句柄的环境。resource|falseopendir(string$directory[,resource$context])7.1.3目录句柄如果函数执行成功,则返回资源类型的目录句柄;执行失败,则返回false。$directory="test1/test2";//目录路径$dir_handle=opendir($directory);//打开目录句柄if($dir_handle)//判断是否成功打开目录句柄echo"打开目录句柄成功!";elseecho"打开目录句柄失败!";closedir()函数用于关闭目录句柄,其基本语法格式如下。voidclosedir([resource$dir_handle])$dir_handle代表使用opendir()函数打开的目录句柄,closedir()函数执行后没有返回值。需要注意的是,要关闭
$dir_handle
指定的目录句柄,目录句柄必须之前被
opendir()
所打开。$directory="test1/test2";//目录路径$dir_handle=opendir($directory);//打开目录句柄if($dir_handle)//判断是否成功打开目录句柄echo"打开目录句柄成功!";elseecho"打开目录句柄失败!";voidclosedir([resource$dir_handle])7.1.3目录句柄2.读取目录句柄readdir()函数用于从目录句柄中读取条目,其基本语法格式如下。stringreaddir([resource$dir_handle])函数执行成功则返回目录中下一个文件的名称,执行失败则返回false。stringreaddir([resource$dir_handle])【案例实践7-3】使用目录句柄函数遍历指定目录通过opendir()函数打开目录,然后通过readdir()函数读取目录,显示文件信息。<?php$dir="test1/test2";$handle=opendir($dir);if($handle){//判断目录是否打开
while(($filename=readdir($handle))!==false){//读取目录
$subFile=$dir."/".$filename;//将目录下的子文件和当前目录相连
echo$subFile."<br>";
}
closedir($handle);}else
echo"目录打开失败";由于PHP是弱类型语言,所以将整型值0和布尔值false视为等价,如果使用比较运算符==或!=,当目录中有一个文件的名称为0时,则遍历目录的循环将停止,所以在设置判断条件时要注意使用===和!==运算符进行弱类型检查。【案例实践7-3】使用目录句柄函数遍历指定目录遍历除根目录外的任何目录时,结果中都会有.和..这两个特殊的目录,所以为了能够遍历出真正的目录来,我们通常在while循环结构中再添加判断,将这两个目录排除。if($handle){//判断是否成功打开目录句柄
while(false!==($file=readdir($handle))){//读取目录中的文件
if($file!="."&&$file!=".."){//排除当前目录和上一级目录
echo"$file\n";
}
}
closedir($dir_handle);}【案例实践7-3】使用目录句柄函数遍历指定目录运行结果如图7-4所示。7.1.3目录句柄3.重置目录句柄rewinddir()函数用于重置目录句柄,其基本语法格式如下。voidrewinddir(resource$dir_handle)函数执行成功后,将$dir_handle重置到目录的开头。voidrewinddir(resource$dir_handle)文件操作PART027.2.1文件基本操作1.重命名或移动文件rename()函数用于实现文件的重命名或移动,其基本语法格式如下。boolrename(string$oldname,string$newname[,resource$context])如果$oldname和$newname在同一个目录下,则执行重命名操作;如果不在同一个目录下,则执行移动操作。若目标路径下已存在同名文件,则会自动覆盖。该函数也可以用于目录的重命名,但若目标路径已存在(且为目录),则操作会失败并产生Warning错误。rename()函数的使用方法及示例代码如下。rename('./test1.txt','./test2.txt');//重命名,将test1.txt重命名为test2.txtrename('./test1.txt','D:/web/test.txt');//移动,将test.txt文件移动到D:/web/test.txtboolrename(string$oldname,string$newname[,resource$context])rename('./test1.txt','./test2.txt');//重命名,将test1.txt重命名为test2.txtrename('./test1.txt','D:/web/test.txt');//移动,将test.txt文件移动到D:/web/test.txt7.2.1文件基本操作2.复制文件copy()函数用于实现复制文件的功能,其基本语法格式如下。boolcopy(string$source,string$dest[,resource$context])函数执行成功则返回true,失败则返回false,该函数的使用方法及示例代码如下。copy('./test1.txt','./test2.txt');//在当前目录下复制文件copy('./123/test1.txt','./456/test2.txt');//跨目录复制文件当在不同目录下复制文件时,如果在该目录下,目标文件不存在,则执行复制操作,否则执行覆盖操作。boolcopy(string$source,string$dest[,resource$context])copy('./test1.txt','./test2.txt');//在当前目录下复制文件copy('./123/test1.txt','./456/test2.txt');//跨目录复制文件7.2.1文件基本操作3.删除文件unlink()函数用于删除文件,其基本语法格式如下。boolunlink(string$filename[,resource$context])具体参数说明如下。$filename:表示要删除的文件。$context:可选,规定文件句柄的环境。函数执行成功则返回true,失败则返回false,该函数的使用方法及示例代码如下。unlink('./test.txt');boolunlink(string$filename[,resource$context])unlink('./test.txt');7.2.1文件基本操作4.获取文件属性文件属性包括文件类型、大小、创建时间等信息,PHP内置了一系列函数用于单独获取文件属性,如表所示。7.2.1文件基本操作(1)获取文件类型filetype()函数用于获取文件的类型,函数执行成功则返回文件的类型,可能的值有fifo、char、dir、block、link、file和unknown等,失败则返回false。echofiletype('./123/1.txt'); //输出fileechofiletype('./123'); //输出dir(2)获取文件大小filesize()函数用于获取文件的大小,以字节为单位,函数执行成功则返回文件的大小,失败则返回false。echofilesize('./'); //输出4096echofilesize('.test1/'); //输出2echofiletype('./123/1.txt'); //输出fileechofiletype('./123'); //输出direchofilesize('./'); //输出4096echofilesize('.test1/'); //输出27.2.1文件基本操作(3)获取文件信息stat()函数用于通过数组方式获取文件信息,示例代码如下。print_r(stat('./test1/test2/test1.txt'));通过上述代码可以输出stat()函数返回的数组,其输出结果由索引数组和关联数组两种形式组成,其键的具体说明如表所示。print_r(stat('./test1/test2/test1.txt'));7.2.1文件基本操作5.判断文件是否存在操作文件时,如果该文件不存在,则会出现错误。file_exists()函数:判断指定文件或目录是否存在。is_file()函数:判断指定文件是否为一个文件。通过结合使用file_exists()和is_file()函数,可以准确地判断一个路径是指向文件还是其他类型(如目录)。//检查文件'./123/1.txt'是否存在var_dump(file_exists('./123/1.txt'));//如果文件存在,输出bool(true)//检查'./123'是否为一个文件var_dump(is_file('./123'));//检查文件'./123/1.txt'是否存在var_dump(file_exists('./123/1.txt'));//如果文件存在,输出bool(true)//检查'./123'是否为一个文件var_dump(is_file('./123'));//如果不是文件(例如是目录或不存在),输出bool(false)7.2.2文件读写操作1.打开文件使用fopen()函数打开文件,其基本语法格式如下。resourcefopen(string$filename,string$mode[,bool$use_include_path=false[,具体参数说明如下。$filename:表示打开的文件路径,不仅可以是本地文件,而且可以是HTTP或FTP的URL。$mode:表示文件打开的模式。$use_include_path:表示是否需要在include_path中搜寻文件。$context:用于资源流上下文操作,该函数执行成功则返回资源类型的文件指针,用于其他操作。resourcefopen(string$filename,string$mode[,bool$use_include_path=false[,resource$context]])7.2.2文件读写操作2.关闭文件使用fclose()函数关闭文件,其基本语法格式如下。boolfclose(resource$handle)具体参数说明如下。$handle:表示使用fopen()函数打开文件时返回的文件指针。如果文件关闭成功则返回true,失败则返回false。boolfclose(resource$handle)7.2.2文件读写操作3.读取文件读取文件前需要打开文件,如果文件不存在,则需要先创建,文件的创建一般通过fopen()函数来实现,文件的打开模式可以是r或r+。(1)读取指定长度的文件①fread()函数fread()函数用于读取指定长度的字符串,其基本语法格式如下。string|booleanfread(resource$handle,int$length)该函数在读取到$length指定的长度,或读取到文件末尾时就会停止读取,返回读取到的内容,若读取失败则返回false。string|booleanfread(resource$handle,int$length)7.2.2文件读写操作②fgetc()函数fgetc()函数用于在打开的文件中读取一个字符,其基本语法格式如下。stringfgetc(resource$handle)$handle表示文件指针,读取文件时遇到EOF(EndOfFile,文件结束符标志)就返回false。③fgets()函数fgets()函数用于读取文件中的一行,其基本语法格式如下。stringfgets(resource$handle[,int$length])$length用于指定读取的长度,默认值为1024字节,如果指定$length,则返回长度为($length–1)字节的字符串,也就是说想读3个字节,必须写长度4。读取文件时遇到换行符、EOF或已经读取了($length–1)字节就停止。stringfgetc(resource$handle)stringfgets(resource$handle[,int$length])7.2.2文件读写操作(2)读取整个文件①file_get_contents()函数。file_get_contents()函数用于将文件的内容全部读取到一个字符串中。stringfile_get_contents(string$filename[,bool$use_include_path=false[,resource具体参数说明如下。$filename:规定读取文件的路径。$use_include_path:可选参数。$context:用于资源流上下文操作。$offset:指定在文件中开始读取的位置,默认从文件头开始。$maxlen:指定读取的最大长度,默认为整个文件的大小。stringfile_get_contents(string$filename[,bool$use_include_path=false[,resource$context[,int$offset=0[,int$maxlen]]]])7.2.2文件读写操作②file()函数file()函数用于将整个文件内容读取到数组中,数组中的每个元素都是文件中的一行,包括换行符,函数执行成功则返回数组,执行失败则返回false,其基本语法格式如下。arrayfile(string$filename[,int$flags=0[,resource$context]])具体参数说明如下。$filename:表示读取的文件路径。$flags:规定读取方式,使用常量表示。arrayfile(string$filename[,int$flags=0[,resource$context]])$arrfile=file("test1/test2/text1.txt");foreach($arrfileas$v){
$v=nl2br($v);
echo$v;
echo"<br>";}7.2.2文件读写操作③readfile()函数。readfile()函数用于读取一个文件到浏览器,其基本语法格式如下。intreadfile(string$filename[,bool$use_include_path[,resource$context]])具体参数说明如下。$filename:表示读取文件的路径。$use_include_path:可选参数。$context:用于资源流上下文操作。intreadfile(string$filename[,bool$use_include_path[,resource$context]])7.2.2文件读写操作4.写入文件在写入文件前需要打开文件,如果文件不存在,则先要创建。在PHP中没有专门用于创建文件的函数,一般可以使用fopen()函数来创建,文件的打开模式可以是w、w+、a或a+等。(1)追加写入或者覆盖写入打开文件后,使用fwrite()函数为文件写入内容,如果是w、w+模式打开,那么从文件开头写入,即覆盖写入,如果是a\a+模式打开,那么就是从文件末尾写入,即追加写入,fwrite()函数的基本语法格式如下。int|booleanfwrite(resource$handle,string$string[,int$length])该函数的返回值是写入的长度。int|booleanfwrite(resource$handle,string$string[,int$length])7.2.2文件读写操作(2)覆盖写入file_put_contents()函数可以将一个字符串写入文件,函数执行成功则返回写入文件中数据的长度,失败则返回false。int|booleanfile_put_contents(string$filename,mixed$data[,int$flags=0具体参数说明如下。$filename:表示要写入的文件路径(包含文件名称)。$data:表示要写入的内容。$flags:规定写入选项,可以指定的常量如下。FILE_USE_INCLUDE_PATH:在include_path中查找$filename。FILE_APPEND:表示追加写入。int|booleanfile_put_contents(string$filename,mixed$data[,int$flags=0[,resource$context]])7.2.3文件的上传在动态网站的应用中,文件上传是常用的功能,也就是将文件从客户端上传至服务器的指定目录,具体步骤如下。增加文件上传的表单;客户端上传文件至服务器;服务器操作系统将文件保存在临时目录;服务器脚本判断文件的有效性,将有效文件从临时目录移动到指定目录。7.2.3文件的上传1.客户端增加文件上传表单使用表单可以进行文件上传,使用文件上传域<inputtype="file"name="…">,让用户可以选择需要上传的文件。(1)设置表单发送数据的方式提交表单后,表单值也就是上传的文件不能在浏览器的地址栏中显示,将表单标签的method属性设置为post,示例代码如下。<formmethod="post"……><formmethod="post"……>7.2.3文件的上传(2)设置表单字符编码方式在客户端文件上传表单中,必须将表单的字符编码方式设为multipart/form-data。<formmethod="post"enctype="multipart/form-data"><inputtype="file"name="upload"><inputtype="submit"value="上传文件"></form>(3)设置表单处理程序在客户端基本配置完成后,文件将被上传至服务器,通常通过配置表单的action属性来实现。<formmethod="post"enctype="multipart/form-data"action="upload.php">这里upload.php文件是专门用于处理文件上传的PHP脚本。具体的脚本逻辑将根据实际需求进行编写和配置。<formmethod="post"enctype="multipart/form-data"><inputtype="file"name="upload"><inputtype="submit"value="上传文件"></form><formmethod="post"enctype="multipart/form-data"action="upload.php">7.2.3文件的上传2.服务器端获取文件信息PHP会将用户提交的上传文件信息保存到超全局数组$_FILES中。相关信息表所示。7.2.3文件的上传关于上传文件的MIME类型,这一信息是由浏览器在上传过程中提供的,常见的MIME类型及其说明如表所示。7.2.3文件的上传当上传文件出现错误时,$_FILES['upload']['error']中会保存不同的错误代码,具体如表所示。7.2.3文件的上传下面的代码实现了获取文件的基本信息。<?php$name=$_FILES['file1']['name'];$type=$_FILES['file1']['type'];$size=round($_FILES['file1']['size']/1024,2);echo"上传文件的名称是:$name<br>";echo"上传文件的MIME类型是:$type<br>";echo"上传文件的大小是:$sizeKB<br>";?><?php$name=$_FILES['file1']['name'];$type=$_FILES['file1']['type'];$size=round($_FILES['file1']['size']/1024,2);echo"上传文件的名称是:$name<br>";echo"上传文件的MIME类型是:$type<br>";echo"上传文件的大小是:$sizeKB<br>";?>7.2.3文件的上传3.保存上传文件通过客户端上传后的文件保存在PHP临时目录的临时文件中,临时文件扩展名为.tmp,这个临时文件在表单处理脚本(在action属性中指定)执行期间存在,表单处理结束,该文件自动删除。使用move_uploaded_file()函数将它移动到其他位置,此时才完成上传文件的过程。move_uploaded_file()函数的语法格式如下。boolmove_uploaded_file(string$from,string$to)$from表示上传的文件的名称$to表示移动文件到这个位置该函数在执行时会先判断指定文件是否是通过POST方式上传的合法文件。boolmove_uploaded_file(string$from,string$to)【案例实践7-4】实现单个文件上传实现单个文件上传,编写html文件为文件上传表单,代码如下。首先,创建一个HTML表单,用于用户上传个人简历。<body>
<formmethod="post"enctype="multipart/form-data"action="7-4upload.php">
简历:
<inputtype="file"name="resume"id="">
<br>
<inputtype="submit"value="上传文件">
</form></body>【案例实践7-4】实现单个文件上传单击页面中的“选择文件”按钮可打开对话框选择上传的文件,然后单击“上传文件”按钮,调用php文件处理上传文件,结果如图所示。多文件上传,顾名思义,即允许用户一次性上传多个文件,而非逐个进行。这种功能在网页应用中极为常见,能有效提升用户上传文件的效率。实现多文件上传主要有以上两种方式。1.分散式上传在页面中设置多个文件选择控件,每个控件负责一个文件的上传。这种方式适用于需要用户在不同位置分别上传文件的场景。<!--分散式上传示例--><inputtype="file"name="upload1"><inputtype="file"name="upload2">对于这种方式,每个文件选择控件的name属性是唯一的,因此可以按照处理单个文件上传的方式来读取和处理每个文件的信息。多文件上传技巧<!--分散式上传示例--><inputtype="file"name="upload1"><inputtype="file"name="upload2">2.集中式上传通过一个文件选择控件,允许用户一次性选择并上传多个文件。这种方式更为简洁,适用于用户需要批量上传文件的场景。<!--集中式上传示例--><inputtype="file"name="upload[]"multiple>当使用集中式上传时,可以通过以下PHP代码来读取和处理上传的多个文件。多文件上传技巧<!--集中式上传示例--><inputtype="file"name="upload[]"multiple>$len=count($_FILES['upload']['name']);for($i=0;$i<$len;$i++){$file=['name'=>$_FILES['upload']['name'][$i],'type'=>$_FILES['upload']['type'][$i],'tmp_name'=>$_FILES['upload']['tmp_name'][$i],'error'=>$_FILES['upload']['error'][$i],'size'=>$_FILES['upload']['size'][$i]];}在处理文件和目录时,精确性至关重要。一个小小的操作失误可能导致数据丢失或损坏,甚至可能影响到整个系统的稳定性和安全性。因此,我们需要培养良好的文件和目录管理习惯,确保每一次操作都是精确无误的。为了提高操作的精确性,我们可以采取以下措施。(1)仔细核对文件路径和名称。(2)备份重要数据。(3)使用版本控制。精确操作是每一位程序员和系统管理员的必备素养。通过不断提高自己的操作精确性,我们不仅能够确保数据的安全性和完整性,还能在软件开发和系统管理中贡献更多的力量。精确操作文件和目录【案例实践7-4】实现单个文件上传编写php文件为上传文件处理脚本。<?php$name=$_FILES['resume']['name'];//获取文件名$tmp=$_FILES['resume']['tmp_name'];//获取临时文件名$uploaddir="upload/";//设置上传目录$uploadfile=$uploaddir.basename($name);//设置上传后的文件名if(array_key_exists('resume',$_FILES)){//参数名称与表单中一致
if($_FILES['resume']['error']==0){//说明上传完成
if(move_uploaded_file($tmp,$uploadfile))//移动上传的文件
echo"临时文件更名成功!<br>";
else
echo"临时文件无法更名!";
}else
echo"上传文件出错,错误代码:".$_FILES['resume']['error'];
echo"简历信息:";
echo"<pre>";
print_r($_FILES);
echo"</pre>";}else
echo"出错,未完成文件上传";为构建完善的问卷统计工具,我们需要通过编程完成以下核心功能:首先,确保用户在提交投票后,投票数据能够被即时统计并实时更新在界面上,为用户提供直观的反馈;其次,所有投票结果必须能够安全地保存至一个指定的文件中,以便我们后续进行详细的查看与分析;此外,系统还需具备识别并处理无效投票选项的能力,同时向用户显示友好的提示信息;最后,整个系统应能顺畅地处理投票数据的读取与写入操作,确保数据的完整性与准确性。任务7-1实现问卷统计工具界面设计并构建一个用户友好的投票界面,确保用户可以清晰地看到各个投票选项。<body>
<h1>阅读习惯和偏好调查</h1>
<div>
<p>亲爱的同学们:</p>
<pclass="text">您好!为了更好地策划我系的全系读书活动,我们正在进行一项关于同学们阅读习惯和偏好的调查。请您花费几分钟时间,完成以下问卷。您的意见对我们非常重要,我们将根据您的反馈来改进我们的活动策划。
</p>
<formaction="pro07.php"method="post">
<h3>基本信息:</h3>
<p>1.性别:</p>
<pclass="text"><inputtype="radio"name="gender"value="男">男</p>
<pclass="text"><inputtype="radio"name="gender"value="女">女</p>
<pclass="text"><inputtype="radio"name="gender"value="不愿透露">不愿透露</p>
<h3>阅读习惯:</h3>
<p>2.您平均每周阅读多长时间?</p>
<pclass="text"><inputtype="radio"name="duration"value="少于5h">少于5h</p>
<pclass="text"><inputtype="radio"name="duration"value="5~10h">5~10h</p>
<pclass="text"><inputtype="radio"name="duration"value="11~20h">11~20h</p>
<pclass="text"><inputtype="radio"name="duration"value="20h以上">20h以上</p>
<p>3.您阅读的主要类型是?</p>
<pclass="text"><inputtype="radio"name="type"value="文学">文学</p>
<pclass="text"><inputtype="radio"name="type"value="科技或专业书籍">科技或专业书籍</p>
<pclass="text"><inputtype="radio"name="type"value="历史或哲学">历史或哲学</p>
<pclass="text"><inputtype="radio"name="type"value="小说或故事书">小说或故事书</p>
<pclass="text"><inputtype="radio"name="type"value="自我提升">自我提升</p>
<pclass="text"><inputtype="radio"name="type"value="其他">其他</p>
<pclass="text">感谢您的参与和宝贵意见!我们将综合分析这些数据,努力为大家提供更好的读书体验。</p>
<inputtype="submit"value="提交问卷">
</form>
</div></body>任务7-2设计统计问卷选项首先,利用file_exists()函数检查用于保存投票数据的文件是否存在,若不存在,则创建新文件;其次,使用fopen()函数以适当的模式打开文件,准备进行数据的读写操作,当接收到用户投票数据后,通过逻辑判断识别无效投票,并给出提示;最后,对有效投票使用fwrite()函数将其写入文件,每次写入数据后,使用fclose()函数关闭文件,确保数据的安全性与一致性。任务7-2设计统计问卷选项<?php
//定义投票文件名
$vote_file="votes.txt";
//初始化投票数组
$genders=array();
$durations=array();
$types=array();
$effects=array();
//添加选项到投票数组
$genders['男']=0;
$genders['女']=0;
$genders['不愿透露']=0;
$durations['少于5h']=0;
$durations['5~10h']=0;
$durations['11~20h']=0;
$durations['20h以上']=0;
$types['文学']=0;
$types['科技或专业书籍']=0;
$types['历史或哲学']=0;
$types['小说或故事书']=0;
$types['自我提升']=0;
$types['其他']=0;任务7-2设计统计问卷选项
//读取现有投票结果
//打开文件
if(file_exists($vote_file)){
if($handle=fopen($vote_file,'r')){
//逐行读取
while(($line=fgets($handle))!==false){
//尝试将每行转换为数组
$arrayLine=json_decode($line,true);
//分别保存到不同的数组
if(isset($arrayLine['男'])){
$genders=$arrayLine;
}elseif(isset($arrayLine['少于5小时'])){
$durations=$arrayLine;
}elseif(isset($arrayLine['文学'])){
$types=$arrayLine;
}
}
//关闭文件
fclose($handle);
}
}
//用户选择投票选项
$gender=isset($_POST['gender'
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年航空供应链销售合作框架合同样本
- 2025年度装配式建筑构件生产与安装服务框架协议范本
- 2025版劳务公司劳务输出合同范本
- 2025年郑州市事业单位教师招聘生物学科专业知识试题汇编
- 二零二五年度绿色建筑工地施工环境保护责任合同
- 2025年高压电工证考试:高压操作安全规范与高压绝缘子泄漏电流控制方法试题
- 2025年装饰装修工(高级)考试试卷备考攻略与模拟试题
- 2025版旅游集团母子公司间旅游借款合同范本
- 2025年黑龙江省事业单位招聘考试教师招聘考试学科专业知识试题库(政治)
- 2025年重庆市化工类事业单位招聘考试综合类专业能力测试试卷
- 市政道路、桥梁、排水工程监理实施细则(下册)
- 许昌市政协委员管理办法
- 社区居委会安全生产管理制度
- 连申线兴东线至海安界段航道整治工程环评资料环境影响
- 客户信息传递管理办法
- 2025至2030中国热成型钢(PHS)市场销售模式及未来投资风险评估报告
- GB/T 30099-2025实验室离心机
- 实验室留样管理制度
- 2025-2030中国阻焊油墨行业运行现状与场竞争格局分析报告
- 建筑桩基技术规范 JGJ 94-2008知识培训
- 公司电商财务管理制度
评论
0/150
提交评论