Türk Telekom Ankastre Kutusu Hizmet Sorunu

tttYeni bir eve taşındım evlilik nedeni ile taşındığım binada herhangi bir internet alt yapısı bulunmamakta yani kimsenin internet ihtiyacı olmamış bunun için bir kaç kez başvuru yaptığımda da ankastre kutusu olmadığından sözleşmelerimin iptal olduğunu öğrendim sonrasında bu hizmeti almak için Türk Telekom Beyoğlu şubesine dilekçe verdik fakat anladığım kadarıyla her bir hizmeti sorunlu olan Türk Telekom bunda da sorunlu görünmekte. Şubeyi aradığım zamanlarda telefonu düşürüp durum hakkında bilgi alabilirseniz ne ala düşüremezseniz heralde bir hafta aramanız gerekiyor çünkü telefonları açan yok karşınızda düzgün bir muhatap bulamıyorsunuz!

Bi ara düşürüp durum hakkında bilgi aldığımda 574. sırada olduğumu öğrendim aradan yaklaşık 3 hafta sonra yeniden aradığımda ise 600 küsürüncü sırada olduğumu öğrendim ya araya tanıdıklar vasıtası ile kişileri alıyorlar ya da bir kişi umudu kesince herhalde 50 – 100 tane yeniden dilekçe veriyor.

Şimdi telefondaki bayanın beyanatı bir günde 10 tane de kutu takılabilir 1 tane de bu da demek oluyor ki bana yaklaşık bir 6 ay gelmeyecek bu hizmet. Bu durumu çözebilmek adına superonline gibi değişik internet hizmeti veren firmaları aramama rağmen onlarında bu hizmet ( ankastre kutu ) gelmeden işlem yapamayacaklarını öğrendim.

İstanbul gibi bir yerde bir hizmeti getirmek nasıl bu kadar zor oluyor anlayabilmiş değilim. Bir işiniz de düzgün olsun Türk Telekom!.

phpStorm ve svn sifre problemi

Selamlar oncelikle bu islem mac os x de yasadigim bir problem diger platformlarda bu tarz bir sorun yasanmiyor olabilir. Problem phpStorm un svn sifresini kaydedemesi idi. Yani her actigim da ctrl + t ile projeyi svn up yaptigimda yeniden ve yeniden surekli svn sifresini istemesiydi ki bu bi sure sonra sinir bozucu olmaya basladi bende arastirdim bir cozum buldum paylasayim dedim.

Oncelikle keychain.app ‘i calistiriyoruz ve soldaki sekmeden login‘i seciyoruz sag orta kisimdan ise ilgili svn repo adresinizi cift tiklayip aciyorsunuz ardindan yeni acilan pencerede access control tabini seciyorsunuz orada izin verili program olarak phpStorm’u goreceksiniz onu allow all programs yapip kaydet diyorsunuz ve artik her yeni acilislarda svn sifresi istemesinden kurtuluyorsunuz.

konuyle ilgili ornek resim asagidadir.

Mac os x şifre resetleme

Selamlar bugun bir imac in sifresinin resetlenmesini istediler nasil yaparim derken bir kac secenek buldum. secenekler arasinda boot cd vs var ama bunlar heran yaninizda olmayabilir. Onun icin daha kisa bir yol buldum yazayim dedim hemen.

Oncelikle mac’nizi reboot edin sonrasinda ise command + s tusna basili tutun mac single user mod da acilacak ve komut satirina dusecektir. Komut satirina dustukten sonra sirayla asagidaki komutlari uygulayin

# fsck -fy
# mount -uw /
# rm /var/db/.applesetupdone
# reboot

Bu islemlerden sonra mac’iniz ilk kurulum sonrasi ayarlara donecektir yeni bir kullanici olusturduktan sonra sifresini unuttugunuz kullanicin system preferences dan degistirip yeni kullaniciyi silebilirsiniz.
 

base64 xss açığı hakkında

Selamlar bugun almis oldugum bir mailde cok buyuk aciklar oldugu  soyleniyordu hemen kisiyle iletisime gectim kritik aciklar nelerdir vs diye bunun xss acigi oldugunu ogrendim. Biraz daha detaya inerek asagidaki kullanima benzer bir sekilde xss yedigini ogrendim

Base64 xss e ornek bir kod blogu;

<img src="data:image/gif;base64,R0lGODdhMAAwAPAAAAAAAP/// 
  ywAAAAAMAAwAAAC8IyPqcvt3wCcDkiLc7C0qwyGHhSWpjQu5yqmCYsap 
  yuvUUlvONmOZtfzgFzByTB10QgxOR0TqBQejhRNzOfkVJ+5YiUqrXF5Y5 
  lKh/DeuNcP5yLWGsEbtLiOSpa/TPg7JpJHxyendzWTBfX0cxOnKPjgBzi 
  4diinWGdkF8kjdfnycQZXZeYGejmJlZeGl9i2icVqaNVailT6F5iJ90m6 
  mvuTS4OK05M0vDk0Q4XUtwvKOzrcd3iq9uisF81M1OIcR7lEewwcLp7tu 
  NNkM3uNna3F2JQFo97Vriy/Xl4/f1cf5VWzXyym7PHhhx4dbgYKAAA7">

Normalde bu adresdeki xss classini kullanmaktayim fakat baslikta da belirtmis oldugum base64 ile gelen xss verilerini suzemiyordu.

Çözüm için daha guncel bir xss filter sinifi kullanabilirsiniz ya da varsa kendi xss filterlariniza yazmis oldugum regex desenini ekleyebilirsiniz.

preg_replace('#(<[^>]+?;base64,.+>|<[^>]+?.+;base64,.+>.+<\/.+>)#','',$str);

Kaynak: http://palizine.plynt.com/issues/2010Oct/bypass-xss-filters/

centos vsftpd kurulumu ve chroot listesinin ayarlanmasi

Selamlar bugunlerde beni bir yazma hevesi sardi. Yine bugun ihtiyac geregi centos kurulu bir sunucuya ftp kurmam gerekti. bunu sizlerle de paylasayim istedim. vsftpd server uzaktan sizin sunucunuza ftp ile baglanilmasini saglayan bir aractir.

Hemen kuruluma gecelim. Centos uzerinden anlatacagim icin ben yum paket sistemi ile kuruyorum debian ve turevlerinde apt-get ile paket aratip kurabilirsiniz.

Oncelikle

yum install vsftpd

diyerek vsftpd kuruyoruz. Kurulum bittikten sonra /etc/vsftpd altina yapilandirma dosyalarini olusturmaktadir. Ardindan vim ya da nano ile

/etc/vsftpd/vsftpd.conf

dosyasini acalim ve dosya icindeki ayarlari asagidaki ile degistirelim.

anonymous_enable=NO
connect_from_port_20=NO
chroot_list_enable=YES (basindaki # kaldirin)
chroot_list_file=/etc/vsftpd/chroot_list (basindaki # kaldirin)

daha sonra kaydedip cikabilirsiniz. Simdi chroot listemiz icin yukarida belirtmis oldugumuz dosyayi olusturalim

touch /etc/vsftpd/chroot_list

buraya kadar bir problemle karsilasmadiysaniz eger simdi bir kullanici tanimlayalim.

adduser ysfkc
passwd ysfkc

dedikten sonra sifrenizi giriniz. Son olarak yeni kullanicimizi chroot_list icine yazmaliyiz ki sadece kendi dizini icine hapsolsun bir ust dizinlere goz atamasin vim ya da nano ile

/etc/vsftpd/chroot_list

dosyasini acip icine ysfkc ( siz kendi kullanici adinizi yazin ya da olusturdugunuz kullanici adlarini ) kaydedip cikiniz evet her şey tamam artik vsftpd yi baslatabiliriz.

chkconfig --levels 235 vsftpd on // reboot edildikten sonra otomatik baslar
service vsftpd start

evet vsftp de basladigina gore filezilla gibi bir client ile denemesini yapabilirsiniz gule gule kullaniniz.

Eger bunlara ragmen ftp ye baglanamiyor veya baglanip dosya olusturamiyorsaniz muhtemelen selinux aciktir asagidaki komutlari sirayla calistiriniz.

setsebool -P allow_ftpd_full_access 1
setsebool -P ftp_home_dir 1

Nginx Load Balancer ve Nginx – Php-Fpm web sunucu kurulumu

Merhabalar bugun openx cluster yaparken nginx load balancer kullanmak zorunda kaldim bugun ki yasadigim deneyimleri de size aktarayim dedim. Benim yaptigim cluster yapi da 1 adet load balancing yapacak server 2 adet web server 1 adet veritabani  mevcuttu.

Kurulumlari Centos 6.x surumune gore anlatacagim diger dagitim veya versiyonlar icin de aynisidir muhtemelen. Oncelikle yapmamiz gereken tum centos sunuculara nginx reposunu ve remi reposunu yuklememiz gerekiyor.

Nginx reposu icin asagidaki satirlari /etc/yum.repos.d altine nginx.repo adinda dosya olusturup icine yazip kaydetmeniz gerekiyor.

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1

Remi reposunu kurmak icin de /etc/yum.repos.d dizini altina remi.repo adinda dosya olusturup asagidaki satirlari icine yazip kaydettiginiz vakit tamamlanmis olacaktir.

[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

Repolarimizi ekledigimiz varsayarak ilerliyorum komut satirinda asagidaki yum komutunu uygulayin. LB icin php kisimlarini yazmayabilirsiniz. Fakat webler icin php yuklemelisiniz.

yum install nginx php php-fpm php-cli php-mysql php-pdo php-pear php-gd

bu komutla birlikte nginx ve php sistemimize kurulacaktir.

Kurulumlar tamamlandigina gore artik ayar islemlerine gecebiliriz.

Server listemizi hazirlayalim.

LB Ip: 10.1.1.1
Web1 Ip: 10.1.1.2
Web2 Ip: 10.1.1.3
Web3 Ip: 10.1.1.4 ( ayrica veritabani sunucusudur )

Ilk olarak Web 1, Web 2, Web 3 sunucumuzda php’yi yapilandiralim sirasiyla

  1. /etc/php.ini dosyasini vim ya da nano ile acip date.timezone satirinin basindaki ; kaldirarak su sekilde degistirelim. date.timezone=”Europe/Istanbul”
  2. cgi.fix_pathinfo degerini 0 yapalim.

Simdi nginx yapilandirmasina gecelim. Yine web sunucu olarak isaretledigimiz sunucularda /etc/nginx/conf.d/default.conf dosyasini acalim.

location / {
root /usr/share/nginx/html;
index  index.html index.htm;
}

yukaridaki index ile baslayan satira index.php ekleyelim yani asagidaki gibi olmasi gerekiyor

location / {
root /usr/share/nginx/html;
index  index.php index.html index.htm;
}

yine ayni dosya icindeki asagidaki satirlari bulup basindaki # leri silelim.

location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass unix:/tmp/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

bu sekilde duzenleyelim. SCRIPT_FILENAME kismini duzenlemeyi unutmayin :) root parametresinde web root dizinini belirtmeniz gerekiyor bunu da unutmayalim.

Nginx ayarlarini da yaptiktan sonra php-fpm yapilandirmasina gecebiliriz. vim ya da nano ile /etc/php-fpm.d/www.conf ile dosyayi acip

listen = 127.0.0.1:9000

olan satiri asagidaki satir ile degistirelim.

listen = /tmp/php5-fpm.sock

daha sonra kaydedip cikalim bunu yapmamizdaki amac php-fpm unix socket kullandigi icin TCP overhead olayindan kurtulmamizi saglar.

Tum ayarlari yaptiktan sonra web sunucularinda asagidaki

chkconfig --levels 235 nginx on
chkconfig --levels 235 php-fpm on

komutlari uygulayalim bunlar sunucular reboot edildiginde acilista otomatik baslayacaktir sonrasinda ise

service php-fpm start
service nginx start

komutlarini uygulayin. Son olarak web 3 sunucusuna da dilerseniz

yum install mysql

diyerek mysql veritabanini yukleyin.

Evet web sunuculari ile ayarlarimizin sonuna geldik. Simdi load balancer yapacak sunucumuzu yapilandirmaya. Load balancer sunucusuna sadece nginx kurmustuk.

Load balancer olacak sunucumuz da vim ya da nano ile /etc/nginx/conf.d/default.conf u aciniz ve server { ile baslayan satirin hemen ustune asagidaki satirlari ekleyiniz.

upstream lb_units {
server 10.1.1.2 weight=10 max_fails=3 fail_timeout=30s;
server 10.1.1.3 weight=10 max_fails=3 fail_timeout=30s;
server 10.1.1.4 backup max_fails=3 fail_timeout=30s;
}

daha sonra ayni dosya icinde biraz asagida

location / {
root /usr/share/nginx/html;
index index.html index.htm;
}

satirlarini bulacaksiniz bu satirlari asagidaki gibi degistirip kaydedip dosyadan cikiniz.

location / {
#root /usr/share/nginx/html;
#index index.html index.htm;
proxy_pass http://lb_units; # Load balancing
}

ardindan

chkconfig --levels 235 nginx on

bu komutu uygulayalim ki load balancer sunucumuz da yeniden baslatildiginda nginx acilista otomatik baslasin.

asagidaki komutu uygulayarak nginx’i baslatalim.

service nginx start

test edelim hersey yolunda gittiyse sistemimiz calisacaktir.

dipnot: yazim hatalarim varsa kusura bakmayin

Mysql Wait Timeout Özelliği Hakkında

Baya uzun bir zaman olmuş yazmayalı bu da cok da uzun bir yazi olmayacak zaten. Gecenlerde bir tool yazarken surekli mysql server has gone away hatasi almaktaydim bunun sebebinin de my.cnf de olan bir ozellikten ( wait_timeout ) kaynaklandigini biliyordum fakat bu ozellgin ( wait_timeout ) degerini de degistirmem bize sorun yasatacagindan nasil bu sorunu asabilirim diye arastirirken bir sql cumlecigine rast geldim.

Mysql baglantiyi sagladiktan sonra SET SESSION wait_timeout = 3600; sorgusunu calistirirsaniz sayet sadece o anki session icin wait_timeout degeri 1 saat olarak ayarlanacak ve muhtemelen surekli yasadiginiz has gone away hatasini deklare etmis olacaksiniz.

wait_timeout ozelligi mysqle acilan bir baglantinin maksimum bekleme suresidir eger wait_timeout degeri boyunca bir islem yapmazsaniz mysql bağlantiniz zaman asimina ugrar ve siz bir sorgu calistirdiginizda muhtemel has gone away alirsiniz.

 

dipnot: eksik ya da hatali bilgi var ise yorumlardan duzeltebiliriz :)

CentOS yum uçtu rpm de gitti ne yapıcaz.

Dün gece bir arkadaşım için centos 5.7 kurulu bir sunucuya bir takım programlar yüklerken bir baktım yum ( apt-get in gözünü seveyim :) (yazarın debian sever olduğu anlaşılıyor)) gitmiş haliyle rpm de çalışmıyor ne yapsam nafile…

Biraz araştırdıktan sonra bir çözüm buldum. Uygun bir rpm-4.4.2 paketini bulup indirmeniz gerekiyor. Sonra aşağıda ki gibi işlemler yaparak geri getirebilirsiniz.

# cd /tmp
# mkdir  rpm
#  cd rpm
# wget http://mirror.centos.org/centos/5.7/os/x86_64/CentOS/rpm-4.4.2.3-22.el5.x86_64.rpm
# rpm2cpio  rpm-4.4.2.3-22.el5.x86_64.rpm | cpio -idmv
# mv usr/lib/rpm /usr/lib/rpm
# rpm --rebuilddb
# yum clean all
# yum update

denildiğin de yum ve rpm yeniden geliyor. Böyle bir tecrübe edindik dün gece.

Saygılar.

kaynak: http://www.centos.org/modules/newbb/print.php?form=1&topic_id=15979&forum=38&order=DESC&start=0

Resim Upload Sınıfı

Bir çoğumuz uygulamalarımızda dosya uplaodı illaki kullanmışızdır. Özellikle de resimlerle ilgili uploadlar olduğunda zaman zaman resize, watermark ve crop gibi işlemler için bir sürü site dolaşmışızdır ya da zamanla artık kendi sınıflarımızı yazıp hali hazır uygulamalarda onları kullanmışızdır. Ben de geçenlerde keşfettiğim bir sınıfı sizle paylaşmak istedim. Colin Verot ‘un yazmış olduğu dosya upload sınıfından bahsedeceğim.

Bu sınıf sadece resimlere yönelik bir upload sınıfı ve desteklediği formatlarda PNG,JPG,GIF ve BMP dir. Bunlar üzerinde türlü türlü işlemleri kolayca yapabilir ve uygulamalarınıza kolayca dahil edebilirsiniz.

Gelin şimdi bir örnekle açıklayalım.. Örneğimizde bir resmi kesip biçelim, watermark ve üstüne bir de yazı yazalım.

Öncelikle upload işlemi için formumuzu oluşturalım:

 

Şimdi ise upload işlemini yapacağımız dosyayı oluşturalım:

< ?php
 
# Upload Sınıfımızı Dahil Ediyoruz
include_once('class.upload.php');
 
# Sınıfımızı Başlatıyoruz.
$upload = new upload($_FILES['image_field']);
 
# Dosya Yüklenmiş mi ?
if ($upload->uploaded)
{
	$upload->file_auto_rename = true;
	$upload->image_resize = true;
	$upload->image_x = 500;
	$upload->image_ratio_y = true;
	$upload->image_text = 'ysfkc.com';
	$upload->image_text_color = '#ffffff';
	$upload->image_watermark = 'watermark.png';
	$upload->process('upload');
 
	if ($upload->processed)
	{
		echo 'Resim Yüklendi ve İstenilen İşlemler Uygulandı.';
		echo ''.$upload->file_dst_name.'';
 
		$upload->clean();
	}
	else
	{
		echo 'Resim Yüklenemedi: '.$upload->error;
	}
}
?>

Upload dosyamızda neler yaptığımıza kısaca bir göz atalım isterseniz.

  • İlk satırımızda upload için kullanacağımız upload sınıfımızı dahil ediyoruz.
  • Diğer satırımızda ise upload sınıfı başlatırken formdan gelen image kutucuğumuzun ismini belirtiyoruz. Yani sınıfta __construct() (yapılandırıc metot) uygulanmış ve bizden işlem yapacağı image kutucuğunun ismini vermemizi istiyor.
  • Daha sonra if koşulumuz ile dosyanın yüklenip yüklenmediğini kontrol ediyoruz. Eğer dosyamız başarıyla yüklendiyse $upload->uploaded değişkenimiz true ( doğru ) olarak dönmekte eğer yüklenmemişse false ( yanlış ) olarak dönmekte.
  • Sonraki satırımızda ise dosyamıza otomatik olarak bir isim verilmesini $uplolad->file_auto_rename özelliğini true yaparak sağlıyoruz.
  • Ardından resmimizi resize yapacağımız için $upload->image_resize özelliğimizi de true yaparak aktif ediyoruz.
  • Daha sonra resmimizin genişliğini 500 px olarak belirliyoruz $upload->image_x ile.
    $upload->image_ratio_y parametresini true yaparak yüksekliği kendisi otomatik olarak almasını sağlıyoruz. Böylelikle resmin bozulmasını da engellemiş oluyoruz.
  • Daha sonra yüklenen resmimize $upl0ad->image_text ile üzerine yazılmasını istediğimiz yazıyı belirtiyoruz.
  • $upload->image_text_color ile de üzerine yazılacak yazının rengini ayarlıyoruz.
  • $upload->image_watermark ile de resmimizin üzerine hangi resmi birleştirmek istiyorsak onu belirtiyoruz.
  • Daha sonra $upload->process() metodu ile de resmimizin hangi dizine yükleneceğini belirliyoruz.
  • Ardından yine bir if koşulu ile resmin istediğimiz dizine taşınıp taşınmadığını kontrol ediyoruz eğer resmimiz tüm işlemler yapılıp taşındıysa ekrana resim yüklendi diye yazdırıyoruz yok eğer problem oluştuysa else kısmında hata mesajını yazdıryoruz.

Evet umarım birilerinin işine yarar Örneğimizi buradan indirebilirsiniz. Ve upload sınıfı ile ilgili diğer tonla özellik için de buraya tıklayarak göz atabilirsiniz.

Php Adapter Design Pattern

Merhaba arkadaşlar çok uzun bir aradan (3 ay) sonra ancak fırsat bulabildim. Bloğa yazamamamın sebeplerinden bazıları işi bıraktım ve yeni firmam da işe başladım bu zaman zarfı sürecinde yeni işime alıştım üç ay kadar ceviz.net yöneticilerinden Sercan Virlan ile beraber çalışma imkanı buldum ve şuan da yeni iş yerimde mutlu ve huzurluyum.

Konuya gelecek olursak bu yazıda daha önceki bahsettiğim singleton pattern ile paralel olan bir başka pattern, adapter pattern hakkında bilgi vermeye çalışacağım. Adapter pattern nerelerde kullanılır gerekli midir değil midir buna karar verecek olanlar sizlersiniz ama gerçek anlamda bir MVC yapısı kullancaksak artık bu oop mimarisi ve design patternlere önem vermeliyiz.

Adapter patterni şöyle izah edebiliriz bir düşüneyim ımmm bir firmada çalışan bir a elemanı var bu a elemanı bir proje geliştirmiş ve işten bir süre sonra ayrılmış daha sonra ise işe siz başlamışsınız ve o projeye ek bişeyler yapmanız isteniyor ancak a elemanı kendine göre yazdığı için ufak bir kod değişikliği demek tüm projeyi baştan sona kontrol etmek anlamına geldiği için iş biraz sıkıcı ve yorucu olacaktır. Adapter pattern ile mevcut koda ( interface, abstract class ) extends ederek türetilen yeni bir interface veya abstract class yaparak mevcut projeyi bozmadan işimizi kolay halletme yoludur diyebiliriz. Örnek vermek istedim çünkü böyle daha kolay anlaşılır diye düşündüm.

Şimdi bizim a elemanı ne yapmış olsun bir tane interface tanımlasın ve bu interface sadece girilen ismi ekrana yazdırmak için kullanılan bir arayüz olsun aşağıdaki gibi

< ?php
interface isim
{
	public function getName($name);
}
?>

Bu arayüze (interface) uygun sınıfınıda yazmış olsun.

< ?php
class name implements isim
{	
	public function getName($name)
	{
		echo $name;
	}
}
?>

Evet a elemanı tasarladığı arayüz üzerine sınıfınıda yazmış oldu. Ama hiç bir zaman kendisinin işi bırakacağını ve kendisinden sonra gelen birisinin buna ekleme yapması ihtimalini düşünmeyerek kodunu tamamladı. Derken işi bıraktı biz başladık işe ve bizim bu arayüze eklemeler yapmamız gerekti. Ancak arayüzü değiştirirsek bu sefer ona bağlı tüm classlarıda yeniden düzenlemek zorunda kalacağız. Çünkü arayüzle birleştirilmiş class birleştiriliği arayüz ile birebir aynı olmak zorundadır.

Yani biz tutupda arayüzü şu hale getiremeyiz.

< ?php
interface isim
{
	public function getName($name);
	public function getData();
}
?>

Bu şekile çevrilirse arayüz buna bağlı olan tüm classlar hata verecek ve işin içinden çıkılmaz bir hal alacaktır. Peki o zaman ne yapacağız mevcut yapıyı bozmadan nasıl kendi istediğimiz özellikleri bu isim arayüzüne ekleyeciz ? Classlar nasıl ki extends ile nasıl türetiliyor ise arayüzlerde bu şekilde türetilmektedir.

Derken biz bu arayüze bir metot daha tanımlamamız gerekti bu da ne olsun getSurname() metodu olsun yani girilen bir soyadını ekrana yazsın. Ama bunu yaparkende mevcut classları bozmasın.

Bunun içinde arayüzden arayüz türeteceğiz

< ?php
interface yeni_isim extends isim
{
	public function getSurname($surname);
}
?>

Hemen buna uygun sınıfımızı da yazalım

< ?php
class new_name implements yeni_isim
{	
	public function getName($name)
	{
		echo $name;
	}

	public function getSurname($surname)
	{
		echo $surname;
	}
}
?>

Evet herşey bu kadar. Yeni sınıfımızı istediğimiz arayüze kolayca adapte etmiş olduk. Bir kaç açıklama daha yapmak gerekirse Name Classı sadece getName() metodunu çalıştırır getSurname() metoduna erişim yapamaz ancak New_Name Classı ise hem getName() hem de getSurname() metotlarına ulaşabilir çünkü yeni_isim arayüzünden türetildiği için getSurname() metodunu barındırmak zorunda kaldı yeni_isim de isim arayüzünden türetildiği için aynı zamanda getName() metodunu da barındırmak zorunda kaldı.

Örnek kullanımlarını da gösterelim daha anlaşılır olsun.

< ?php
$name = new name;
$name->getName('yusuf');
$name->getSurname('koç'); // Php Hata verecektir.

$new_name = new new_name;
$new_name->getName('yusuf');
$new_name->getSurname('koç');
?>

Görüldüğü üzere Adapter Pattern bu kadar.