您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > PHP教程-文件上传二
PHP文件上传网址:电话:4007001307文件上传•在B/S程序中文件上传已经成为一个常用功能。其目的是客户可以通过浏览器(Browser)将文件上传到服务器(Server)上的指定目录。•PHP中文件上传的基础知识–表单–对上传文件的操作•HTML规范规定上传文件时表单头必须使用htmlheadtitle文件上传/title/headbodyformaction=todo.phpmethod=postenctype=multipart/form-datainputtype=hiddenname=MAX_FILE_SIZEvalue=100000上传文件:inputtype=filename=userfile提交:inputtype=submitvalue=提交查询/form/body/html•注意几个特征属性:•POST方法:•表单最常用的功能,向目标页面传递变量,我们在上传文件的时候,会在表单中设置相应的属性,来完成文件的传递•enctype=multipart/form-data–这样服务器就会知道,我们要传递一个文件,这样服务器可以知道上载的文件带有常规的表单信息。•MAX_FILE_SIZE–此字段必须在文件输入字段之前,控制最大的传递文件的大小(字节)——真的可以控制吗?•inputtype=filename=userfile–设置浏览器文件输入浏览按钮•php.ini文件上传参数设置•我们在服务器端的php.ini中设置对表单传递的数据进一步判断–file_uploads=On/Off是否允许文件上传–upload_max_filesize=2M上传的文件的最大大小–post_max_size=8MPOST数据所允许的最大大小–upload_tmp_dir上传文件放置的临时目录•表单传递的数据,文件只是其中的一部分,所以设置时,upload_max_filesize应该小于post_max_size•超级全局数组$_FILES•PHP程序中,需要处理的上传数据保存在全局数组中$_FILES(超级全局数组)•保存$_FILES数组中的元素,将HTML表单的type=file标记的名称name=userfile存放在数组中。•1:存储在$_FILES['userfile']['name']中的值是:–客户端文件系统的文件的名称•2:存储在$_FILES['userfile']['type']中的值是:–客户端传递的文件的类型•超级全局数组$_FILES•3:存储在$_FILES['userfile']['size']中的值是:–文件的字节的大小•4:存储在$_FILES['userfile']['tmp_name']中的值–文件被上传后在服务器存储的临时全路径•5:存储在$_FILES['userfile']['error']中的值是:–文件上传的错误代码-php4.2以后增加的功能存储在$_FILES['userfile']['error']中的值•在$_FILES['userfile']['error']中返回的错误代码是在PHP4.2.0版本中引入的。具体如下:•值为0:表示没有发生任何错误。•值为1:表示上传文件的大小超出了约定值。文件大小的最大值是在PHP配置文件中指定的,该指令是:upload_max_filesize。•值为2:表示上传文件大小超出了HTML表单隐藏域属性的MAX_FILE_SIZE元素所指定的最大值。•值为3:表示文件只被部分上传。•值为4:表示没有上传任何文件。错误值对应的常量•UPLOAD_ERR_OK:对应值0•UPLOAD_ERR_INI_SIZE:对应值1•UPLOAD_ERR_FORM_SIZE:对应值2•UPLOAD_ERR_PARTIAL:对应值3•UPLOAD_ERR_NO_FILE:对应值4数据格式(MIME)文件类型MIME类型图片文件image/gif,image/jpg,image/jpeg,image/png,image/x-png纯文本和HTMLtext/txt,text/plain,text/html二进制文件application/octet-stream音频格式audio/basic视频格式video/mpeg•文件上传后的临时存放目录•上传的文件被放置到服务器端临时目录:/tmp目录里面命名为一个唯一的,随机生成的临时文件名。注:该文件在程序执行完后将自动被删除掉。在删除前可以像本地文件一样操作。•/tmp目录是默认的上传临时文件存放地点,如果需要更改这个目录:可以编辑/etc/php.ini文件FileUploads段的upload_tmp_dir属性值。•上传后的文件处理•使用is_uploaded_file()函数来检查此文件是否是上传文件。•应该使用move_uploaded_file(临时路径/临时文件名,目的路径/目的文件名)函数将存放在临时目录下的上传文件拷贝出来,存放到指定目录的指定文件名,如果目标存在将会被覆盖。•当配置文件php.ini的register_globals属性被设置成on的情况–inputtype=filename=myfilename–将生成全局变量:$myfilename等文件上传后的处理页面htmlheadtitle上传文件.../title/headbodyh1上传文件.../h1?phpif($_FILES['userfile']['error']0){echo'上传错误:';switch($_FILES['userfile']['error']){case1:echo‘上传文件大小超出了PHP配置文件中的约定值:upload_max_filesize';break;case2:echo'上传文件大小超出了表单中的约定值:max_file_size';break;case3:echo'文件只被部分上载';break;case4:echo'没有上传任何文件';break;}exit;}if($_FILES['userfile']['type']!='text/plain'){echo'问题:文件不是一个文本文件。';exit;}$upfile='./uploads/'.$_FILES['userfile']['name'];if(is_uploaded_file($_FILES['userfile']['tmp_name'])){//判断是否为上传文件if(!move_uploaded_file($_FILES['userfile']['tmp_name'],$upfile)){//移动文件echo'问题:不能将文件移动到指定目录。';exit;}}else{echo'问题:上传文件不是一个合法文件:';echo$_FILES['userfile']['name'];exit;}echo'文件上传成功!brbr';?当需要上传多个文件的情况,有两种实现的解决方法:使用不同的表单元素inputtype=filename=file_ainputtype=filename=file_b使用数组格式的表单元素inputtype=filename=file[1]inputtype=filename=file[2]与文件系统的交互•除了能够查看并获得与目录有关的信息,我们还可以获得Web服务器上文件的信息,并且与这些文件进行交互。前面我们已经了解了如何读文件和写文件。我们还可以使用许多其他的文件函数。•获取文件信息:如下页实例:文件状态函数和他们的运行结果htmlheadtitle显示上传目录下文件的相关属性信息/title/headbody?php$current_dir='./uploads/';$file=“hello.txt”;$file=basename($file);echo'h1Detailsoffile:'.$file.'/h1';$file=$current_dir.$file;echo'h2Filedata/h2';echo'Filelastaccessed:'.date('jFYH:i',fileatime($file)).'br';echo'Filelastmodified:'.date('jFYH:i',filemtime($file)).'br';echo'Filepermissions:'.decoct(fileperms($file)).'br';echo'Filetype:'.filetype($file).'br';echo'Filesize:'.filesize($file).'bytesbr';echo'h2Filetests/h2';echo'is_dir:'.(is_dir($file)?'true':'false').'br';echo'is_executable:'.(is_executable($file)?'true':'false').'br';echo'is_file:'.(is_file($file)?'true':'false').'br';echo'is_link:'.(is_link($file)?'true':'false').'br';echo'is_readable:'.(is_readable($file)?'true':'false').'br';echo'is_writable:'.(is_writable($file)?'true':'false').'br';?/body/html使用程序执行函数•现在,我们要将视线从文件系统函数转移到能够运行服务器命令的函数。有4种主要的技术在Web服务器上执行命令。这些技术都非常相似,但有微小区别。–exec()函数可以将要执行的命令作为参数。–passthru()结果直接输出显示到浏览器。–system()也是直接输出显示到浏览器,但有返回值–可执行的操作符``,执行命令,返回结果。?phpchdir('./');//chdir('/uploads/');/////execversionecho'pre';exec('ls-la',$result);foreach($resultas$line){echo$line\n;}echo'/pre';echo'brhrbr';/////passthruversionecho'pre';passthru('ls-la');echo'/pre';echo'brhrbr';/////systemversionecho'pre';$result=system('ls-la');echo'/pre';echo'brhrbr';/////backticksversionecho'pre';$result=`ls-al`;echo$result;echo'/pre';?文件上传完毕
本文标题:PHP教程-文件上传二
链接地址:https://www.777doc.com/doc-3401483 .html