PHP文件操作

<?php

header("Content-Type: text/html; charset=UTF-8");
$demo = new FileOprDemo();
$demo->file_stat($demo->file);
$demo->file_read($demo->file);
$demo->file_read2($demo->file);
$demo->file_read3($demo->file);
$demo->file_write("b.txt");
$demo->file_write2("b.txt");
$demo->file_copy("b.txt", "c.txt");
$demo->mk_dir("f:\\aaa\\bbb");
$demo->rm_dir("f:\\aaa\\bbb");
$demo->delete_file("f:\aaa\a.txt");

/**
 * PHP文件操作
 */
class FileOprDemo {

    public $file = "a.txt";

    /**
     * 查看文件信息
     * @param type $filename
     */
    function file_stat($filename) {
        echo "<p style=\"color:red;\">文件信息:</p>";
        if (file_exists($filename)) {
            if ($fp = fopen($filename, "r")) {
                $file_info = fstat($fp);
                echo "文件大小: " . $file_info["size"] . "<br/>";
                echo "文件上次访问时间: " . date("Y-m-d H:i:s", $file_info['mtime']);
                var_dump($file_info); //输出所有信息
            }
            fclose($fp);
        } else {
            echo $filename . "  不存在";
        }
        echo "<hr>";
    }

    /**
     * fread方式读取
     * @param type $filename
     */
    function file_read($filename) {
        echo "<p style=\"color:red;\">文件读取 fread:</p>";
        if ($fp = fopen($filename, "r")) {
            $fr = fread($fp, filesize($filename));
            $fr = str_replace("\n", "<br/>", $fr);
            echo $fr;
        }
        fclose($fp);
        echo "<hr>";
    }

    /**
     * file_get_contents方式读取
     * @param type $filename
     */
    function file_read2($filename) {
        echo "<p style=\"color:red;\">文件获取 file_get_contents:</p>";
        $fr = file_get_contents($filename);
        echo str_replace("\n", "<br/>", $fr);
        echo "<hr>";
    }

    /**
     * 分次读取
     * @param type $filename
     */
    function file_read3($filename) {
        echo "<p style=\"color:red;\">文件获取 fread(分次):</p>";
        $buffer = 5;
        $file_count = 0;
        $file_size = filesize($filename);
        if ($fp = fopen($filename, "r")) {
            while (!feof($fp) && $file_size > $file_count) {
                $data = fread($fp, $buffer);
                $file_count = $file_count + $buffer;
                echo str_replace("\n", "<br>", $data);
            }
        }
        echo "<hr>";
    }

    /**
     * 写入文件
     * @param type $filename
     */
    function file_write($filename) {
        echo "<p style=\"color:red;\">文件写入 fwrite:</p>";
        if ($fp = fopen($filename, "a+")) {
            $data = "新数据 " . date("Y-m-d H:i:s") . "\n";
            if (fwrite($fp, $data)) {
                echo "写入成功";
            }
        }
        fclose($fp);
        echo "<hr>";
    }

    /**
     * 文件写入  file_put_contents方式
     * @param type $filename
     */
    function file_write2($filename) {
        echo "<p style=\"color:red;\">文件写入 file_put_contents:</p>";
        $data = "新数据2 " . date("Y-m-d H:i:s") . "\n";
        file_put_contents($filename, $data, FILE_APPEND);
        echo "<hr>";
    }

    /**
     * 文件复制
     * @param type $filename
     * @param type $filenameD
     */
    function file_copy($filename, $filenameD) {
        echo "<p style=\"color:red;\">文件复制:</p>";
        if (copy($filename, $filenameD)) {
            echo "success";
        }
        echo "<hr>";
    }

    /**
     * 创建文件夹
     * @param type $path
     */
    function mk_dir($path) {
        echo "<p style=\"color:red;\">创建文件夹:</p>";
        if (!is_dir($path)) {
            if (mkdir($path, 0777, true)) {
                echo "创建文件夹成功";
            } else {
                echo "创建文件夹失败";
            }
        } else {
            echo "已存在";
        }
        echo "<hr>";
    }

