Kategori arşivi: Php

Bir programlama dili olan php ile ilgili makaleler ve yazılar.

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.

Php ile Ftpden Dosya Transferi

Php ile standart olarak move_uploaded_file() fonksiyonunu kullanarak, istenilen dosyayı sunucu üzerine kayıt etmek mümkün, ancak ftp üzerinden dosya yazma izni vermek sakıntılı durumlar oluşturabileceğinden, ftp yardımıyla dosya transfer etmek daha güvenli olabilir. Bir diğer neden ise uzak sunucuya dosya yükleme ihtiyacı gerekliliği olduğunda kullanmak. Bu makalede dosya yükleme ve silme olmak üzere iki örnek vericem. Umarım faydalı olur.

Dosya Yükleme

<?php
$ftp_adres = 'sakinadam.com';
$ftp_k_adi = 'ftp kullanici adi';
$ftp_sifre = 'ftp sifre';
$kaynak	   = 'kaynak url';//kaydedilecek olan dosyanın kaynagı, dosya yüklemelerde $_FILES["myfile"]["tmp_name"] de kullanabilirsiniz
$hedef     = 'hedef url';//hedef sunucuya yüklenirken hangi url ile yüknecek. örn: resim.jpg


$baglanti = ftp_connect($ftp_adres);
ftp_login($baglanti, $ftp_k_adi, $ftp_sifre);
ftp_chdir($baglanti, 'public_html/images');
ftp_put($baglanti, $hedef, $kaynak, FTP_BINARY);
ftp_close($baglanti);
?>

Dosya Silme

<?php
$ftp_adres = 'sakinadam.com';
$ftp_k_adi = 'ftp kullanici adi';
$ftp_sifre = 'ftp sifre';

$baglanti = ftp_connect($ftp_adres);
ftp_login($baglanti, $ftp_k_adi, $ftp_sifre);//baglanti yapiliyor
ftp_delete($baglanti, 'public_html/resim.jpg');//dizin ve dosya belirleniyor
ftp_close($baglanti);//baglanti kapatiliyor
?>

Php yardımıyla ftp işlemleri yaparken dikkatli olmanız gerekiyor. Bir dosya yüklerken aynı isimde bir dosya varsa direkt üzerine yazıyor ve size herhangi bir işlem onay sorusu sormuyor. Silme işleminde de durum aynı.

Php ile Mail Gönderme

Kullanıcı onaylamak, bülten göndermek gibi durumlarda php ile mail göndermeye ihtiyaç duyuyoruz. Basit olarak php’nin mail fonsiyonuyla bu işlemi gerçekleştirebiliz ancak; spama düşme, eksik gönderim gibi durumlardan dolayı kütüphane kullanmak en mantıklısı. Php için bir çok mail kütüphanesi yazılmış ancak en basiti ve kullanışlısı kuşkusuz PhpMailer. Önce kütüphanenin nasıl indirileceğini anlatayım sonra nasıl kullanılacağını anlatalım. Kütüphaneyi indirmek için bu adrese gidin ve sağ kısımda bulunan “Download ZIP” butonuna tıklayın. Benim anlatacağım kısım için, ana dizindeki üç dosyayı kullanıcaz(class.phpmailer.php,class.pop3.php,class.smtp.php).

PhpMailer ile iki farklı şekilde Mail Gönderme mümkün. İlki smtp kullanarak mail göndermek. Bu yöntemde; mail adresinizin kullanıcı adı ve şifresi ile giriş yapılır ve mailiniz bu şekilde gönderilir. Kullandığınız sunucu dışındaki bir yerden mail gönderecekseniz bu yolu kullanmak mantıklı. Örneğin gmail. Ancak aynı sunucu üzerindeki bir mail adresini kullanacaksanız pop3 yöntemini kullanmanızı daha iyi olur. Aynı sunucu üzerinde ise hem aralarında fark yoktur hem de smtp ile göndermek biraz daha sunucuyu yorabilir.

