PHP ile CSV Dosyaları Oluşturma ve Okuma: Detaylı Rehber

PHP, web geliştirme dünyasında en popüler programlama dillerinden biridir ve veri işleme konusunda güçlü araçlar sunar. Bu makalede, PHP kullanarak CSV (Comma-Separated Values) dosyalarını nasıl oluşturacağınızı, yazacağınızı ve okuyacağınızı adım adım öğreneceksiniz. CSV dosyaları, tablo verilerini metin formatında saklamak için kullanılan basit ve yaygın bir formattır. Özellikle veri aktarımı, veritabanı yedeklemeleri ve raporlama gibi alanlarda sıkça kullanılır. Hazırsanız, başlayalım!

CSV Dosyası Nedir?

CSV, “Comma-Separated Values” (Virgülle Ayrılmış Değerler) anlamına gelir. Bir CSV dosyası, verileri satır ve sütunlar halinde saklar ve her bir veri alanı genellikle virgül (,) ile ayrılır. Ancak, bazı durumlarda başka ayraçlar (örneğin sekme veya noktalı virgül) da kullanılabilir. Bir CSV dosyası, metin editörlerinde şu şekilde görünür:

Sembol,Firma,Fiyat
GOOG,"Google Inc.",800
AAPL,"Apple Inc.",500
AMZN,"Amazon.com Inc.",250
YHOO,"Yahoo! Inc.",250
FB,"Facebook, Inc.",30

Bu dosya, bir elektronik tablo uygulamasında (örneğin Excel) açıldığında düzenli bir tabloya dönüşür. CSV dosyalarının sadeliği, farklı platformlar ve uygulamalar arasında veri paylaşımını kolaylaştırır.

PHP ile CSV Dosyası Oluşturma ve Yazma

PHP’de CSV dosyası oluşturmak ve veri yazmak için fputcsv() fonksiyonu kullanılır. Bu fonksiyon, bir dizi veriyi CSV formatında bir dosyaya yazmak için idealdir. İşte adım adım bir örnek:

Örnek: Hisse Senedi Verilerini CSV Dosyasına Yazma

Aşağıdaki kod, bir hisse senedi veri dizisini CSV dosyasına yazıyor:

<?php
// Verileri içeren dizi
$data = [
    ['Sembol', 'Firma', 'Fiyat'],
    ['GOOG', 'Google Inc.', '800'],
    ['AAPL', 'Apple Inc.', '500'],
    ['AMZN', 'Amazon.com Inc.', '250'],
    ['YHOO', 'Yahoo! Inc.', '250'],
    ['FB', 'Facebook, Inc.', '30'],
];

// Dosya adı
$dosyaAdi = 'hisseler.csv';

// Dosyayı yazma modunda aç
$dosya = fopen($dosyaAdi, 'w');

if ($dosya === false) {
    die('Dosya açılamadı: ' . $dosyaAdi);
}

// Her bir satırı dosyaya yaz
foreach ($data as $satir) {
    fputcsv($dosya, $satir);
}

// Dosyayı kapat
fclose($dosya);

echo "CSV dosyası başarıyla oluşturuldu: $dosyaAdi";
?>

Kodun Açıklaması

  1. Veri Dizisi: $data adında bir dizi oluşturduk. Bu dizi, her biri bir satırı temsil eden alt dizilerden oluşuyor. İlk satır, sütun başlıklarını içeriyor.
  2. Dosya Açma: fopen($dosyaAdi, ‘w’) ile dosyayı yazma modunda (w) açıyoruz. Eğer dosya zaten varsa, bu mod içeriği sıfırlar.
  3. Veri Yazma: fputcsv($dosya, $satir) fonksiyonu, her bir satırı CSV formatında dosyaya yazar. Varsayılan olarak virgül (,) ayraç olarak kullanılır.
  4. Dosya Kapama: fclose($dosya) ile dosya bağlantısını kapatıyoruz.

Bu kod çalıştırıldığında, hisseler.csv adında bir dosya oluşturulur ve içeriği yukarıdaki metin örneğindeki gibi olur.

Unicode Desteği (Excel için)

Eğer CSV dosyanızda Türkçe karakterler gibi Unicode karakterler kullanıyorsanız ve bu dosyayı Microsoft Excel’de doğru görüntülemek istiyorsanız, dosyanın başına BOM (Byte Order Mark) eklemeniz gerekir. İşte bunu yapan bir örnek:

<?php
$dosyaAdi = 'hisseler_unicode.csv';
$dosya = fopen($dosyaAdi, 'w');

if ($dosya === false) {
    die('Dosya açılamadı: ' . $dosyaAdi);
}

// BOM ekle (UTF-8 için)
fputs($dosya, chr(0xEF) . chr(0xBB) . chr(0xBF));

// Verileri yaz
$data = [
    ['Sembol', 'Firma', 'Fiyat'],
    ['GOOG', 'Google Inc.', '800'],
    ['AAPL', 'Apple Inc.', '500'],
    ['AMZN', 'Amazon.com Inc.', '250'],
    ['YHOO', 'Yahoo! Inc.', '250'],
    ['FB', 'Facebook, Inc.', '30'],
];

foreach ($data as $satir) {
    fputcsv($dosya, $satir);
}

fclose($dosya);

echo "Unicode destekli CSV dosyası oluşturuldu: $dosyaAdi";
?>

Not: BOM eklemek, Excel’in UTF-8 kodlamasını doğru algılamasını sağlar. Aksi takdirde, Türkçe karakterler (örneğin İ, Ş, Ğ) bozulabilir.

PHP ile CSV Dosyası Okuma

