Read and write CSV files in PHP Code Examples
This article explains how to read and write CSV file in PHP through flow diagrams and examples. If you’re already familiar with the basics, you can skip to the examples.
<?php
$employees = [
['Id', 'Name', 'Age', 'Salary', 'Department'],
['1', 'Anna', '30', 20000, 'Finance'],
['2', 'Adam', '25', 15000, 'IT'],
['3', 'Bob', '32', 25000, 'Finance'],
['4', 'Cara', '20', 12000, 'Logistics'],
['5', 'Daniel', '28', 27000, 'Engineering'],
];
//Creates a new file employee_records.csv
$file = fopen('employee_records.csv', 'w'); //w is the flag for write mode.
if($file === false)
{
die('Cannot open the file');
}
foreach($employees as $employee)
{
//Formats the employee record as CSV and writes it out employee_records.csv
fputcsv($file, $employee);
}
//Closes the file.
fclose($file);
?>
CSV PHP Code Examples and Learning Path
- PHP File Upload & Save – Upload a CSV File in a PHP Script
- How to POST cURL Body from File in PHP | JSON, CSV, and More
- How to convert PHP multidimensional array to CSV with fputcsv
- How to add headers to file with fputcsv
- 3 examples of changing delimiters in fputcsv function
- How to use associative arrays with fputcsv in PHP
- How read and write CSV file in PHP
- PHP Code to Read a CSV File to Associative Array with Headers | PHP Code
- How to convert associative array to csv in PHP
Introduction
Comma separated file or CSV is a text-based file that uses a comma as a delimiter. CSV mainly stores tabular data, and the name is inspired by the fact that it uses a comma to separate each data field. The file has several components, including a header, data records and fields. The following image clearly defines these components.

- Header – The topmost row that defines a label for a data column.
- Data record – Each line after the header is a data record.
- Data field – Each entity separated by a comma is a field.
For consistent data persistence, it is necessary to include the same number of fields in every row. In the case of a missing field, a placeholder like NULL could help avoid confusion while PHP read CSV. Tools like Excel can help visualize a CSV file better than an editor.

There are built-in functions to read and write CSV files in PHP. The multi-step process of reading or writing a CSV file is explained through the diagram below. These diagrams give an idea of the process flow, and as we dive into the article, we will see relevant functions for every subprocess shown in these diagrams.
PHP write CSV – The Process
Here’s a flow diagram of the PHP write CSV process.

PHP writes CSV starting from opening a new file and then sequentially writing an array of data.
PHP read CSV – The Process
Here’s a flow diagram of the PHP read CSV process.

The process is almost similar to how PHP writes a CSV file. Here PHP repeatedly checks if there are records left for reading.
How to read and write CSV file in PHP?
Now let’s move on to examples of how to read and write CSV file in PHP.
Write CSV files in PHP
As we have seen in the diagram already, PHP opens either an existing or a new file. Then, it writes a data array. These two operations are possible with the following two crucial PHP functions.
- fopen() – A PHP function that opens a file or URL.
- fputcsv() – Formats an array as CSV and writes to a file pointer.
PHP writes CSV from an array of employee data using these two functions. Here’s the complete example.
<?php
$employees = [
['Id', 'Name', 'Age', 'Salary', 'Department'],
['1', 'Anna', '30', 20000, 'Finance'],
['2', 'Adam', '25', 15000, 'IT'],
['3', 'Bob', '32', 25000, 'Finance'],
['4', 'Cara', '20', 12000, 'Logistics'],
['5', 'Daniel', '28', 27000, 'Engineering'],
];
//Creates a new file employee_records.csv
$file = fopen('employee_records.csv', 'w'); //w is the flag for write mode.
if($file === false)
{
die('Cannot open the file');
}
foreach($employees as $employee)
{
//Formats the employee record as CSV and writes it out employee_records.csv
fputcsv($file, $employee);
}
//Closes the file.
fclose($file);
?>
So, the fopen function creates a new file, ‘employee_records.csv’. Then the foreach loop iterates over the array. The fputcsv function writes an employee data array to the output CSV file. Finally, the fclose function closes the file. It is good to close a file explicitly as something can go wrong with it if it is left open.
Here’s the output.
Id,Name,Age,Salary,Department
1,Anna,30,20000,Finance
2,Adam,25,15000,IT
3,Bob,32,25000,Finance
4,Cara,20,12000,Logistics
5,Daniel,28,27000,Engineering
Read CSV files in PHP
The diagram above has already shown how PHP reads CSV. The process is almost similar to how PHP writes a CSV file. The only change is that we’ll be using the fgetcsv function, which reads a file line by line.
Here is the CSV file ‘employees.csv’ that PHP will read.
Id,Name,Age,Salary,Department
1,Anna,30,20000,Finance
2,Adam,25,15000,IT
3,Bob,32,25000,Finance
4,Cara,20,12000,Logistics
5,Daniel,28,27000,Engineering
6,Franklin,25,20000,Quality Assurance
7,Gorge,21,15000,IT
8,Kylie,20,10000,Engineering
9,Ivan,23,12000,Logistics
10,James,25,20000,Quality Assurance
<?php
$employees = [];
//Creates a new file employee_records.csv
$file = fopen('employees.csv', 'r'); //w is the flag for write mode.
if($file === false)
{
die('Cannot open the file');
}
//As long as there are records in the CSV file.
while(($row = fgetcsv($file)) !== false)
{
//Push the data record to employees array.
array_push($employees, $row);
}
//Closes the file.
fclose($file);
print_r($employees);
?>
The example is almost similar to the write CSV in PHP. The loop fetches data records and pushes them to the employees array.
Here’s the output.
Array
(
[0] => Array
(
[0] => Id
[1] => Name
[2] => Age
[3] => Salary
[4] => Department
)
[1] => Array
(
[0] => 1
[1] => Anna
[2] => 30
[3] => 20000
[4] => Finance
)
[2] => Array
(
[0] => 2
[1] => Adam
[2] => 25
[3] => 15000
[4] => IT
)
[3] => Array
(
[0] => 3
[1] => Bob
[2] => 32
[3] => 25000
[4] => Finance
)
[4] => Array
(
[0] => 4
[1] => Cara
[2] => 20
[3] => 12000
[4] => Logistics
)
[5] => Array
(
[0] => 5
[1] => Daniel
[2] => 28
[3] => 27000
[4] => Engineering
)
[6] => Array
(
[0] => 6
[1] => Franklin
[2] => 25
[3] => 20000
[4] => Quality Assurance
)
[7] => Array
(
[0] => 7
[1] => Gorge
[2] => 21
[3] => 15000
[4] => IT
)
[8] => Array
(
[0] => 8
[1] => Kylie
[2] => 20
[3] => 10000
[4] => Engineering
)
[9] => Array
(
[0] => 9
[1] => Ivan
[2] => 23
[3] => 12000
[4] => Logistics
)
[10] => Array
(
[0] => 10
[1] => James
[2] => 25
[3] => 20000
[4] => Quality Assurance
)
)
Voila! That’s how to read and write CSV file in PHP.
Conclusion
This article provides an in-depth tutorial on how to read and write CSV file in PHP. It includes flow diagrams to create a road map of the reading and writing processes followed by examples. Hopefully, you’ve learned from the ground up, and you can learn more about PHP through similar articles and tutorials at FuelingPHP.
Want to learn more about PHP?
We have many fun articles related to PHP. You can explore these to learn more about PHP.