PHP与服务器文件系统如何进行交互
创始人
2024-12-09 16:07:00
0次

1、php.ini中关于文件上传的设置指令

PHP与服务器文件系统如何进行交互

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()函数;

Upload directory is $current_dir

";  echo "

Directory Listing:

    ";  while(($file = readdir($dir)) !== false){ //读取目录对象  if($file != "." && $file != ".."){ //过滤当前目录和上一级目录  echo "
  • $file
  • ";  echo "".$file."
    ";  }  }  echo "
";  closedir($dir); //关闭目录;  ?>

②使用php的dir类

Handle is $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()函数对文本名称进行字母表的排序方式

Upload directory is $current_dir

";  echo "

Directory Listing in alphabetical order,ascending:

    ";  foreach($files1 as $file1) {  if($file1 != "." && $file1 != "..")  echo "
  • $file1
  • ";  }  echo "
";  ?>

(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."
"; } Details of file";  echo "

File data

";  echo 'File last accessed: '.date('j F Y H:i',fileatime($file))."
"; //返回最近访问的时间戳  echo 'File last modifixed: '.date('j F Y H:i',filemtime($file))."
"; //返回最近修改的时间戳  $user = posix_getpwuid(fileowner($file)); //返回用户标识uid  echo 'File owner: '.$user['name']."
";  $group = posix_getgrgid(filegroup($file)); //返回组织标识gid  echo 'File group: '.$group['name']."
";  echo 'File permissions: '.decoct(fileperms($file))."
"; //返回8位的权限码  echo 'File type'.filetype($file)."
"; //返回文件类型  echo 'File size'.filesize($file)."
"; //返回文件字节数  echo "

File Tests

";  echo 'is_dir?'.(is_dir($file) ? 'true':'false')."
";  echo 'is_executable?'.(is_executable($file) ? 'true':'false')."
"; //判断文件是否可执行;  echo 'is_file?'.(is_file($file) ? 'true':'false')."
";  echo 'is_link?'.(is_link($file) ? 'true':'false')."
";  echo 'is_readable?'.(is_readable($file) ? 'true':'false')."
";  echo 'is_writable?'.(is_writable($file) ? 'true':'false')."
";  ?>

(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");

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...