Ubuntu nginx uzerine php fastcgi kurulumu (php-fcgi)

Daha önceden bu yazımızda nginx kurulumunu anlatmıştık. (sadece kurmak, ayarlamak değil.) Şimdi ise, nginx üzerine php fastcgi kurma işlemini yapalım.

Aşağıdaki komut ile sistemimize gerekli paketleri kuralım.

apt-get install php5-cli php5-cgi spawn-fcgi psmisc

Artık sistemimizde php fcgi ile ilgili paketler yüklendi. Ancak bunu dürtecek bir mekanizmamız henüz yok. Bu yüzden nginx ayarlarında henüz bunu çağıramıyoruz. Şimdi bunu dürtebilir hale getirelim.
Aşağıdaki içerikler ile /usr/bin/php-fcgi adında bir dosya üretelim. Bu dosyaya göre php 9000 nolu portta çalışacak, ve 127.0.0.1 (localhost) için hizmet verecektir. Bu hizmet www-data adlı kullanıcı ve www-data adlı grup ile ilgili oluşacaktır.

/usr/bin/php-fcgi dosyası

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
ADDRESS=127.0.0.1
PORT=9000
PIDFILE=/var/run/php-fcgi/php-fcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -a $ADDRESS -p $PORT -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5

Chmod vererek de çalıştırabilir hale getirelim. Bunun için de aşağıdaki kodu çalıştıralım :

chmod +x /usr/bin/php-fcgi

Her şey yolunda gidiyor gibi gözüküyor. Ancak bu bir hizmet ve başlatma durdurma gibi özellikleri olması gerekiyor.
yani özetle, /etc/init.d/ içerisine bir şeyler yapmamız gerekiyor.

 

/etc/init.d/php-fcgi adlı bir dosya üretiniz.

/etc/init.d/php-fcgi dosyası : 

#!/bin/bash

PHP_SCRIPT=/usr/bin/php-fcgi
FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
PID_DIR=/var/run/php-fcgi
PID_FILE=/var/run/php-fcgi/php-fcgi.pid
RET_VAL=0

case "$1" in
    start)
      if [[ ! -d $PID_DIR ]]
      then
        mkdir $PID_DIR
        chown $FASTCGI_USER:$FASTCGI_GROUP $PID_DIR
        chmod 0770 $PID_DIR
      fi
      if [[ -r $PID_FILE ]]
      then
        echo "php-fcgi already running with PID `cat $PID_FILE`"
        RET_VAL=1
      else
        $PHP_SCRIPT
        RET_VAL=$?
      fi
  ;;
    stop)
      if [[ -r $PID_FILE ]]
      then
        kill `cat $PID_FILE`
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
        RET_VAL=1
      fi
  ;;
    restart)
      if [[ -r $PID_FILE ]]
      then
        kill `cat $PID_FILE`
        rm $PID_FILE
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE"
      fi
      $PHP_SCRIPT
      RET_VAL=$?
  ;;
    status)
      if [[ -r $PID_FILE ]]
      then
        echo "php-fcgi running with PID `cat $PID_FILE`"
        RET_VAL=$?
      else
        echo "Could not find PID file $PID_FILE, php-fcgi does not appear to be running"
      fi
  ;;
    *)
      echo "Usage: php-fcgi {start|stop|restart|status}"
      RET_VAL=1
  ;;
esac
exit $RET_VAL

Neredeyse geldik. Aşağıdaki komutlarla da php-fcgi yı başlatabilirsiniz.

chmod +x /etc/init.d/php-fcgi
update-rc.d php-fcgi defaults
/etc/init.d/php-fcgi start

Tabi bu noktada nginx imizi de artık ayarlamamız gerekiyor.

/etc/nginx/sites-available/www.deneme.com dosyası oluşturalım. 

server {
    server_name www.deneme.com deneme.com;
    access_log /srv/www/www.deneme.com/logs/access.log;
    error_log /srv/www/www.deneme.com/logs/error.log;
    root /srv/www/www.deneme.com/public_html;

    location / {
        index  index.html index.htm;
    }

    location ~ \.php$ {
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /srv/www/www.deneme.com/public_html$fastcgi_script_name;
    }
}

Artık /srv/www/www.deneme.com/public_html/index.php dosyamızı ve içerisine phpinfo(); komutunu yazıp çalıştırabilir hale geldik. hemen bir nginx i başlatalım, veya çalışıyorsa yeniden başlatalım.

 

service nginx restart

isimsiz fonksiyonlar (anonymous functions – closures) (php 5.3 ve sonrasi)

İsimsiz fonksiyonlar php’nin 5.3 ve sonraki sürümlerinde yer alan güzel bir özelliktir.

Nedir isimsiz fonksiyon? 

Bir mantığa veya algoritmaya ihtiyacınız var ancak bunun dünyanızda o kadar da önemli bir yeri yok. Belki sadece kodunuzu düzgün yazmak istiyorsunuz, veya yapacağınız şeyi daha temiz yapmak istiyorsunuz.

