Ubuntu – Apache Rewrite Modulü Kurulumu (Etkinleştirilmesi)

Merhaba,

Ubuntu platformunda rewrite kurulumunu(etkinleştirilmesi) anlatacağım. İşinize yarayacaktır diye düşünüyorum. (apache kurulu varsayılmıştır)

Ne işe yarar bu modül?

Apache web sunucusunda URL yi yeniden yazma ve düzenleme iznini verir.

Tam olarak ne işe yaradığını öğrenmek için arşivimizdeki bu yazıyı okumanızı tavsiye ediyorum.

sudo a2enmod rewrite

Yukarıdaki komutu çalıştırarak modülü etkinleştiriyoruz. Daha sonra ilgili projenizin vhost dosyasında birkaç düzenleme yapmamız gerekecek.

sudo nano /etc/apache2/site-available/default

Açılan vhost dosyasında aşağıdaki değişiklikleri yapmanız gerekiyor. İlk açtığınızdaki durumunu ve yanına okla yapmanız gereken düzenlemeyi belirtiyorum.

AllowOverride None -> AllowOverride All

Görmüş olduğunuz tüm “AllowOverride None” ları “AllowOverride All” a çeviriyoruz ve kaydedip çıkıyoruz. Son olarak apache‘yi yeniden başlatacağız.

sudo /etc/init.d/apache2 restart

Modül artık aktifleşti. Projenizde kullanabilirsiniz, hayırlı olsun.

Subversion (SVN) Kurulumu ve Kullanımı

Merhaba,

Yeni bir projeye başlarken, kod yazma aşamasına gelmeden önce projenin modellenmesi, veritabanı mimarisinin oluşturulması gibi öne çıkan konuların ele alındığını birçoğumuz biliyoruz. Ama yine bunlardan da önce çalışma ortamımızın hazırlanması gerekiyor. Profesyonel bir şekilde proje yönetebilmek ve süreçleri ilerletebilmek için versiyon kontrol yapısının oluşturulması ölümcüldür.

Nedir bu versiyon kontrol?

Versiyon kontrol basitçe bir dosya veya dokümandaki değişiklikleri takip edebileceğimiz sistemlerdir. Bir projede birden fazla çalışan olabilir ve kimin ne zaman hangi değişikliği yaptığı bilgisine erişmeye ihtiyaç duyabiliriz. Yeni geliştirmeler ile karşılaştığımız çeşitli problemlerde geçmişe dönebilir ve projenin o zamanki halini inceleyebiliriz. Versiyon kontrol sistemini basitçe açıklamaya çalıştım. Tanımlar çoğaltılabilir.

Şimdi Linux üzerinde SVN kurulumunu ve kullanımını anlatmaya çalışacağım (İşletim sisteminizede Apache kurulu olduğu varsayılmıştır).

sudo apt-get install subversion libapache2-svn

Yukarıdaki komutu çalıştırarak SVN kurulumunu başlatıyoruz ve kolayca tamamlanıyor. An itibari ile artık SVN kurulumu tamamlandı. Her proje için ayrı bir repository oluşturmak en mantıklısıdır. Bu bağlamda tüm repository projelerini tutacağımız bir dizin belirlememiz gerekiyor. Ben /var/svn dizinini kullanmaya karar verdim.

cd /var
mkdir svn

Yukarıdaki komutları çalıştırarak /var dizini altına “svn” isimli bir klasör oluşturmuş olduk. Şimdi projemiz için bir repository oluşturalım.

svnadmin create /var/svn/project

Yukarıdaki komutu çalıştırdıktan sonra “project” isimli yeni bir repository oluşturmuş oluyoruz. Şimdi boş projemizi checkout ederek çalışma ortamımızı yaratmak adına son adımımızı atıyoruz. Benim işletim sistemimde projelerimi barındırdığım dizin /var/www/sites

cd /var/www/sites
svn co file:///var/svn/project

Yukarıdaki komutları çalıştırdığınızda /var/www/sites dizini altına “project” isimli bir klasörün oluştuğunu göreceksiniz. Yine bu klasörün içine girip bakacak olursanız “svn” isimli gizli bir klasör oluştuğunu göreceksiniz. Standar “hello word” mesajımızı vermek üzere index.php mizi oluşturacağız 😀

cd /var/www/sites
touch index.php
nano index.php

(Ben nano editor kullanıyorum. Siz ister konsol editorlarinden isterseniz Zend Studio,NetBeans gibi editorlerle index.php oluşturabilir ve düzenleyebilirsiniz)

