Etiket arşivi: php

Php ile Pdf Oluşturmak

Php‘de sertifika, fatura gibi konularda pdf çıktısı almamız gerekebiliyor. Fpdf kütüphanesi pdf çıktısı almamızı kolay bir hale getiriyor. Temel bir kaç özelliğini anlatacağım. Detaylı kullanmak için dökümana bakabilirsiniz. Dökümantasyonda Türkçe çeviri de yapılmış. Hamza Ortatepe’e çevirisi için ayrıca teşekkürler.

Fpdf kütüphanesinin; Türkçe karakterleri desteklemesi için özelleştirilmiş kütüphanesi de mevcut. Türkçe karakter sorunu yaşamamak için buradan indirebilirsiniz.

Basit Kullanım

İlk olarak basit bir pdf sayfası yapalım. Boş bir sayfaya sadece bir yazı yazayım.

<?php
ob_end_clean();
require('tfpdf/tfpdf.php'); 
  
// Instantiate and use the FPDF class  
$pdf = new tFPDF(); 
  
//Add a new page 
$pdf->AddPage(); 
  
// Set the font for the text 
$pdf->SetFont('Arial', 'B', 18); 
  
// Prints a cell with given text  
$pdf->Cell(60,20,'Hello Php Pdf!'); 
  
// return the generated output 
$pdf->Output();
?>

Sertifika Örneği

Özellikle Eğitim Sitelerinde istenilen pdf sertifikaların basit bir örneğini yapacağız. $pdf->Output(); satırı ile kullanıcı tarayıcıda pdf dosyasını görüyor. Dizinde bir yere kaydetmek ve sonradan kullanmak için $pdf->Output(‘F’, ‘dosya-adi.pdf’); satırını kullanabilirsiniz. Özellikle e-posta ile göndermek için bu yolu tercih edebilirsiniz.

<?php
ob_end_clean();
require('tfpdf/tfpdf.php');
  
// pdf değişkenini / objesini olusturma
$pdf = new tFPDF();
  
// yeni sayfa ekleme
$pdf->AddPage('L', 'A4');
  
// font secimi ve yazi boyutu 
$pdf->AddFont('DejaVu', '', 'DejaVuSansCondensed.ttf',true);
$pdf->SetFont('DejaVu', '', 24);

// resim ekleme, A4 boyutunda
$pdf->Image('sertifika.jpg', 0, 0, 297, 210);

// sayfanin ortasina yazi ekleme  
$text = 'Tebrikler, Php ile Pdf dosyası oluşturdunuz';
$pdf->Text(148 - ( $pdf->GetStringWidth($text) / 2 ), 105, $text);
  
// dosya ciktisi
$pdf->Output();
//$pdf->Output('F', 'dosya-adi.pdf');
?>

Farklı Font Kullanımı

Farklı afilli fontlar kullanmak için tercih ettiğiniz fontun ttf dosyasını, “tfpdf/font/unifont/” dizine ekleyerek ve “AddFont”, “SetFont” fonksiyonlarını ekleyerek kullanabilirsiniz.

Umarım faydalı bir yazı olmuştur. Yorumlarınızı bekliyorum 🙂

Php Tarih İşlemleri

Php‘de sık sık kullandığımız tarih işlemleriyle ilgili bir yazı yazma ihtiyacı hissettim. Kısa kısa tarih fonksiyonlarını ve kullanım şekillerini anlatıcam. Umarım faydalı olur. Düşüncelerinizi paylaşmayı unutmayın 🙂

date() fonksiyonu

<?php echo date("Y-m-d H:i:s");//2016-02-17 15:25:14 ?>

Yukarıdaki kod sayesinde ekrana “2016-02-17 15:25:14” şeklinde bir çıktı alıyoruz. Bu tarih bulunduğumuz zamının verisi. Kullanılan harflerin anlamlarını aşağıda açıkladım.

<?php
echo date("Y");//yıl verisini 4 hane olarak getirir : 2016 
echo date("y");//yıl verisinin son 2 hanesini getirir : 16

echo date("M");//ay verisini ingilizce ay isimlerinin ilk üç hanesi olarak şekilde getirir : Feb
echo date("m");//ay verisini rakam olarak getirir : 02

echo date("D");//gün verisini ingilizce gün isimlerinin ilk üç hanesi olarak şekilde getirir : Wed
echo date("d");//gün verisini rakam olarak getirir : 17

echo date("H");//günü 24 saat kabul ederek saat verisini getirir : 15
echo date("h");//günü 12 saat kabul ederek saat verisini getirir : 03

echo date("i");//dakika verisi : 41
echo date("s");//saniye verisi : 21
?>

