2、文件上传过程
(1)上传文件提交表单html代码:
adminstration - upoload new files upload new files upload a file
(2)php处理上传文件代码
①在php脚本中,需要处理的数据保存在超级变量数组$_files中,开启register_globals指令可以直接通过变量名访问这些信息;
②假如表单变量名为“username“则有:
$_files['userfile']['tmp_name']:储存文件在web服务器中的临时保存位置;
$_files['userfile']['name']:储存用户系统中文件的名称;
$_files['userfile']['size']:储存文件的大小;
$_files['userfile']['type']:储存文件的类型;
$_files['userfile']['error]:储存任何与文件上传相关的错误代码;
错误类型说明:
upload_err_ini_size:1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
upload_err_form_size:2,上传文件的大小超过了 html 表单中 max_file_size 选项指定的值。
upload_err_partial:3,文件只有部分被上传。
upload_err_no_file:4,没有文件被上传。
upload_err_no_tmp_dir:6,找不到临时文件夹。php 4.3.10 和 php 5.0.3 引进。
upload_err_cant_write:7,文件写入失败。php 5.1.0 引进。
③php代码
0){ echo 'problem'; switch($_files['userfile']['error']){ case 1: echo 'file exceeded upload_max_filesize';break; case 2: echo 'file exceeded max_file_size';break; case 3: echo 'file only partially upload';break; case 4: echo 'no file uploaded';break; case 6: echo 'cannot upload file: no temp directory specified';break; case 7: echo 'upload failed:cannot write to disk';break; } exit; } //检验传输的文件是否为文本文件 if($_files['userfile']['type'] != 'text/plain'){ echo 'problem: file is not plain text'; exit; } //将上传文件包含在服务器中/uploads/的目录下(该目录必须独立于web文档树) $upfile = '/uploads/'.$_files['userfile']['name']; //在指定目录下以传输文件的文件名创建一个新文件 if(is_uploaded_file($_files['userfile']['tmp_name'])){ if(! move_uploaded_file($_files['userfile']['tmp_name'],$upfile)){ //将传输文件的临时文件移动到创建的新文件 echo 'problem: could not move file to destination directory'; exit; } } else{ echo 'problem: possible file upload attack.filename:'; echo $_files['username']['name']; exit; } echo file uploaded seuucessfully
; //对传输文件清除html和php标记 $contents = file_get_contents($upfile); //将文件内容提取为一个字符串; $contents = strip_tags($contents); //对该字符串擦除html和tags标记; file_put_contents($_files['userfile']['name'],$contents); //将该字符串重新写入文件中; //在浏览器上显示传输的文本文件内容 echo preview of uploaded file contents:
>; echo nl2br($contents); echo ;
3、使用目录函数
(1)从目录中读取文件名
①使用opendir(),readdir(),closedir()函数;
②使用php的dir类
handle
; echo upload directory is $current_dir
; echo directory listing:
; while(($file = $dir->read()) !== false){ //通过dir对象读取目录下的文件名 if($file != . && $file != ..){ echo $file; } } echo ; $dir->close(); //关闭目录 ?>
(2)使用scandir()函数对文本名称进行字母表的排序方式
(3)获取当前目录的其他信息
dirname($path):返回路径的目录部分;
basename($path):返回路径的名称部分;
disk_free_space($path):返回路径所在磁盘可以保存上传文件的容量;
(4)创建和删除目录
①mkdir():创建目录;
代码:
$oldumask = umask(0); //重置当前权限码mkdir(/tmp/testing,0777); //创建目录umask($oldumask); //恢复当前权限码
②rmdir():删除目录;
代码:
rmdir(/temp/testing);或rmdir(c:\\tmp\\testing');
※要删除的目录必须是空目录;
4、与文件系统的交互
(1)获取文件信息:
while(($file = readdir($dir)) !== false){ echo .$file.
;}
(2)更改文件属性
chgrp(file,group):修改文件的分组;
chmod(file,permissions):修改文件的权限;
chown(file,user):修改文件的所有者;
(3)创建、删除和移动文件
bool touch($filename,[int time,[ int atime]]):创建一个文件(time指定创建时间戳,atime指定可选时间戳)
unlink($filename):删除一个文件
copy($source_path,$destination_path):复制一个文件
rename($oldfile,$newfile):重命名一个文件;
(4)使用程序执行函数
①string exec(string command[ ,array result [ ,int result_value]])
返回命名结果的最后一行,result变量可以返回字符组数,这些字符串代表输出的每一行,result_value获取返回代码;
②void passthru(string command[ ,int result_value])
结果直接输出到浏览器;
③string system(string command[ ,int return_value])
输出结果到浏览器,返回命令结果的最后一行或false;
※在用户提交的数据包括执行命令的一部分,应该进行以下包装:
system(escapeshellcmd($command));
5、与环境变量交互
phpinfo()函数:获取php的所有变量列表;
getenv($key_name):
setenv($key_name=$value);
以上所述是小编给大家介绍的php与服务器文件系统的简单交互,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
