Posts

Creating a CSV File Using PHP

In PHP, there are functions defined to create a CSV file. There are several advantages to using these functions instead of libraries like PhpExcel. It consumes less resources and is faster.

First, let’s create a function that will create our CSV file.

<?php

function array_to_csv_function($array, $filename = "export.csv", $delimiter=";") {
    // Instead of opening a temp file, we use memory space.
    $f = fopen('php://memory', 'w');
    // We're making a loop with an array which contains our data
    foreach ($array as $line) {
        // Each array in our array is a line in our CSV file.
        fputcsv($f, $line, $delimiter);
    }
    // File initialization is reset
    fseek($f, 0);
    // Php tells the browser that it is a csv file
    header('Content-Type: application/csv');
    // Php tells the browser not to display, to save. 
    header('Content-Disposition: attachment; filename="'.$filename.'";');
    // The generated CSV is transferred to the browser.
    fpassthru($f);
}

With this function, we can create a CSV file and output it to the browser by sending a series of file names to the function. I have explained each line in the code with comments. I made this function use memory space instead of using a temporary temp file. If you want to use a temporary temp file, replace $f = fopen(‘php: // memory’, ‘w’); with $f = fopen(‘php: // output’, ‘w’); command.

We then create an array that will be an array of lines, either by pulling it from the database or from a json data, and send it to our function. That’s all. As an example, I wrote the code below;

<?php

$titles = array("Name", "Surname");
$row1 = array("Erhan", "Kılıç");
$row2 = array("Onur", "Bakır");
$content = array($titles, $row1, $row1);

array_to_csv_function($content, "export.csv");

PHP Kullanarak CSV Dosyası Oluşturma

PHP‘de, CSV uzantılı dosya oluşturabilmek için tanımlanmış fonksiyonlar vardır. PhpExcel gibi kütüphaneler yerine bu fonksiyonları kullanmanın bir kaç avantajı vardır. Daha az kaynak tüketir ve dolasıyla daha hızlıdır.

Öncelikle CSV dosyamızı oluşturacak fonksiyonumuzu oluşturalım.

function array_to_csv_function($array, $filename = "export.csv", $delimiter=";") {
 // Bir temp dosyası açmak yerine bellek alanı kullanıyoruz. 
 $f = fopen('php://memory', 'w');
 // Verilerimizin olduğu diziyi döngüye sokuyoruz
 foreach ($array as $line) {
 // Dizimizin içindeki her dizi, CSV dosyamızda bir satır olmaktadır.
 fputcsv($f, $line, $delimiter);
 }
 // Dosya başlangıc işaretini sıfırlıyor
 fseek($f, 0);
 // Tarayıcıya bir csv dosyası olduğunu belirtiyor
 header('Content-Type: application/csv');
 // Tarayıcıya görüntülenmek için olmadığını, kaydedilmek için olduğunu belirtiyor. 
 header('Content-Disposition: attachment; filename="'.$filename.'";');
 // Üretilen CSV tarayıcıya iletiliyor.
 fpassthru($f);
}

Bu fonksiyonumuz ile içerisine bir dizi ve dosya ismi göndererek CSV dosyasını oluşturmasını ve tarayıcıya çıktı vermesini sağlıyoruz. Kod içerisinde her bir satırı yorumlar ile açıkladım. Bu fonksiyonda geçici bir temp dosyası kullanmak yerine bellek alanı kullanmasını sağladım. Eğer geçici bir temp dosyası kullanmasını isterseniz $f = fopen(‘php://memory’, ‘w’); yerine $f = fopen(‘php://output’, ‘w’); komutunu kullanın.

Daha sonra ise ister veritabanından çekerek ya da ister json verisi olarak çekerek her bir satır dizi olacak şekilde bir dizi oluşturuyoruz ve fonksiyonumuza gönderiyoruz. Bu kadar. Örnek olarak aşağıda kod yazım.

$basliklar = array("Ad", "Soyad");
$satir1 = array("Erhan", "Kılıç");
$satir2 = array("Onur", "Bakır");

$icerik = array($basliklar, $satir1, $satir2);
array_to_csv_function($icerik, "export.csv");
// Diğer bir şekilde kullanımı
array_to_csv_function(array($basliklar, $satir1, $satir2), "export.csv");