Bu kullanım şekillerini, ilk kod örneğinedki gibi istediğiniz gibi harmanyalarak kullanabilirsiniz. Malum kimileri önce ay gelsin vb. isteklerde bulunabilirler.

strtotime() fonksiyonu
Bazı durumlarda; veritabanından, formdan text gelen tarih verisi üzerinde işlem yapmanız gerekebilir. Bu işlem ekran çıktısında farklı format olabilir, bir gün sonrasını almak olabilir. Bu durumda tarih üzerinde işlem yapabilmek için strtotime() fonsiyonunu kullanırız. Unix timestamp ile ilgili aşağıya kısa bir kaç cümle yazdım.

<?php
$tarih = "2016-01-02 03:04:05";//text tarih verisi
echo strtotime($tarih);//unix timestamp formatında : 1451696645
echo date("Y-m-d H:i:s",strtotime($tarih));//kendi belirlediğimiz formatta : 2016-01-02 03:04:05
?>

Unix timestamp nedir?
1907-01-01 01:01:01 tarihinden, istenilen tarihe kadar geçen saniyeyi belirten zaman türü. Yukarıda verdiğimiz örnekteki “2016-01-02 03:04:05” tarihinin, unix timestamp karşılığının “1451696645” olması gibi. İki tarih arasında geçen süreyi bulmak için unix timestamp’i kullanabilirsiniz. Dosya kayıt işlemlerinde bu değeri kullanabilirsiniz. Ancak aynı saniyede iki işlem olabileceğini göz önünde bulundurun!

Bir Tarihten İleri ya da Geri Bir Tarihi Bulma
Farklı işlemlerde tarihten ileri ya da geri tahileri bulmak gerekebiliyor. Ancak malesef bazı yazılımcı kardeşlerimiz bu tarih bulmaları doğrudan tezt işleme yöntemiyle bulmaya çalışıyor. Aşağıdaki kodlar da kullanılabilir sanki 🙂

<?php
$tarih = "2016-01-02 03:04:05";//text tarih verisi
echo date("Y-m-d H:i:s",strtotime("+1 day",strtotime($tarih)));//bir gün sonrası : 2016-01-03 03:04:05
echo date("Y-m-d H:i:s",strtotime("-1 day",strtotime($tarih)));//bir gün öncesi : 2016-01-01 03:04:05
echo date("Y-m-d H:i:s",strtotime("+1 min",strtotime($tarih)));//bir dakika sonrası : 2016-01-02 03:05:05
echo date("Y-m-d H:i:s",strtotime("+1 sec",strtotime($tarih)));//bir saniye sonrası : 2016-01-02 03:04:06
?>

Umarım faydalı olur. Lütfen yorumlarınızı eksik etmeyiniz 🙂

Php ile Excel Dosyası Oluşturma

Php ile geliştirdiğimiz projelerin bazılarında; özellikle kurumsal kullanım için yapılanlarında, verilerin excel halinde çıktı alınabilmesi talebi ile çok karşılaşılıyor. Bunun nedenleri, alışkanlık ya da firmanın kullandığı programlara verilerin aktarılabilmesi oluyor. Bu işlemi sıkıntısız ve kolay bir şekilde nasıl yapabiliriz, bunu anlatmaya çalışacağım. Bir önceki yazım olan ‘Php ile Excel Dosyasından Veri Okuma’ -da kullandığımız PhpExcel kütüphanesini kullanıcaz yine. Kütüphaneyi bu adresten indirebilirsiniz. Dosya oluşturma işleminde de, okumada olduğu gibi dikkat etmemiz gerekenler var. Eğer verilerin sayısı fazla olursa karşılaşabileceğimiz sıkıntıları veri okuma makalesinde anlatmaya çalıştım. Kod örneğinde; veritabanından alınan $uyeler degiskenindeki ad, soyad ve telefon verilerinin excel çıktısı oluşturuluyor.

<?php
/** kullandigimiz kutuphane cagiriliyor */
include 'Classes/PHPExcel/IOFactory.php';

//$uyeler bu degiskende veri tabanından gelen uyelerin listesi bulunuyor

// Excel Değişkeni ile Classımızı başlatıyoruz.
$Excel = new PHPExcel();
 
// Oluşturacağımız Excel Dosyasının ayarlarını yapıyoruz.
// Bu bilgiler O kadar önenli değil kafanıza göre doldurabilirsiniz.
$Excel->getProperties()->setCreator("Tam Liste")
->setLastModifiedBy("Tam Liste")
->setTitle("Tam Liste")
->setSubject("Tam Liste")
->setDescription("Tam Liste")
->setKeywords("Tam Liste")
->setCategory("Tam Liste");
 
//Excel Dosyasının Sayfasını Adını Belirliyoruz.Ben varsayılan olarak gelen Sayfa1 ' i tercih ettim.
$Excel->getActiveSheet()->setTitle('Sayfa1');
 
