自学php--php学习笔记 文件系统简介

php php 1103      收藏
熟悉文件、目录的基本概念 熟悉文件的操作 熟悉目录的操作 项目:文件管理系统

PHP使用Unix的文件系统为模型的,在Unix(Linux)中,我们可以获得完整的七种类型。

在Windows系统中只能获取到“file”、“dir”和“unknown”三种基本文件类型

自学php博客

我们对一个文件的基本操作就是读和写 

读取(写入)一个文件,流程如下: 

打开文件->读(写)内容->关闭文件 

打开文件:fopen() 

读取内容:fread(),fgets(),fgetc() 

写入文件:fwrite() 

关闭文件:fclose() 

一、打开文件 

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

<?php 

$file = fopen("/home/test/test.txt","r"); //第一个"/"是文件的根目录

//fopen更像是一个标示符,告诉计算机,我具体要操作哪个文件;

fclose($file); 

?> 

 $filename 是一个文件的路径,而不只是一个文件名字。

w和a的模式都具有创建文件的功能。

mode

说明

'r'

只读方式打开,将文件指针指向文件头。

'r+'

读写方式打开,将文件指针指向文件头。实际上是把头部的第一个内容给替换掉,原的位置内容没有了没有了。写入多少就给覆盖掉多少。

'w'

写入方式打开,将文件指针指向文件头并将文件大小截为零(使用的话,会把文件里面内容全部清空掉)。如果文件不存在则尝试创建之。执行fopen的时候,就已经把内容清空了;

'w+'

读写方式打开,将文件指针指向文件头并将文件大小截为零(使用的话,会把文件里面内容全部清空掉)。如果文件不存在则尝试创建之。

'a'

写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。直接写在末尾,不会覆盖。

'a+'

读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。

二、读取文件 

  • string fread ( resource $handle , int $length ) 

    读取若干内容,$length表示要读取多少个字节,默认长度是1024kb

  • string fgets ( resource $handle [, int $length ] ) 

    若$length为空,则读取一行内容;否则读取$length-1个字节 ,写2个只会读取一个值,写一个不会读取出值。

    默认长度是1024kb

    两次连续读取的话,也是接着前一次的指针继续往下读,不会从头开始。

  • string fgetc ( resource $handle ) 

    读取一个字节 ,读取"\n"的时候,"\n"是占用两个字节的。

    ceil();向上取整(四舍五不入)

  • bool feof ( resource $handle ) 

    测试文件指针是否到了文件结束的位置 

fread案例:

test.txt

abcdefg

<?php 

$file = fopen("/home/test/test.txt","r"); 

$content = '';  

while (!feof($file )) {     

$content .= fread($file, 1).'<br />';

$content .= fread($file, 1).'<br />';

$content .= fread($file, 1).'<br />';       

}  

fclose($file); 

echo $concent;

?> 输出abc,而不是aaa。指针是继续向下读取,而不是从头开始。

fgetc案例:


test.txt

abcdefg

<?php 

$file = fopen("/home/test/test.txt","r"); 

$content = '';  

while (!feof($file )) {     

$content .= fgetc($file, 1).'<br />';

$content .= fgetc($file, 1).'<br />';

$content .= fgetc($file, 1).'<br />';       

}  

fclose($file); 

echo $concent;

?> 输出abc,而不是aaa。指针是继续向下读取,而不是从头开始。

读取文件操作案例:

<?php 

$file = fopen("/home/test/test.txt","r"); 

$num=10;

$count=ceil($size/$num); 

for($i=0;$i<$count;$i++){

$str.=fread($file,$num);

}

fclose($file); 

echo $str;

?> 

三、写入内容 

int fwrite ( resource $handle , string $string [, int $length ] ) 

返回写入的字符数,出现错误时则返回 FALSE 

如果指定了 $length,当写入了 $length 个字节或者写完了 string 以后,写入就会停止 

如果要执行写入操作,则不能以 ‘r’方式打开文件 

<?php 

$file = fopen("/home/test/test.txt","r"); 

$str='上海爱帮大厦';

fwrite($file,$str);

?>

四、关闭文件 

bool fclose ( resource $handle ) 

关闭一个已打开的文件指针 

一般加不加都行,脚本执行完,系统会把全部资源回收,脚本执行速度很快,不加也没影响。

<?php 

$file = fopen("/home/test/test.txt","r"); //1ms

$str='上海爱帮大厦';

