Şu aralar symfony'ye çalışıyorum. Symfony bir web geliştirme framework'ü yani size çeşitli kütüphaneler, programlar sunarak web projelerinize kolaylıklar sağlıyor. Symfony anasayfasında 24 saatlik bir demo proje var, ismi Jobeet. Bununla uğraşırken şöyle bir problemle karşılaştım:

$ symfony propel-build-model
>> schema converting "~/jobeet/config/schema.yml" to XML
>> schema putting ~/jobeet/config/generated-schema.xml
>> propel Running "om" phing task
[propel-om] Could not perform XLST transformation. Make sure PHP has been compiled/configured to support XSLT.
>> file- ~/jobeet/config/generated-schema.xml
>> autoload reloading autoloading


PHP için bir eklentinin yokluğundan yakınıyor. "php -m" ile var olan modüllere baktığımda xsl modülünü bulamadım. İnternette biraz araştırdığımda PHP sayfasında modülün PHP ilk kurulurken nasıl derleme seçenekleri arasına alınabileceği yazıyordu. Tüm PHP'yi tekrar derlemek istemedim doğal olarak ve daha hızlı bir yol buldum. Bu teknik, tüm PHP modülleri için uygulanabilir.

Öncelikle apt-get kullanarak php-dev paketini kurmamız gerekli:

# apt-get install php5-dev

Bundan sonra bir yerlerden php kaynak kodunu indirmeliyiz. Ben Fransa'daki bir yansıyı kullandım:

$ wget http://tr.php.net/get/php-5.2.8.tar.bz2/from/fr.php.net/mirror

PHP kaynak kodlarını indirirken dikkat etmemiz gereken noktalardan birisi kendi PHP sürümümüze yakın bir kaynak paketini indirmek olmalı. Örneğin benim sürümüm 5.2.6, 5.2 dalından bir sürüm işimi görür. Daha eski bir sürümü indirmenizi (örneğin 5.1 dalından) veya çok daha yeni bir sürümü (çıkacak olan 5.3 dalı gibi) önermiyorum. Yoksa uyumluluk sorunları yaşayabilirsiniz.

İndirme bittikten sonra paketi açın:

$ bunzip2 php-5.2.8.tar.bz2

ve

$ tar xvf php-5.2.8.tar

Bundan sonra PHP kaynak kodları içinde istediğimiz modüle girip derleyeceğiz. Benim için bu xsl modülü:

$ cd php-5.2.8/ext/xsl/
$ phpize
$ ./configure
$ make

Evet artık modülümüz derlendi. Yazılan son satırlar belki şuna benziyordur:

Libraries have been installed in:
/ambar1/progz/php-5.2.8/ext/xsl/modules

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify the full pathname of the library, or use the -LLIBDIR'<br />flag during linking and do at least one of the following:<br /> - add LIBDIR to theLD_LIBRARY_PATH' environment variable
during execution
- add LIBDIR to the LD_RUN_PATH' environment variable<br /> during linking<br /> - use the-Wl,--rpath -Wl,LIBDIR' linker flag
- have your system administrator add LIBDIR to `/etc/ld.so.conf'

See any operating system documentation about shared libraries for
more information, such as the ld(1) and ld.so(8) manual pages.
----------------------------------------------------------------------

Build complete.
Don't forget to run 'make test'.

Bu açıklamadan da anlaşılacağı gibi derlenmiş kütüphanelerimiz modules/ dizininde.

$ ls modules/
xsl.la xsl.so

Bundan sonra yapmamız gerekenler bu modülü düzgün bir yerlere kopyalayıp php.ini dosyasını değiştirmek (burada root olmanız gerekiyor):

# cp modules/xsl.so /usr/lib/php5/20060613+lfs/

php.ini dosyasında önce modül dizinini tanımlıyoruz:

extension_dir = "/usr/lib/php5/20060613+lfs/"

Sonra da bu modülün yüklenmesini:

extension=xsl.so


Bu kadar, her şey bitti. Eğer bir web sunucusu üzerinden PHP'yi ve bu modülü kullanıyorsanız tekrar başlatmanız gerekecek. Benim için bu sunucu apache:

# apache2ctl restart

Bilmeniz gereken bir nokta php.ini dosyasıyla ilgili. PHP için iki farklı php.ini dosyası olabiliyor. Bunlardan biri komut satırından çalıştırılan php interpreter için, diğeri ise apache tarafından kullanılan php çeviricisi için varlar. Yani eğer komut satırından php kullanacaksanız, mesela belirli betikler yazmışsanız "cli" (command line interpreter) ayar dosyasını değiştirmeniz gerekiyor. Bendeki ayar dosyaları şöyle:

# locate php.ini
/etc/php4/apache2/php.ini
/etc/php5/apache2/php.ini
/etc/php5/cli/php.ini
/usr/share/doc/php5-common/examples/php.ini-dist
/usr/share/doc/php5-common/examples/php.ini-paranoid
/usr/share/doc/php5-common/examples/php.ini-recommended
/usr/share/php5/php.ini-dist
/usr/share/php5/php.ini-dist.cli


İlk iki dosya apache için (php4 ve php5 için ayrı ayrı) ve 3. ayar dosyası da komut satırından çalıştırılan PHP için. Tabii Debian kullanmıyorsanız (sahi neden Debian kullanmıyorsunuz :)) dosyalarınızın yerleri de farklı olacaktır.

Kolay gelsin.


[ thanks to Mattias Geniar for the great article. ]