Eylül 24th, 2010
bugünki yazimizda php ile bircok dosyayi bir zip arsiv i ile nasil indiririz ona bakacagiz.
$file_names = array("dosya1.pdf","dosya2.pdf","dosya3.pdf");
$archive_file_name = "download.zip";
//zip objesi olustur
$zip = new ZipArchive();
// dosyayi olustur
if ($zip->open($archive_file_name, ZIPARCHIVE::CREATE )!==TRUE) {
exit("cannot open < $archive_file_name>\n");
}
//zip e eklenecek olan dosyalari ekle
foreach($file_names as $files)
{
//$file_path.$files filepath dosya yolu, files ise dosya adi,
//ikinci $files parametresi zip deki dosya adi
$zip->addFile($file_path.$files,$files);
}
$zip->close();
//header ile download islemini baslattir
header("Content-type: application/zip");
header("Content-Disposition: attachment; filename=$archive_file_name");
header("Pragma: no-cache");
header("Expires: 0");
readfile("$archive_file_name");
exit;
ziparchive php 5.2 ye den sonra eklenmistir, bundan kücük sürüm kullananlar pecl extension u kurmalari gerekiyor.
Kategoriler: PHP
Etiketler:PHP
Ağustos 25th, 2010
Selamlar,
ben genelde formlarimi client tarafinda Jquery Validate Plugin i ile kontrol ettitirim.
Iki benzer formum var, ikincisinde ama baska alanlarda bulundugu icin onlari da ekstradan kontroll ettirmem gerekiyor.
Tüm js kodunu kopyalayip yeniden yaza biliriz ama, o tabiki güzel olmaz.
onun icin validator a yama yapalim. nasilmi iste böyle:
ana validator dosyamiz :
$(document).ready(function(){
$('form#regit div div.element').append('<div class="errormessage" style="display:inline;"></div>');
var validator = $("form#regit").validate({
ignore: "input[type=hidden]",
rules: {
reg_email: {
required: true,
email: true,
remote: "/an/checkemail/"
},
reg_password: {
required: true,
minlength:4
},
reg_password2:{
required:true,
minlength:4,
equalTo:"#reg_password"
},
agb: "required"
},
messages: {
reg_email: {
required: Message["email_required"],
email: Message["email_notok"],
remote: Message["email_exists"]
},
reg_password: {
required : Message["pass_required"],
minlength: Message["pass_length"]
},
reg_password2: {
required : Message["pass_required"],
minlength: Message["pass_length"],
equalTo: Message["pass_equal"]
},
agb:Message["agb_required"]
},
success: function(label) {
if(label[0].htmlFor=="agb")
label.removeClass('error');
else
label.addClass("valid");
},
errorPlacement: function(error, element) {
if ( element.is(":hidden") ){
element.next().next().html(error);
}
else{
element.next($('div.errormessage')).html(error);
}
}
});
});
yama yaptigimiz dosya:
$(document).ready(function(){
$('#reg_email').rules("add",{
remote: "/ag/checkemail/"
});
$('#company').rules("add",{
required: true,
minlength:4,
messages:{
required:Message["company_required"],
minlength: Message["company_length"]
}
});
$('#branch_id').rules("add",{
required: true,
messages: {
required: Message["branch_required"]
}
});
});
#reg_email de remote adresini degistiriyoruz,
ve iki extra kontrol alani daha ekliyoruz validatorumuza.
Bu satirlar bana özel: Message["email_required"] siz oralara kendi hata mesajlarinizi yaza bilirsiniz.
ps:
bir alana tamamiyle baska kurallar eklemek icinse remove metodunu kullanarak ekli olan kurallari sile bilirsiniz.
$('#reg_email').rules("remove");
Kategoriler: Javascript/Ajax/Jquery
Etiketler:Javascript/Ajax/Jquery, Jquery
Ağustos 20th, 2010
Selamlar,
cok kisa bir kod ekliyecegim lazim oldugunda herkez bula bilsin diye.
Bugün iste ajax ile icerigini doldurdugum bir Jquery UI Dialog caminda Tinymce editorunu göstermem gerekiyordu.
Bir kac gün önceden bu sorunla karsilacagimi bildigim icin Jquery türkiye Mailing liste bir mail atmistim, sagolsun Veysi Ertekin hemen cevab yazdi.
Su Kodla ajaxla gelen bir dialogda tinymce göstere bilirsiniz.
tinyMCE.init({
mode : "textareas",
theme : "simple"
});
tinyMCE.execCommand('mceAddControl', false, "task");
dialog kodunun hemen altina bunu ekleyin tamamdir.
task yazan yere kendi textareanizin idsini yazin;)
ps: form u benim gibi js/ajax ile gönderiyorsaniz, tinymce ozaman textarea ya yazilmasi gereken icerikleri iframe den kopyalamiyor, ajax postu göndermeden onun icin bu fonksiyonu da cagarin.
tinyMCE.triggerSave();
kolay gelsin
Kategoriler: Javascript/Ajax/Jquery
Etiketler:Javascript/Ajax/Jquery, Jquery
Ağustos 16th, 2010
apc nedir:
APC, alternatif PHP önbelleğidir. PHP betiklerini derlemek ve önbelleklemek için özgür, açık ve sağlam bir çalışma ortamı sağlamak adına tasarlandı. APC, yükü ağır olan sitelerde betiklerin çözümlenmesi ve derlenmesinden neredeyse tamamen kurtularak derlenmiş bir durumda önbelleklenmesi için imkan sunarak PHP’nin başarımının arttırılmasını sağlayacak bir yol olarak düşünüldü
apc kurulumuna gecelim, öncelikle en son apc yi buradan indirelim:
cd /tmp && wget http://pecl.php.net/get/APC
indirdigimiz dosyayi acalim:
tar xvfz APC
ardindan su satirlari calistiralim:
cd APC-3.1.4/
phpize
./configure --enable-apc-mmap --with-apxs2 --with-php-config=/usr/bin/php-config
make && make install
ardindan php.ini yi acip Dynamic Extensions satirinin altina bunlari ekliyoruz:
extension="apc.so"
apc.enabled=1
apc.file_update_protection=2
apc.optimization=0
apc.shm_size=32
apc.shm_segments=1
apc.gc_ttl=7200
apc.ttl=7200
apc.num_files_hint=1024
apc.enable_cli=0
ve son olarak apacheyi yeniden baslatiyoruz:
/etc/init.d/apache2 restart
Herseyi dogru yaptiysak phpinfo ya apc adli bir bölüm eklenmis olmali.
phpize icin suse de php5-devel paketi ve ubuntuda php5-dev paketi kurulu olmasi lazim.
Kategoriler: Linux
Etiketler:Linux
Nisan 12th, 2010
Bu yazimizida at ile ileri bir zamanda komut nasil calistirilir ona bakacagiz.
Bana lazim olus sebebi yarin gece Server baska bir Datacentere tasinacak ondan kisa bir zaman önce Serveri kapatmam lazim.
Bunun icin öncelikle atd yi kuralim:
apt-get install at
calistiralim:
/etc/init.d/atd start
ardindan calistirilicak olan komutu ve zamani yazalim:
echo “/sbin/shutdown -h now” | at 22:15 13.05.2010
ardindan atq komutu ile görevi dogru yapmismiyiz diye kontrol ede bilirsiniz.
atq
daha fazla bilgi icin man at
Kategoriler: Linux
Etiketler:Linux
Nisan 10th, 2010
Selamlar,
persembe günü saat 11 de Almanyada Zend Zertifikasi sinavina girdim.
Sinava iki günde PHP Architects’s Zend PHP 5 Certification Study Guide kitabini okuyarak hazirlandim.
Kitabi Zend in sayfasindan satin ala bilirsiniz yada Internetten ebook versiyonunu arayan buluyormus diye duydum 
Kitabin yaninda String ve Array fonksiyonlarinada php.net sayfasindan yeniden göz gecirin derim.
Onun yaninda PHP de XML ile hasir nesir degilseniz, php.net sayfasinda o bölümüde iyice inceleyin.
Sinav gercekten düsünüldügü gibi kolay degil, sorular cok sasirtici, sorulari iyi okuyup ona göre cevap vermek lazim.
Sinavda 90 dakikada tam 70 soru cevaplamaniz gerekiyor.
Sinavdan sonra hemen basarip basaramadiginizi ögreniyorsunuz, tek kötü olan kac puan ile basarip/basaramadiginizi söylememeleri.
Ben sahsen hangi soruya yanlis cevap vermisim görmek isterdim.
Cok kolaylastirilmis sekli olsada, Sinav sorulari hemen hemen nasil Chris Shiflett‘in sayfasinda bir bakin.
Sinav hakkinda sorusu olan Mesaj yazsin yada mail atsin.
Zend Yellow Pages deki yerim:

