Bird
Raised Fist0
PHPprogramming~5 mins

CSV file reading and writing in PHP

Choose your learning style10 modes available
Introduction

CSV files are simple text files that store data in a table form. Reading and writing CSV files lets your PHP programs save and load data easily.

You want to save user data like names and emails in a simple file.
You need to read data exported from spreadsheet programs like Excel.
You want to share data between different programs using a common format.
You want to log information in a readable and organized way.
You want to import or export data from a database in a simple format.
Syntax
PHP
<?php
// Reading CSV file
if (($handle = fopen('file.csv', 'r')) !== false) {
    while (($data = fgetcsv($handle, 1000, ',')) !== false) {
        // $data is an array of values from one line
    }
    fclose($handle);
}

// Writing CSV file
if (($handle = fopen('file.csv', 'w')) !== false) {
    fputcsv($handle, ['value1', 'value2', 'value3']);
    fclose($handle);
}

fgetcsv() reads one line from the file and splits it into an array by commas.

fputcsv() writes an array as a comma-separated line to the file.

Examples
This reads each line from data.csv and prints the array of values.
PHP
<?php
// Read CSV and print each row
if (($handle = fopen('data.csv', 'r')) !== false) {
    while (($row = fgetcsv($handle)) !== false) {
        print_r($row);
    }
    fclose($handle);
}
This writes a header row and one data row to output.csv.
PHP
<?php
// Write two rows to CSV
if (($handle = fopen('output.csv', 'w')) !== false) {
    fputcsv($handle, ['Name', 'Age', 'City']);
    fputcsv($handle, ['Alice', '30', 'Paris']);
    fclose($handle);
}
Sample Program

This program writes a small table of people to people.csv and then reads it back, printing each row with values separated by |.

PHP
<?php
// Create and write to CSV
$file = 'people.csv';
$data = [
    ['Name', 'Age', 'City'],
    ['John', '25', 'New York'],
    ['Anna', '28', 'London'],
    ['Mike', '32', 'Sydney']
];

$handle = fopen($file, 'w');
foreach ($data as $row) {
    fputcsv($handle, $row);
}
fclose($handle);

// Read and print CSV
if (($handle = fopen($file, 'r')) !== false) {
    while (($row = fgetcsv($handle)) !== false) {
        echo implode(' | ', $row) . "\n";
    }
    fclose($handle);
}
OutputSuccess
Important Notes

Always close the file with fclose() to save changes and free resources.

Use the correct file path and permissions to avoid errors when opening files.

CSV files separate values by commas by default, but you can change the delimiter in fgetcsv and fputcsv if needed.

Summary

Use fgetcsv() to read CSV files line by line into arrays.

Use fputcsv() to write arrays as CSV lines to files.

Always open files with fopen() and close them with fclose().

Practice

(1/5)
1. Which PHP function is used to read a line from a CSV file and parse it into an array?
easy
A. fgetcsv()
B. fputcsv()
C. fread()
D. fwrite()

Solution

  1. Step 1: Understand CSV reading functions

    PHP provides fgetcsv() to read a line from a CSV file and convert it into an array of values.
  2. Step 2: Differentiate from writing functions

    fputcsv() writes arrays to CSV files, while fread() and fwrite() handle raw file reading/writing without CSV parsing.
  3. Final Answer:

    fgetcsv() -> Option A
  4. Quick Check:

    Read CSV line as array = fgetcsv() [OK]
Hint: Use fgetcsv() to read CSV lines into arrays [OK]
Common Mistakes:
  • Confusing fgetcsv() with fputcsv()
  • Using fread() which reads raw data, not CSV parsed
  • Trying to read CSV without parsing into arrays
2. Which of the following is the correct way to open a CSV file for writing in PHP?
easy
A. $file = fopen('data.csv', 'r');
B. $file = fopen('data.csv', 'rw');
C. $file = fopen('data.csv', 'w');
D. $file = fopen('data.csv', 'x');

Solution

  1. Step 1: Understand fopen modes

    Mode 'w' opens a file for writing and truncates it if it exists, perfect for writing CSV files.
  2. Step 2: Check other modes

    'r' is read-only, 'rw' is invalid, 'x' creates a new file but fails if it exists.
  3. Final Answer:

    $file = fopen('data.csv', 'w'); -> Option C
  4. Quick Check:

    Open file for writing = 'w' mode [OK]
