PHP CSV

Summary: in this tutorial, you will learn how to deal with CSV files in PHP, including creating and reading CSV files.

A quick introduction to CSV files

CSV stands for comma-separated values. A CSV file is a text file that stores tabular data in the form of comma-separated values. A CSV file stores each record per line. And it may have a header.

When you open a CSV file using a spreadsheet application, you’ll see that the file is nicely formatted like this:

However, if you view the CSV file in a text editor, it looks like the following:

Symbol,Company,Price
GOOG,"Google Inc.",800
AAPL,"Apple Inc.",500
AMZN,"Amazon.com Inc.",250
YHOO,"Yahoo! Inc.",250
FB,"Facebook, Inc.",30Code language: plaintext (plaintext)

Typically, a CSV file uses a comma (,) to separate fields in a CSV file. If the field content also contains a comma(,), the CSV file surrounds that field with double quotes, e.g., “Facebook, Inc..”

Besides using the comma (,) character, a CSV file may use other characters to separate fields such as semicolon (;).

Writing to a CSV file

To write a line to a CSV file, you use the fputcsv() function:

fputcsv ( resource $handle , array $fields , string $delimiter = "," , string $enclosure = '"' , string $escape_char = "\\" ) : int|falseCode language: PHP (php)

The following example uses the fputcsv() function to write data to a CSV file:

<?php

$data = [
	['Symbol', 'Company', 'Price'],
	['GOOG', 'Google Inc.', '800'],
	['AAPL', 'Apple Inc.', '500'],
	['AMZN', 'Amazon.com Inc.', '250'],
	['YHOO', 'Yahoo! Inc.', '250'],
	['FB', 'Facebook, Inc.', '30'],
];

$filename = 'stock.csv';

// open csv file for writing
$f = fopen($filename, 'w');

if ($f === false) {
	die('Error opening the file ' . $filename);
}

// write each row at a time to a file
foreach ($data as $row) {
	fputcsv($f, $row);
}

// close the file
fclose($f);Code language: HTML, XML (xml)

How it works.

  • First, define an array that holds the stock data.
  • Second, open the stock.csv file for writing using the fopen() function with the 'w' mode.
  • Third, loop through the $data array and write each each element as a line to the CSV file.
  • Finally, close the file using the fclose() function.

Writing Unicode characters

If you’re dealing with Unicode characters especially creating a CSV file for using Microsoft Excel, you need to change the file header using the fputs() function after opening the file as follows:

<?php
$f = fopen($filename, 'w');

if ($f === false) {
	die('Error opening the file ' . $filename);
}

fputs($f, (chr(0xEF) . chr(0xBB) . chr(0xBF))); // support unicode

// writing to a CSV file
//....Code language: HTML, XML (xml)

Reading from a CSV file

To read a CSV file, you use the fgetcsv() function:

fgetcsv ( resource $stream , int $length = 0 , string $separator = "," , string $enclosure = '"' , string $escape = "\\" ) : arrayCode language: PHP (php)

The fgetcsv() function reads a line of CSV data from the file pointer’s position and places it into an array; each line of the CSV file is an array element.

The function fgetcsv() returns false if there is an error occurred while reading the file or when the file pointer reaches the end-of-file.

The following example shows how to read the stock.csv file created above:

<?php

$filename = './stock.csv';
$data = [];

// open the file
$f = fopen($filename, 'r');

if ($f === false) {
	die('Cannot open the file ' . $filename);
}

// read each line in CSV file at a time
while (($row = fgetcsv($f)) !== false) {
	$data[] = $row;
}

// close the file
fclose($f);Code language: HTML, XML (xml)

How the script works.

  • First, open the stock.csv file for reading using the fopen() function.
  • Second, read each line in the file through the file handle and place it into an array. We use the while loop to read the entire CSV file until the file pointer reached the end-of-file.
  • Third, close the file and display the array.

Summary

  • Use the fputcsv() function to write a row to a CSV file.
  • Use the fgetcsv() function to read a row from a CSV file.
Did you find this tutorial useful?