PHP ZAMAN SORUNU

Bu yazıda phorum için zaman sorununun nasıl cözüldüğü anlatılmıştır. Cevaba geçmeden önce biraz koddan ve sorunda bahsetmek istiyorum.

PROGRAM HAKKINDA:
Phorum, bizim sayfamızda, php.org.tr' da ve birçok sayfada kullanılan bu koda http://www.phorum.org sayfasından erişebilirsiniz.

SORUNUN NEDENİ: Sorun forumu host ettiğimiz (yayınladığımız) yerin yurt dışında olmasından kaynaklanıyor. Sisteme yeni bir mesaj eklendiği zaman, kod sistem saatine bakıp onu not ediyor. Bu yüzden Türkiye deki bir kullanıcının saat kaçta haber eklediğini doğru olarak göremiyoruz. Yani sorun ülkeler arası saat farkından kaynaklanıyor.

SORUNUN ÇÖZÜM TEKNİĞİ:
Bunun için öncelikle "date" komutundan bahsetmek istiyorum. Bu komut sayesinde sistemden tarih bilgilerini istediğimiz bir formatta alabiliyoruz.

Örnek:
$datestamp = date("Y-m-d H:i:s");
Bu kod bize şu anın tarihini verir : 2001-06-09 17:30:22 Burada date fonksiyonun yaptığı iş time() komutundan gelen sayıyı bizim anlayabileceğimiz bir forma ta çevirmesidir. Mesela şu anda time komutu bize "992097022" sayısını verir. Biz date komutuna istediğimiz bir sayıyı verip. O sayının hangi tarihe rast geldiğine bakabilirsiniz.

Örnek:
print(date("Y-m-d H:i:s",0));
Bize, bu saat sisteminin 0 olarak kabul edildiği anı verir. Yani "1970-01-01 02:00:00" buradaki 0 ı 1 saparsanız 1 saniye sonrasına ulaşmış olursunuz! Yani aslında bugünün saati
print(date("Y-m-d H:i:s",time() ));
ile alınmaktadır.

GENEL OLARAK SORUNUN CÖZÜMÜ:
Sorunu çözmek için yapılması gereken şey "time()" komutuyla bugünün saatinden gerideysek saat farkını çıkarmak, ilerideysek toplamak. Bunu yapmak için farkı saniye olarak çıkarmak gerekir. Yani 1 saatlik fark 60*60=3600 sn yapar. 9 saatlik fark 9*3600 sn yapar. Sonra bunu date komutunda kullanmak.
$saatfarki=-9;
$datestamp = date("Y-m-d H:i:s",(time()+3600*$saatfarki));

Bu sayede saati ayarlamış oluruz. *Buradaki örnekte 9 saat geride olunması durumu için yapılmıştır.

PHORUM İÇİN SORUNUN ÇÖZÜMÜ:
Bunu yapmak için programda haber eklenme sayfasında yani post.php değişiklik yapmak yeterli olacaktır. Post.php bir edit programıyla açıp 113 satırdaki date komutunu aşadaki ile değiştirin.
$datestamp = date("Y-m-d H:i:s",(time()+3600*$saatfarki));
Burada zaman farkı değişkenini ister hemen üstüne koyun veya benim yaptığım gibi common.php ye ekleyin. Bu sayede istediğiniz zaman değişiklik yapmanız daha kolay olur.

DENEME:
Ben bu kodu www.f2s.com dan aldığım bedava serverda çalıştırıyorum. Ve oradaki serverdan 9 saat geride olduğumu fark ettim. Bu şekilde yaptığım düzeltme sayesinde formum düzgün bir şekilde çalışıyor.


Bu konuda sorununun olursa bana tayfun@turk-php.com dan ulaşabilirsiniz.
©TAYFUN ULU
www.e-tayfun.f2s.com

NOT:
Bu kod kullanıcılara php yi öğretmek amacı ile yazılmıştır. Yöntem denenmiştir. Bunu sisteminizde uygularken doğabilecek sorunlardan sorumlu değilim.
NOT 2:
Bu dokuman www.turk-php.com için benim tarafımdan yazılmıştır.