search
HomeBackend DevelopmentPHP TutorialReading Files Correct way to read files in PHP

Let’s count how many ways there are
One of the joys of working with a modern programming language like PHP is the vast number of options available. PHP easily wins Perl's motto "There's more than one way to do it", especially when it comes to file handling. But with so many options available, which one is the best tool for the job? Of course, the actual answer depends on your goals for parsing the file, so it's worth taking the time to explore all options.
Back to top
The traditional fopen method
The fopen method is probably most familiar to former C and C++ programmers, because if you've used those languages, they're more or less tools you've had at your disposal for years. For either of these methods, the file is opened by the standard method of using fopen (the function used to read data), and then closed using fclose, as shown in Listing 1.
Listing 1. Open and read files with fgets
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
$line = fgets($file_handle);
echo $ line;
}
fclose($file_handle);
While most programmers with years of programming experience will be familiar with these functions, let me break them down. Effectively perform the following steps:
Open the file. $file_handle stores a reference to the file itself.
Check if you have reached the end of the file.
Continue reading the file until the end of the file is reached, printing each line as it is read.
Close the file.
With these steps in mind, I will review every file function used here.
fopen The
fopen function will create a connection to a file. I say "create a connection" because in addition to opening a file, fopen can also open a URL: $fh = fopen("http://127.0.0.1/", "r");
This line of code will Creates a connection to the page above and allows you to start reading it as if it were a local file.
Note: The "r" used in fopen will instruct the file to be opened read-only. Since writing data to a file is outside the scope of this article, I won't list all other options. However, if reading from a binary file for cross-platform compatibility, "r" should be changed to "rb". You'll see an example of this later.
feof The
feof command will detect if you have reached the end of the file and return True or False. The loop in Listing 1 continues until you reach the end of the file "myfile". Note: feof will also return False if a URL is being read and the socket times out because there is no more data to read.
fclose
Skipping forward to the end of Listing 1, fclose will do the opposite of fopen: it will close the connection to a file or URL. After executing this function, you will no longer be able to read any information from the file or socket.
fgets
Jump back a few lines in Listing 1 and you get to the heart of file processing: actually reading the file. The fgets function is the weapon of choice for the first example. It will extract a row of data from the file and return it as a string. After that, you can print or otherwise manipulate the data. The example in Listing 1 will print the entire file fine.
If you decide to limit the size of the processed data chunks, you can add a parameter to fgets to limit the maximum row length. For example, use the following code to limit the line length to 80 characters: $string = fgets($file_handle, 81);
Recall the "
Assuming the file size is no more than 8 KB, the following code should be able to read the entire file into a string. $fh = fopen("myfile", "rb");
$data = fread($fh, filesize("myfile"));
fclose($fh);
Can only be used if the file length is greater than this value Loop to read in the rest.
fscanf
Back to string processing, fscanf also follows the traditional C file library function. If you're not familiar with it, fscanf reads field data from a file into variables. list ($field1, $field2, $field3) = fscanf($fh, "%s %s %s");
The format string used by this function is described in many places (such as PHP.net), so I won’t go into details here. Suffice to say, string formatting is extremely flexible. It is worth noting that all fields are placed in the return value of the function. (In C, they are all passed as arguments.)
fgetss The
fgetss function differs from traditional file functions and allows you to better understand the power of PHP. This function functions like the fgets function, but will strip any HTML or PHP tags found, leaving only plain text. View the HTML file shown below.
Listing 2. Sample HTML file

My title

If you understand what "Cause there ain't no one for to give you no pain"
means then you listen to too much of the band America