“Hello word” yazıp kaydediyoruz ve çıkıyoruz. An itibari ile ekrana “Hello Word” yazdıran bir php dosyamız oldu.

Yeni eklediğimiz dosyanın SVN’ye eklenmesi

svn add index.php
svn commit -m 'index.php eklendi'

Yukarıda index.php yi eklemek üzere SVN’yi uyardık ve commit ettik. İlk commitimizi yapmış olduk. Dosyanızda yeni bir değişiklik yaparsanız bunu görmek için aşağıdaki yönergeyi izleyelim.

svn status

Değişiklik bulunan tüm dosyalar gelecek. Değişiklik yaptıysanız dosyanın başına “M” harfi gelmiş olacak. Bu dosyanın modified edildiğini belirdir.

Bir dosyanın silinmesi

svn delete index.php

Projenin güncellenmesi

svn update

 

SVN ile ilgili anlatılabilecek çok şey var 😀 Zamanla eklemeye çalışacağım.

Selamlar.

 

Linux otomatik MySQL backup sistemi

Merhaba,

Projeniz ne ile ilgili olursa olsun bir veritabanı yedeğine ihtiyaç duyabilirsiniz. Bir arşiv hazırlayabilir ve kendi belirlediğiniz sürelere kadar veritabanı yedeğini tutabilirsiniz. Bu yazımda size her saat nasıl backup alabileceğimizi göstermeye çalışacağım.

Herşeyden önce backup dosyalarınızın tutulacağı bir klasöre ihtiyaç duyacaksınız. “Backup” isimli bir genel klasör oluşturup içinde veritabanı adları ile oluşturulmuş alt klasörler tutmak bana mantıklı gibi geldi.

Benim oluşturduğum veritabanının adı “test“. Bu yüzden dizinim “/var/www/backup/test

Backup alma işlemini yapacak olan komutları basch script ile yazmayı tercih ettim. Bu yüzden bu dizine “backup.sh” isimli bir dosya oluşturalım.

touch backup.sh

Şimdi düzenleme moduna geçelim ve bash script kodlarımızı yazalım.

nano backup.sh
now=$(date +"%m_%d_%Y_%T")
mysqldump -u root -1234567 test > "/var/www/backup/test/backup_$now.sql"

Yukarıda “now” isimli değişkene kodun çalıştığı zamanki tarihi almış olduk. Onun hemen altındaki satırda mysqldump komutu yer alıyor. MySQL kullanıcı adı ve şifremizle beraber backup almak istediğimiz veritabanının adını yazıyoruz ve ok işaretinden sonraki kısımda backup dosyasının kaydedileceği dizin ve dosya ismini belirtiyoruz. Dosya isimlerine tarih bilgisini yazırmayı tercih ettim.

Buraya kadar olan kısımda veribanından bir tablonun backupunu alma işlemini tamamlamış olduk. Şimdi zamanlanmış görev sistemi ile (cronjob) her saat bu işlemi yapmasını sağlayalım.

crontab -e

Yukarıdaki komutu çalıştırarak açılan dosyaya aşağıdaki satırı ekleyelim.

* */1 * * * sh /var/www/backup/test/backup.sh

Tanımlayabileceğimiz dilimleri soldan sağa doğru açıklıyorum:
– dakika
– saat
– hafta
– ay
– yıl

Saat kısmına */1 dediğimiz için her saat bu işlemi yap emrini vermiş oluyoruz.
Otomatik veritabanı yedeğini alan sistemimiz çalışır duruma geldi. Servise hazırdır. Afiyet olsun.

PHP Web Service – SOAP

Merhaba,

Size PHP ile web service (SOAP) hizmetinden bahsedeceğim. Web service bir haberleşme standardıdır. Standart bir yapı olması nedeniyle projelerinizde kullanmış olduğunuz yazılım dillerinden bağımsız olarak düşünmeniz gerekecektir. Projeler aynı dille yazılmış olmaksızın veri alışverişi sağlayabilirsiniz. Kapsamlı projelerde ihtiyaç olarak doğan veri alışverişini sağlayabileceğiniz güzel bir altyapıyı PHP ile örnekleyerek anlatmaya çalışacağım. Sözü fazla uzatmadan örneklemelerime başlamak istiyorum.

Aşağıdaki iki sayfayı çalışma ortamınızda oluşturmanızı isteyeceğim.

  1. server.php
  2. client.php

Server.php web service bağlantısı açarken, client.php bu hizmetten yararlanarak veri transferini gerçekleştirecektir. Ben local çalışma ortamıma www.project.mil hayali domain ile bağlandığım için örnekte de bu adresi verdim. Siz kendi çalışma ortamınıza göre düzenlemeler yapabilirsiniz.