//Başlıklar
$Excel->getActiveSheet()->setCellValue('A1', 'Ad');
$Excel->getActiveSheet()->setCellValue('B1', 'Soyad');
$Excel->getActiveSheet()->setCellValue('C1', 'Telefon');

//veriler
$tur = 2;//her tursa bir alt satira gececegimiz icin sayac kullanıcaz
foreach($uyeler as $uye){
	$Excel->getActiveSheet()->setCellValue("A$tur", $uye->ad);
	$Excel->getActiveSheet()->setCellValue("B$tur", $uye->soyad);
	$Excel->getActiveSheet()->setCellValue("C$tur", $uye->telefon);

	//sayac arttırma
	$tur++;
}

//olusturulan excel dosyası kaydediliyor
$Kaydet = PHPExcel_IOFactory::createWriter($Excel, 'Excel5');
$Kaydet->save("tam_liste.xls");

//kullanıcı excel dosyasına yonlendiriliyor
header("location:tam_liste.xls");
?>

Not : Lütfen yorumlarınızı esirgemeyiniz 🙂

Php ile Excel Dosyasından Veri Okuma

Php ile geliştirdiğiniz projelerde; müşterilerinizden, var olan verilerinin excel ile gönderilerek, sisteme işlenmesi yönündeki bir taleple karşılaşmışsınızdır. Bu makalede; bu işlemin php ile kolay, hızlı ve veri kaybı olmadan nasıl yapabileceğimizi anlatmaya çalışacağım. İşlemi, PhpExcel kütüphanesini kullanarak yapacağız. Kütüphaneyi bu adresten indirebilirsiniz. İşlemi gerçekleştirirken dikkat edilmesi gereken birkaç nokta var. Bunları da anlattıktan sonra örnek kodu vereceğim. Bunlardan en önemlisi dosya büyüklüğü. Dosya ne kadar büyük olursa işlem o kadar uzun sürüyor. Bu nedenle büyük dosyalarda “max_execution_time” hatası alabilirsiniz. Eğer kullandığınız sunucu kendinize ait ise “max_execution_time” değerini arttırabilirsiniz, ancak paylaşımlı hosting kullanıyorsanız, dosyayı parçalayarak işlemeniz daha mantıklı. Karşılaşabileceğiniz diğer sorun da dosya büyüklüğüyle ilgili olan “max memory usage” hatası. Diğer hatada olduğu gibi burada da çözüm kullandığınız sunucu/hosting türüne göre değeri arttırmak ya da  dosyayı parçalayarak işlemek. Bu gibi hatalarla karşılaşma durumuna karşı, kod içerisine bir sayaç yerleştirerek, işlem sonunda değerleri karşılaştırmanız, veri kaybının önüne geçmek için önemli. Karşılaştığım son sorun ise, başlık satırı. Dosya işlenirken başlık satırı da okunuyor ve diğer veriler gibi işlenebiliyor. O nedenle bu satıra da dikkat etmekte yarar var. Aşağıda örnek kodu paylaşıyorum. Bir hata ile karşılaşırsanız lütfen bildiriniz. Yorumlarınızı esirgemeyiniz lütfen.

Veri Okuma

&lt;?php
error_reporting(E_ALL);//tüm hata gösterimleri açılıyor.
set_time_limit(0);//max_execution_time değeri olabilecek en üst değere getirliyor

include 'Classes/PHPExcel/IOFactory.php';//kullandığımız kütüphane
$inputFileName = 'dosya.xls';//işlenecek dosya
$objPHPExcel = PHPExcel_IOFactory::load($inputFileName);
$excel_satirlar = $objPHPExcel-&gt;getActiveSheet()-&gt;toArray(null,true,true,true);//excel dosyasındaki aktif sekme kullanılıyor

$i=0;//sayac
foreach($excel_satirlar as $excel_satir){
    $i++;
    //veriler değişkene alınıyor
    $veri_1 = $excel_satir['A'];
    $veri_2 = $excel_satir['B'];
    $veri_3 = $excel_satir['C'];
    $veri_4 = $excel_satir['D'];
    $veri_5 = $excel_satir['E'];

    //bu kısımdan sonra verileri nasıl işlemek istiyorsanız ona göre kodları yazmamış gerekiyor. örneğin veri tabanına kaydetmek.
    }
}
echo $i;//satır sayısını kontrol için en son kaç satırın işlendiğini sayaçtan ekrana basıyoruz.
?&gt;

Not : Her ihtimale karşı okunan verileri sql injection‘a karşı süzmekte yarar var.

Php ile Excel Dosyası Oluşturma için ilgili makaleyi inceleyebilirsiniz.