Then filter it through the fgetss function.
Listing 3. Using fgetss
$file_handle = fopen("myfile", "r");
while (!feof($file_handle)) {
echo = fgetss($file_handle);
}
fclose($file_handle);
Here is the output: My title
If you understand what "Cause there ain't no one for to give you no pain"
means then you listen to too much of the band America
fpassthru function
No matter how you read the file, you You can use fpassthru to dump the remaining data to the standard output channel. fpassthru($fh);
Also, this function will print the data, so there is no need to use variables to get the data.
Nonlinear file processing: skip access
Of course, the above function only allows sequential reading of files. More complex files may require you to jump back and forth to different parts of the file. This is where fseek comes in handy. fseek($fh, 0);
The above example will jump back to the beginning of the file. If you don't need to return exactly - we can specify to return kilobytes - then you can write: fseek($fh, 1024);
Starting with PHP V4.0, you have some other options. For example, if you need to jump forward 100 bytes from the current position, you can try using: fseek($fh, 100, SEEK_CUR);
Similarly, you can use the following code to jump back 100 bytes: fseek( $fh, -100, SEEK_CUR);
If you need to jump backward to 100 bytes before the end of the file, you should use SEEK_END. fseek($fh, -100, SEEK_END);
After reaching the new location, you can use fgets, fscanf or any other method to read the data.
Note: fseek cannot be used for file processing referencing URLs.
Back to top
Extract the entire file
Now, we'll touch on some of PHP's more unique file-handling features: processing large chunks of data in a line or two. For example, how to extract a file and display its entire contents on a web page? Okay, you saw an example of fgets using a loop. But how can this process be made easier? The process is super easy with fgetcontents, which puts the entire file into a string. $my_file = file_get_contents("myfilename");
echo $my_file;
Although it is not the best practice, this command can be written more concisely as: echo file_get_contents("myfilename");
This article mainly introduces how Process local files, but it's worth noting that you can also use these functions to extract, echo, and parse other Web pages. echo file_get_contents("http://127.0.0.1/");
This command is equivalent to: $fh = fopen("http://127.0.0.1/", "r");
fpassthru($fh);
You're bound to look at this command and think: "That's still too much effort".PHP developers agree with you. So the above command can be shortened to: readfile("http://127.0.0.1/");
The readfile function will dump the entire contents of the file or web page to the default output buffer. By default, this command will print an error message if it fails. To avoid this behavior (if necessary), try: @readfile("http://127.0.0.1/");
Of course, if you really need to parse the file, the single string returned by file_get_contents may be a bit unpalatable. Your first instinct might be to break it up using the split() function. $array = split("n", file_get_contents("myfile"));
But why go to all this trouble when there's already a great function that does it for you? PHP's file() function does this in one step: it returns an array of strings divided into lines. $array = file("myfile");
It should be noted that there is a slight difference between the above two examples. Although the split command will remove new lines, when using the file command (as with the fgets command), new lines will still be appended to the strings in the array.
However, the power of PHP goes far beyond that. You can use parse_ini_file to parse an entire PHP-style .ini file in a single command. The parse_ini_file command accepts a file similar to the one shown in Listing 4.
Listing 4. Sample .ini file
; 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
The following command will dump this file into an array and then print the array: $file_array = parse_ini_file("holy_grail.ini");
print_r $file_array;
The following output is the result:
Listing 5. 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 may notice that this command merges the parts. This is the default behavior, but you can easily fix it by passing the 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;
and you will get the following output:
Listing 6. Output
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
)
)
PHP will put the data into a multidimensional array that can be easily parsed.
This is just the tip of the iceberg when it comes to PHP file processing. More complex functions such as tidy_parse_file and xml_parse can help you process HTML and XML documents respectively. See Resources for details on the use of these special functions. Those references are worth a look if you're dealing with those types of files, but without overthinking every file type you might encounter that's been talked about in this article, here are some good ones for working with the functions covered so far general rules.
Back to Top
Best Practices
Never assume that everything in your program will run as planned. For example, what if the file you're looking for has been moved? What if the permissions have been changed and its contents cannot be read? You can check for these issues beforehand by using file_exists and is_readable.
Listing 7. Using file_exists and is_readable
$filename = "myfile";
if (file_exists($filename) && is_readable ($filename)) {
$fh = fopen($filename, "r");
# Processing
fclose($fh);
}
However, in practice, using such code may be too cumbersome. Handling fopen's return value is simpler and more accurate. if ($fh = fopen($filename, "r")) {
# Processing
fclose($fh);
}
Since fopen will return False on failure, this will ensure that file processing is only performed if the file is successfully opened. . Of course, if the file does not exist or is not readable, you can expect a negative return value. This will allow the inspection to check for all problems that may be encountered. Additionally, if the opening fails, you can exit the program or have the program display an error message.
Like the fopen function, the file_get_contents, file and readfile functions all return False when opening fails or when processing the file fails. The fgets, fgetss, fread, fscanf, and fclose functions also return False on error. Of course, you may have handled the return values ​​of all of these functions except fclose. When using fclose, nothing is done even if file handling is not closed gracefully, so it is usually not necessary to check the return value of fclose.
Back to top
The choice is yours
PHP has no shortage of efficient ways to read and parse files. A typical function like fread may be the best choice most of the time, or you may find yourself more attracted to the simplicity of readfile when readfile is just right for the task. It really depends on what is being done.
If you are dealing with large amounts of data, fscanf will prove its worth and be more efficient than using file with the split and sprintf commands. Conversely, if you want to echo a large amount of text with only minor modifications, it may be more appropriate to use file, file_get_contents, or readfile. This may be the case when using PHP for caching or creating a stopgap proxy server.
PHP provides you with a large number of tools for processing files. Learn more about these tools and see which ones are best suited for the project you're working on. You already have a lot of options, so take advantage of them and enjoy working with files in PHP.

The above introduces the correct method of reading files in PHP, including the content of reading files. I hope it will be helpful to friends who are interested in PHP tutorials.

Statement
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
How to implement hot update of function in PHP?How to implement hot update of function in PHP?May 15, 2025 pm 08:33 PM