//打开文件 1ms

//读取文件内容2ms

//处理数据20s

//这种情况是需要关闭文件的,如果处理数据是2ms则没必要关闭。

fwrite($file,$str);

?>


五、快速读取文件 

string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] ) (推荐使用的函数,快速读取文件里面的内容)

将整个文件读入一个字符串,通常只使用第一个参数 ,和前面三个函数一起使用的功能是一样的。

array file ( string $filename [, int $flags = 0 [, resource $context ]] ) 

把整个文件读入一个数组中,通常只使用第一个参数 

<?php 

$file = file_get_contents("/home/test/test.txt");

echo $file;

exit;

$arr=file("/home/test/test.txt");

?>返回的是一个数组,每一行放在一个数组元素里面,有多少行,数组就有多少个元素。

六、快速写入文

int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) 

将一个字符串写入文件 和依次调用 fopen(),fwrite() 以及 fclose() 功能一样。 

$flags取值如下: 

FILE_APPEND:如果文件 filename 已经存在,追加数据而不是覆盖、默认是w方式打开文件,这个参数相当于a方式打开文件)

LOCK_EX:在写入时获得一个独占锁。 


函数:

(1)、检查是定的文件名是否正常 

    bool is_file(string $filename);  

    如果文件存在且正常,返回true;

    否则返回false

    $filename='./test.txt';

    $filename1='./test';

    is_file($filename) 判断是不是一个文件,并且文件存在返回true

    is_file($filename1) false,文件夹不是文件

(2)、

    获得文件的路径信息 

    array pathinfo($file);

    $fielname='../../../index.php';

    $rs=pathinfo($filename)

    返回数组array(

参数

描述

path

必需。规定要检查的路径。

process_sections

可选。规定要返回的数组元素。默认是 all。

可能的值:

PATHINFO_DIRNAME - 只返回 dirname

PATHINFO_BASENAME - 只返回 basename

PATHINFO_EXTENSION - 只返回 extension

    )

(01)判断文件/目录是否存在 

    bool file_exists(string $filename)

    <?php  

    echo file_exists(“./test.txt");  

    ?>

(02)获取文件大小 

    int filesize(string $filename) 

    返回值为文件的大小,单位byte 因为 PHP 的整数类型是有符号整型而且很多平台使用 32 位整型,

    对 2GB 以上的文件,一些文件系统函数可能返回无法预期的结果 。

(3) 获得文件/目录的类型 

    string filetype($file);  如果失败返回false; 

    如果成功,返回下列值中的一种: 

    file    

    dir    

    unknown 

    fifo    

    char    

    block    

    link 

(4)修改文件权限 

    bool chmod($file, $mode) 

    $mode 表示文件的权限,由4个数字组成, 

    第一个数字固定为0 

    第二个数字规定所有者的权限 

    第三个数字规定所有者所属的用户组的权限 

    第四个数字规定其他所有人的权限

    <?php  

    chmod(“./test.txt",0600); 

    ?>

    读取权限:4 

    写入权限:2 

    执行权限:1 

    读、写权限:6(4+2) 

    读、写、执行权限:7(4+2+1) 

    依此类推。。。。。。

 

七、其他文件操作

移动和复制文件之后,要给定文件名

复制文件 (会覆盖重名的文件)

bool copy ( string $source , string $dest [, resource $context ] ) $source:源文件,$dest:目标文件 

只能作用文件,操作文件夹报错;如果是在复制文件的时候,目标和要复制的文件同名字的话,会把目标文件覆盖掉。

复制文件实例:

<?php

$rs=copy('./1.txt','../../../upload/a.txt');///不可以直接写路径,一定要加上赋值后叫什么名字a.txt'。

var_dump($rs);

?>

移动、重命名文件、目录 (目录和文件都可以操作)

bool rename ( string $oldname , string $newname [, resource $context ] ) 

<?php

$path='../../../upload/';

$rs=rename('./1.txt' , $path . '1.txt');///移动,不可以直接写路径,一定要加上赋值后叫什么名字a.txt'。

$rs=rename('./1.txt' ,'./A.txt');///重命名,不可以直接写路径,一定要加上赋值后叫什么名字a.txt'。

var_dump($rs);

?>


删除文件 (只能删除文件,不能删除目录)

bool unlink ( string $filename [, resource $context ] ) 

<?php

$path='../../../upload/';

$rs=unlink('./1.txt');

var_dump($rs);

?>