<?php
class MyWebService{

const STATIC_EXAMPLE_MESSAGE = "hello web service";

public function getMessage(){
return self::STATIC_EXAMPLE_MESSAGE;
}
}

$server = new SoapServer(null,array("uri" => "http://www.project.mil/server.php"));
$server->setClass("MyWebService");
$server->handle();
?>

Yukarıda ki örnekte MyWebService isimli class‘ı web service de kullanılacak olan class olarak atadım. Yani client olarak bağlanan kullanıcılar “public” özelliğe sahip tüm methodları çağırabilirler. Bu arada web service altyapısı için illaki class kullanmak zorunda değilsiniz. Ancak ben class kullanmayı tercih ettim.

Hizmete erişilecek olan adresi uri parametresi ile belirliyoruz ve class ismini atıyoruz.

Bkz : http://php.net/soapserver

Yukarıda ki aşamaları tamamladıysak artık dışarıdan gelen misafirleri karşılayabilir ve veri alışverişi sağlayabiliriz.

<?php
$options = array(
"uri" => "http://www.project.mil",
"location" => "http://www.project.mil/server.php"
);
$client = new SoapClient(null, $options);
$result = $client->getMessage();
echo $result;
?>

Yukarıda ki örnekte az evvel oluşturduğumuz web service hizmetine bağlandık ve getMessage methoduna bağlanarak oradan dönen sonucu ekrana yazdırdık. Kodu çalıştırdığınızda ekrana “hello web service” yazdığını göreceksiniz.

Görüldüğü üzere basit bir web service bağlantısı oluşturmuş olduk. Çeşitli hata ayıklama işlemleri, güvenlik işlemleri v.s. gibi çalışmalarla güçlendirerek projelerimizde ki veri alışverişi ihtiyacını gidermiş olabiliriz. Umarım faydalı olmuştur.

PHP interface

Merhaba,

Bugün PHP interface yapısından bahsetmek istiyorum. Bilindiği üzere interface Türkçe “arayüz” anlamına gelmektedir. Ancak, burada görsel birşeyler düşünmeyelim. Yapı yani modelleme arayüzü olarak düşünebiliriz. Birden fazla adaptorü olacak bir yapımızın olduğunu düşünelim. Örnek vermek gerekirse, bir veritabanı altyapısı hazırlıyorsunuz ve mysql, oracle gibi birden fazla adaptorünüz var. Bu adaptörlerdeki yapıların birbiri ile aynı olmasını istiyorsak burada interface devreye girecek. Bir projede birden fazla geliştiricinin olması gibi durumlarda standart bir yapının korunmasını sağlamış olacağız. Yapı dışında birşey yapılmak istenirse hata alınacaktır.

Yapıdaki genel kuram bu şekilde. Şimdi kodlarla açıklamaya çalışacağım.

<?php
interface database{
   public function setData($data);
   public function getData($key);
}
?>

Yukarıda ki örnekte “database” isimli bir interface oluşturduk ve bu interface  kullanan tüm class larda “setData” ve “getData” methodlarının olmasının şart olduğunu söylemiş olduk. Burada methodlar süslü parantez açılarak tanımlanmaz. Sadece method ismi yazılır ve kapatılır.

Yine en önemli özelliklerinden biri de methodlara gönderilecek parametreleri dahi burada belirleyebiliyor olmamız. Eğer class içinde eksik parametre tanımlarsak hata vererek bizi bu yapıya uygun kod yazdırmaya zorlayacaktır.

?php
class mysql implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example1(){
       // başka methodlara ihtiyaç duyuyorsak ekleyebiliriz.
    }
}
class oracle implements database{
    public function setData($data){
       // ilgili işlemler burada yapılır.
    }
    public function getData($key){
       // ilgili işlemler burada yapılır.
    }
    public function example2(){
       // başka methodlara ihtiyaç duyuyorsak ekleyebiliriz.
    }
}
?>

Yukarıda ki örnekte oluşturduğum mysql ve oracle classlarının interface olarak “database” arayüzünü kullanmasını sağladım. Hata almamak için interface içinde belirtilen methodları tanımladım ve tüm sınıflarım standart bir yapıya kavuşmuş oldu. Yine örnekte görüldüğü üzere, interface kullanmak için “implements” yazdıktan sonra interface adını yazmamız gerekiyor.

Umarım faydalı olmuştur. Geliştirerek kendi projelerinizde de kullanabilirsiniz.