There are three ways to implement hot updates for functions in PHP: 1. Rewrite the function and use runkit to dynamically rewrite the function; 2. Use OPcache to realize hot updates by restarting OPcache; 3. Use external tools such as deployer or ansible to automatically deploy and update code.

How to replace elements while iterating through PHP arrays?How to replace elements while iterating through PHP arrays?May 15, 2025 pm 08:30 PM

In PHP, you can use the following methods to traverse and replace array elements: 1. Use a foreach loop and reference (&$value) to modify the elements, but be aware that references may cause side effects. 2. Use a for loop to directly access indexes and values ​​to avoid reference problems. 3. Use the array_map function to make concise modifications, but the key name will be reset. 4. Use the array_walk function to modify the value and retain the key name. Performance, side effects and key name retention requirements should be taken into account when selecting a method.

How to verify ISBN strings in PHP?How to verify ISBN strings in PHP?May 15, 2025 pm 08:27 PM

Verifying ISBN strings in PHP can be implemented through a function that can handle two formats: ISBN-10 and ISBN-13. 1. Remove all non-numeric characters. 2. For ISBN-10, weighted sum calculation is used, and it is valid if the result can be divided by 11. 3. For ISBN-13, different weighting sum calculations are used, and it is valid if the result can be divided by 10. This function returns a Boolean value indicating whether the ISBN is valid.

How to implement automatic loading of classes in PHP?How to implement automatic loading of classes in PHP?May 15, 2025 pm 08:24 PM

In PHP, automatically loading classes are implemented through the __autoload or spl_autoload_register function. 1. The __autoload function has been abandoned, 2. The spl_autoload_register function is more flexible, supports multiple automatic loading functions, and can handle namespace and performance optimization.

How to modify array elements in PHP?How to modify array elements in PHP?May 15, 2025 pm 08:21 PM

Methods to modify array elements in PHP include direct assignment and batch modification using functions. 1. For indexed arrays, such as $colors=['red','green','blue'], the second element can be modified by $colors[1]='yellow'. 2. For associative arrays, such as $person=['name'=>'John','age'=>30], the value of age can be modified by $person['age']=31. 3. Use array_map or array_walk functions to modify array elements in batches, such as $numbers=array_map(fun

How to implement hook function in PHP?How to implement hook function in PHP?May 15, 2025 pm 08:18 PM

Implementing hook functions in PHP can be implemented through observer mode or event-driven programming. The specific steps are as follows: 1. Create a HookManager class to register and trigger hooks. 2. Use the registerHook method to register the hook and trigger the hook by the triggerHook method when needed. Hook functions can improve the scalability and flexibility of the code, but pay attention to performance overhead and debugging complexity.

PHP Performance Tuning for High Traffic WebsitesPHP Performance Tuning for High Traffic WebsitesMay 14, 2025 am 12:13 AM

ThesecrettokeepingaPHP-poweredwebsiterunningsmoothlyunderheavyloadinvolvesseveralkeystrategies:1)ImplementopcodecachingwithOPcachetoreducescriptexecutiontime,2)UsedatabasequerycachingwithRedistolessendatabaseload,3)LeverageCDNslikeCloudflareforservin

Dependency Injection in PHP: Code Examples for BeginnersDependency Injection in PHP: Code Examples for BeginnersMay 14, 2025 am 12:08 AM

You should care about DependencyInjection(DI) because it makes your code clearer and easier to maintain. 1) DI makes it more modular by decoupling classes, 2) improves the convenience of testing and code flexibility, 3) Use DI containers to manage complex dependencies, but pay attention to performance impact and circular dependencies, 4) The best practice is to rely on abstract interfaces to achieve loose coupling.

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

DVWA

DVWA

Damn Vulnerable Web App (DVWA) is a PHP/MySQL web application that is very vulnerable. Its main goals are to be an aid for security professionals to test their skills and tools in a legal environment, to help web developers better understand the process of securing web applications, and to help teachers/students teach/learn in a classroom environment Web application security. The goal of DVWA is to practice some of the most common web vulnerabilities through a simple and straightforward interface, with varying degrees of difficulty. Please note that this software

mPDF

mPDF

mPDF is a PHP library that can generate PDF files from UTF-8 encoded HTML. The original author, Ian Back, wrote mPDF to output PDF files "on the fly" from his website and handle different languages. It is slower than original scripts like HTML2FPDF and produces larger files when using Unicode fonts, but supports CSS styles etc. and has a lot of enhancements. Supports almost all languages, including RTL (Arabic and Hebrew) and CJK (Chinese, Japanese and Korean). Supports nested block-level elements (such as P, DIV),

Atom editor mac version download

Atom editor mac version download

The most popular open source editor

MantisBT

MantisBT

Mantis is an easy-to-deploy web-based defect tracking tool designed to aid in product defect tracking. It requires PHP, MySQL and a web server. Check out our demo and hosting services.

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Powerful PHP integrated development environment