Don Quijote. Wikipedia arşivinden
Geliştirdiğim “büyük-iri” sayılabilecek türden bir projeyi müşterime göstermek istiyorum. Müşterim de ciddi bir insan; yaptığınız iş kadar, nasıl yaptığınızla da ilgileniyor. Bunun için Active Collab kullanıyoruz ve memnunuz. Kodlamayı da rahatça takip edebilmesi için ona da VPS üstünde bir hesap açtım; her şey iyi.
Kodun bitirdiğim bir kısmını VPS’e yükledim ve test edeceğim. Fakat o da ne! Lokal sistemde şahane çalışan kod, VPS üstünde patlamasın mı!
Lokal sistem ubuntu 9.10/Suhosin-Patch’li PHP 5.2.10-2ubuntu6.4. Sunucu ise ubuntu 9.04/PHP 5.2.6-3ubuntu4.5
Yani ortada çok tuhaf konfigürasyonlar yok. Ubuntu’nun iki ardıl sürümü. Yazdığım kod da öyle “patlayabilir” cinsinden değil, sıradan bir kod.
Yalınlaştırmak gerekirse:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| <?php
class B
{
public function __construct()
{
}
}
class A extends B
{
public function __construct()
{
parent::__construct();
//biraz kod
}
public function index()
{
//biraz kod
$this->_methodPrivate();
//biraz daha kod
}
private function _methodPrivate()
{
//burada da biraz iş...
}
} |
Türünden bir kod. Bakıyorum bakıyorum “hata nerede?” diye, bulamıyorum.
Başkasına sorarak iş yapmayı sevmememe rağmen, “herhalde benim gözüm görmüyor” diyerek friendfeed PHP odasına dahi soruyorum. I-ıh. Çözebilen yok çünkü ortada çözülecek bir şey yok.
Genel olarak bu tür işlerin FTP encoding dertlerinden olduğunu önceki deneyimlerimden (“acılarımdan” diye de okuyabilirsiniz) biliyorum ve kullandığım gFTP’yi bırakıp konsoldan sftp çekiyorum: Sonuç aynı. SSH ile VPS’e geçip nano’ya yapıştırıyorum: “Bana mısın!” demiyor!
Hissel olarak şunu deniyorum:
_methodPrivate()’ı methodprivate() şeklinde denediğimde her ne hikmetse kod çalışıyor! Ancak öyle yarım-yamalak, ne yaptığımı bilmez halde iş yapamam ki!
“Hmm” diyorum, “Bu eski PHP sürümü. Bug vardır bunda!” (Bakınız kaşıntı başlıyor.)
“Sahi, bu Ubuntu 9.04′e nasıl PHP 5.3 kurarım?” (Madem 9.10′da çalışıyor, sürüm yükseltsene be adam! PHP de düzelmiş olur ha? Yook kaşınıyorum ya, 9.04′e kuracağım!)
Vakıa, “Ubuntu 9.04 PHP5.3″ diye arıyorum ve şu yazıyı buluyorum. Bir bakıyorum; abim derlemiş, çalıştırmış phpinfo() ekran görüntüsü bile koymuş.
Bir programcının, Ubuntu kurduktan sonra kuracağı ilk paketlerden biri “build-essential”dır, tamam anladık ama, insan olmanın belki de en kötü taraflarından biri de kişinin mutluluklar kadar acıları da çabuk unutması. Hafızam beni yanıltmıyorsa, en son geçen yıl yine bu aylarda kaynak koddan PHP derlemiştim; demek ki akıllanmamışım!
Abimin yazısından yola çıkarak PHP5.3.0 indirdikten sonra ve kendi işlerime uygun olarak şöyle bir konfigürasyon öngörüyorum:
1
| sudo ./configure --with-apxs2=/usr/bin/apxs2 --with-mysql --with-pdo-mysql --with-zlib --enable-calendar --with-curl --enable-dba --with-enchant --with-gd --enable-gd-native-ttf --with-gmp --with-mcrypt --with-readline --enable-soap --enable-zip --with-pgsql --with-pdo-pgsql |
Tabii Allah’ın emri: “o kütüphane eksik, şu yok, bu yok” uyarıları içinde bir sürem “sudo apt-get install libfalanca-dev” yazmakla geçiyor…
…ve derlemeye başlıyorum.
Amca önce enchant bindingini derlerken çakıyor. “Abim yazısında enchant’ı öve öve bitirememiş ama benim ne işim olacak?” diyorum ve konfigürasyondan önce –with-enchant’ı çıkarıyorum ve biraz daha ilerliyoruz.
Bilahare, Phar derlenirken su koyuveriyor. Gidiyorum, dokümantasyona bir bakıyorum ki adamlar 5.3′ten itibaren PHP-core’a dahil etmişler.
“Behey adam!”, diyorum, “madem core’a dahil edecektin, gcc4.3 ile çakmayanından yapsaydın ya!”… Zaten “warning”ler gırla gidiyor derleme boyunca; üstünde bile durmaya değmez…
Derken, PHP bug raporlarının içinde yama ararken kendimi buluyorum, ancak yama bulamıyorum!
Tek önerdikleri gecelik snapshottan kurulum.
Onu da yapıyorum. İndirdiğim ve üstünde uğraştığım PHP dizinini uçurarak php5.3-201004092030 diye bir sürüm buluyorum ve baştan başlıyorum. Tabii Phar yine derlenmiyor!
“Çok da sevmişim Phar’ını!” diyerek konfigürasyona nihai şeklini veriyorum:
1
| sudo ./configure --with-apxs2=/usr/bin/apxs2 --with-mysql --with-pdo-mysql --with-zlib --enable-calendar --with-curl --enable-dba --with-gd --enable-gd-native-ttf --with-gmp --with-mcrypt --with-readline --enable-soap --enable-zip --with-pgsql --with-pdo-pgsql --disable--phar |
Ve nihayet bu sefer derlenmeyi başarıyor PHP, ama dert burada bitmiyor.
“make install” kısmına geldiğimizde “İlla /etc/apache2/httpd.conf dosyanda ‘LoadModule’ bulacağım!” diye tutturuyor.
“Ya sabır!” çekerek açıyorum dosyayı, elle “#LoadModule tiriviri” yazıyorum ve bunu yutturmayı beceriyorum.
Son olarak apache’yi yeniden başlatıyorum phpinfo() çekince karşımda “PHP5.3.3-dev” yazısını görüyorum.
Artık çakan koduma bakıp çalışmasını keyifle izleyebilirim. Hala açık sayfaya refresh çekiyorum…ve…
Kod yine de çalışmıyor, aynı yerde çakıyor!
“Kesin encoding bu! Kesin encoding bu! Encoding ulan!” diyerek bildiğim son numaraları da deniyorum: lokal makineden bir dizini sshfs ile vps’in ilgili dizinine mount ediyorum, lokaldeki dizinden bağlanmış uzak sistem dizinine kopyala+yapıştır deniyorum… Tabii ki yine olmuyor!
…derken, bir anda ilham geliyor ve methodPrivate() içindeki tarihleri Türkçe bastırmak için kullandığım
1
| setlocale(LC_ALL , 'tr_TR.UTF-8'); |
satırını comment ediyorum, deniyorum, a-aa çalışıyor!
O ana kadar hiç aklıma gelmemiş zira işletim sistemini kurar kurmaz apt-get install language-pack-tr-all gibisinden bir paketi de kurmuşum.
Yukarıdaki satırı
1
| setlocale(LC_TIME , 'tr_TR.UTF-8'); |
yapıyorum (biraz altta tekrar en_GB lokaline çevirmem gerekiyor yoksa PgSQL sorgularım patlıyor) ve iş bitiyor!
Kodda bir kelimelik değişiklik yapabilmiş olmak için sisteme gecelik snapshot bir sürüm kurduğumla kalıyorum… Kendi kendime sinirli sinirli gülüyorum ve bu yazıyı yazmaya başlıyorum!