关于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 * ) * ) */ }
Live or die,that is a question.

浙公网安备 33010602011771号