关于php文件读取的一些学习记录

初学PHP的时候使用了一些文件读取API,但是没有真正弄清楚各API的区别以及差异,于是找了一篇学习了一下,贴在这里,引用自IBM社区的一篇文章

整体整理测试如下

<?php
/**
 * Created by PhpStorm.
 * User: f3ngt1ng
 * Date: 2017/2/15
 * Time: 9:11
 */

//The right way to read files with php
//URL:https://www.ibm.com/developerworks/library/os-php-readfiles/

/**
 * feof
 *   The feof command detects whether you have already read to the end of
 * the file and returns True or False. The loop in Listing 1 continues until
 * you have reached the end of the file "myfile." Note that feof also returns False
 * if you're reading a URL and the socket has timed out because you no longer have
 * data to read.
 */
function One(){
    $path = '../2.14/filter.txt';
    $handler = fopen($path, 'r');
    while(!feof($handler)){
    /**
     *Hearkening back to the "\0" end-of-string terminator in C,
     * set the length to one number higher than you actually want.
     * Thus, the example above uses 81 when you want 80 characters.
     * Get in the habit of remembering to add that extra character
     * whenever you use the line limit on this function.
     */
        $line = fgets($handler, 3);
        echo $line."\r\n";
    }
    fclose($handler);
}

//One();
function Two(){
    /* fread($handler, 4096);
     * This is where fread comes in.
     * The fread function serves a slightly different purpose from fgets:
     * It is intended to read from binary files (that is,
     * files that don't consist primarily of human-readable text).
     * Because the concept of "lines" isn't relevant for binary files
     * (logical data constructs are not generally terminated by newlines),
     * you must always specify the number of bytes that you wish to read in.
     *
     * The above reads in 4,096 bytes (4 KB) of data.
     * Note that no matter what number you specify,
     * fread will not read more than 8,192 bytes (8 KB).
     * Assuming that the file is no bigger than 8 KB,
     * the code below should read the entire file into a string.
     *
     *
     * If the file is longer than this, you will have to use a loop
     * to read the rest in.
     */

}

function Three(){
    /* fscanf
     *list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");
     * example:
     *  $handle = fopen("users.txt", "r");
     *  while ($userinfo = fscanf($handle, "%s\t%s\t%s\n")) {
     *       list ($name, $profession, $countrycode) = $userinfo;
     *       //... do something with the values
     *  }
     *   fclose($handle);
     *
     *  Coming back to string processing,
     * fscanf again follows the traditional C file library functions.
     * If you're unfamiliar with it, fscanf reads field data into variables
     * from a file.
     */
}

function Four(){
    /*
     * fgetss
     * The fgetss function breaks away from the traditional file
     * functions and gives you a better idea of the power of PHP.
     * The function acts like fgets, but strips away any HTML or
     * PHP tags it finds, leaving only naked text. Take the HTML file shown below.
     */

}

function Five(){
    /*
     * fpassthru
     * No matter how you've been reading your file,
     * you can dump the rest of your data to your standard output channel
     * using fpassthru.
     * Again, this function prints the data,
     * so you don't need to grab the data in a variable.
     */
    $path = '../2.14/filter.txt';
    $handler = fopen($path, 'r');
    $line = fgets($handler, 2);
    echo $line."==========\r\n";
    fpassthru($handler);


}
//Five();

function Six(){
    //Nonlinear file processing :Jumping Around
    /*
     * Of course, the above functions only allow you to
     * read a file in order. More complex files might require
     * you to jump back and forth to different parts of the file.
     * This is where fseek comes in handy.
     * fseek($handler, 0)
     *
     * From PHP V4.0 on, you have a few other options.
     * For example, if you want to jump ahead 100 bytes from your
     * current position, you can try:
     *
     * fseek($fh, 100, SEEK_CUR);
     * Similarly, you can jump back 100 bytes by using:
     * fseek($fh, -100, SEEK_CUR);
     * If you want to jump back 100 bytes before the end of
     * the file, use SEEK_END, instead.
     *
     * fseek($fh, -100, SEEK_END);
     *
     * After you've reached the new position, you can use fgets,
     * fscanf, or anything else to read the data.
     * Note: You can't use fseek on file handles referring to URLs.
     */


}

function Seven(){
    /*
     * Now we get to some of PHP's more unique file-processing strengths:
     * dealing with massive chunks of data in a line or two. For example,
     * how might you grab a file and display the entire contents on your Web page?
     * Well, you saw an example using a loop with fgets. But how can you make
     * this more straightforward? The process is almost ridiculously easy with
     * fgetcontents, which places an entire file within a string.
     * echo file_get_contents("myfilename");
     * This article is primarily about dealing with local files,
     * but it's worth noting that you can grab, echo, and parse other Web pages
     * with these functions, as well.
     *
     * echo file_get_contents("http://127.0.0.1/");
     * This command is effectively the same as:
     * $fh = fopen("http://127.0.0.1/", "r");
     * fpassthru($fh);
     *
     * readfile("http://127.0.0.1/");
     * The readfile function dumps the entire contents of a file or Web page
     * to the default output buffer. By default, this command prints an error message
     * if it fails. To avoid this behavior (if you want to), try:
     * @readfile("http://127.0.0.1/");
     */

}

function Eight(){
    /*
     * Of course, if you actually want to parse your files,
     * the single string that file_get_contents returns might be a bit overwhelming.
     * Your first inclination might be to break it up a little bit with the split()
     * function.
     * $array = split("\n", file_get_contents("myfile"));
     *
     * But why go through all that trouble when there's a perfectly
     * good function to do it for you? PHP's file() function does this in one step:
     * It returns an array of strings broken up by lines.
     *
     * $array = file("myfile");
     * It should be noted that there is a slight difference between the above two
     * examples. While the split command drops the newlines, the newlines are
     * still attached to the strings in the array when using the file command
     * (as with the fgets command).
     */
}

function Nine(){
    /*
     * PHP's power goes far beyond this, though.
     * You can parse entire PHP-style .ini files in a single command using
     * parse_ini_file. The parse_ini_file command accepts files similar
     * to Listing 4.
     *
     * ; Comment
     *   [personal information]
     *   name = "King Arthur"
     *   quest = To seek the holy grail
     *   favorite color = Blue

     *   [more stuff]
     *   Samuel Clemens = Mark Twain
     *   Caryn Johnson = Whoopi Goldberg
     *
     * $file_array = parse_ini_file("holy_grail.ini");
     *  print_r $file_array;
     *
     * OUTPUT:
     * Array
     *   (
     *       [name] => King Arthur
     *       [quest] => To seek the Holy Grail
     *       [favorite color] => Blue
     *       [Samuel Clemens] => Mark Twain
     *       [Caryn Johnson] => Whoopi Goldberg
     *   )
     *
     * Of course, you might notice that this command merged the sections.
     * This is the default behavior, but you can fix it easily by passing a second
     * argument to parse_ini_file: process_sections, which is a Boolean variable.
     * Set process_sections to True.
     *
     * $file_array = parse_ini_file("holy_grail.ini", true);
     *   print_r $file_array;
     *
     *  Array
     *   (
     *       [personal information] => Array
     *           (
     *               [name] => King Arthur
     *               [quest] => To seek the Holy Grail
     *               [favorite color] => Blue
     *           )
     *       [more stuff] => Array
     *           (
     *               [Samuel Clemens] => Mark Twain
     *               [Caryn Johnson] => Whoopi Goldberg
     *           )

      *  )
     */

}
posted @ 2017-02-15 10:36  封停  阅读(199)  评论(0)    收藏  举报