PHP之文件编程

文件编程

定义:文件编程,是指通过PHP代码对广义文件(包括文件夹和文件)根据需求进行增删改查的操作。

文件编程分类: 编程分类:文件编程通常分为两类,目录操作文件操作

文件夹(目录)操作

1.新建文件夹操作: php中使用mkdir(文件夹名字[,模式]) -> 其中文件夹名字可以是绝对路径也可以是相对路径,而模式是Linux下的权限,在Windows下没有意义

<?php
mkdir('demo'); // 在当前目录创建一个名为 demo 的文件夹

mkdir('/var/www/html/test'); // 在 /var/www/html 目录下创建名为 test 的文件夹
?>

2.文件夹的新增如果碰到文件夹已经存在,那么系统就会提示错误。创建文件夹的目的是为了让对应的文件夹存在,所以如果已经存在也无所谓,要做的事情,就是抑制mkdir可能出现的错误即可

<?php
@mkdir('demo'); // 如果存在此文件夹,屏蔽报错
?>

3.删除文件夹:与新建文件夹一样,使用系统自带函数rmdir(路径名字),同样的在使用rmdir的时候会碰到文件夹不存在的时候,使用错误抑制符即可

<?php
// 删除文件夹:可以使用相对路径和绝对路径
@rmdir('demo'); // 目录必须为空

@rmdir('/var/www/html/test');
?>

rmdir() 删除目录有要求:目录必须为空,所谓为空是指文件夹里除了默认的.和..两个隐藏文件夹,没有其他任何文件或者目录,否则会删除失败返回FALSE

4.修改文件名, rename(旧名字,新名字),另外值得一说的是rename是针对所有文件(包括文件夹和文件本身),rename也有可能不存在目标文件,所以使用错误抑制符

<?php
rename('demo', 'Demo');
?>

5.读取文件夹 -> 读取文件夹中所有文件名字,有两种方式:

  • scandir 自动获取所有文件名字数组
<?php
$dir_info = scandir("D:\phpStudy\PHPTutorial\WWW\phpreview\demo");

foreach ($dir_info as $file) {
    echo $file.'<br />';
}

?>

以上代码输出:

.
..
Taoy.txt
test1.txt
test2.php
  • opendir 得到文件夹资源 -> 使用readir读取资源(指针操作:访问一个移动下一个) -> closedir关闭资源
<?php
$dir = opendir('D:\phpStudy\PHPTutorial\WWW\phpreview\demo');

if($dir){             // 判断路劲是否打开, 打开成功返回True
    for ($i = 0; $i < 4; $i++){ // 设置读取文件数量, 这里只读四个文件的名字
        $file = readdir($dir);         // 从文件夹读取文件名称,失败返回false
        if ($file == FALSE){  // 如果没有 4 个文件,结束
            break;
        }
        echo $file.'<br />';         // 输出文件名
    }
    closedir($dir);  // 关闭资源
}

?>

上述程序输出:

.
..
Taoy.txt
test1.txt
  • is_dir(目录):判断是否是路径,不是路径返回false,是路径返回true
  • getcwd():获取当前工作路径
  • rewinddir(目录资源):将opendir打开的资源指针重新回到第一个
  • chdir(目录):修改当前的工作路径,即不用修改访问的文件的真实路径,让文件中可以得到新的工作路径(当前文件不会移动)
<?php
$dir = 'D:\phpStudy\PHPTutorial\WWW\phpreview\demo';

if (is_dir($dir)){
    echo getcwd().'<br />';

    chdir($dir);

    echo getcwd().'<br />';
}

?>

上述程序输出:

D:\phpStudy\PHPTutorial\WWW\phpreview
D:\phpStudy\PHPTutorial\WWW\phpreview\demo

文件操作

定义:文件操作相对来说比较多,不仅仅是要对文件进行增删改查,还要对文件的内容能够进行增删改查

1.系统函数fopen(文件名,操作模式)打开文件,并且得到文件的资源(用完要关闭资源)。其中如果被打开文件不存在,则创建文件;操作模式必须选定。操作模式如下:

mode说明
'r'只读方式打开,将文件指针指向文件头。
'r+'读写方式打开,将文件指针指向文件头。
'w'写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+'读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a'写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+'读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x'创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 *O_EXCL\O_CREAT* 标记是等价的。
'x+'创建并以读写方式打开,其他的行为和 'x' 一样。
'c'Open the file for writing only. If the file does not exist, it is created. If it exists, it is neither truncated (as opposed to 'w'), nor the call to this function fails (as is the case with 'x'). The file pointer is positioned on the beginning of the file. This may be useful if it's desired to get an advisory lock (see flock()) before attempting to modify the file, as using 'w' could truncate the file before the lock was obtained (if truncation is desired, ftruncate() can be used after the lock is requested).
'c+'Open the file for reading and writing; otherwise it has the same behavior as 'c'.

列表参考来源: https://www.php.net/manual/zh/function.fopen.php

2.删除文件: 操作系统删除文件不是立马将文件彻底从磁盘抹去,而是将文件名指向磁盘实际存储数据(磁道)的链接给断掉 , php中使用unlink(文件名),成功返回true,失败返回false

<?php
@unlink('hh.php');
?>

3.修改文件: fwrite(文件资源,字符串内容),所有的内容都会被当做字符串写入

<?php
$file = @fopen('tao.html', 'wb') or die('文件打开失败');

if ($file){
    fwrite($file, 'https://www.betao.cn');
    fclose($file);
}

?>

上面代码,会在本地生产一个tao.html文件,访问内容显示 https://www.betao.cn

4.读取文件: 读取文件就是通过已经打开的资源,从资源中取出根据文件指针取出对应的数据来。fread(文件资源,读取长度),是按照长度读取资源,且最多读取一行(看哪种情况先到);

<?php
$file = @fopen('tao.html', 'rb') or die('文件打开失败');

if ($file){
    echo fread($file, 100);
    fclose($file);
}

# 输出: https://www.betao.cn
?>

使用上面方式读取数据的话,有的时候需要读完,那么如何判断已经读完了呢?可以使用feof()函数判定资源

<?php
$file = @fopen('tao.html', 'rb') or die('文件打开失败');

if ($file){
    while(!feof($file)){
        echo fread($file, 2).'<br />';
    }
    fclose($file);
}

?>

上述代码输出:

ht
tp
s:
//
ww
w.
be
ta
o.
cn

6.有的时候读取或者写入数据需要明确就是全部操作或者一次性操作:

  • file_get_contents(文件路径)
  • file_put_contents(文件路径,内容字符串[,写入方式])
<?php
// 读取
$file = file_get_contents('tao.html');
// file_get_contents 也可以读取网络资源
$baidu = file_get_contents('http://www.baidu.com/index.php');

// 写入
file_put_contents('hh.txt', $file);

// 追加内容:使用第三个参数系统常量FILE_APPEND
file_put_contents('hh.txt', ' Taoy', FILE_APPEND);
?>

生成文件hh.txt,内容为:https://www.betao.cn Taoy

7.文件操作的相关常用函数

  • file(文件路径):将整个文件以行为单位读取,返回一个数组
  • fgetc(文件资源):一次读取一个字符
  • fgets(文件资源):一次读取一行
  • file_exists(文件路径):判定一个文件或者目录是否存在
  • fseek(文件资源,指针位置):谁定fopen打开的资源的指针位置
  • fileatime(文件路径):获取文件最后访问时间
  • filemtime(文件路径):获取文件最后修改时间
  • filesize(文件路径):获取文件大小

本文链接:

https://www.betao.cn/archives/phpreview04.html
1 + 5 =
快来做第一个评论的人吧~