美文网首页PHP经验分享
PHP文件系统函数-读取文件内容几种方式

PHP文件系统函数-读取文件内容几种方式

作者: PHP的艺术编程 | 来源:发表于2018-12-06 14:32 被阅读11次

    介绍几种php获取文件内容的方式

    介绍读取文件的方式之前,我们先看一下打开文件资源和关闭资源

    名字资源绑定到一个流 - fopen
    关闭一个已打开的文件指针 - fclose
    <?php
    $handle1 = fopen("/home/rasmus/file.txt", "r");
    fclose($hanle1);
    
    $handle2 = fopen("/home/rasmus/file.gif", "wb");
    fclose($handle2);
    
    $handle3 = fopen("http://www.example.com/", "r");
    fclose($handle3);
    
    $handle4 = fopen("ftp://user:password@example.com/somefile.txt", "w");
    fclose($handle4);
    ?>
    
    1. fread - 根据读取长度去获取文件的内容
    string fread ( resource $handle , int $length )
    

    fread() 从文件指针 handle 读取最多 length 个字节。 该函数在遇上以下几种情况时停止读取文件:

    • 读取了 length 个字节
    • 到达了文件末尾(EOF)
    • (对于网络流)一个包变为可用或者接口超时
    • 如果流被读缓冲并且它不表示普通文件,则最多读取一个等于块大小(通常为8192)的字节数; 取决于先前缓冲的数据,返回数据的大小可能大于块大小。

    先查看一下phpinfo.php文件的内容

    >  cat phpinfo.php 
    
    <?php
    echo phpinfo();
    
    获取方式一
    <?php
    
    $dir = dirname(__FILE__);
    $file = $dir . '/phpinfo.php';
    
    $handle = fopen($file, "r");
    
    //一次性输出文件的内容
    echo fread($handle, filesize($file)) . PHP_EOL;
    
    fclose($handle);
    
    
    获取方式二
    <?php
    
    $dir = dirname(__FILE__);
    $file = $dir . '/phpinfo.php';
    
    //按照一定的大小循环输出内容
    while (!feof($handle)) { //判断是否到文件结束
        echo fread($handle, 1024) .PHP_EOL; //每次输出1024字节
    }
    
    fclose($handle);
    

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

    输出结果都是:

    <?php
    echo phpinfo();
    
    

    文件内容:

    55,66
    77
    8899
    009
    88
    
    008
    
    
    

    2. file — 把整个文件读入一个数组中

    每行占用一个数组key

    <?php
    
    $dir = dirname(__FILE__);
    $file = $dir . '/phpinfo.php';
    
    //FILE_IGNORE_NEW_LINES 在数组每个元素的末尾不要添加换行符
    //FILE_SKIP_EMPTY_LINES 跳过空行
    $lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    
    print_r($lines);
    
    

    输出结果:

    //$lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    
    Array
    (
        [0] => 55,66
        [1] => 77
        [2] => 8899
        [3] => 009
        [4] => 88
        [5] => 008
    )
    
    
    //$lines = file($file);
    
    Array
    (
        [0] => 55,66
    
        [1] => 77
    
        [2] => 8899
    
        [3] => 009
    
        [4] => 88
    
        [5] => 
    
        [6] => 008
    
        [7] => 
    
    )
    
    

    3. file_get_contents — 将整个文件读入一个字符串

    <?php
    
    $dir = dirname(__FILE__);
    $file = $dir . '/phpinfo.php';
    
    $content1 = file_get_contents($file);
    var_dump($content1);
    
    
    $content = file_get_contents($file, null, null, 10, 20);
    var_dump($content);
    
    //输出结果$content1
    string(35) "55,66
    77
    8899
    009
    88
    
    008
    
    "
    
    //输出结果$content
    string(20) "
    8899
    009
    88
    
    00"
    
    

    文件内容:

    55,66
    77
    8899
    009
    88
    <html>22</html>
    <?php echo '1';?>
    008
    
    
    

    3. fgetc - 从文件指针中读取字符

    <?php
    
    $dir = dirname(__FILE__);
    $file = $dir . '/phpinfo.php';
    
    $handle = fopen($file, 'r');
    if (!$handle) {
        echo '文件指针必须是有效的';
    }
    
    while (false !== $char = fgetc($handle)) {
        echo $char;
    }
    
    //输出结果
    77
    8899
    009
    88
    <html>22</html>
    <?php echo '1';?>
    008
    
    
    

    给输出结果加上换行,更加清楚的显示:

    <?php
    
    $dir = dirname(__FILE__);
    $file = $dir . '/phpinfo.php';
    
    $handle = fopen($file, 'r');
    if (!$handle) {
        echo '文件指针必须是有效的';
    }
    
    while (false !== $char = fgetc($handle)) {
        echo $char . PHP_EOL;
    }
    
    
    
    //输出结果
    5
    5
    ,
    6
    6
    
    
    
    7
    7
    
    
    
    8
    8
    ……
    

    4. fgets — 从文件指针中读取一行

    5. fgetss — 从文件指针中读取一行并过滤掉 HTML 标记

    fgets是从文件指针中读取一行,fgetss 只多了一个去除php和html标记的

    <?php
    
    $dir = dirname(__FILE__);
    $file = $dir . '/phpinfo.php';
    
    $handle = fopen($file, 'r');
    if (!$handle) {
        echo '文件指针必须是有效的';
    }
    
    while (!feof($handle)) {
        echo fgetss($handle, 1024);
    }
    
    fclose($handle);
    
    
    //输出结果
    55,66
    77
    8899
    009
    88
    22
    
    008
    
    
    

    相关文章

      网友评论

        本文标题:PHP文件系统函数-读取文件内容几种方式

        本文链接:https://www.haomeiwen.com/subject/tckocqtx.html