Php Smtp ile Mail Gönderme Örneği (include edilen dosyalar ile aynı dizindedir):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>PHPMailer - SMTP test</title>
</head>
<body>
<?php

//Zaman dilimi
date_default_timezone_set('Etc/UTC');

require_once 'PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer();
//turkce karakterler icin
$mail->CharSet='utf-8';
//Tell PHPMailer to use SMTP
$mail->isSMTP();
//Hataların Gösterilmesi kapalı için false, kullanıcı hataları için 1, hem kullanıcı hem de sunucu hataları için 2
$mail->SMTPDebug = 2;
$mail->Debugoutput = 'html';
//mail sunucusunun adresi
$mail->Host = "mail.example.com";
//mail sunucusunun portu
$mail->Port = 25;
//yukarıdaki iki bilgiyi bulamazsanız, ilgili mail adresini thunderbird gibi bir mail istemcisine kurun ve bağlantı bilgilerine bakın.
$mail->SMTPAuth = true;
//kullanıcı adı
$mail->Username = "yourname@example.com";
//şifre
$mail->Password = "yourpassword";
//mail kimden geliyor gibi görünecek.
$mail->setFrom('from@example.com', 'First Last');
//cevapla butonuna bastığında kimin mail adresine gönderilecek.
$mail->addReplyTo('replyto@example.com', 'First Last');
//mail gönderilecek adres
$mail->addAddress('whoto@example.com', 'John Doe');
//mail konusu
$mail->Subject = 'PHPMailer SMTP test';
//mail gövdesi. bu örnekte harici bir html dosyasından alınıyor ancak düz yazı da yazabilirsiniz.
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//bu kısım önemli. mail yüklenirken vb. durumlarda bu yazı görünüyor.
$mail->AltBody = 'This is a plain-text message body';
//dosya eklemek isterseniz bu şekilde ekliyorsunuz.
$mail->addAttachment('images/phpmailer_mini.gif');

//mail gönderme işlemi.
if (!$mail->send()) {
    echo "mail gönderilemedi: " . $mail->ErrorInfo;
} else {
    echo "mail başarıyla gönderildi.";
}
?>
</body>
</html>

Php Pop3 ile Mail Gönderme Örneği (include edilen dosyalar ile aynı dizindedir):

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>PHPMailer - mail() test</title>
</head>
<body>
<?php
require_once 'PHPMailerAutoload.php';

$mail = new PHPMailer();
//turkce karakterler icin
$mail->CharSet='utf-8';
//mail kimden geliyor gibi görünecek.
$mail->setFrom('from@example.com', 'First Last');
//cevapla butonuna bastığında kimin mail adresine gönderilecek.
$mail->addReplyTo('replyto@example.com', 'First Last');
//mail gönderilecek adres
$mail->addAddress('whoto@example.com', 'John Doe');
//mail konusu
$mail->Subject = 'PHPMailer mail() test';
//mail gövdesi. bu örnekte harici bir html dosyasından alınıyor ancak düz yazı da yazabilirsiniz.
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));
//bu kısım önemli. mail yüklenirken vb. durumlarda bu yazı görünüyor.
$mail->AltBody = 'This is a plain-text message body';
//dosya eklemek isterseniz bu şekilde ekliyorsunuz.
$mail->addAttachment('images/phpmailer_mini.gif');

//send the message, check for errors
if (!$mail->send()) {
    echo "mail gönderilemedi: " . $mail->ErrorInfo;
} else {
    echo "mail başarıyla gönderildi.";
}
?>
</body>
</html>

Bu iki örnekten birisini seçerek Php ile Mail Gönderebilirsiniz. Toplu mail gönderecek olanlara kıs bir uyarı yapayım. Mailleri seri bir şekilde arka arkaya gönderirseniz spam’a düşme ihtimali artar, gmail kullansanız bile. O nedenle aralıklarla yavaş yavaş göndermenizi öneririm.