1.php的4个能控制PHP如何处理文件上传的指令
指令 | 描述 | 默认值 |
file_uploads | 控制是否允许HTTP方式的文件上传。允许值为ON或OFF | ON |
upload_tmp_dir | 指定上传的文件在被处理之前的临时保存目录。如果没有设置,将使用系统的默认值。如果在处理脚本执行完成之前不移动、复制或更改文件名称,该文件将被删除 | NULL |
upload_max_filesize | 控制允许上传的文件的最大值,如果文件大小大于该值,PHP将创建一个文件大小为0的占位符文件 | 2M |
post_max_size | 控制PHP可以接受的通过POST上传数据的最大值,该值必须大于upload_max_filesize设置的值,因为它是所有POST数据的大小,包括了任何上传的文件 | 8M |
2.在上传文件的<form>中,必须添加enctype="multipart/form-data",这样服务器就知道上传的文件带有常规的表单信息
3.在表单中还必须有一个可以设置上传文件最大长度的表单域,这是一个隐藏的域,如<input type="hidden" name="MAX_FILE_SIZE" value="10000" />.该表单域是可选的,该值也可以在服务器端设置,但是如果在这个表单域中使用,表单域的名称必须是MAX_FILE_SIZE,,其值是允许上传的最大值(按字节B计算)
4.在用PHP实现文件上传时,必须注意有些PHP低版本的代码中存在安全漏洞,所以尽量使用最新版本的PHP
5.以下代码是一个小测试
1 /*以下是文件上传的HTML代码*/ 2 <form method="post" action="upload.php" 3 enctype="multipart/form-data"> 4 <input type="file" name="uploadfile" /> 5 <input type="submit" value="上传" /> 6 </form> 7 8 /*以下是处理上传文件的PHP代码*/ 9 10 <?php 11 echo "<pre>"; 12 print_r($_FILES['uploadfile']); 13 echo "</pre>"; 14 以上代码在本屌的电脑上将返回 15 Array 16 ( 17 [name] => 新建文件夹.7z 18 [type] => application/octet-stream 19 [tmp_name] => C:\Windows\Temp\php22A4.tmp 20 [error] => 0 21 [size] => 5884568 22 )
其中name表示上传文件的文件名;type表示文件的MIME类型,例如text/plain,image/gif等;tmp_name表示上传文件在web服务器中的临时存储位置(绝对路径);error表示在文件上传过程中会出现的各种错误
6.跟上传文件有关的两个函数is_uploaded_file()和move_uploaded_file(),这两个文件可以在一定程度上确保所处理的文件已经被上传,而不是一个本地文件。
前者是检测传入的文件是否是上传上来的文件,后者可以移动文件
7.上传的文件应当保存在web根目录外面,且应该对上传上来的文件进行重命名
8.关于遍历目录下所有文件的3种写法,这3种写法都不尽相同
1 第一种(用opendir(),readdir(),closedir()3个函数,可以参考之前书中所写的操作文件的函数对比着来看) 2 $dirname="E:\AppServ\www\study\study"; 3 $handle=opendir($dirname); 4 while($file=readdir($handle)){ 5 if($file!="."&&$file!="..") 6 echo $file."<br>"; 7 } 8 closedir($handle); 9 10 第二种(使用面向对象方式遍历,用了PHP提供的dir类) 11 $dirname="E:\AppServ\www\study\study"; 12 $dir=dir($dirname); 13 echo $dir->handle.'<br>'; 14 echo $dir->path.'<br>'; 15 while($file=$dir->read()){ 16 if($file!="."&&$file!="..") 17 echo $file."<br>"; 18 } 19 $dir->close(); 20 21 第三种(使用scandir(),该函数可以将文件名称保存在一个数组中) 22 $dirname="E:\AppServ\www\study\study"; 23 $file=scandir($dirname,1); 24 foreach($file as $f){ 25 if($f!="."&&$f!="..") 26 echo $f."<br>"; 27 }
9.dirname()和basename()函数将分别返回路径的目录部分和路径的文件名称部分
10.跟文件处理有关的一些函数
函数名称 | 函数功能 |
fileatime() | 最近该文件被打开过的时间 |
filemtime() | 最近该文件被修改过的时间 |
fileowner()/filegroup() | 分别返回文件的用户标识(uid)和组标识(gid) |
posix_getpwuid(0/posix_getgrgid() | 这两个函数分别以uid和gid为参数,把他们转变为更容易理解的名字,并返回关于用户或者组的相关数组,包括该脚本用到的用户和组的名字 |
fileperms() | 返回文件的权限码 |
decoct() | 将前个函数返回的权限码重新格式化为八进制数 |
filetype()/filesize() | 返回文件的类型和大小 |
is_dir()/is_executable()/is_file()/is_link()/is_readable()/is_writable() | 每一个函数都将检测一个文件的指定属性并返回true或false |
stat()/lstat() | 获得一个文件的很多状态信息,以数组形式返回,后者仅用于符号链接 |
clearstatcache() | 上述两个函数执行起来很费时间,因此将会把结果缓存起来,该函数可以清除缓存 |
11.更改文件属性的3个函数:chgrp(),chmod(),chown(),非常类似于linux中的命令
12.创建、删除、移动、重命名文件的4个函数分别为touch(),unlink(),copy(),rename()
13.获取和设置环境变量的两个函数:getenv()和putenv()。可以用php.ini中的safe_mode_allowed_env_vars选项来进行设置。当PHP在安全模式下运行时,用户只能对具有该指令给出带有前缀的环境变量进行设置