Kategoriler: PHP
Mart 2nd, 2010
Evet kisa bir süredir yayinlanmasini bekledigim sürüm sonunda yayinlandi, suan icin sadece Windows icin yayinlandi, Mac, Linux, Solaris ve FreeBsd versiyonlari yolda.
Yeni Javascript-Engine ile tam 7 kat daha hizlanan opera, gelistiricilerine göre suanda dünyadaki en hizli Browser durumunda.
Windows 7 ve Html5 destegi gelistirildi ve onun yaninda birde private Tab lar eklendi.
Private Tab da ziyaret edilen sayfalar iz birakmiyor, Tabin kapanmasiyla o sayfaya ait tüm izler yok ediliyor.
Ikinici ayin basinda yayinlanmis bir benchmark testi asagida.

Resimdede görüldügü gibi, opera IE den tam 17.7 kat daha hizli calisiyor.
Herkezin sevgilisi olan Firefox uda ikiye katlamis durumda.
FAzla dicek bir sey yok aslinda, lider kim belli.
Gelistirme hizli, Browser hizli daha bir insan ne isterki
Opera’yi indirmek icin www.opera.com ziyaret ede bilirsiniz.
Kategoriler: Bilgisayar & Internet
Etiketler:opera
Aralık 15th, 2009
haberi duyali bir kac hafta oldu aslinda yazmaya yeni vakit buldum.
Google artik genel bir DNS servisi sunuyor. Amaci bulunan yeni fikirlerle DNS isteklerini daha cabuk sunmasi.
Servis diger google servislerinde oldugu gibi suan icin sadece deney olarak adlandirilmis.
Daha hizli cevaplar icin öncelikle clevere Caching mekanizmasini kullaniliyor. Böylelikle DNS kaydi gecersiz (TTL) kilinmadan DNS-Server kayit bilgilerini yeniliyor ve istek geldiginde google zaten hangi adresi döndürecegini biliyor ondan yeni bir istek yapmasina gerek yok.
daha genis bilgi burada.
Google in DNS Adresleri ise:
8.8.8.8
8.8.4.4
Kategoriler: Bilgisayar & Internet, Genel
Aralık 3rd, 2009
Beni taniyanlar bilir, yillarin operacisiyimdir ve kod yazarken öteki tüm browserleride kullansam özel islerim icin hep opera kullanirim.
Bugün yeni kesfettigim bir servisden bahsetmek istiyorum.
Diger bazi Browserler bu isler icin degisik addon lar kullanmak zorunda olurken Opera 10 ile bircok özellik otomatikman bilgisayariniza yükleniyor.
Servisin adi Opera Unite. Dosya paylasimi, Müzik dinleme, not tutma, arkadaslarla mesajlasma, Statik Websitenizi kendi evinizden host etme, resim paylasimi vs. gibi eylemleri destekliyor.
Mesela :
-arkadasiniza film göndermek istiyorsaniz, operada dosyayi paylasin ve arkadasiniz sizin bilgisayarinizdan sorunsuzca indirsin. Rapidshare e filan yüklemeye gerek yok,
-ayni sey resimlerde tüm arkadaslara resimleri tek tek göndermek artik opera ile yok, resimleri paylasin tüm arkadaslariniz ayni anda hepsini görsünler
-isyerinde yada okulda evinizdeki müzikleri dinlemek istiyorsunuz ama download etme imkaniniz yok, sorun degil evde müzikleri paylasin isyerinden bilgisayariniza baglanip istediginiz mp3 ü dinleyin.
……
Bu sersivi kullanabilmek icin opera 10 yüklü olmasi gerekiyor, birde myopera hesabina ihtiyacinz var.
Myopera hesabini opera unite ilk kullanmak istediginizde olustura bilirsinz 20 saniye sürmez.
Dana beklemeye gerek yok operayi indirin ve deneyin:
Benim opera unite adresim:
Kategoriler: Bilgisayar & Internet
Ekim 1st, 2009
Bir uygulama nekadar büyür, nekadar cok yazar o uygulamada calisirsa, nekadar degisik tür kodlar, kütüphaneler kullanilirsa okadar cok isim cakismasi ola bilir.
En büyük örnegi php 5.1.0 cikmasindan bir kac gün sonra php 5.1.1 cikmasiyle görüldü, bunun nedeni php 5.1.0 da yeni Date adinda bir sinif bulunmasiydi.
Bircok Pear kullanicisi update den sonra Fatal Error larla karsilasmisdi cünki Pear inde Date Sinifi vardi.
Böyle bir cakismadan kacinmak icin simdiye kadar Zend Framework de oldugu gibi Uzun isimler kullanildi (Zend_Controller_Action).
Php 5.3 ile bu uzun isimlerdende kurtulmak mümkün.
php dünyasininen en uzun süre tartisilan seperator u kesinlikle namespace seperator oldu.
Asil cif iki nokta üstüste (::) kullanilicakti ama php dünyasinda cif anlamli olur diye sonunda (\) Backslah isaretinde karar kilindi.
Namespace kullana bilmek icin, php dosyasinda ilk ifade namespace olmasi gerekmektedir, aksi takdirde bir fatal error ile karsilasirsiniz.
mesela:
< ?php
namespace Skorp;
echo "skorp.eu";
Bir namespace bircok dosyayi kapsiya bilir. Dosyalarin her biri ayni namespace i beyan etmeleri gerekir. Asagidaki örnekde göründügü gibi, bir dosya icinde birden cok namespace bulunmasinada izin veriliyor.
<?php
namespace Skorp
{
echo "skorp.eu";
}
namespace Foo
{
echo "foo.com";
}
Ama asagidaki örnege izin verilmiyor, en az bir namespace beyan edilmisse onun disinda herhangi bir kod olamaz.
<?php
namespace Skorp
{
echo "skorp.eu";
}
echo "gohome";
alinan hata mesaji:
Fatal error: No code may exist outside of namespace {} in
Bir örnek ile namespaceleri nasil kullanacagimizi bakalim.
< ?php
namespace Skorp
{
class Test {}
}
namespace Foo
{
class Test{}
}
namespace Bar
{
var_dump(new \Foo\Test());
}
Bar namespace i icinde Foo namespacindeki Test sinifini olusturuyoruz.
var_dump satirini su sekilde yazmis olsaydik:
var_dump(new Foo\Test());
söyle bir hata ile karsilasicaktik.
Fatal error: Class ‘Bar\Foo\Test’ not found in
Bundan Adreslemeye dikkat etmemizi cikartiyoruz, normal bilgisyardaki Dosya Yapisi gibidir namespace de basta \ isareti yoksa kendi namespace icinde ara o sinifi.
Alias Mekanizmasi
Herzaman \Foo\Test veya daha uzayan satirlar kullanmamak icin Alias mekanismasini kullana biliriz.
namespace Bar
{
use Foo\Test as anton;
var_dump(new anton());
}
daha kisa yazmak icin
namespace Bar
{
use Foo\Test;
var_dump(new Test());
}
Bu kisa yöntemde en son bilesen adi kullanilir alias olarak yani bizim örnegimizde Test
dikkat edilmesi gereken birsey daha var alias mekanizmasini kullanirken \ yazmamiza gerek yok, php burda sinif adinin tam yolunu bilmek istiyor.
Fonksiyonlarda bilinmesi gereken ise, onlara birer Alias veremiyoruz, ondan fonksiyonun tüm adini yazmak gerekiyor.
yazilan fonksiyonlar ilk önce kullanilan Namespace icerisinde aranmaktadir, eger orada bulunmadiysa, global Namespace de aranir.
Mesela strlen adinda bir fonksiyonumuz varsa ama biz php nin bize sunmus oldugu strlen fonksiyonunu kullanmak istiyorsak ozaman basina bir \ koymamiz gerekiyor
echo \strlen("blabla");
son olarakda hangi namespace de oldugumuzu görmek icin _NAMESPACE_ Konstansini cagara bilirsiniz.
Kategoriler: PHP
Etiketler:PHP, php 5.3