Hint: Use 'w' mode in fopen() to write files [OK]
Common Mistakes:
  • Using 'r' mode when intending to write
  • Using invalid mode 'rw'
  • Using 'x' which fails if file exists
3. What will be the output of the following PHP code snippet?
$file = fopen('data.csv', 'r');
$data = fgetcsv($file);
fclose($file);
print_r($data);

Assuming the first line of data.csv is:
John,Doe,30
medium
A. Array ( [0] => John [1] => Doe [2] => 30 )
B. John,Doe,30
C. Array ( [0] => 'John,Doe,30' )
D. Error: Cannot read file

Solution

  1. Step 1: Understand fgetcsv() output

    fgetcsv() reads one CSV line and returns an array splitting values by commas.
  2. Step 2: Analyze given CSV line

    The line 'John,Doe,30' splits into array elements: 'John', 'Doe', and '30'.
  3. Final Answer:

    Array ( [0] => John [1] => Doe [2] => 30 ) -> Option A
  4. Quick Check:

    fgetcsv() splits CSV line into array [OK]
Hint: fgetcsv() returns array of CSV fields from one line [OK]
Common Mistakes:
  • Expecting a string instead of an array
  • Assuming fgetcsv returns raw line string
  • Not closing the file after reading
4. Identify the error in the following PHP code that writes data to a CSV file:
$file = fopen('output.csv', 'r');
fputcsv($file, ['Alice', 'Smith', 25]);
fclose($file);
medium
A. Array syntax is incorrect
B. fputcsv() cannot write arrays
C. Missing fclose() call
D. File opened in read mode instead of write mode

Solution

  1. Step 1: Check fopen mode

    The file is opened with 'r' (read) mode, which does not allow writing.
  2. Step 2: Understand fputcsv requirements

    fputcsv() requires the file to be opened in write ('w') or append ('a') mode to write data.
  3. Final Answer:

    File opened in read mode instead of write mode -> Option D
  4. Quick Check:

    Open file in write mode before writing [OK]
Hint: Open file with 'w' or 'a' before writing CSV [OK]
Common Mistakes:
  • Opening file in 'r' mode when writing
  • Forgetting to close the file
  • Misunderstanding fputcsv() input
5. You want to read a CSV file and write only rows where the third column is greater than 50 to a new CSV file. Which code snippet correctly implements this?
hard
A. $in = fopen('input.csv', 'w'); $out = fopen('output.csv', 'r'); while (($row = fgetcsv($in)) !== false) { if ($row[2] > 50) { fputcsv($out, $row); } } fclose($in); fclose($out);
B. $in = fopen('input.csv', 'r'); $out = fopen('output.csv', 'w'); while (($row = fgetcsv($in)) !== false) { if ($row[2] > 50) { fputcsv($out, $row); } } fclose($in); fclose($out);
C. $in = fopen('input.csv', 'r'); $out = fopen('output.csv', 'w'); while (($row = fgetcsv($out)) !== false) { if ($row[2] > 50) { fputcsv($in, $row); } } fclose($in); fclose($out);
D. $in = fopen('input.csv', 'r'); $out = fopen('output.csv', 'w'); while (($row = fgets($in)) !== false) { if ($row[2] > 50) { fputcsv($out, $row); } } fclose($in); fclose($out);

Solution

  1. Step 1: Open input file for reading and output file for writing

    Use 'r' mode for reading input and 'w' mode for writing output.
  2. Step 2: Read each CSV row with fgetcsv() from input and check third column

    Use fgetcsv($in) to read rows, then check if $row[2] > 50.
  3. Step 3: Write qualifying rows to output with fputcsv()

    If condition passes, write row to output file using fputcsv($out, $row).
  4. Final Answer:

    Code snippet B correctly reads, filters, and writes CSV rows -> Option B
  5. Quick Check:

    Read with fgetcsv(), filter by column, write with fputcsv() [OK]
Hint: Read with fgetcsv(), filter rows, write with fputcsv() [OK]
Common Mistakes:
  • Opening files with wrong modes
  • Using fgets() instead of fgetcsv() for CSV reading
  • Mixing input and output file handles
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard