PHP ve NameSpace Kullanımı

Standard

Merhaba arkadaşlar,

Bugün hayatımıza php 5.3 ile birlikte giren bir yeniliği geçte olsa size bahsetmek isterim. NameSpace yani yani İsim Alanları..
Peki neye yarar? PHP’de benzer isimdeki class,constant ve function’ları aynı sayfa/proje içerisinde kullanmamızı sağlar ve daha okunabilir ve anlamlı object mimarileri kurmamızı sağlar. Windows File System olarak kafanızda canlandırabilirsiniz. C:\Onur\test.txt dosyasını düşünelim; aynı dosyadan bir tane daha koymamız durumunda hata verecektir ve üzerine yazacaktır ama C:\Tester\test.txt şeklinde koyarsak aynı sürücüde farklı dizinlerde aynı isimde farklı dosyalar olabilir. İşte buradaki Onur ve Tester dizinlerini namespace gibi canlandırabilirsiniz gözünüzde.

Heman bir örnek ile somutlaştırmak istiyorum;

<?php ######----ONUR CANALP----#### ## NAMESPACES ## ## 25.07.2013 ## ############################# // "Personel" isminde bir namespace tanımlıyorum. namespace Personel; // "Personel" namespace'i içinde "Temizlik" sınıfı oluşturuyorum. Class Temizlik { // "Temizlik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Personel namespace içindeki Temizlik çalışanları'; } } Class Teknik { // "Feed" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Personel namespace içindeki Teknik çalışanlar'; } } // "Yoneticiler" isminde bir namespace tanımlıyorum. namespace Yoneticiler; // "Yoneticiler" namespace'i içinde "Temizlik" sınıfı oluşturuyorum. Class Temizlik { // "Temizlik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Yöneticiler namespace içindeki Temizlik çalışanlar'; } } Class Teknik { // "Teknik" sınıfı içinde "oku" isminde bir fonksiyon oluşturuyorum. public function oku() { return 'Yöneticiler namespace içindeki teknik çalışanlar'; } } // "Personel" namespace'i içinde bulunan "Temizlik" Sınıfını tanımlıyorum. $temizlik1 = new \Personel\Temizlik; // "Temizlik" namespace'i içinde bulunan "Temizlik" Sınıfını tanımlıyorum. $temizlik2 = new \Yoneticiler\Temizlik; // "Personel" namespace'i içinde bulunan "Teknik" Sınıfını tanımlıyorum. $teknik1 = new \Personel\Teknik; // "Temizlik" namespace'i içinde bulunan "Teknik" Sınıfını tanımlıyorum. $teknik2 = new \Yoneticiler\Teknik; // Sınıfların içinde bulunan fonksiyonları çağırıyoruz ve sonucu ekrana basıyoruz. echo '<p>' . $temizlik1->oku() . '</p>'; echo '<p>' . $temizlik2->oku() . '</p>'; echo '<p>' . $teknik1->oku() . '</p>'; echo '<p>' . $teknik2->oku() . '</p>'; ?>

Devamını Oku..

İki koordinat (latitude / longitude) arasındaki mesafeyi hesaplamak

Standard

Bir çok uygulamada işimize yarayabilecek bi işlemdir bu.. 2 cafe arasındaki mesafeyi bulmak veya kişinin anlık konumu ile xxx mekanın arasındaki mesafe gibi.. Peki bunu nasıl yapıyoruz hiç düşündünüz mü?

Lafı uzatmadan bununla ilgili çok basit fonksiyon paylaşıyorum sizlerle. Bu fonksiyon ile koordinatlar arasındaki mesafeyi farklı formatlarda alabilirsiniz;

<?php function getDistanceBetweenPointsNew($latitude1, $longitude1, $latitude2, $longitude2) { $theta = $longitude1 - $longitude2; $miles = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); $miles = acos($miles); $miles = rad2deg($miles); $miles = $miles * 60 * 1.1515; $seamiles = $miles * 0.868976242; $feet = $miles * 5280; $yards = $feet / 3; $kilometers = $miles * 1.609344; $meters = $kilometers * 1000; return compact('miles','feet','yards','kilometers','meters','seamiles'); } $point1 = array('lat' => 40.770623, 'long' => -73.964367); $point2 = array('lat' => 40.758224, 'long' => -73.917404); $distance = getDistanceBetweenPointsNew($point1['lat'], $point1['long'], $point2['lat'], $point2['long']); foreach ($distance as $unit => $value) { echo $unit.': '.number_format($value,4).' '; } ?>

Devamını Oku..

Linux sunucu ve sembolik link (symlinks – sanal dizin)

Standard

Öncelikli olarak symlinks için küçük bir örnek vereceğim aslında anlamanız için ışık olacağına inanıyorum;
Windows üzerindeki kısayollar gibi..
Hala kafanızda bişey canlanmamışsa birde örnek ile anlatalım; Bizim dosyamız bir klasörün içinde bulunuyor ve aynı zamanda farklı bir klasörde daha olmasını istiyorsak, ama bunu yaparken dosyanın kopyalarını oluşturmak istemiyorsak dosyayı diğer klasöre kopyalamak yerine sembolik bağ (symbolic link) oluşturabiliriz. Böylece tek dosya olmuş olacak (değişiklik yapıldığında her yere tek tek kopyalamak zorunda kalmayacaksınız) ve diğer link oluşturulan yerlerden de erişim verebilmiş olacaksınız.
En önemli işe yarayan kısmı ise disk kullanımı.. Çok daha düşük olacaktır.

Sembolik link ile klasörleri de linkleyebilirsiniz. Bu sayede tek tek bir sürü link oluşturmanız gerekmez.

Dikkat etmeniz gereken nokta parametrelerin sırası; Önce bulunan dosya sonra linki açmak istediğiniz dizin.. Bizzat ilk denemem de bunun tam tersini yapmıştım 🙂

Hızlıca örneklere geçelim..

Dosya Linklemek için;

ln -s /dosyanin/bulundugu/dizin/dosya.txt /linkin/olusturulacagi/dizin/dosya.txt

Devamını Oku..

Linux sunucular ve Find Komutu ile istenen boyuttan büyük dosyaları listelemek

Standard

Sunucularda bir zaman sonra alan dolar ve boyutu büyük dosyaları silmek isteyebilirsiniz.

İşte bu tarz durumlarda size yardımcı olacak bir yol, ssh ile bağlanıp büyük dosyaları bulabilir, temizlik yaparak kendinize yer açabilirsiniz..

Bulunulan klasörde 100 Megabayt tan büyük dosyaları listeler

find . -size +100M -ls

Devamını Oku..