PHP 4’ün Yenilikleri VIII. “Türkiye’de İnternet” Konferansı İstanbul, Aralık 2002 Hidayet Doğan
PHP 4’ün Yenilikleri I. empty(“0”) II. Metin İçine Değişken Yapıştırma III. print_r() IV. Dizi Fonskiyonları V. Dosya ve Dizin Fonksiyonları VI. Metin (String) Fonksiyonları
I. empty(“0”) <? $veri = “0”; if (empty($veri)) echo “boş”; else echo “dolu”; ?> PHP 4 Çıktısı: boş PHP 3 Çıktısı: dolu Verilen parametredeki değerin boş olup olmadığını döndürür. Boş ise TRUE, değilse FALSE değeri döner.
II. Metin İçine Değişken Yapıştırma Diziler (Tek veya çok boyutlu) Sınıflar PHP 3: “metin metin”. $dizi[0][“isim”]. “metin metin” PHP 4: “metin metin {$dizi[0][“isim”]} metin metin” UYARI: PHP 3’e göre hazırlanmış betiklerin PHP 4 üzerinde düzgün bir biçimde çalışması için betik içindeki {$ içeren yerleri \{$ olarak düzeltin.
III. print_r() (PHP 4 ile) Parametrede verilen değişkene ait bilgileri okunabilir bir şekilde gösterir. Eğer girilen değişken metin veya sayı gibi basit bir değişken ise değerin kendisi gösterilir. Dizi, sınıf gibi karmaşık bir değişken ise içinde barındırdıkları verilerle birlikte formatlanmış şekilde gösterir. Genelde betikler içinde, yazılan kodların doğruluğunun kontrol etmesi amacıyla kullanılır (DEBUG).
<? $dizi = array(“bir” => “PHP”, “iki” => “HTML”); $metin = “Türkiye PHP Grubu”; $sayi = 15234; echo “ ”; print_r($dizi); print_r($metin); print_r($sayı); echo “ ”; ?> III. print_r() (PHP 4 ile)
Çıktısı: Array ( [bir] => PHP [iki] => HTML ) Türkiye PHP Grubu III. print_r() (PHP 4 ile)
IV. Dizi Fonksiyonları a.in_array() (PHP 4 ile) b.array_search() (PHP ile) c.array_key_exists() / key_exists() (PHP ile) d.explode() 3. Parametresi (PHP ile)
IV-a. in_array() (PHP 4 ile) Eskiden... <? $dizi = array(“PHP”, “HTML”, “XML”); for ($i = 0; $i < count($dizi); $i++) { if (“PHP” == $dizi[$i])) echo “var”; else echo “yok”; } ?> for döngüsü while döngüsü
IV-a. in_array() (PHP 4 ile) <? $dizi = array(“PHP”, “HTML”, “XML”); if (in_array(“PHP”, $dizi)) echo “var”; else echo “yok”; ?> Birinci parametredeki değeri ikinci parametredeki dizi elemanları değerleri içinde arar. Eğer aranan değer bulunursa TRUE, bulunamaz ise FALSE değeri döner. Çıktısı: var
IV-a. in_array() (PHP 4 ile) Eğer üçüncü parametre değeri TRUE olarak verilirse, arama sadece birinci parametredeki değerin veri tipi ile eşit olan elemanlar arasında yapılır. <? $dizi = array(“metin”, 27, 12, 65); if (in_array(“27”, $dizi, TRUE)) echo “27 (metin) bulundu”; if (in_array(65, $dizi, TRUE)) echo “65 (sayı) bulundu”; ?> Çıktısı: 65 (sayı) bulundu
IV-b. array_search() (PHP ile) in_array() fonksiyonu ile neredeyse aynı olup, eğer verilen değer bulunursa TRUE değeri yerine, bulduğu değere ait anahtarı (eleman ismini) döndürür. <? $dizi = array(“bir” => “PHP”, “iki” => “HTML”); echo array_search(“PHP”, $dizi); ?> Çıktısı: bir
Eskiden... <? $dizi = array(“bir” => “PHP”, “iki” => “HTML”); while (list($anahtar, $değer) = each($dizi)) { if (“bir” == $anahtar) echo “var”; else echo “yok”; } ?> IV-c. array_key_exists() (PHP ile)
Birinci parametredeki değeri ikinci parametredeki dizi anahtarları (eleman isimleri) içinde arar. Eğer aranan değer bulunursa TRUE, bulunamaz ise FALSE değeri döner. <? $dizi = array(“bir” => “PHP”, “iki” => “HTML”); if (array_key_exists(“bir”, $dizi)) echo “var”; else echo “yok”; ?> Çıktısı: var
IV-c. array_key_exists() (PHP ile) UYARI: Bu fonksiyonun ismi PHP sürümünde key_exists() olarak geçmektedir.
IV-d. explode() 3. Parametresi (PHP ile) İkinci parametredeki metni birinci parametrede verilen ayraç ile parçalayıp dizi halinde döndürür. Eğer ayraç boş ise FALSE değeri döner. Eğer ayraç metin içinde bulunmazsa tüm metin tek elemanlı bir dizi olarak döner. <? $metin = “bir iki üç dört beş”; $dizi = explode(“ “, $metin); echo $dizi[0].” ”; echo $dizi[1]; ?> Çıktısı: bir iki
IV-d. explode() 3. Parametresi (PHP ile) Üçüncü parametre olan limit parametresine bir sayı verildiğinde, ikinci parametrede verilen metni sadece o sayı kadar parçalar. <? $metin = “bir iki üç dört beş”; $dizi = explode(“ “, $metin, 2); echo $dizi[0].” ”; echo $dizi[1].; ?> Çıktısı: bir İki üç dört beş
IV. Dizi Fonksiyonları Dizi fonksiyonlarının neredeyse yarısı PHP 4 ile gelmiştir. Geriye kalan fonksiyonların ise yine yarısı üzerinde yenilikler yapılmıştır. Yeni dizi fonksiyonlarından birkaç tanesi: array_count_values() array_merge() array_rand() array_slice() array_unique()
V. Dosya ve Dizin Fonksiyonları a.getcwd() (PHP 4 ile) b.disk_free_space() (PHP ile) c.disk_total_space() (PHP ile) d.move_uploaded_file() (PHP ile) e.parse_ini_file() (PHP 4 ile) f.pathinfo() (PHP ile) g.realpath() (PHP 4 ile)
V-a. getcwd() (PHP 4 ile) O an çalışılan dizinin tam yolunu metin olarak döner. <? echo getcwd(); ?> Çıktısı: /usr/local/httpd/htdocs C:\Program Files\Apache Group\Apache\htdocs
V-b. disk_free_space() (PHP ile) Parametrede verilen dizine ait bölümdeki boş alanı bayt cinsinden döner. Eğer yanış bir dizin verilirse boş döner. <? echo disk_free_space(“.”); ?> Çıktısı: UYARI: Windows işletim sistemi üzerinde her zaman boş dönmektedir. diskfreespace() fonksiyonu bu fonksiyonun kısa yoludur.
V-c. disk_total_space() (PHP ile) Parametrede verilen dizine ait bölümdeki alanın büyüklüğünü bayt cinsinden döner. Eğer yanış bir dizin verilirse boş döner. <? echo disk_total_space(“.”); ?> Çıktısı: UYARI: Windows işletim sistemi üzerinde her zaman boş dönmektedir.
V-d. move_uploaded_file() (PHP ile) PHP ile sunucuya yüklediğiniz dosyaları başka bir dizine ve başka bir isimle taşımanızı sağlar. Birinci parametresine yüklenen dosya adı, ikinci parametresine ise taşınacak dizin ve yeni dosya adı verilir. <form method=“post” action=“yukle.php” enctype=“multipart/form-data”> Dosya:
V-d. move_uploaded_file() (PHP ile) <? # yukle.php echo “Önceki Dosya: $dosya ”; if (move_uploaded_file($dosya, getcwd().”/dosya.txt”)) echo “Yüklendi”; else echo “Hata!”; ?> Çıktısı: Önceki Dosya: /tmp/phpxujllN Yüklendi
V-d. move_uploaded_file() (PHP ile) Eğer $dosya değişkeninde verilen dosya PHP kullanarak yüklediğimiz bir dosya olmasaydı (sistem üzerindeki herhangi bir dosya olabilir) fonksiyon FALSE değerini dönerdi ve çıktı Yüklendi yerine Hata! olurdu. Dosyamız PHP ile yüklenmiş doğru bir dosya ve sistemde oluşan herhangi bir hata yüzünden taşınamıyor olsaydı yine FALSE değerini döner ve PHP ek olarak bir hata verirdi. UYARI: Taşınacak yerde aynı isimde bir dosya varsa yeni dosyayı üstüne yazar.
V-e. parse_ini_file() (PHP 4 ile) Birinci parametrede verilen ayar (ini) dosyasını yorumlar ve dizi olarak döndürür. Eğer verilen dosya bulunamıyor veya açılamıyor ise betik hata verir ve çalışma sonlanır. İkinci parametrede ise dosya içindeki bölümleri yorumlayıp yorumlamıyacağı belirtilir. TRUE değeri verilirse bölümleri Yorumlayıp verileri çok boyutlu bir dizi olarak döner. FALSE verilirse – ikinci parametre verilmediğinde FALSE olarak atanmaktadır – veriler tek boyutlu bir dizi olarak döner.
V-e. parse_ini_file() (PHP 4 ile) ; Örnek ayar dosyası (ornek.ini) [ilk_bolum] bir = 1 bes = 5 [ikinci_bolum] yol = /usr/local/httpd/htdocs url = “ UYARI: Eğer veri içinde alfanumerik karakterler dışında bir karakter kullanılacaksa mutlaka çift tırnak (“) arasına alınmalıdır.
V-e. parse_ini_file() (PHP 4 ile) <? # yorumla.php echo “ ”; $dizi = parse_ini_file(“ornek.ini”); print_r($dizi); $dizi = parse_ini_file(“ornek.ini”, TRUE); print_r($dizi); echo “ ”; ?>
V-e. parse_ini_file() (PHP 4 ile) 1. Çıktısı: Array ( [bir] => 1 [bes] => 5 [yol] = /usr/local/httpd/htdocs [url] = )
V-e. parse_ini_file() (PHP 4 ile) 2. Çıktısı: Array ( [ilk_bolum] => Array ( [bir] => 1 [bes] => 5 ) [ikinci_bolum] => Array ( [yol] = /usr/local/httpd/htdocs [url] = )
V-f. pathinfo() (PHP ile) Parametrede verilen yola (path) ait dizin adı, dosya ismi ve dosya uzantısı bilgilerini dizi olarak döner. <? $bilgi = pathinfo(“/usr/local/httpd/htdocs/test.html”); echo $bilgi[“dirname”].” ”; echo $bilgi[“basename”].” ”; echo $bilgi[“extension”]; ?> UYARI: Verilen yolun doğruluğunu kontrol etmez.
V-f. pathinfo() (PHP ile) Çıktısı: /usr/local/httpd/htdocs test.html html
V-g. realpath() (PHP 4 ile) Parametrede verilen dizin veya dosyanın ya da her ikisinin gerçek ve düzenlenmiş halini döner. Verilen dosya veya dizin açılamaz veya bulunamazsa FALSE değerini döndürür. <? echo getcwd().” ”; echo realpath(“../..//../test.html”); ?> Çıktısı: /usr/local/httpd/htdocs/bir/iki/uc /usr/local/httpd/htdocs/test.html
V. Dosya ve Dizin Fonksiyonları Diğer yeni dosya fonksiyonları: fscanf() ftruncate()
VI. Metin (String) Fonksiyonları a.str_repeat() (PHP 4 ile) b.str_pad() (PHP 4 ile) c.substr_count() (PHP 4 ile)
VI-a. str_repeat() (PHP 4 ile) Birinci parametredeki metni, ikinci parametrede verilen sayı kadar çoğaltır ve döner. Eğer ikinci parametrede 0 ise boş metin döner. 0’dan küçük ise hata oluşur ve çalışma sonlanır. <? echo str_pad(“-=”, 10); ?> Çıktısı: -=-=-=-=-=-=-=-=-=-=
VI-b. str_pad() (PHP 4 ile) Birinci parametredeki metnin soluna, sağına veya her iki tarafına, istenilen boyuta ulaşana kadar üçüncü parametredeki metni ekler. Eğer üçüncü parametre verilmez ise yerine boşluk karakteri atanır. Dördüncü parametrede hangi yöne eklenmesi gerektiği belirtilir. Bu parametreye: STR_PAD_LEFT (sadece sola ekle) STR_PAD_RIGHT (sadece sağa ekle) STR_PAD_BOTH (her iki yöne ekle) değerlerini verebiliriz. Eğer bu parametre verilmez ise yerine STR_PAD_RIGHT değeri atanır.
VI-b. str_pad() (PHP 4 ile) <? echo “\””.str_pad(“PHP”, 10).“\” ”; echo “\””.str_pad(“PHP”, 10, “-=”, STR_PAD_LEFT).“\” ”; echo “\””.str_pad(“PHP”, 10, “_”, STR_PAD_BOTH). “\”; ?> UYARI: İkinci parametre negatif bir sayı veya verilen metnin uzunluğundan küçük bir sayı ise hiçbir değişiklik olmadan birinci parametredeki metin döner.
VI-b. str_pad() (PHP 4 ile) Çıktısı: "PHP " "-=-=-=-PHP" "___PHP____"
VI-c. substr_count() (PHP 4 ile) Birinci parametredeki metnin içinde ikinci parametredeki metnin kaç defa kullanıldığını döner. <? echo substr_count(“Bu bir örnek”, “r”); ?> Çıktısı: 2
VI. Metin (String) Fonksiyonları Yeni metin fonksiyonlarından birkaç tanesi: sscanf() wordwrap()
Unutulmaması Gereken... PHP sürümü ile birlikte: $HTTP_POST_VARS= $_POST $HTTP_GET_VARS= $_GET $HTTP_COOKIE_VARS= $_COOKIE $HTTP_SESSION_VARS= $_SESSION $HTTP_SERVER_VARS= $_SERVER $HTTP_ENV_VARS= $_ENV $HTTP_POST_FILES= $_FILES PHP kurulumunda register_globals = off