fread()函数
    该函数读取打开的文件。
    函数会在到达指定长度或读到文件末尾时(以先到者为准),停止运行
    该函数返回读取的字符串,如果失败则返回 FALSE
    语法:**fread (resource $handle , int $length**)
    handle:文件系统指针,是典型地由 fopen() 创建的 resource(资源)
    length:必需。规定要读取的最大字节数

    1. <?php
    2. $filename = $_GET['filename'];
    3. if(file_exists($filename)){
    4. $fp = fopen($filename,"r");
    5. $str = fread($fp,filesize($filename)); //指定读取大小,这里把整个文件内容读取出来
    6. echo $str;
    7. fclose($fp);
    8. }
    9. ?>

    image.png

    fileget_contents()函数
    该函数是用于把文件的内容读入到一个字符串中
    语法:file_get
    **contents(path,include_path,context,start,max_length)
    path**必需。规定要读取的文件
    include_path:可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 ‘1’
    context:可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。若使用 NULL,则忽略
    start:可选。规定在文件中开始读取的位置。该参数是 PHP 5.1 中新增的
    max_length:**可选。规定读取的字节数。该参数是 PHP 5.1 中新增的

    <?php  
        $filename = $_GET['filename'];  
        if(file_exists($filename)){
            $str = file_get_contents($filename);        //将整个文件内容读入到一个字符串中
            echo $str;
    }
    ?>
    

    image.png


    feof()函数
    feof() 函数检查是否已到达文件末尾,如果出错或者文件指针到了文件末尾则返回TRUE,否则返回FALSE
    语法:feof(file)
    file:**必需。规定要检查的打开文件
    提示:feof()函数对遍历长度未知的数据很有用

    <?php  
        $filename = $_GET['filename'];  
        if(file_exists($filename)){
            $fp = fopen($filename,"r");
            $str = "";
            $buffer = 1024;                //每次读取 1024 字节
            while(!feof($fp)){        //循环读取,直至读取完整个文件
                $str .= fread($fp,$buffer);
            }
                echo $str;
        }
    ?>
    

    image.png


    highlight_file()函数
    该函数对文件进行语法高亮显示
    语法:
    highlight_file(filename,return)
    filename:必需。要进行高亮处理的 PHP 文件的路径
    return:**可选。如果设置 true,则本函数返回高亮处理的代码

    <?php
    $filename = $_GET['filename']; 
    highlight_file($filename,false);
    ?>
    

    image.png

    fgets()**函数
    该函数从打开的文件中返回一行,碰到换行符、读到文件末尾时,停止返回一个新行,如果失败该函数返回 FALSE
    语法:fgets(file,length)
    file:必需。规定要读取的文件
    length:可选。规定要读取的字节数。默认是 1024 字节

    <?php  
        $filename = $_GET['filename'];  
        if(file_exists($filename)){
        $fp = fopen($filename,"r");
        while(!feof($fp)){
            echo fgets($fp)."<br/>";
        }
    }
    ?>
    

    image.png

    fgetss()函数
    函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记
    语法:fgetss(file,length,tags)
    file:必需,规定要读取的文件
    length:可选。规定要读取的字节数。默认是 1024 字节。该参数在 PHP 5 之前是必需的
    tags:可选。规定不会被删除的标签,若失败,则返回 false

    <?php
    $file = fopen("1.txt","r");
    echo fgetss($file);
    fclose($file);
    ?>
    

    image.png

    <?php
    $file = fopen("1.txt","r");
    echo fgetss($file,1024,"<p>");
    fclose($file);
    ?>
    

    image.png

    readfile()函数
    该函数读取一个文件,并写入到输出缓冲,如果成功,该函数返回从文件中读入的字节数。如果失败,该函数返回 FALSE 并附带错误信息。您可以通过在函数名前面添加一个 ‘@’ 来隐藏错误输出
    语法:readfile(filename,include_path,context)
    filename:必需。规定要读取的文件
    include_path:可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 ‘1’
    context:**可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项

    <?php
    $filename = $_GET['filename'];
    if(isset($filename)){
        echo "<pre>";
        echo readfile($filename);
        echo "</pre>";
    }
    ?>
    

    image.png

    parse_ini_file()函数
    解析一个配置文件(ini 文件),并以数组的形式返回其中的设置
    语法:parse_ini_file(file,process_sections)
    file:必需。规定要检查的 ini 文件
    process_sections:可选。如果设置为 TRUE,则返回一个多维数组,包括了配置文件中每一节的名称和设置。默认是FALSE

    <?php
    print_r(parse_ini_file("C:\Windows\win.ini"));
    ?> 
    
    # print_r 打印变量,以更容易理解的形式展示
    

    image.png

    过滤绕过案例(一)

    # 文章来源:https://paper.seebug.org/676/
    # 下面代码改过
    <?php
    $filename = str_replace('../','',$_GET['filename']);
    if(isset($filename)){
      echo "<pre>";
      echo readfile($filename);
      echo "</pre>";
    }
    ?>
    

    image.png

    过滤绕过案例(二)**

    <?php
    $filename = str_replace(array('../','./'),'',$_GET['filename']);
    if(isset($filename)){
      echo "<pre>";
      echo readfile($filename);
      echo "</pre>";
    }
    ?>
    

    image.png