    /**
     * 删除文件夹 rmdir只能删除空文件夹
     * @param type $path
     */
    function rm_dir($path) {
        echo "<p style=\"color:red;\">删除文件夹:</p>";
        if (is_dir($path)) {
            if (rmdir($path)) {
                echo "删除成功";
            } else {
                echo "删除失败";
            }
        }
        echo "<hr>";
    }

    /**
     * 删除文件
     * @param type $filename
     */
    function delete_file($filename) {
        echo "<p style=\"color:red;\">删除文件:</p>";
        if (is_file($filename)) {
            if (unlink($filename)) {
                echo "删除成功";
            } else {
                echo "删除失败";
            }
        } else {
            echo "文件不存在";
        }
        echo "<hr>";
    }

}

PHP fopen() 函数

定义和用法

fopen() 函数打开文件或者 URL。

如果打开失败,本函数返回 FALSE。

语法

fopen(filename,mode,include_path,context)
参数 描述
filename 必需。规定要打开的文件或 URL。
mode 必需。规定要求到该文件/流的访问类型。可能的值见下表。
include_path 可选。如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 可选。规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

mode 参数的可能的值

mode 说明
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x"

创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

"x+"

创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

说明

fopen() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。

如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。

如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。

对 context 的支持是 PHP 5.0.0 添加的。

提示和注释

注释:不同的操作系统家族具有不同的行结束习惯。当写入一个文本文件并想插入一个新行时,需要使用符合操作系统的行结束符号。基于 Unix 的系统使用 \n 作为行结束字符,基于 Windows 的系统使用 \r\n 作为行结束字符,基于 Macintosh 的系统使用 \r 作为行结束字符。 如果写入文件时使用了错误的行结束符号,则其它应用程序打开这些文件时可能会表现得很怪异。

Windows 下提供了一个文本转换标记("t")可以透明地将 \n 转换为 \r\n。与此对应还可以使用 "b" 来强制使用二进制模式,这样就不会转换数据。要使用这些标记,要么用 "b" 或者用 "t" 作为 mode 参数的最后一个字符。

默认的转换模式依赖于 SAPI 和所使用的 PHP 版本,因此为了便于移植鼓励总是指定恰当的标记。如果是操作纯文本文件并在脚本中使用了 \n 作为行结束符,但还要期望这些文件可以被其它应用程序例如 Notepad 读取,则在 mode 中使用 "t"。在所有其它情况下使用 "b"。

在操作二进制文件时如果没有指定 "b" 标记,可能会碰到一些奇怪的问题,包括坏掉的图片文件以及关于 \r\n 字符的奇怪问题。

注释:为移植性考虑,强烈建议在用 fopen() 打开文件时总是使用 "b" 标记。

注释:再一次,为移植性考虑,强烈建议你重写那些依赖于 "t" 模式的代码使其使用正确的行结束符并改成 "b" 模式。

例子

<?php
$file = fopen("test.txt","r");
$file = fopen("/home/test/test.txt","r");
$file = fopen("/home/test/test.gif","wb");
$file = fopen("http://www.example.com/","r");
$file = fopen("ftp://user:[email protected]/test.txt","w");
?>

PHP fread() 函数

定义和用法

fread() 函数读取文件(可安全用于二进制文件)。

语法

fread(file,length)
参数 描述
file 必需。规定要读取打开文件。
length 必需。规定要读取的最大字节数。

说明

fread() 从文件指针 file 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。

返回所读取的字符串,如果出错返回 false。

提示和注释

提示:如果只是想将一个文件的内容读入到一个字符串中,请使用 file_get_contents(),它的性能比 fread() 好得多。

例子

例子 1

从文件中读取 10 个字节:

<?php
$file = fopen("test.txt","r");
fread($file,"10");
fclose($file);
?>

例子 2

读取整个文件:

<?php
$file = fopen("test.txt","r");
fread($file,filesize("test.txt"));
fclose($file);
?>

   PHP file_put_contents()函数

 PHP5+ 提供了一种方法 file_put_contents(file,data,mode,context),它将一个字符串写入文件,返回写入到文件内数据的字节数。和依次调用fopen(),fwrite() 以及 fclose() 功能一样,方便了使用。

 

参数 描述
file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data 可选。规定要写入文件的数据。可以是字符串、数组或数据流。
mode

可选。规定如何打开/写入文件。可能的值:

  • FILE_USE_INCLUDE_PATH:使用包含目录定义
  • FILE_APPEND:追加,防止被改写原文件内容
  • LOCK_EX:独占锁定方式

如果参数省略则默认为改写文件方式

context

可选。规定文件句柄的环境。

context 是一套可以修改流的行为的选项。

 

  PHP 参考书中,指明了读文件方法 file_get_contents 的可用版本 (PHP 4 >= 4.3.0, PHP 5),PHP 5 进行了扩展, 5.0.0 添加了对 context 的支持。 5.1.0 添加了 offset 和 maxlen 参数。

  具体用法:file_get_contents ( file , flags , context , offset , maxlen)

参数 描述
file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
flags

可选。规定如何读取文件。可能的值:

  • FILE_USE_INCLUDE_PATH:使用包含目录定义
  • FILE_TEXT:文本格式内容。
  • FILE_BINARY:仅用于二进制格式。

如果参数省略则默认为FILE_BINARY

context

上下文

offset

可选。起始读位置,偏移。

maxlen

可选。读入长度。

PHP file_put_contents() 函数

定义和用法

file_put_contents() 函数把一个字符串写入文件中。

与依次调用 fopen(),fwrite() 以及 fclose() 功能一样。

语法

file_put_contents(file,data,mode,context)
参数 描述
file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data 可选。规定要写入文件的数据。可以是字符串、数组或数据流。
mode

可选。规定如何打开/写入文件。可能的值:

  • FILE_USE_INCLUDE_PATH
  • FILE_APPEND
  • LOCK_EX
context

可选。规定文件句柄的环境。

context 是一套可以修改流的行为的选项。若使用 null,则忽略。

说明

参数 data 可以是数组(但不能是多维数组)。

自 PHP 5.1.0 起,data 参数也可以被指定为 stream 资源,stream 中所保存的缓存数据将被写入到指定文件中,这种用法就相似于使用 stream_copy_to_stream() 函数。

对 context 参数的支持是 PHP 5.0.0 添加的。

返回值

该函数将返回写入到文件内数据的字节数。

提示和注释

提示:使用 FILE_APPEND 可避免删除文件中已有的内容。

注释:本函数可安全用于二进制对象。

例子

<?php
echo file_put_contents("test.txt","Hello World. Testing!");
?>

输出:

26

PHP mkdir() 函数

定义和用法

mkdir() 函数创建目录。

若成功,则返回 true,否则返回 false。

语法

mkdir(path,mode,recursive,context)
参数 描述
path 必需。规定要创建的目录的名称。
mode 必需。规定权限。默认是 0777。
recursive 必需。规定是否设置递归模式。
context 必需。规定文件句柄的环境。Context 是可修改流的行为的一套选项。

说明

mkdir() 尝试新建一个由 path 指定的目录。

默认的 mode 是 0777,意味着最大可能的访问权。

提示和注释

注释:mode 在 Windows 下被忽略。自 PHP 4.2.0 起成为可选项。

注释:对 context 的支持是 PHP 5.0.0 添加的。

注释:recursive 参数是 PHP 5.0.0 添加的。

例子

<?php
mkdir("testing");
?>

猜你喜欢

转载自768992698.iteye.com/blog/2332115