PHP和MySQL Web开发读书笔记---与文件系统和服务器的交互

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在安全模式下运行时,用户只能对具有该指令给出带有前缀的环境变量进行设置

posted @ 2013-05-04 09:15  山贼一名  阅读(342)  评论(0编辑  收藏  举报