Tanımı : phpinfo.php dosyası sorun analizleri için önemli bir dosyadır bu dosya sayesinde kullandığınız mysql sürümünü ve öğrenmemiz gereken sürüm bilgilerini, php bileşenlerini görürüz ve bunlara göre yorum yapabiliriz.
Not : Bu dosyayı sadece sorun yaşıyorsanız yaratın ve bu dosya diğer kişiler tarafından görülebilir yani potansiyel bir risk olur sunucunuzda kalırsa..
Kod:
Kod:
<?php
phpinfo();
?>
adını phpinfo.php olarak kaydedin sunucunuza yükleyin ve dosyayı şu şekilde çalıştırın ;
Sunucunuzdaki yerel ayaları aşağıdaki gibi değiştirerek tarih fonksiyonlarının Türkçe çalışmasını sağlayabilirsiniz
Kod:
Kod:
1.
@setlocale(LC_ALL, 'turkish');
2.
//Ay ve gün isimleri ve diğer dillerdeki kullanımlarda
yerel ayarlar için setlocale() fonsiyonundan yararlanılır.
Kod:
Kod:
1.
strftime(format,tarih);
2.
//O anki yerel ayarlara göre tarih/saat formatları ayarlar.
Aşağıda belirtilen ekler bu fonksiyonu formatlarken kullanılır
* %a - yerel ayarlara göre haftanın günlerini kısa formatta gösterir * %A - yerel ayarlara göre haftanın günlerini tam gösterir * %b - yerel ayarlara göre ayın ismini kısa formatta gösterir * %B - yerel ayarlara göre ayın ismini tam gösterir * %c - yerel ayarlarda gösterilen zamanı kullanır * %C - yıl numarasını verir * %d - o anki ayın gününü numara olarak verir ( 01-31 arası) * %D - aa/gg/yy formatında verir * %e - yerel ayarlara göre ayın günlerini arada boşluk bırakarak gösterir ( ' 1' - '31' arası) * %h - yerel ayarlara göre ayın ismini kısa formatta gösterir * %H - 24'lik saat düzenine göre saati verir * %I - 12'lik saat düzenine göre saati verir * %j - o anki yılın gününü numara olarak verir ( 001- 366 arası) * %m - ayları verir * %M - dakikaları verir * %n - yeni bir satırda karakter girişi * %p - `am' veya `pm' yerine verilen düzende saati verir * %r - saati a.m. ve p.m. düzenine göre verir * %R - saati 24 saat düzenine göre verir * %S - saniyeleri verir * %t - tab karakteri verir * %T - yerel ayarlara göre saati ss/dd/ss formatında verir * %u - haftanın günlerini numara olarak verir -pazartesi baþlangıç olarak alınır * %U - o anki yılın hafta nunaralarını verir-pazar günü baþlangıç kabul edilir * %V - o anki yılın hafta nunaralarını verir-pazartesi günü baþlangıç kabul edilir * %W - o anki yılın hafta nunaralarını verir-pazartesi günü başlangıç kabul edilir * %w - o anki haftanın gün nunarasını verir-pazar günü baþlangıç kabul edilir * %x - yerel ayarlara göre sadece tarihi verir * %X - yerel ayarlara göre sadece saati verir * %y - yerel ayarlara göre sadece yılın son iki rakamını verir * %Y - yerel ayarlara göre sadece yılı verir * %Z or %z - adlandırma ve kısaltmalar için kullanılır * %% - `%' karakterini verir
PHP nin diğer web scripting dillerine göre bir üstünlüğü de kendi kodlarını rahat okunmasını sağlayacak şekilde renklerle düzenleyebilmesi. Bunun için sadece basit bir fonksiyon kullanıyoruz. Ama bu fonksiyon sadece verilen bir kodu renklendirebiliyor.
Peki yazdığımız makalele ve dokumanlardaki php kodlarını otomatik olarak bulup renklendirmesini istersek?
PHP Alemini ilk açtığımda bulduğum yeni php tekniklerini gösterirken, yazdıgım örnek kodları tek tek kendim renklendirmek zorunda kalıyordum. Acaba bu işi yapmanın kolay bir yolu yok muydu? Başladım manual i karıştırmaya. Evet php de kod highlighting fonksiyonları vardı. Ama bence biraz yetersizler çünkü mevcut üç fonksiyonda sadece verilen kaynağı renkli olarak ekrana basabiliyorlar. Peki bence neleri eksik?
# Verilen kaynağı işlemden geçirdikten sonra değişkenkenlere atayamıyorlar. # Karışık(text+code) bir kaynakta tarama yaparak ilgili kısımları renklendiremiyorlar. # Renk kodları statik(Açık arkaplan için düşünülmüş). Yani Sayfa renklerinizin koyu bir renk olması kodun okunmasını zorlaştırıyor.
Bu fonksiyonların açıklarını kapatacak yeni fonksiyonlarımı tanıtmadan önce mevcut bu üç fonksiyona bir gözatalım.
Kod:
Kod:
<?
highlight_string("string") //string kısmına php kodu yazmalısınız.
highlight_file ("string filename") //php kodu içeren dosya yolu kullanılarak dosya içeriğini basar.
show_source (string filename) // Üsttek fonksiyonla işlevi aynıdır.
?>
Evet gördüğünüz gibi hepsinin işlevi hemen hemen aynı.
Peki bir kodu renklendirdikten sonra nasıl bir değişkende saklayabiliriz. Bunu için output kontrol fonksiyonlarını kullanmamız lazım. Burada bu fonksiyonlardan bahsetmeyeceğim. Ama konu ile ilgili online manual(output control) ı burada bulabilirsiniz.
Peki diyelimki tıpkı bu sayfada olduğu gibi karışık(text + php + html) bir dosyanız var. Bu sayfadaki sadece ilgili kodları nasıl renklendirirsiniz. Bunun için tek yapmanız gereken bir Regex araştırması ile kodları bulup yukardaki fonksiyonu ugulamak yani: Kod:
Kod:
<?php
/* Bu örnek arama ve kaplama işinde ben yazıma [ php ] ile başlayıp [ /php ] ile biten kodları aratıyorum. Bu benim kişsel terchim. Tabii istenirse direkt olarak <?php ve ?> kelimeleri de aranabilir. */
preg_replace('/
[nr]*(.+?)[nr]*
/esi',"phpcode('\1')",$mixtext);
?>
Son olarak arkaplanı koyu sayfalar için yazdıgım highlighting fonksiyonuna bir gözatalım:
İlk uygulamalarımızı geliştirdikten bir süre sonra clean code ve hızlı çalışan scriptler yazamamış olmaktan endişe ederiz. Bu yazıda hızlı çalışan scriptler için bazı öneriler bulacaksınız.
Öncelikle belirtmeliyim ki, PHP scriptlerinin hızlı çalışması için yapacağınız düzenlemeler çoğu kez kayda değmeyecek iyileştirmeler sağlar. Ama yine de kod yazma alışkanlıklarımızı geliştirmek fayda sağlayacaktır.
Parse hataları PHP ile çalışırken en çok karşılaşılan hatalardan birisidir. Parse hataları, sayfanızda herhangi bir sözdizimi (syntax) hatası oluştuğunda yorumlayıcı tarafından ortaya çıkarılırlar.
En çok görülen parse hatalarına örnek verecek olursak; 1. Parse error: syntax error, unexpected $end in … .PHP on line … 2. Parse error: syntax error, unexpected T_IF/T_WHILE/T_FOR, expecting ‘{‘ in … .PHP 3. Parse error: unexpected T_IF, expecting ‘,’ or ‘;’ in … .PHP on line … 4. Parse error: unexpected T_STRING, expecting’,’ or ‘;’ in … .PHP on line …
Bu hataları örnekleyerek açıklayacak olursak:
1. Parse error: syntax error, unexpected $end in
Hata sebebi: Kullanılan 1. if sorgusu ‘}’ ile kapatılmamış. Böyle bir durum oluştuğunda yorumlayıcı size sayfanın son satırını verecektir.
Kod:
Kod:
if (5 > 4) {
echo 'IF ';
if (1< 0) {
echo 'Inner IF';
}
2. Parse error: syntax error, unexpected T_IF/T_WHILE/T_FOR, expecting ‘{‘ in
Hata sebebi: Fonksiyon açma ayracı bulunamadı. Bu yüzden hatayı if e yükleyecektir. Hata raporları: T_IF for if, T_WHILE for while, T_FOR for. Fonksiyonu açarken ayracı fonksiyon isminden sonra koymalısınız. Bu yüzden yorumlayıcı ilk açma ayracını arayacak ve hatayı if e rapor edecektir.
Kod:
Kod:
function test ()
if (1>2) {
echo ' IF ';
}
for ($i=0; $i<=5; $i++) {
echo "For $i";
}
}
3. Parse error: parse error, unexpected T_IF, expecting ',' or ';' in … .PHP on line …
Hata sebebi: İlk “echo” dan sonra konulmayan ‘;’. Bu yüzden yorumlayıcı hatayı ikinci if e yükleyecektir. İlk “echo” nun devam etmesini bekliyor ama devam etmiyor. Bunun yerine hatayı if ifadesine yüklüyor.
Kod:
Kod:
if (5 > 4) {
echo 'testing error '
if (1< 0) {
echo 'Inner IF';
}
}
Satır sonlarında ‘;’ yerine ‘,’ kullanırsanız da aynı hata ile karşılaşırsınız. Hata şöyle karşınıza çıkacaktır: parse error, unexpected T_IF in
Kod:
Kod:
if (5 > 4) {
echo 'parse error answer ',
if (1< 0) {
echo 'Inner IF';
}
}
4. Parse error: parse error, unexpected T_STRING, expecting ',' or ';' in … .PHP on line …
Hata sebebi: İlk “echo” “ ’ ” eksik olduğu için kapatılmadı. (‘) ile açtığınızda (“) ile veya (“) ile açtığınızda (‘) ile kapatırsanız da aynı hata ile karşılaşırsınız.
Kod:
Kod:
if (5 > 4) {
echo 'error due to missing quote ;
if (1< 0) {
echo 'Inner IF';
}
}
Public özelliği atanan bir değişken veya metot kullanıcı tarafından erişilebilir olmaktadır. Aynı zamanda sınıf içerisinden veya türeyen bir sınıf içersinden de erişebilir.
Örnek ;
Kod:
Kod:
view source
print?
01 < ?php
02 class a
03 {
04 public $isim = 'yusuf';
05
06 public function isimGetir()
07 {
08 echo $this->isim;
09 }
10 }
11
12 $a = new a;
13 echo $a->isim;
14 echo '';
15 $a->isimGetir();
16 ?>
Yukarıdaki örnekte hem bir değişkene public özelliğini hem de bir metoda public özelliğini atadık. Public ve diğer özellikler değişken veya metotdan önce başına yazılır örnektede görüldüğü gibi.
$a ve isimGetir() e public özelliği atandığı için sınıf başlatarak a classındaki bu değerlere erişme hakkına sahip olduk.
Private özelliği işleyiş olarak protected a benzese de aslında protected tek farkı türetilen bir classdan erişim hakkı yapamaz. Bu da demek oluyor ki private özelliği atanan değişken veya metot sadece o sınıf için özel olmuş oluyor. Hiç bir şekilde classı kullanmak isteyen ziyaretçi veya türeyen bir sınıf bu değişken veya metota erişim yapamaz.
Örnek ;
Kod:
Kod:
view source
print?
01 < ?php
02 class a
03 {
04 private $isim = 'yusuf';
05
06 public function isimGetir()
07 {
08 echo $this->isim;
09 }
10 }
11
12 $a = new a;
13 echo $a->isim;
14 echo '';
15 $a->isimGetir();
16 ?>
Yukarıdaki örnekte bu sefer $isim değişkenine private özelliğini atadık. Sınıf başlatılıp ardından $isim değişkenini çağırdığımızda ekranda “Cannot access private property..” gibi bir hata ile karşılaşarız. Çünkü $isim değişkeni sadece o sınıf için özel bir değişken. Hiç bir şekilde dışarıdan ( kullanıcı tarafından ) veya türetilen sınıftan erişim sağlanamaz.
Böylelikle türetilen classların da buna etki edebilerek mevcut classın işleyişinin bozulması önlenmiş olur.
Static özelliği atanmış bir değişken veya metot ramde saklanır. Böylece sürekli sürekli çağrılarak ramden çalmak yerine bir defaya mahsus rame atılarak performans kaybı önlenmiş olur. Static özelliğini herşeye atamakta doğru değildir. Zira projede kullanılacak sabit değişken veya metota atamak doğrudur. Çünkü bunlar hep aynı sonucu döndürecekleri için bir defaya rame aktarılması bize performans açısından büyük hız getirecektir.
Ayrıca static özelliği atanmış bir değişken veya metoda sınıf içerisinde $this yerine self:: ile erişim sağlanmaktadır.
Örnek ;
Kod:
Kod:
view source
print?
01 < ?php
02 class a
03 {
04 private static $isim = 'yusuf';
05
06 public static function isimGetir()
07 {
08 echo self::$isim;
09 }
10 }
11
12 a::isimGetir();
13 ?>
Bu örnekte de isimGetir metoduna hem public ( dışarıdan erişim yapma özelliği ) hem de static özelliği atanmıştır. Burda tek fark olarak normalde sınıfı başlatmamız gerekirdi ancak isimGetir metodu static olduğu için direk olarak erişim yapabiliriz. Buna değişkenlerde dahil.
Dışarıdan erişim yaparken sınıfadi::metot veya değişken şeklinde erişim yapabiliriz. a::isimGetir() diyerek a classının isimGetir() metoduna direk erişim yaptık ve static metodumuzu çağırdık böylece artık rame atıldı veya bundan sonraki her çağrılmasında artık bize ramden dönerek performans artışı sağlamış olacaktır.
Const özelliği atanan bir değer class içinde sabit özelliğini alır. Bu bizim normal kodlarımızdaki define() metodu ile aynıdır fakat sadece class içinde geçerlidir. Const özelliği atanmış bir sabite $this ile değil yine self:: ile erişim yapmaktayız dolayısıyla static özelliğini alırlar çünkü sınıf boyunca sakladıkları değer aynı kalacağından bir defaya mahsus ram de tutulurlar.
Ayrıca const özelliği atanan sabitin başında $ işareti bulanamaz. const sabit = ‘deger’; şeklinde tanımlanırlar.
Örnek ;
Kod:
Kod:
view source
print?
01 < ?php
02 class a
03 {
04 const isim = 'yusuf';
05
06 public function isimGetir()
07 {
08 echo self::isim;
09 }
10 }
11
12 $a = new a;
13 echo a::isim;
14 echo '';
15 $a->isimGetir();
16 ?>
Bu örnekte de görüldüğü gibi isim sabiti static özelliği de olduğu için hem a::isim; şeklinde ulaşabildik hem de sınıf içinde bir metot sayesinde ulaşabildik.
Final özelliği atanmış bir metot veya sınıf son metot veya son sınıf olduğunu işaret eder yani kendisinden sonra herhangi bir başka metot veya sınıf gelemez anlamını taşımaktadır.
Örnek ;
Kod:
Kod:
view source
print?
01 < ?php
02 class a
03 {
04 private $isim = 'yusuf';
05 public final function isimGetir()
06 {
07 echo $this->isim;
08 }
09 }
10
11 class b extends a
12 {
13 private $baska_isim = 'veli';
14
15 public function isimGetir()
16 {
17 echo $this->baska_isim;
18 }
19 }
20
21 $b = new b;
22 $b->isimGetir();
23 ?>
Bu örnekte a classının en son metodunun isimGetir() olduğu tanımlanmıştır ve bu metotdan sonra herhangi bir metot gelemeyecektir. Yani a sınıfından türeyen bir class da hiç bir şekilde isimGetir() metodu bulunamaz çünkü isimGetir() a sınıfının final metodur ve override (yok sayılarak yeniden aynı metot yazılamaz. (tamam tercümem biraz düşük oldu ) edilemez.
Bu örnek bize metot içindi birde sınıflar bir birleri arasında türetilirken artık son sınıf olduğunu belirtmemiz gerekebilir. Bunun için de class sözcüğünün başına final anahtarı getirilir.
Kod:
Kod:
view source
print?
01 < ?php
02 class a
03 {
04 public function aGetir()
05 {
06 echo 'Ben A sınıfıyım. ';
07 }
08 }
09
10 class b extends a
11 {
12 public function bGetir()
13 {
14 echo 'Ben B sınıfıyım. ';
15 }
16 }
17
18 final class c extends b
19 {
20 public function cGetir()
21 {
22 echo 'Ben C sınıfıyım ve benden sonra başka bir sınıf bana extends edilemez. ';
23 }
24 }
25
26 $c = new c;
27 $c->aGetir();
28 $c->bGetir();
29 $c->cGetir();
30
31 class d extends c
32 {
33 public function dGetir()
34 {
35 echo 'Ben D sınıfıyım.';
36 }
37 }
38
39 $d = new d;
40 ?>