7.php文件系统

文件处理

文件处理包含文件的打开/关闭文件、读取数据、和写入数据等

1. 打开/关闭文件

fopen() -- 打开文件
fclose() -- 关闭文件
举个栗子:

<?php
    //打开文件
   $file = fopen("test.txt", "r");
   //关闭文件 -- 关闭文件前需打开文件,并使用打开文件时定义的指针作为参数
   fclose($file);
?>

2.从文件中读取数据

(1)读取整个文件

readfile() -- 读入一个文件并将其写入输出到缓冲中
file() -- 读取整个文件内容,按行存放到数组中,包含换行符在内
file_get_contents() -- 将整个文件录入一个字符串,适用于二进制对象
举个栗子:

<?php
   readfile("test.txt");    //读入一个文件并将其写入输出到缓冲中
   $f = file("test.txt");   //读取整个文件内容,按行存放到数组中,包含换行符在内
   foreach($f as $count){
      echo $count;
   }
   $f = file_get_contents("test.txt");   //将整个文件录入一个字符串,适用于二进制对象
   echo $f;
?>

(2)读取部分数据

fgets() -- 一次读取一行数据
fgetc() -- 读取指定字符,单字节
fread() -- 读取任意长度的字符串
举个栗子:

<?php
   $f = fopen("test.txt", "rb");
   while(!feof($f)){
      echo fgets($f);  //一次读取一行数据
   }
 
    fgetc($f);  //读取一个字符,单字节

    echo fread($f,6);  //读取任意长度的字符串
?>

3.将数据写入文件 -- fwrite()/file_put_contents()

举个栗子:

<?php
   //将数据写入文件
   $f = fopen("test.txt", "wb");
   fwrite($f, "Hello world!");

   //将数据写入文件
   file_put_contents($f, "Hi world!");
   //读取文件检查是否写入成功
   readfile($f);
?>

目录处理

目录处理包括打开目录、浏览目录和关闭目录。
opendir() -- 打开目录
closedir() -- 关闭目录
举个栗子:

<?php
   //打开目录
   $path = "D:\\phpstudy_pro\\www";
   if(is_dir($path)){
      if($dir = opendir($path))
         echo $dir;
   }else{
      exit();  //退出
   }
   //关闭目录
   closedir($dir); 
?>

scandir() -- 浏览目录
举个栗子:

<?php
   //浏览目录
   $path = "D:\\phpstudy_pro\\www";
   if(is_dir($path)){
      $dir = scandir($path);
      foreach($dir as $value){
         echo $value."<br>";
      }
   }else{
      echo "目录路径错误";
   }
?>

文件上传

文件上传可以使用HTTP协议来实现,要使用文件上传功能,有四个步骤:

1.客户端的设置(表单的设置)

1)<input type='file' name='自定义'>
2)表单的提交方式必须为post
3)form表单上面加上 enctype="multipart/form-data"
举个栗子:

<html>
<body>

<form action="test.php" method="post"  enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" /> 
<input type="submit" name="submit" value="Submit" />
</form>

</body>
</html>
image.png

2.在php.ini配置文件中对上传功能做一些设置

1)file_uploads = On 是否允许上传

2)upload_max_filesize = 2M PHP允许的最大上传文件大小

3)post_max_size = 8M 限制通过post方法可以接收的数据的大小。
post_max_size一定要大于upload_max_filesize

4)upload_tmp_dir = "XXXX" 上传文件后的临时目录。

3、上传后的数据使用$_FILES来进行接收。

$_FILES中的每个元素的意思
name=>上传的文件名
type=>mime类型,用来设定某种扩展名的文件用一种应用程序来打开的方式,当扩展名称文件被访问时,浏览器会自动指定应用程序打开。
tmp_name=>上传时的临时文件名,文件上传结束后,生成的临时文件默认将存储在临时文件目录中。。
size=>文件的大小 以字节为大小单位。
error=>上传的错误号
如其值为 0,没有错误发生,文件上传成功
如其值为 7,文件写入失败
......

举个栗子:

<?php
if ($_FILES["file"]["error"] > 0) {
    echo "Error: " . $_FILES["file"]["error"] . "<br />";
  }else {
  echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  echo "Stored in: " . $_FILES["file"]["tmp_name"];
  }
?>

4.使用move_uploaded_file()函数实现上传功能

举个栗子:

<?php
if ($_FILES["file"]["error"] > 0){
      echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
   }else{
      echo "Upload: " . $_FILES["file"]["name"] . "<br />";
      echo "Type: " . $_FILES["file"]["type"] . "<br />";
      echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
      echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
      
      move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
   }
?>

文件下载

借助于http的下载:如果浏览器能够识别该文件,则直接进行解析,如果不能识别那么它将提供下载
直接告诉浏览器这是一个下载文件,不要进行解析
1、header('content-type:text/html;charset=utf-8');//设置字符集
2、header('content-disposition:attachment');//告诉它是一个下载文件(附件)
3、header('content-disposition:attachment;filename=xxxxx');//告诉它是一个附件并且给出文件名(是在第2点的基础上加上的)
4、将所有的文件内容读取出来,否则会没有内容
5、告诉浏览器这个文件有多大 header('content-length:文件的大小');
举个栗子:

<?php

$file = 'down.zip';

if (file_exists($file)) {
   $file1 = fopen ($file, "rb" );
    header('Content-Type: application/octet-stream');//告诉浏览器这是一个文件流格式的文件
    //用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
    header('Content-Disposition: attachment; filename="'.basename($file).'"');
    Header ( "Accept-Ranges: bytes" ); //请求范围的度量单位 
    header('Content-Length: ' . filesize($file));//Content-Length是指定包含于请求或响应中数据的字节长度 
    readfile($file1);
    exit;
}
?>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,295评论 6 512
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,928评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,682评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,209评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,237评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,965评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,586评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,487评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,016评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,136评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,271评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,948评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,619评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,139评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,252评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,598评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,267评论 2 358