Bu noktada, isimsiz fonksiyonların kullanımı tercih edilebilir.

$selam = function($isim){
    printf("Merhaba %s\r\n", $isim);
};//şeklinde tanımlayıp
echo $selam('Emre');//şeklinde kullanabiliriz.

Yani anlayacağımız şekilde söylersek, bir değişkene bir fonksiyon atamış gibi bir şey oluruz.

php 5.4 ten itibaren de bu isimsiz fonksiyonların içinde “$this” kelimesi de kullanılabiliyor oldu. Bir Class içerisindeki bir metodun içinde kullanıldığında, $this->fonksiyon_ismi() diyerek ilgili classtaki fonksiyonu da çalıştırabiliyor artık.

http://www.php.net/manual/en/functions.anonymous.php#106046 linkinde ise ilginç (güzel) bir kullanımı var. Bir göz atmanızı tavsiye ederim. (kullanmanızı tavsiye etmem ama :), php içinde html’e karşıyım. )

PHP 5.4.7 ve PHP 5.3.17 yayinlandi!

Php takımının linkte belirtildiği değişiklikleri uygulayan sürümleri 13.09.2012 tarihi itibariyle yayınlandı.

Bilindiği gibi php’nin şu anda sadece 5.3.x ve 5.4.x sürümlerine geliştirme yapılmakta.

İlk bakışta standart bir php geliştiricisinin çok da etkilenmeyeceği geliştirmeler gibi gözüküyor.  Php’li günler dileriz..

aptana studio php kod formatı ayarları

Yazılım geliştirirken kodların düzgün görünmesi de önemlidir tabii ki. IDE’lerin otomatik tamamlama özelliklerinin yanında en çok kullanılan pratikliklerinden biri de kod formatlamak olsa gerek.

Çeşitli tuş kombinasyonlarıyla kod formatlamak mümkün oluyor. Kimisinde ctrl+shift+f, kimisinde alt+shift+f falan filan… Kodu formatlıyor da, bizim istediğimiz gibi mi formatlıyor, bu da önemli bir nokta.

Aptana Studio için default olarak gelen php format ayarları benim hiç hoşuma gitmedi. Özellikle çok boyutlu arrayleri tek satıra çekmesi ve metodların biçimlendirilmesi, felaket 😀

Aptana Studio’yu açtığımızda üstteki menüden Windows > Preferences sekmesine geliyoruz. Buradaki arama kutucuğuna format yazdığınız zaman karşınıza hemen geliyor, Aptana Studio kategorisi altında Formatter ayarı.

Burada yeşil artı tuşuna (+) basıyoruz ve kendimize bir profil oluşturuyoruz. Oluşturduğumuz profile, default olan ayarlar aynen kopyalanıyor. Default olan ayarları değiştirmemize izin vermiyor Aptana, bir profil oluşturmamızın sebebi bu. Ardından Preview kısmından istediğimiz dili seçip, onunla ilgili ayarları yapabiliyoruz.

PHP ayarlarında, New Lines sekmesi altındaki ayarlarda, Insert new line between array creation elements ayarının seçili olmasını şiddetle öneriyorum. Ayrıca Indentation sekmesinde de işinize yarayacak ayarlar mevcut.

Oluşturduğunuz profili export edip, farklı bir bilgisayardaki Aptana Studio’ya import edebilirsiniz.

Zend Framework 2 – Projenin ayaga kaldirilmasi

Projenizin iskelet yapısını oluşturarak ayağa kaldırmanız için yapmanız gerekenler burada açıklanmıştır: http://framework.zend.com/downloads/skeleton-app

Uygulanması gereken komutlar şu şekildedir:

cd my/project/dir
git clone git://github.com/zendframework/ZendSkeletonApplication.git 
cd ZendSkeletonApplication 
php composer.phar install

GIT
Projemizin iskelet yapısını github üzerinden çekmemiz gerekmektedir. Bu nedenle Windows işletim sistemi kullananlar öncelikle sistemlerine git kurulumu yapmalıdırlar. Git kurulumu yapmak için bu site işinizi görecektir:  http://git-scm.com/downloads

Composer
Composer php de projenin bağımlılıklarını yöneten bir araçtır. Bu araç yardımıyla projenin ihtiyaç duyduğu kütüphaneleri tanımlanır ve otomatik indirilmeleri sağlanır.
İndirdiğimiz iskelet dosyanın içerisinde composer.phar dosyası bulunuyor bu dosya php composer.phar install komutu ile çalıştırılır ve gerekli kütüphaneler yüklenmiş olur.

” Composer is a tool for dependency management in PHP. It allows you to declare the dependent libraries your project needs and it will install them in your project for you. ” Daha fazla bilgi için:  http://getcomposer.org/doc/00-intro.md

*Not: php komutunun bulunduğunuz herhangi bir konumdan çalıştırabilmek için Windowsta Bilgisayarım simgesine sağ tıklayın sonra Özelliklere giriniz. Daha sonra aşağıdaki resimde gösterilen adımları uygulayınız.