CSV dosyasındaki verileri okumak için PHP’nin fgetcsv() fonksiyonunu kullanırız. Bu fonksiyon, bir CSV dosyasından bir satırı okur ve verileri bir dizi olarak döndürür. İşte bir örnek:

Örnek: Hisse Senedi CSV Dosyasını Okuma

Aşağıdaki kod, daha önce oluşturduğumuz hisseler.csv dosyasını okuyor ve içeriğini ekrana yazdırıyor:

<?php
$dosyaAdi = 'hisseler.csv';
$veriler = [];

// Dosyayı okuma modunda aç
$dosya = fopen($dosyaAdi, 'r');

if ($dosya === false) {
    die('Dosya açılamadı: ' . $dosyaAdi);
}

// Her satırı oku
while (($satir = fgetcsv($dosya)) !== false) {
    $veriler[] = $satir;
}

// Dosyayı kapat
fclose($dosya);

// Verileri ekrana yazdır
echo '<pre>';
print_r($veriler);
echo '</pre>';
?>

Kodun Açıklaması

  1. Dosya Açma: fopen($dosyaAdi, ‘r’) ile dosyayı okuma modunda (r) açıyoruz.
  2. Satır Okuma: fgetcsv($dosya) fonksiyonu, dosyanın her satırını bir dizi olarak döndürür. Satır sonuna ulaşıldığında false döner.
  3. Veri Saklama: Okunan her satır $veriler dizisine eklenir.
  4. Ekrana Yazdırma: print_r() ile veriler düzenli bir şekilde ekrana yazdırılır.

Bu kod çalıştırıldığında, CSV dosyasındaki tüm veriler bir dizi olarak ekrana dökülür:

Array
(
    [0] => Array
        (
            [0] => Sembol
            [1] => Firma
            [2] => Fiyat
        )
    [1] => Array
        (
            [0] => GOOG
            [1] => Google Inc.
            [2] => 800
        )
    ...
)

İleri Seviye: CSV Dosyasını Tablo Olarak Görüntüleme

CSV verilerini bir HTML tablosunda göstermek, özellikle web uygulamalarında sıkça kullanılan bir yöntemdir. Aşağıdaki örnek, CSV dosyasını okuyarak verileri bir HTML tablosunda görüntüler:

<?php
$dosyaAdi = 'hisseler.csv';
$veriler = [];

$dosya = fopen($dosyaAdi, 'r');

if ($dosya === false) {
    die('Dosya açılamadı: ' . $dosyaAdi);
}

while (($satir = fgetcsv($dosya)) !== false) {
    $veriler[] = $satir;
}

fclose($dosya);
?>

<!DOCTYPE html>
<html lang="tr">
<head>
    <meta charset="UTF-8">
    <title>CSV Verileri</title>
    <style>
        table {
            border-collapse: collapse;
            width: 100%;
        }
        th, td {
            border: 1px solid #ddd;
            padding: 8px;
            text-align: left;
        }
        th {
            background-color: #f2f2f2;
        }
    </style>
</head>
<body>
    <h2>Hisse Senedi Verileri</h2>
    <table>
        <?php foreach ($veriler as $index => $satir): ?>
            <tr>
                <?php foreach ($satir as $hucre): ?>
                    <td><?php echo htmlspecialchars($hucre); ?></td>
                <?php endforeach; ?>
            </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

Bu kod, CSV dosyasındaki verileri düzenli bir HTML tablosunda gösterir. htmlspecialchars() fonksiyonu, kullanıcı girişlerinden kaynaklanabilecek XSS (Cross-Site Scripting) saldırılarını önlemek için kullanılır.

Önemli İpuçları ve Dikkat Edilmesi Gerekenler

  1. Hata Kontrolü: fopen() fonksiyonunun başarılı olup olmadığını kontrol edin. Dosya yoksa veya izinler yetersizse, hata mesajı döndürerek kullanıcıyı bilgilendirin.
  2. Unicode Desteği: Türkçe karakterler veya diğer özel karakterler için BOM eklemeyi unutmayın, özellikle Excel ile uyumluluk için.
  3. Ayraç Seçenekleri: fputcsv() ve fgetcsv() fonksiyonlarında ayraç (delimiter) parametresini kullanarak virgül yerine başka bir karakter (örneğin ;) belirtebilirsiniz.
  4. Performans: Büyük CSV dosyalarıyla çalışırken, belleği verimli kullanmak için satır satır okuma yapın. Büyük dosyalar için league/csv gibi kütüphaneler de tercih edilebilir.
  5. Güvenlik: Kullanıcıdan gelen verileri CSV dosyasına yazmadan önce mutlaka doğrulayın ve temizleyin.

PHP ile CSV dosyaları oluşturmak ve okumak, veri işleme görevlerini kolaylaştıran güçlü bir yöntemdir. fputcsv() ve fgetcsv() fonksiyonları, bu işlemleri hızlı ve etkili bir şekilde gerçekleştirmenizi sağlar. Bu makalede, temel CSV işlemleri, Unicode desteği ve HTML tablosuyla veri görüntüleme gibi konuları ele aldık. Artık siz de kendi projelerinizde CSV dosyalarını rahatlıkla kullanabilirsiniz!

Kaynaklar:

AuthorHarun ALP

Bu adam , bilgi sahibi olduğu konularda makalelerini daha bilgilendirici hale getirip görseller ile süslüyor ve seo uyumlu makaleler ortaya çıkarıyor. Güncel webmaster konularını işlemekten keyif alıyor ve genelde her makale aslında bir sorunun çözümü niteliğinde.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir