PHP Kılavuzu

Yazan:
Mehdi Achour
Friedhelm Betz
Antony Dovgal
Nuno Lopes
Hannes Magnusson
Georg Richter
Damien Seguy
Jakub Vrana
2009-12-11
Düzenleyen: Philip Olson
Mustafa Aldemir
Nilgün Belma Bugüner
Yücel Haluk Bugüner
Yaşar Dereli
Faruk Enes
Behzat Erte
Alper Ersoy
Ekin Koç
Buğra Gökalp Okçu
Cumhur Onat
Onur Özgür Özkan
Sinan Polat
Serdar Soydemir
Mesut Tunga
Aydın Uzun
Bünyamin Vıcıl
Sezer Yalçın
çeviriye katkıda bulunmuşlardır.

Telif Hakkı

Copyright © 1997 - 2009 PHP Belgelendirme Grubu. Bu belge, sadece Creative Commons Attribution lisansının 3.0 veya sonraki sürümlerinin koşullarına bağlı kalınarak dağıtılabilir. Creative Commons Attribution lisansının 3.0 sürümü bu kılavuzla birlikte dağıtılmaktadır. Şu anki son sürümü » http://creativecommons.org/licenses/by/3.0/ adresinden temin edilebilir.

Bu belgenin kısmen veya tamamen, değiştirilerek veya aynen yayınlanması veya dağıtılması ile ilgileniyorsanız ve bu konuda sorularınız varsa, lütfen » doc-license@lists.php.net adresinden telif hakkı sahiplerine yazınız. Bu adres içeriği halka açık olarak arşivlenen bir eposta listesine aittir.



PHP Kılavuzu


Önsöz

PHP, "PHP: Hypertext Preprocessor" sözcüklerinin baş harfleriyle temsil edilen HTML içine gömülebilir açık kaynak kodlu, genel amaçlı, özellikle site geliştirmeye uygun bir betik dilidir. Dil yapısının önemli bir kısmını C, Java ve Perl gibi dillerden almış, kendisine has özelliklerle bu yapıyı pekiştirmiş, kolay öğrenilen bir dildir. Dilin ana amacı, site geliştiricilerinin devingen sayfalar oluşturmasını çabuklaştırmaksa da PHP ile çok daha fazlasını yapabilirsiniz.

Bu kılavuz temel olarak bir işlev başvuru kılavuzudur. Fakat bunun yanında bir dil kılavuzu, PHP'nin önemli özelliklerinin bazılarının açıklamaları ile tamamlayıcı bazı bilgiler de içermektedir.

Bu kılavuzu çeşitli biçemlerde » http://www.php.net/download-docs.php adresinden temin edebilirsiniz. Bu kılavuzun nasıl geliştirildiğiyle ilgili daha ayrıntılı bilgi edinmek için eklerdeki 'Kılavuz Hakkında' bölümüne bakabilirsiniz. PHP'nin tarihçesi ile ilgileniyorsanız onu da ek bölümler arasında bulabilirsiniz.

Yazarlar ve Katkıda Bulunanlar

Kılavuzun ön sayfasında şu anda en etkin kişileri ön plana çıkartıyoruz, ancak çalışmamıza halen katkıda bulunmakta olan birçok kişi ve geçmişte önemli katkılarda bulunmuş birçok insan var. Kılavuz sayfalarında kullanıcı önerileri üzerinden katılımda bulunarak destek veren birçok isimsiz kişi var. Bu kişiler düzenli olarak buradaki listelere ekleniyor, tüm katılımcılara destekleri için müteşekkiriz. Aşağıdaki listelerde isimler alfabetik olarak sıralanmıştır.

Yazarlar ve Düzeltmenler

Burada yer alan katılımcılar kılavuzun içeriğine yaptıkları ve/veya yapmakta oldukları eklemelerden dolayı takdir edilmelidirler: Bill Abt, Jouni Ahto, Alexander Aulbach, Daniel Beckham, Stig Bakken, Jesus M. Castagnetto, Ron Chmara, Sean Coates, John Coggeshall, Simone Cortesi, Markus Fischer, Wez Furlong, Sara Golemon, Rui Hirokawa, Brad House, Pierre-Alain Joye, Etienne Kneuss, Moriyoshi Koizumi, Rasmus Lerdorf, Andrew Lindeman, Stanislav Malyshev, Rafael Martinez, Rick McGuire, Yasuo Ohgaki, Derick Rethans, Rob Richards, Sander Roobol, Egon Schmid, Thomas Schoefbeck, Sascha Schumann, Dan Scott, Masahiro Takagi, Michael Wallner, Lars Torben Wilson, Jim Winstead, Jeroen van Wolffelaar ve Andrei Zmievski.

Burada yer alan katılımcılar kılavuzun düzenlenmesi çalışmasında kayda değer katkılarda bulunmuşlardır: Stig Bakken, Gabor Hojtsy, Hartmut Holzgraefe ve Egon Schmid.

Kullanıcı Önerilerini Sürdürenler

Şu anki en etkin geliştiriciler: Daniel Brown, Nuno Lopes, Felipe Pena, Thiago Pojda ve Maciek Sokolewicz.

Bu kişiler kullanıcı önerilerinin yönetiminde çok ciddi çaba sarfetmişlerdir: Mehdi Achour, Daniel Beckham, Friedhelm Betz, Victor Boivie, Jesus M. Castagnetto, Nicolas Chaillan, Ron Chmara, Sean Coates, James Cox, Vincent Gevers, Sara Golemon, Zak Greant, Szabolcs Heilig, Oliver Hinckel, Hartmut Holzgraefe, Etienne Kneuss, Rasmus Lerdorf, Matthew Li, Andrew Lindeman, Aidan Lister, Hannes Magnusson, Maxim Maletsky, Bobby Matthis, James Moore, Philip Olson, Sebastian Picklum, Derick Rethans, Sander Roobol, Damien Seguy, Jason Sheets, Tom Sommer, Jani Taskinen, Yasuo Ohgaki, Jakub Vrana, Lars Torben Wilson, Jim Winstead, Jared Wyles ve Jeroen van Wolffelaar.




Başlarken


Giriş

İçindekiler


PHP nedir?

PHP (açılımı PHP: Hypertext Preprocessor) geniş bir kitle tarafından kullanılan, özellikle sanal yöreler üzerinde geliştirme için tasarlanmış HTML içine gömülebilen bir betik dilidir.

Tamam da, bu tam olarak ne anlama gelmektedir? Bir örnek:

Örnek 1 - Başlangıç olarak bir örnek

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>Örnek</title>
    </head>
    <body>

        <?php
            
echo "Merhaba, ben bir PHP betiğiyim!";
        
?>

    </body>
</html>

Bir PHP betiğinin Perl ya da C gibi dillerden ne kadar farklı bir yapıda olduğuna dikkat edin. HTML kodu oluşturmak için bir sürü kod yazacağınıza, istediğiniz işi yapan bir PHP kodu yazıp onu HTML kodunun içine gömüyorsunuz (bu örnekte, yapılan iş ekrana yazı yazmak). PHP kodu <?php ve ?> özel başlangıç ve bitiş etiketleri arasına yazılır. Bu etiketler "PHP kipine" rahatlıkla girip çıkabilmenizi sağlarlar.

PHP'yi Javascript gibi kullanıcı tarafında çalışan dillerden ayıran, sunucu tarafında çalıştırılıyor olmasıdır. Yukardaki örnekteki kodu kendi sunucunuzda çalıştırırsanız, sitenize bağlanan kullanıcılar kodu göremeyecekler ve müdahale edemeyecekler, yalnızca sonucu görebileceklerdir. Dilerseniz HTTP sunucunuzu bütün HTML dosyalarınızı PHP dosyası olarak görüp işleyecek hale bile getirebilirsiniz. Buna rağmen kullanıcılar sizin gerçekte sunucu taraflı bir uygulama kullandığınızı fark edemeyebilirler.

PHP kullanmanın en güzel yanlarından biri, yeni kullanıcılar için öğreniminin oldukça kolay olması ve aynı zamanda profesyonel kullanıcılar için ileri seviyede özellikler içermesidir. PHP'nin uzun özellikler listesini okumaktan korkmayın. Kısa sürede PHP ile programlamaya başlayabilir ve birkaç saat içersinde basit programlar yazmaya başlayabilirsiniz.

PHP'nin gelişimi sunucu-taraflı programlamaya odaklanmışsa da, çok daha fazlasını yapmanıza olanak tanıyan araçlara da sahiptir. PHP neler yapabilir? bölümünde bu araçlar hakkında daha fazla bilgiye ulaşabilirsiniz. Eğer yalnızca site programlama ile ilgileniyorsanız, Basit bir eğitmen bölümünden devam edebilirsiniz.



PHP neler yapabilir?

Her şeyi. PHP temel olarak sunucu-taraflı programlamaya odaklanmıştır, bu nedenle CGI uygulamalarının yaptığı her şeyi, örneğin formdan veri toplama, devingen sayfa içeriği oluşturma, ya da çerez alıp gönderme gibi işlemleri yapabilirsiniz. Ancak PHP bunlardan çok daha fazlasını yapabilecek yetenektedir.

PHP betiklerinin kullanıldığı başlıca üç alan vardır.

  • Sunucu-taraflı programlama. Bu PHP için en geleneksel ve en temel olan alandır. Sunucu-taraflı programlama için üç şeye sahip olmanız gerekir. PHP çözümleyici (CGI ya da sunucu modülü), bir HTTP sunucusu ve bir tarayıcı. PHP programlamada deneyimliyseniz tüm bunları evinizdeki makinede çalıştırabilirsiniz. Yapılandırma ve Kurulum bölümünden bununla ilgili daha fazla bilgiye ulaşabilirsiniz.
  • Komut satırı uygulamaları. Bir PHP uygulamasını komut satırından hiçbir sunucu ya da tarayıcı uygulama kullanmadan çalıştırabilirsiniz. Burada tek ihtiyacınız olan PHP çözümleyicidir. Bu tür kullanım cron üzerinden (Windows eşdeğeri görev yöneticisi) düzenli çalıştırılan işlemler ya da basit metin işleme görevleri için idealdir. PHP'nin komut satırında kullanımı bölümünde daha ayrıntılı bilgiye ulaşaşabilirsiniz.
  • Masaüstü uygulamalarının yazımı. PHP için görsel uygulamaların yazılabileceği en iyi dil diyemeyiz, ancak PHP'yi iyi biliyorsanız ve PHP'nin birtakım ileri seviye özelliklerini kendi istemci taraflı uygulamalarınızda kullanmak istiyorsanız, PHP-GTK eklentisini bu tip programlar yazmak için kullanabilirsiniz. Bu şekilde platformdan bağımsız uygulamalar yazma şansına da kavuşacaksınız. PHP-GTK, PHP için bir eklentidir ve ana dağıtımda yer almaz. PHP-GTK ilginizi çektiyse, » kendi sitesini ziyaret edebilirsiniz.

PHP bütün büyük işletim sistemlerinde, Linux, birçok Unix türevi (HP-UX, Solaris, OpenBSD vb.), Microsoft Windows, Mac OS X, RISC OS dahil olmak üzere çok çeşitli platformlarda çalışabilir. PHP benzer biçimde bugün yaygın biçimde kullanılan HTTP sunucularının büyük kısmını destekler. Bunlara Apache, Microsoft IIS, Microsoft PWS, Netscape ve iPlanet Sunucuları, Oreilly Website Pro, Caudium, Xitami, OmniHTTPD ve daha birçok sunucuyu örnek gösterebiliriz. Bu sunucuların çoğunluğunda PHP modül olarak kullanılabilir, geri kalanlarında da CGI standardı kullanılarak PHP bir CGI işleyici olarak çalıştırılabilir.

Sonuç olarak, PHP ile işletim sistemi ve HTTP sunucusu seçme özgürlüğüne sahipsiniz. Dahası, hangi programlama yöntemini kullanacağınıza, işlevsel yaklaşımı mı yoksa nesne yönelimli yaklaşımı mı yoksa her ikisini birden mi kullanacağınıza kendiniz karar verebilirsiniz. Bütün NYP (nesne yönelimli programlama) özellikleri PHP 4'te varolmasa da, birçok kod kütüphanesi ve büyük uygulama (PEAR kütüphanesi dahil) NYP kullanılarak yazılmıştır.

PHP'nin yetenekleri yalnızca HTML çıktı üretmekle sınırlı değildir. PHP'nin yetenekleri arasında resim çıktısı üretebilme, PDF oluşturabilme ve hatta Flash filmleri oluşturabilme (libswf ve Ming kullanarak) bulunmaktadır. Aynı şekilde XHTML ya da XML gibi her tür metin tabanlı dosyayı oluşturabilmeniz mümkündür. PHP bu dosyaları özdevinimli olarak oluşturabilir ve ekrana yazdırmanın yanında sizin için dosya sisteminde saklayabilir, böylece devingen içeriğiniz için sunucu-taraflı bir depo sistemini kullanımınıza sunabilir.

PHP'nin en güçlü ve en çok üstünde durulan özelliklerinden biri, sahip olduğu geniş ve gelişmiş veritabanı desteğidir. PHP ile veritabanı bağlantılı site sayfaları oluşturmak son derece basittir. Aşağıda desteklenen veritabanlarının listesi bulunmaktadır:

  • Adabas D
  • dBase
  • Empress
  • FilePro (salt okunur)
  • Hyperwave
  • IBM DB2
  • Informix
  • Ingres
  • InterBase
  • FrontBase
  • mSQL
  • Direct MS-SQL
  • MySQL
  • ODBC
  • Oracle (OCI7 ve OCI8)
  • Ovrimos
  • PostgreSQL
  • SQLite
  • Solid
  • Sybase
  • Velocis
  • Unix dbm

Bunların haricinde PDO adı verilen bir veritabanı soyutlama eklentisiyle, bu eklenti tarafından desteklenen veritabanlarını şeffaf olarak kullanabilirsiniz. PHP, ek olarak ODBC'yi, yani Açık Veritabanı Bağlantı standardını da destekler, bu şekilde ODBC'yi destekleyen tüm veritabanları ile iletişim kurabilirsiniz.

PHP, farklı hizmetlerle LDAP, IMAP, SNMP, NNTP, POP3, HTTP, COM (Windows için) ve daha sayısız protokol aracılığıyla iletişim kurabilecek bir altyapıya da sahiptir. Hazır modüllerin haricinde ham ağ soketleri açıp bu soketler üzerinden istediğiniz bütün protokollerle çalışabilirsiniz. PHP, WDDX üzerinden sanal olarak sanal doku üzerinde hangi dilde yazılmış olursa olsun tüm uygulamalarla haberleşebilir. Ayrıca Java nesnelerinin oluşturulabilmesi ve şeffaf biçimde PHP nesneleri olarak kullanılabilmeleri önemli bir diğer özelliktir. Uzaktaki nesnelere erişim için CORBA uzantısı, yine PHP'nin sahip olduğu özellikler arasındadır.

PHP oldukça faydalı belge işleme özelliklerine sahiptir. Bu yelpaze Genişletilmiş POSIX ya da Perl düzenli ifade komutlarından XML dosyalarını okumaya kadar uzanır. XML dosyalarının okunması ve erişimi için SAX ve DOM standartlarını destekler. XSLT eklentisi ile XML belgeler dönüştürülebilir. PHP 5 tüm XML uzantılarını libxml2 tabanında tek bir standartta toplamış ve SimpleXML ile XMLReader desteğini bünyesine katarak sunduğu imkan yelpazesini genişletmiştir.

Bunların dışında, mnoGoSearch arama motoru, IRC ağ geçidi uzantıları, birçok sıkıştırma aracı (gzip, bz2) için yardımcı araçlar, takvim araçları, dil çeviri işlevleri yine PHP'nin sunmakta olduğu ilginç eklentilerden bazılarıdır.

Sizin de görebildiğiniz gibi bu sayfa PHP'nin sunabileceği bütün özellikleri ve faydaları anlatabilmek için yeterli değil. Yapılandırma ve Kurulum bölümünde ve İşlev başvuru kılavuzunda listelenen eklentilerin başlangıç bölümlerindeki açıklamalardan her bir eklenti için daha fazla bilgiye ulaşabilirsiniz.




Basit bir eğitmen

İçindekiler

Bu bölümde PHP ile ilgili en temel bilgileri kısa ve basit bir eğitmen üzerinde anlatmak istiyoruz. Bu metin yalnızca PHP ile devingen site sayfaları geliştirmeyi ele alır, ancak PHP'nin yeteneği yalnızca site sayfaları oluşturmakla sınırlı değildir. Daha fazla bilgi için PHP'nin yapabildikleri bölümünü inceleyebilirsiniz.

PHP tarafından etkinleştirilen site sayfaları normal HTML sayfaları gibidir ve bu sayfaları normal HTML sayfaları için kullandığınız yöntemlerle oluşturabilir ve düzenleyebilirsiniz.


Neye ihtiyacım var?

Bu eğitmen süresince HTTP sunucunuzun PHP desteğinin etkinleştirilmiş olduğunu ve tüm .php uzantılı dosyaların PHP tarafından yorumlandığını varsayacağız. Çoğu sunucuda, bu uzantı PHP dosyaları için öntanımlı dosya uzantısıdır, ancak emin olmak için sunucunuzun yöneticisinden doğru bilgiyi edinebilirsiniz. Sunucunuz PHP'yi destekliyorsa, başka hiçbir şeye ihtiyacınız yok demektir. Yalnızca .php uzantılı dosyalarınızı oluşturmanız sunucunuzun belge dizinlerine koymanız, sunucunuzun bu dosyayı sizin için özdevinimli olarak işleme koyması için yeterli olacaktır. Herhangi bir şeyi derlemeniz ya da fazladan bir araç kurulumu yapmanız gerekmemektedir. PHP tarafından etkinleştirilen dosyaları yeni bir tür HTML dosyası olarak kafanızda canlandırabilirsiniz. Düşünün ki, artık HTML dosyasının içine sihirli birtakım etiketler koyabiliyor ve bu etiketler sayesinde istediğiniz her tür işlemi gerçekleştirebiliyorsunuz. Site barındırma hizmeti verenlerin çoğu PHP desteği sunmaktadır, ancak sizinki sunmuyorsa, » PHP Bağlantıları bölümünden PHP hizmeti sunan barındırma sitelerinin adreslerine ulaşabilirsiniz.

Diyelim ki çok değerli olan band genişliğinizi boşa harcamamak ve kendi sisteminizde yerel olarak geliştirme yapmak istiyorsunuz. Bu durumda, » Apache gibi bir HTTP sunucusunu ve elbette » PHP'yi indirmeniz ve kurmanız gerekecektir. Bu ikilinin yanında, » MySQL gibi bir veritabanını da indirip kurmanız iyi olacaktır.

Bu üçlüyü tek tek kumak yerine daha basit bir yol izleyebilirsiniz. Kılavuzumuz PHP için kurulum bilgileri (HTTP sunucunuzun halihazırda kurulu olduğunu öngörür) bölümüne sahiptir. PHP'yi kendiniz kurmakta sorun yaşarsanız, sorularınızın çözümü için » kurulum posta listesi'ne başvurabilirsiniz. Daha basit bir yoldan gitmek istiyorsanız, işletim sisteminize uygun olan » ön yapılandırmalı paketleri seçebilir ve tüm bu araçları bir kaç fare tıklamasıyla özdevinimli olarak yükleyebilirsiniz. MacOSX, Linux ve Windows dahil olmak üzere birçok işletim sistemine PHP destekli bir HTTP sunucusu kurmak oldukça kolaydır. Linux üzerinde, » rpmfind ve » PBone araçlar RPM dosyalarını bulmakta size yardımcı olacaklardır. Debian için ise » apt-get sayfasını ziyaret edebilirsiniz.



İlk PHP-etkin sayfanız

merhaba.php isimli bir dosya oluşturun ve HTML sunucunuzun belge kök dizinine (DOCUMENT_ROOT) aşağıdaki içerikle kaydedin:

Örnek 1 - İlk PHP betiğimiz: merhaba.php

<html>
 <head>
  <title>PHP Denemesi</title>
 </head>
 <body>
 <?php echo '<p>Merhaba Dunya</p>'?>
 </body>
</html>

Tarayıcınızı kullanarak HTTP sunucunuzun adresine erişebilirsiniz, sunucunuzun alan adının sonuna /merhaba.php eklemeniz yeterli olacaktır. Yerel olarak geliştirme yaparken bu URL http://localhost/merhaba.php ya da http://127.0.0.1/merhaba.php gibi bir şey olacaktır, ancak bu HTTP sunucusunun yapılandırma ayarlarına bağlıdır. Eğer her şey düzgün yapılandırılmışsa, bu dosya PHP tarafından işlenecek ve aşağıdaki çıktı tarayıcınıza gönderilecektir:

<html>
 <head>
  <title>PHP Denemesi</title>
 </head>
 <body>
 <p>Merhaba Dunya</p>
 </body>
</html>

Bu program gördüğünüz gibi son derece basittir ve esasında böyle bir sayfa oluşturmak için PHP'ye gereksiniminiz yoktur. Görüntülenen: PHP'nin echo() deyimi kullanılarak elde edilen Merhaba Dünya cümlesidir. Bu dosyanın hiçbir şekilde çalıştırılabilir olmasına ya da özel bir türde olmasına ihtiyaç duyulmadığına dikkat edin. Sunucu dosyanın PHP tarafından işlenmesi gerektiğini bilir çünkü dosyaya ".php" uzantısını tanımladınız. Sunucu bu uzantıya sahip dosyaları PHP'ye aktaracak biçimde yapılandırılmıştır. Bunu size birtakım özel etiketlerle birçok ilginç işlem yapmanızı sağlayan bir tür HTML dosyası olarak düşünebilirsiniz.

Bu örneği denediyseniz ve hiçbir çıktı alamadıysanız, sizden dosyayı indirmenizi istediyse ya da dosyanın tüm içeriğini metin olarak ekranda gördüyseniz, büyük ihtimalle sunucunuzun PHP desteği etkinleştirilmemiştir ya da sunucunuz doğru yapılandırılmamıştır. Yöneticinizden kılavuzdaki Kurulum bölümünü kullanarak PHP'yi etkinleştirmesini rica edebilirsiniz. Yerel olarak geliştirme yapıyorsanız, kurulum bölümünü okuyarak herşeyin doğru yapılandırıldığından emin olun. Size çıktıyı sağlayan sunucudaki dosyaya http üzerinden erişmeye çalışıp çalışmadığınızı kontrol edin. Dosyayı doğrudan kendi dosya sisteminizden çağırıyorsanız, PHP tarafından işlenmeyecektir. Sorun her şeye rağmen devam ediyorsa, » PHP desteği alma yöntemlerini kullanmakta tereddüt etmeyin.

Bu örneğin amacı özel PHP etiketi biçemini göstermektir. Örnekte <?php ile PHP etiketinin başlangıcını belirledik. Sonra PHP komutunu yazdık ve kapanış etiketi ?> kullanarak PHP kipinden çıktık. Bir HTML dosyasında bu yöntemi kullanarak istediğiniz yerde PHP kipine girip çıkabilirsiniz. Daha fazla bilgi için, kılavuzun temel PHP sözdimi bölümünü okuyabilirsiniz.

Bilginize: Satırsonları hakkında
Satırsonu karakterlerinin HTML içinde bir önemi yoktur, bununla birlikte HTML kodunun göze hoş görünmesi için satırsonu karakterlerini kullanmak gerekir. ?> kapama etiketinin hemen ardından gelen satırsonu karakterini PHP silecektir. Dosyanın içine çok sayıda PHP bloğu koyarsanız veya hiçbir şey çıktılamayan betikleri dosyaya dahil etmeniz durumunda bu çok işe yarar. Ancak bu biraz kafa karıştırıcı olabilir. ?> kapama etiketinden sonra bir satırsonu karakterinin çıktılanmasını zorlamak isterseniz, ya kapama etiketinden sonra bir boşluk bırakıp onun ardına satırsonu karakterini koyun ya da PHP bloğunun son echo/print deyiminin sonuna bir satır sonu karakteri ekleyin.

Bilginize: Metin Düzenleyiciler Hakkında
PHP dosyalarını yaratabileceğiniz, düzenleyebileceğiniz ve yönetebileceğiniz birçok metin düzenleyici ve Bütünleşik Geliştirme Ortamı (IDE) bulunmaktadır. Bu araçların bir kısmı » PHP Düzenleyicileri Listesi bölümünde listelenmiştir. Sizin önermek istediğiniz bir düzenleyici varsa, lütfen yukarıdaki sayfayı ziyaret edin ve sayfa idarecisinden önermek istediğiniz düzenleyiciyi bu listeye eklemesini rica edin. Söz dizimi vurgulaması olan bir düzenleyici size yardımcı olabilir.

Bilginize: Kelime İşlemciler Hakkında
StarOffice Writer, Microsoft Word ve Abiword gibi kelime işlemciler PHP dosyalarını düzenlemek için uygun değillerdir. Eğer bu deneme betiği için bunlardan birini kullanmak istiyorsanız, dosyanın salt metin olarak kaydedildiğinden emin olun, aksi takdirde PHP'nin betiği okuması ve çalıştırması mümkün olmayacaktır.

Bilginize: Windows Not Defteri Hakkında
PHP betiklerinizi Windows Not Defteri ile yazıyorsanız, dosyalarınızın .php uzantısı ile kaydedildiğinden emin olmalısınız (Notepad birazdan bahsedeceğimiz önlemleri almadığınız takdirde dosyaların sonuna özdevinimli olarak .txt uzantısı ekler). Dosyayı kaydetmek istediğinizde, sizden dosyanız için bir isim belirtmeniz istenecektir. Dosya ismini tırnak içinde (örn. "hello.php") yazın. Bundan başka, 'Kaydet' iletişim kutusunun içindeki 'Metin Belgeleri' açılır menüsüne tıkladıktan sonra buradaki değeri "Tüm Dosyalar" olarak değiştirin. Artık dosya isminizi tırnak işareti kullanmadan yazabilirsiniz.

Artık çalışır bir PHP betiğini başarıyla oluşturduğunza göre, PHP betiklerinin en ünlüsünü oluşturma zamanı geldi demektir! phpinfo() işlevini çalıştıracağız ve sisteminiz ve yapılandırmanızla ilgili öntanımlı değişkenler, yüklü PHP modülleri ve yapılandırma ayarları gibi konularda faydalı birçok bilgiye ulaşacağız. Bu önemli bilgiler için biraz vakit ayırmanızı ve bunları incelemenizi öneririz.

Örnek 2 - PHP ile sistem bilgisine ulaşmak

<?php phpinfo(); ?>



İşe yarar bir şey

Şimdi daha işe yarar bir şey yapalım. Ziyaretçilerinizin hangi tarayıcıyı kullandığını tespit edelim. Bunun için, ziyaretçinizin tarayıcısı tarafından HTTP isteği ile birlikte gönderilen kullanıcı aracısı dizgesine bakacağız. Bu bilgi bir değişkende saklanır. Değişkenler PHP'de her zaman dolar işareti ile başlar. Bizim şu an için ilgilendiğimiz değişken $_SERVER['HTTP_USER_AGENT']'tir.

Bilginize: $_SERVER PHP kullanımına ayrılmış özel bir değişken olup HTTP sunucusunun tüm bilgilerini içerir. Bu tür değişkenlere süper küreseller denir. Bu konuda daha ayrıntılı bilgiyi Süper küreseller bölümünde bulabilirsiniz. Bu özel değişkenler PHP » 4.1.0 sürümünden itibaren kullanılmaya başlanmıştır. Daha öncesinde, $HTTP_SERVER_VARS gibi eski $HTTP_*_VARS dizileri kullanılmaktaydı. Ömrünü doldurmuş olsa da, bu eski tarz değişkenler hala kullanılabilmektedir. (Eski kod bölümüne de bakınız.)

Bu değişkenin değerini görüntülemek için yapmanız gereken:

Örnek 1 - Bir değişkeni (dizi öğesini) yazdırmak

<?php echo $_SERVER['HTTP_USER_AGENT']; ?>

Bu betiğin çıktısı şöyle bir dizge olabilirdi:


Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)

PHP'de birçok farklı değişken türü mevcuttur. Yukardaki örnekte bir diziye ait bir öğeyi yazdırdık. Diziler çok kullanışlı olabilirler.

$_SERVER PHP tarafından kullanımınıza özdevinimli olarak sunulan bir değişkendir. Kullanım kılavuzunun Öntanımlı Değişkenler bölümünden tümünün listesine ulaşabilirsiniz ya da önceki örnekte kullandığımız phpinfo() işlevi ile üretilen çıktıya bakarak bütün listeye ulaşabilirsiniz.

PHP etiketinin içine birden çok PHP komutu koyabilir ve tek bir echo komutundan daha fazlasını yapan küçük kod blokları oluşturabilirsiniz. Örneğin, ziyaretçinizin Internet Explorer kullanıp kullanmadığını şöyle öğrenebilirsiniz:

Örnek 2 - Denetim yapılarının ve işlevlerin kullanım örneği

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
    echo 
'Internet Explorer kullanmaktasınız.<br />';
}
?>

Bu betiğin çıktısı şöyle olabilirdi:

Internet Explorer kullanmaktasınız.<br />

Burada birkaç yeni kavramı devreye soktuk. Bir if deyimimiz var. Eğer C dilinde kullanılan temel sözdizimine aşinalığınız varsa, bu kullanım size tanıdık gelecektir. Aksi takdirde, giriş düzeyinde bir PHP kitabı almanız ve ilk birkaç bölümünü okumanız ya da kılavuzun Dil Başvuru Kılavuzu bölümünü okumanız faydalı olacaktır.

Devreye soktuğumuz ikinci kavram, strpos() işlevi ile yaptığımız çağrı oldu. strpos(), bir dizgeyi başka bir dizgenin içinde arayan yerleşik bir PHP işlevidir. Burada 'MSIE' dizgesini (iğne) $_SERVER['HTTP_USER_AGENT'] içinde (samanlık) arıyoruz. Eğer iğne samanlıkta bulunursa işlev iğnenin konumunu samanlığın başlangıcına göreli olarak döndürür. Aksi takdirde FALSE döner. if ifadesinin sonucu TRUE olduğu takdirde FALSE dönmez ve kaşlı ayraçlar arasındaki kod çalıştırılır. Aksi takdirde kod çalıştırılmaz. If, else gibi denetim yapıları ile strtoupper() ve strlen() gibi işlevleri kullanarak siz de benzer örnekler yazabilirsiniz. İlgili her kılavuz sayfası aynı zamanda örnekler de içermektedir. Bu işlevleri nasıl kullanmanız gerektiğinden emin değilseniz, kılavuzdaki bir işlev tanımı nasıl okunur ve PHP işlevleri bölümlerini okuyabilirsiniz.

Bunu bir adım öteye taşıyabilir ve bir PHP bloğunun tam ortasındayken bile PHP kipine nasıl girip çıkabileceğimize bakabiliriz:

Örnek 3 - HTML ve PHP kiplerini karıştırmak

<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() false olmayan bir değer döndürmelidir</h3>
<p>Internet Explorer kullanmaktasınız</p>
<?php
} else {
?>
<h3>strpos() false döndürmelidir</h3>
<p>Internet Explorer kullanmıyorsunuz</p>
<?php
}
?>

Bu betikten elde edilebilecek sonuçlardan biri:

<h3>strpos() false olmayan bir değer döndürmelidir</h3>
<p>Internet Explorer kullanmaktasınız</p>

Bir çıktı üretmek için PHP echo komutunu kullanmak yerine, PHP kipinden çıktık ve sadece düz HTML gönderdik. Burada dikkat edilmesi gereken önemli nokta, betiğin mantıksal akışının değişmiyor olmasıdır. strpos() işlevinden edinilen sonuca göre HTML bloklarından yalnızca biri görüntüleyiciye gönderilmektedir. Başka bir deyişle, bu işleyiş MSIE değişkeninin bulunup bulunmamasına bağlıdır.



Form Kullanımı

PHP'nin en güçlü özelliklerinden biri HTML formlarına yaklaşım biçimidir. Bilinmesi gereken ilk önemli durum, form içindeki tüm elemanların PHP tarafından özdevinimli olarak kullanılabilir olacağıdır. PHP ile formların kullanımı ve daha ayrıntılı bilgi için Dış kaynaklı değişkenler bölümünü okuyabilirsiniz. Örnek bir HTML formu:

Örnek 1 - Örnek bir HTML formu

<form action="action.php" method="post">
 <p>İsminiz: <input type="text" name="isim" /></p>
 <p>Yaşınız: <input type="text" name="yaş" /></p>
 <p><input type="submit" /></p>
</form>

Bu formda özel hiçbir şey yoktur. Hiçbir özel etiket içermeyen düz bir HTML formudur. Kullanıcı formu doldurup gönder tuşuna bastığında, action.php sayfası çağrılır. Bu dosyaya aşağıdakileri yazabiliriz:

Örnek 2 - Formdan veri yazdırmak

Merhaba <?php echo htmlspecialchars($_POST['isim']); ?>.
Siz <?php echo (int)$_POST['yaş']; ?> yaşındasınız.

Bu betikten elde edilecek örnek çıktı:

Merhaba Ahmet. Siz 22 yaşındasınız.

htmlspecialchars() ve (int) kısımları harcinde yapılan iş oldukça açık. htmlspecialchars() işlevi HTML'ye özel karakterlerin doğru şekilde kodlandığından emin olunmasını sağlar, dolayısıyla başkaları sayfanıza dışardan HTML etiketleri veya Javascript yerleştiremez. Yaş alanınında ise değerin bir tamsayı olması gerektiğini bildiğimiz için değeri integer türüne dönüştürmekle özdevinimli olarak bu alana girilmesi olası başı boş karakterlerden de kurtulmuş olduk. Ayrıca, bunun PHP'de sizin yerinize özdevinimli olarak yapılmasını sağlamak için süzgeç eklentisini de kullanabilirdiniz. $_POST['isim'] değişkeni ve $_POST['yaş'] değişkenleri sizin yerinize PHP tarafından özdevinimli olarak oluşturulur. Daha önce $_SERVER süper küresel değişkenini kullanmıştık, yukarıda ise tüm POST verisini içeren $_POST süper küresel değişkenini tanımış olduk. Formumuz için tanımlı yöntemin POST oluşuna dikkat edin. GET yöntemini kullanmış olsaydık, form bilgilerimiz $_GET süper küresel değişkenine atanmış olacaktı. Bunların haricinde, istemciden gelen verinin hangi kaynaktan geldiği sizin için önemli değilse $_REQUEST süper küreselini de kullanabilirdiniz. Bu değişken GET, POST ve COOKIE verilerinin birleşiminden oluşur. Daha fazla bilgi için import_request_variables() işlevini inceleyebilirsiniz.

PHP içinde XForms öğelerini de kullanabilirsiniz, ancak başlangıç aşamasında çok iyi desteklenen HTML formları sizin işinizi görecektir. XForms ile çalışmak yeni başlayanlar için uygun olmasa da, ilginizi çekebilir. XForms ile çalışmak belgesinde bu konu ile ilgili daha fazla bilgi bulabilirsiniz.



PHP'nin yeni sürümleri ile eski kod yapısını kullanmak

PHP'nin günümüzün çok kullanılan bir betik dili olmasıyla birlikte, hazır kullanabileceğiniz kodlar üreten halka açık birçok depo ve kütüphane oluşturuldu. PHP geliştiricileri geriye dönük uyumluluğu mümkün olduğunca korumaya çalıştılar, dolayısıyla eski bir PHP sürümü ile birlikte yazılmış bir PHP kodu hiçbir değişiklik yapılmasına gerek duyulmadan (ideal olarak) yeni PHP sürümleri ile çalışabilir halde kaldı. Ancak uygulamada, bazı değişikliklerin yapılması gerekebilir.

Eski kodları etkileyen yakın geçmişe ait iki önemli değişiklik:

  • Eski $HTTP_*_VARS tipi değişkenler ömürlerini doldurdular (bu değişkenler bir işlev ya da yöntem içersinde kullanılmadan önce tanımlanmalıydılar). Bunların yerini alan süper küresel diziler PHP'nin » 4.1.0 sürümünden itibaren kullanılabilir olmuştur. Bunlar: $_GET, $_POST, $_COOKIE, $_SERVER, $_FILES, $_ENV, $_REQUEST ve $_SESSION dizileridir. Daha eski, $HTTP_POST_VARS gibi $HTTP_*_VARS dizileri de hala kullanılabilmektedir. PHP 5.0.0'dan itibaren öntanımlı değişken dizileri register_long_arrays yönergesi ile iptal edilebilmektedir.
  • Dış kaynaklı değişkenler artık küresel etki alanında örtanımlı olarak yer almamaktadır. Başka bir deyişle, PHP » 4.2.0 sürümünden itibaren register_globals php.ini yönergesinin öntanımlı değeri off'tur (kapalıdır). Bu değerlere erişim için tercih edilen süper küresel dizi kullanımından yukarıda bahsettik. Eski betikler, kitaplar ve öğreticiler bu yönergenin on olduğu kabul edilerek yazılmış olabilir. Bu yönerge on olduğunda, örneğin http://mesela.dom/foo.php?id=42 URL'sine gelen bir istek ile $id değişkeni özdevinimli olarak oluşturulur. Bu yönergenin açık ya da kapalı olduğuna bakılmazsızın, $_GET['id()] daima kullanılabilir olacaktır.

Bu değişiklikler ile ilgili daha fazla bilgi için, Öntanımlı Değişkenler bölümünden ve oradaki diğer bağlantılardan faydalanabilirsiniz.



Sonraki adım nedir?

Sahip olduğunuz yeni bilgilerle kılavuzun birçok bölümünü anlayabilir ve örnek arşivinde bulunan birçok betiği okuyabilir hale gelmiş olmalısınız. » http://www.php.net/links.php bağlantısından inceleyebileceğiniz başka örneklere ulaşabilirsiniz.

PHP ile neler yapabileceğiniz ile ilgili sunumlara ulaşmak isterseniz, » http://talks.php.net/ adresindeki PHP Konferans Malzemeleri Sitesini ziyaret edebilirsiniz.





Yapılandırma ve Kurulum


Genel Kurulum Değerlendirmesi

Kuruluma başlamadan önce PHP'yi ne amaçla kullanacağınızı bilmeniz faydalı olur. Kullanım amaçları PHP ile ne yapılabilir? bölümünde anlatıldığı üzere 3 bölümde incelenebilir:

  • Genel Ağ siteleri ve uygulamaları (Sunucu taraflı)
  • Komut satırı uygulamaları
  • Masaüstü uygulamaları

İlk ve en önemli amaç için üç şeye ihtiyacınız bulunmaktadır: PHP'nin kendisi, bir HTTP Sunucusu ve bir tarayıcı. Muhtemelen bir tarayıcınız zaten vardır. Kullanmakta olduğunuz işletim sistemine bağlı olarak bir HTTP Sunucunuz da olabilir (Linux ve MacOS üzerinde Apache, Windows üzerinde IIS gibi). Yoksa, bir firmadan site barındırma hizmeti alabilirsiniz. Böylece herşeyi kendiniz ayarlamak zorunda kalmazsınız. Sadece PHP betiklerinizi yazmakla ilgilenir ve onları kiraladığınız alana yükleyip tarayıcınızla sonuçları görürsünüz.

Sunucuyu ve PHP’yi kendiniz yapılandıracaksanız, PHP’yi sunucuya bağlamak için iki seçeneğiniz olacak. Bir çok sunucunun PHP için (SAPI de denilen) bir modülü vardır. Apache, Microsoft Internet Information Server, Netscape and iPlanet sunucuları bu tür sunuculardandır. Bir çok sunucunun da Microsoft modül arayüzü, ISAPI için desteği vardır (OmniHTTPd gibi). Eğer sunucunuzda PHP için modül desteği yoksa sunucunuz ne türde olursa olsun onu bir CGI veya FastCGI işlemcisi olarak kullanabilirsiniz. Yani, sunucuya gelen tüm PHP dosyası isteklerini işleme sokmak için PHP’nin CGI çalıştırılabilirini kullanmak üzere sunucunuzu yapılandırabilirsiniz.

PHP'yi komut satırı betikleri yazmak için kullanmayı düşünüyorsanız (özdevinimli olarak resim üreten veya komut satırından aktardığınız değiştirgelerle metin dosyalarını işleyen betikler gibi), bir komut satırı betik yorumlayıcısına ihtiyacınız var demektir. Bu konuda daha fazla bigi edinmek için Komut satırı PHP uygulamalarının yazılması bölümüne bakınız. Bu durumda ne sunucuya ne de tarayıcıya ihtiyacınız olur.

PHP ile PHP-GTK eklentisini kullanarak masaüstü uygulamaları da yazabilirsiniz. Herhangi bir HTML çıktı üretilmediği için Genel Ağ sayfaları yazmaktan tamamen farklı bir yaklaşıma sahiptir. Bu araçlarla sadece pencereleri ve nesneleri yönetirsiniz. PHP-GTK hakkında daha ayrıntılı bilgi edinmek için lütfen » bu eklentinin kendi sitesini ziyaret ediniz. PHP-GTK, resmi PHP dağıtımlarıyla gelmez.

Bu noktadan itibaren belgede, daha çok Unix ve Windows üzerinde çalışan modüllü HTTP sunucuları ve CGI çalıştırılabilirlerinin yapılandırılması üzerinde durulacaktır. Ayrıca, komut satırı çalıştırılabiliri hakkında da bilgi bulabileceksiniz.

PHP'nin kaynak kodu ve Windows için çalıştırılabilir sürümleri » http://www.php.net/downloads.php adresinden temin edilebilir. Dağıtımları indirmek için yakınınızdaki » yansıları kullanmanızı öneririz.



Unix Sistemlere Kurulum

İçindekiler

Bu bölümde, PHP'nin Unix sistemleri üzerindeki yapılandırmasından ve kurulumundan ana hatları ile bahsedilecektir. Kuruluma başlamadan önce platformunuza ve kullandığınız HTTP sunucusuna özgü bölümleri incelemenizi öneririz.

Kılavuzun Genel Kurulum Değerlendirmesi bölümünde ana hatlarıyla bahsettiğimiz gibi, bu bölümde esas olarak HTTP sunucusunu ilgilendiren ayarlardan bahseceksek de PHP'nin komut satırından kullanımı ile ilgili ayarlara da değineceğiz.

PHP'yi Unix platformlarına kurmanın çeşitli yolları vardır. Kaynak kod paketinden kendiniz derleyip kurabileceğiniz gibi başkaları tarafından derlenip paketlenmiş sürümleri de kurabilirsiniz. Bu belgelerde esas olarak kaynak kod paketinden derleme, kurulum ve yapılandırma sürecinden bahsedeceğiz. Çoğu Unix benzeri sistemin kendine özgü paket kurulum yöntemi vardır. Bu, standart yapılandırmaya yardımcı olabilirse de farklı özelliklere ihtiyaç duyduğunuzda (örneğin, güvenli sunucu veya veritabanı sunucusu), HTTP sunucunuzu ve PHP'yi kendiniz derlemek zorunda kalırsınız. Yazılımları kendiniz derleyip kuracak bilgiye sahip değilseniz, sizin istediğiniz özelliklerde başkaları paket derlemiş mi diye bir araştırma yapmanızı öneririz.

Derleme işlemi için gerekli bilgi ve yazılımlar:

  • Temel Unix kullanım bilgisi ("make" komutunu ve bir C derleyicisini kullanabiliyor olmak)
  • Bir ANSI C derleyici
  • flex: 2.5.4 sürümü
  • bison: 1.28 sürümü (tercih), 1.35 veya 1.75
  • Bir HTTP sunucusu
  • Modüllere özgü bileşenler (GD, PDF kütüphaneleri, vs.)

PHP kaynak kod paketinin derleme için ayar ve yapılandırma işlemi configure betiğinin komut satırı seçenekleri kullanılarak yapılır. Bu seçeneklerin neler olduğunu görmek için kaynak paketinin kök dizininde komut satırından ./configure --help komutunu verebilirsiniz. Ayrıca, bu kılavuzda da bazı seçeneklerin açıklamalarına yer verilmiştir. Temel yapılandırma seçeneklerini eklerde bulabilirsiniz. Eklentilere özgü yapılandırma seçenekleri ise eklentilerin kılavuzdaki belgelerinde bulunabilir.

PHP'yi yapılandırdığınızda modülleri ve çalıştırılabilirleri derlemeye hazırsınız demektir. Artık make komutunu verebilirsiniz. Derleme işlemi bir noktada başarısız olursa ve bunun sebebini anlayamazsanız, Sorunlar bölümüne bakınız.


Unix sistemler ve Apache 1.3.x

Bu bölümde, PHP'nin Unix platformlarında Apache kurulumlarına özgü bilgilere ve ipuçlarına yer verilmiştir. Apache 2 ile ilgili bilgiler ve ipuçları ayrı bir sayfada verilmiştir.

Aşağıda, 10. şıkta kullanacağınız configure betiğinin temel yapılandırma seçeneklerini eklerde bulabilirsiniz. Eklentilere özgü yapılandırma seçenekleri ise eklentilerin kılavuzdaki belgelerinde bulunabilir. Örneklerde yazılımların sürüm numaraları, belgeyi sürüm numarasına bağlı kılmamak için 'xxx' ile gösterilmiştir. Siz bu çarpıların yerine kurduğunuz paketlerin sürüm numaralarını yazacaksınız.

Örnek 1 - PHP'nin Paylaşımlı Apache Modülü olarak kurulumu

1.  gunzip apache_xxx.tar.gz
2.  tar -xvf apache_xxx.tar
3.  gunzip php-xxx.tar.gz
4.  tar -xvf php-xxx.tar
5.  cd apache_xxx
6.  ./configure --prefix=/usr --enable-module=so
7.  make
8.  make install
9.  cd ../php-xxx

10. Artık PHP'yi yapılandırabilirsiniz. Burada PHP'yi eklentileri
    etkinleştiren çeşitli seçeneklerle özelleştirebilirsiniz. Olası
    seçeneklerin listesini almak için ./configure --help komutunu
    çalıştırabilirsiniz. Bu örnekte Apache 1 için MySQL destekli
    basit bir yapılandırmaya yer verilmiştir. Ayrıca, apxs komutunun
    bulunduğu yer de buradakinden farklı olabilir.

      ./configure --with-mysql --with-apxs=/usr/bin/apxs

11. make
12. make install

    Kurulumdan sonra yapılandırmanızı değiştirmek isterseniz son üç adımı
    yinelemek yeterlidir. Yeni modülün etkili olması için tek ihtiyacınız
    Apache'yi yeniden başlatmaktır. Apache'nin yeniden derlenmesine gerek
    yoktur.

    Aksi özellikle belirtilmedikçe 'make install' ile phpize gibi çeşitli PHP
    araçları, PEAR, PHP CLI ve bir takım başka şeylerin de kurulumu yapılır.

13. php.ini dosyanızı yapılandırın:

      cp php.ini-development /usr/local/lib/php.ini

    PHP seçeneklerini ayarlamak için .ini dosyanızı düzenleyebilirsiniz. .ini
    dosyanızın başka bir yerde durmasını istiyorsanız, 10. şıkta
    --with-config-file-path=/başka/bir/yer seçeneği ile dosyanız için başka
    bir yer belirtebilirsiniz.

    php.ini-dist yerine php.ini-production (dağıtımın standart .ini dosyası
    yerine önerilen yapılandırmalar dosyasını) kullanmayı tercih ederseniz,
    değişiklik listesini okumayı ihmal etmeyin, çünkü bunlar PHP'nin
    davranışını etkileyecektir.

14. PHP modülünün yüklenmesi için httpd.conf dosyasını düzenlemelisiniz.
    LoadModule yönergesinin değeri PHP modülünün sistemdeki yerini
    göstermelidir. Yukarıdaki 'make install' bunu sizin yerinize yapmıştır
    ama emin olmak için siz yine de bir bakın.

    PHP 4 için:

      LoadModule php4_module libexec/libphp4.so

    PHP 5 için:

      LoadModule php5_module libexec/libphp5.so

15. httpd.conf'un AddModule bölümünde ClearModuleList yönergesinin altına
    şunu ekleyin:

    PHP 4 için:

      AddModule mod_php4.c

    PHP 5 için:

      AddModule mod_php5.c

16. Apache'ye belli dosya uzantılarını PHP uzantıları olarak ele almasını
    söyleyin. Örneğin, .php uzantılı dosyaları Apache'nin PHP dosyaları
    olarak ele almasını isteyebiliriz. Başka uzantıları da buraya
    ekleyebilirsiniz. Bunları aralarında boşluk bırakarak aynı satıra
    yazabilirsiniz. Biz örnek olsun diye .phtml uzantısını ekledik.

      AddType application/x-httpd-php .php .phtml

    PHP kaynak kodlarını renklendirilmiş olarak göstermek için .phps
    uzantısını da yapılandırmanıza ekleyebilirsiniz. Bu, şöyle yapılır:

      AddType application/x-httpd-php-source .phps

17. Artık Apache'yi başlatabilirsiniz. Bunun için Apache'yi her zaman ki gibi
    başlatmanız yetecektir. (Sunucunun bir HUP veya USR1 sinyali kullanılarak
    yeniden yüklenmemesi için sunucunuzu yeniden başlatmadan önce
    durdurmalısınız.)

PHP'yi bir duruk nesne olarak da kurabilirsiniz:

Örnek 2 - PHP'nin Duruk Apache Modülü olarak kurulumu

1.  gunzip -c apache_1.3.x.tar.gz | tar xf -
2.  cd apache_1.3.x
3.  ./configure
4.  cd ..

5.  gunzip -c php-5.x.y.tar.gz | tar xf -
6.  cd php-5.x.y
7.  ./configure --with-mysql --with-apache=../apache_1.3.x
8.  make
9.  make install

10. cd ../apache_1.3.x

11. ./configure --prefix=/www --activate-module=src/modules/php5/libphp5.a
    (Bu satırda bir hata yok! libphp5.a'nın henüz mevcut olmadığının
    farkındayız. PHP derlenince mevcut olacak.)

12. make
    (Artık httpd çalıştırılabilirini Apache bin dizinine kopyalayabilirsiniz.
    Apache'yi ilk defa kuruyorsanız bu komuttan sonra "make install" komutunu
    da verin.)

13. cd ../php-5.x.y
14. cp php.ini-development /usr/local/lib/php.ini

15. PHP seçeneklerini ayarlamak için artık /usr/local/lib/php.ini dosyasını
    düzenleyebilirsiniz. httpd.conf veya srm.conf dosyasını açıp şunu ekleyin:

    AddType application/x-httpd-php .php

Bilginize: PHP 4 kurulumu için php-5'lerin yerine php-4 ve php5'lerin yerine php4 yazın.

Kullandığınız Unix türevine ve Apache kurulumuna bağlı olarak, sunucuyu durdurmanın ve yeniden başlatmanın çeşitli yolları vardır. Aşağıda farklı Unix/Apache kurulumları için sunucuyu yeniden başlatırkan kullanılabilecek komutlara yer verilmiştir. /bir/yer/ yerine bu uygulamaların dosya sistemindeki yerlerini yazınız.

Örnek 3 - Apache'yi yeniden başlatmak için örnek komutlar

1. Çeşitli Linux ve SysV türevleri için:
/etc/rc.d/init.d/httpd restart

2. apachectl betiği ile:
/bir/yer/apachectl stop
/bir/yer/apachectl start

3. httpdctl ve httpsdctl (OpenSSL kullanarak), apachectl gibidir:
/bir/yer/httpsdctl stop
/bir/yer/httpsdctl start

4. mod_ssl veya başka bir SSL sunucu kullanıyorsanız, elle durdurup
başlatmanız gerekebilir:
/bir/yer/apachectl stop
/bir/yer/apachectl startssl

apachectl and http(s)dctl çalıştırılabilirlerinin yerleri sık sık değişir. Sisteminizde locate, whereis, which gibi araçlar kuruluysa bunların yerlerini bu araçları kullanarak öğrenebilirsiniz.

PHP'yi Apache için derlerken kullanılabilecek farklı yapılandırma örnekleri:

./configure --with-apxs --with-pgsql

Bu yapılandırmayla, Apache'nin httpd.conf dosyasında LoadModule yönergesi ile Apache'ye yüklenebilecek şekilde bir libphp5.so (veya PHP4 için libphp4.so) paylaşımlı kütüphanesi oluşturulacak, PostgreSQL desteği bu kütüphaneye gömülü olacaktır.

./configure --with-apxs --with-pgsql=shared

Bu yapılandırmayla, Apache için bir libphp4.so paylaşımlı kütüphanesi oluşturulacak fakat önceki örnekten farklı olarak PostgreSQL desteği için pgsql.so adında ayrı bir paylaşımlı kütüphane oluşturulacaktır. PHP'ye PostgreSQL desteğini, eklentiyi php.ini içinde bir extension yönergesinde belirterek veya doğrudan bir betik içinde dl() işlevini kullanarak verebilirsiniz.

./configure --with-apache=/bir/yer/apache_kaynak_paketi --with-pgsql

Bu yapılandırmayla, bir libmodphp5.a kütüphanesi, mod_php5.c diye bir dosya ve bunlara eşlik eden bazı dosyalar oluşturulacak ve bunlar Apache kaynak ağacının altında src/modules/php5 dizinine kopyalanacaktır. Bundan sonra Apache --activate-module=src/modules/php5/libphp5.a seçeneği kullanılarak derlendiğinde Apache libphp5.a kütüphanesini oluşturacak (PHP 4 için 5 yerine 4 yazın) ve onu httpd çalıştırılabiliri ile duruk olarak ilintileyecektir. PostgreSQL desteği de doğrudan httpd çalıştırılabiliri içinde olacaktır. Böylece sonuçta tek bir httpd çalıştırılabiliri Apache ve PHP'nin tamamını içerecektir.

./configure --with-apache=/bir/yer/apache_kaynak_paketi --with-pgsql=shared

Yukarıdakinden farklı olarak PostgreSQL desteği, doğrudan sonuncu httpd çalıştırılabiliri içinde değil, ayrı bir pgsql.so paylaşımlı kütüphanesiyle php.ini dosyası üzerinden veya doğrudan dl() işlevi kullanılarak PHP'ye yüklemek suretiyle elde edilecektir.

PHP'yi derlemek için seçtiğiniz her yolun getirileri olacağı gibi götürüleri de olacaktır. Paylaşımlı nesne olarak derlemek, Apache'yi ayrı olarak derleyip, PHP ile ilgili hiçbir şey için Apache'yi tekrar derleme ihtiyacı duymamak demektir. PHP'yi Apache içinde (duruk yöntem) derlerseniz PHP daha çabuk yüklenecek ve daha hızlı çalışacaktır. Bu konularda daha ayrıntılı bilgi edinmek için Apache'nin » DSO desteği sayfasına bakınız.

Bilginize: Apache'nin öntanımlı httpd.conf dosyası şöyle bir bölümle gelmektedir:

User nobody
Group "#-1"

Burada Group satırı, Group nogroup veya Group daemon gibi bir satırla değiştirilmedikçe, PHP dosyaları açamayacaktır.

Bilginize: --with-apxs=/bir/yer/apxs seçeneğini kullanırken apxs'in kaynak paketindeki yerini değil, sisteminizde kurulu olduğu yeri belirtmeye dikkat edin.



Unix sistemler ve Apache 2.x

Bu bölüm Unix sistemlerde PHP'nin Apache 2.x'e kurulumu hakkında bilgiler ve ipuçları içerir.

Uyarı

Apache 2'nin bir hizmet ortamında evreli MPM'lerle kullanımını önermiyoruz. Bunun yerine prefork MPM'sini veya Apache 1 kullanmanızı öneririz. Bunun sebebini SSS altında Apache ve evreli MPM'ler başlığı altında bulabilirsiniz.

Apache 2.x HTTP Sunucusu hakkında temel bir bilgi edinmek için mutlaka » Apache HTTP Sunucusu Sürüm 2.x Belgelerine bakmanızı öneririz.

Bilginize: PHP ve Apache 2.0.x uyumluluk bilgileri
Aşağıdaki PHP sürümlerinin Apache 2.0.x'in en son sürümleri ile çalıştığı bilinmektedir:

PHP'nin bu sürümleri Apache 2.0.40 ve sonrası ile uyumludur.
Apache 2.0 SAPI desteği PHP 4.2.0 ile başlamıştır. PHP'nin 4.2.3 sürümü Apache 2.0.39'da çalışır. PHP'nin 4.2.3 sürümünü bundan başka bir Apache sürümü ile kullanmayın. Ancak, PHP'nin 4.3.0 ve sonraki sürümlerini Apache2'nin en son sürümleri ile gönül rahatlığıyla kullanabilirsiniz.
PHP'nin bahsi geçen bütün sürümleri hala Apache 1.3.x ile çalışmaktadır. Apache 2.x.x'in Apache 1.3.x ile uyumlu (tek evreli çok süreçli) yapılandırmaları ile de aynı durum sözkonusudur.

En son sürümü » Apache 2.x indirme sitesinden ve buna uygun PHP sürümünü yukarıda bahsedilen yerlerden indirebilirsiniz. Bu kısa kılavuz Apache 2.x ve PHP hakkında sadece temel bilgi sağlar. Daha ayrıntılı bilgi edinmek için » Apache HTTP Sunucusu Belgelerine bakınız. Kurulum talimatlarının sürüm numaralarından ötürü geçerliliğini yitirmemesi için sürüm numaraları 'NN' şeklinde belirtilmiştir, NN yerine kurulan Apache sürümünün sürüm numarası yazılmalıdır.

Apache 2.x'in şu an iki sürümü mevcuttur: 2.0 ve 2.2. Bunlardan birini seçmek için çeşitli sebepler olabilirse de 2.2 şu an için en son ve önerilen sürümdür. Ancak, burada sözü edilen talimatlar hem 2.0 hem de 2.x için çalışır.

Örnek 1 - PHP'nin Paylaşımlı Apache 2 Modülü olarak kurulumu

1.  gzip -d httpd-2_x_NN.tar.gz
2.  tar xvf httpd-2_x_NN.tar
3.  gunzip php-NN.tar.gz
4.  tar -xvf php-NN.tar
5.  cd httpd-2_x_NN
6.  ./configure --enable-so
7.  make
8.  make install

    Böylece standart prefork MPM'si ve yüklenebilir modül desteği ile Apache
    2.x.NN /usr/local/apache2 altına kurulmuş oldu. Kurulumu denemek için
    Apache HTTP sunucusunu normal yollardan başlatabilirsiniz. Örnek:
    /usr/local/apache2/bin/apachectl start
    PHP yapılandırmasıyla çalıştırmak üzere şimdilik sunucuyu durduralım:
    /usr/local/apache2/bin/apachectl stop.

9.  cd ../php-NN

10. Artık PHP'yi yapılandırabiliriz. Hangi eklentilerin etkin olacağını
    belirten çeşitli seçenekleri kullanarak PHP'yi özelleştirebilirsiniz.
    Olası seçeneklerin listesini görmek için ./configure --help komutunu
    kullanın. Bu örnekte Apache 2 ve MySQL ile basit bir yapılandırmaya
    gideceğiz. Sizde apxs farklı bir yere kurulmuş olabilir, hatta ismi apxs2
    bile olabilir.

      ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql

11. make
12. make install

    Eğer kurulumdan sonra yapılandırmanızı değiştirmek isterseniz sadece son
    üç adımı yinelemeniz yeterli olacaktır. Yeni modülün etkin olabilmesi
    için Apache'yi yeniden başlatmanız gerekir. Apache'yi yeniden derlemeniz
    gerekmez.

    Aksi özellikle belirtilmedikçe 'make install' ile phpize gibi çeşitli PHP
    araçları, PEAR, PHP CLI ve bir takım başka şeylerin de kurulumu yapılır.

13. php.ini dosyanızı yapılandırın:

    cp php.ini-development /usr/local/lib/php.ini

    PHP seçeneklerini ayarlamak için .ini dosyanızı düzenleyebilirsiniz. .ini
    dosyanızın başka bir yerde durmasını istiyorsanız, 10. şıkta
    --with-config-file-path=/başka/bir/yer seçeneği ile dosyanız için başka
    bir yer belirtebilirsiniz.

    php.ini-dist yerine php.ini-production (dağıtımın standart .ini dosyası
    yerine önerilen yapılandırmalar dosyasını) kullanmayı tercih ederseniz,
    değişiklik listesini okumayı ihmal etmeyin, çünkü bunlar PHP'nin
    davranışını etkileyecektir.


14. PHP modülünün yüklenmesi için httpd.conf dosyasını düzenlemelisiniz.
    LoadModule yönergesinin değeri PHP modülünün sistemdeki yerini
    göstermelidir. Yukarıdaki 'make install' bunu sizin yerinize yapmıştır
    ama emin olmak için siz yine de bir bakın.

      LoadModule php5_module modules/libphp5.so

15. Apache'ye belli dosya uzantılarını PHP uzantıları olarak ele almasını
    söyleyin. Örneğin, .php uzantılı dosyaları Apache'nin PHP dosyaları
    olarak ele almasını isteyebiliriz. Apache AddType yönergesini kullanmamak
    suretiyle, PHP tarafından çalıştırılmak üzere istismar.php.jpg gibi
    dosyaların oluşturulması ve yüklenmesi gibi tehlikeli durumlardan
    kaçınmak isteyebilirsiniz. Biz örnek olsun diye .phtml uzantısını
    ekledik. Başka uzantıları da buraya ekleyebilirsiniz. Bunları aralarında
    boşluk bırakarak aynı satıra yazabilirsiniz.

      <FilesMatch \.php$>
          SetHandler application/x-httpd-php
      </FilesMatch>

    Veya .php, .php2, .php3, .php4, .php5, .php6 ve .phtml gibi dosyalar
    dışında hiçbir dosyanın PHP tarafından çalıştırılmamasını şöyle
    sağlayabilirsiniz:

      <FilesMatch "\.ph(p[2-6]?|tml)$">
          SetHandler application/x-httpd-php
      </FilesMatch>

    PHP kaynak kodlarını renklendirilmiş olarak göstermek için .phps
    uzantısını da yapılandırmanıza ekleyebilirsiniz. Bu, şöyle yapılır:

      <FilesMatch "\.phps$">
          SetHandler application/x-httpd-php-source
      </FilesMatch>

    .php dosyalarının uzantılarını .phps olarak değiştirmeden kaynak kodlarını
    renklendirilmiş olarak göstermek isterseniz bunu şöyle yapabilirsiniz:

      RewriteEngine On
      RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]

    PHP kaynak süzgeci, gizli kalması gereken bilgiler içeren genel kullanıma
    açık sunucularda kullanılmamalıdır. Aksi takdirde gizli kalması gereken
    bilgiler kaynak koda eklenebilir.

16. Artık Apache'yi başlatabilirsiniz. Bunun için Apache'yi her zaman ki gibi
    başlatmanız yetecektir:

      /usr/local/apache2/bin/apachectl start

          - VEYA -

      service httpd restart

Yukarıdaki adımları izleyerek PHP'nin bir SAPI modülü olarak çalıştığı bir Apache 2 HTTP sunucusuna sahip olursunuz. Apache ve PHP için şüphesiz birçok farklı yapılandırma seçeneği vardır. Yapılandırma seçeneklerinin listesi için her kaynak ağacında ./configure --help çalıştırabilirsiniz.

Apache derlenirken prefork MPM modülü yerine , worker MPM modülü seçilerek çok evreli derlenebilir. Bunu yapmak için 6. şıkta derleme seçeneklerinize şu seçeneğini ekleyebilirsiniz:


--with-mpm=worker

Bunu yapmadan önce, bunun olası sonuçları hakkında bilgi sahibi olmaya, azından ne gibi etkilerinin olacağını anlamaya çalışın. Bu konuda daha ayrıntılı bilgi edinmek için Apache HTTP sunucusunun belgelerinden » Çok Süreçlilik Modülleri (MPM'ler) belgesini okuyunuz.

Bilginize: İçerik dili uzlaşımı kullanmak isterseniz Apache MultiViews SSS'ine bakınız.

Bilginize: Ayrıca, PHP'yi deneysel Zend Thread Safety (ZTS) motoru ile de derleyebilirsiniz. Böyle bir yapılandırmada bütün eklentiler kullanılamayacaktır. Bu bakımdan Apache'yi standart prefork MPM'si ile derlemenizi öneriyoruz.



Unix sistemlerde Lighttpd 1.4

Bu bölüm PHP'nin Unix sistemlerde Lighttpd 1.4 ile kurulumu hakkında bilgiler ve ipuçları içerir.

Lütfen devam etmeden önce » Lighttpd redmine sitesini ziyaret edip Lighttpd'nin doğru düzgün nasıl kurulacağını öğreniniz.

PHP ve Lighttpd'ye bağlanmak için tercih edilen SAPI Fastcgi'dir. Fastcgi, PHP 5.3'te php-cgi'yi özdevinimli olarak sihirli bir şekilde etkin kılar. Fakat, eski sürümler için PHP'nin --enable-fastcgi ile derlenmesi gerekir. PHP'nin fastcgi için hazır olduğunu doğrulamak için php -v çıktısının PHP 5.2.5 (cgi-fcgi) içermesi gerekir. PHP 5.2.3 öncesinde, fastcgi, php çalıştırılabiliri üzerinde etkindi (php-cgi diye birşey yoktu).

Letting Lighttpd'ye PHP süreçlerini çatallattırmak

Lighttpd'nin PHP'ye bağlanmasını ve fastcgi süreçlerini çatallamasını sağlamak üzere yapılandırmak için lighttpd.conf dosyasını düzenlemeniz gerekir. Fastcgi süreçlerine yerel sistemden bağlanmak için soketler tercih edilir.

Örnek 1 - lighttpd.conf'tan bir bölüm

server.modules += ( "mod_fastcgi" )

fastcgi.server = ( ".php" =>
  ((
    "socket" => "/tmp/php.socket",
    "bin-path" => "/usr/local/bin/php-cgi",
    "bin-environment" => (
      "PHP_FCGI_CHILDREN" => "16",
      "PHP_FCGI_MAX_REQUESTS" => "10000"
    ),
    "min-procs" => 1,
    "max-procs" => 1,
    "idle-timeout" => 20
  ))
)

bin-path yönergesi lighttpd'nin fastcgi süreçlerini devingen olarak çatallamasına izin verir. PHP kendi çocuklarını PHP_FCGI_CHILDREN ortam değişkenine göre çatallayacaktır. PHP, PHP_FCGI_MAX_REQUESTS değerinin aşılmasına sebep olan çocuk süreci öldürür. PHP'de min-procs ve max-procs yönergelerinden genel olarak kaçınılması gerekir. PHP kendi çocuklarını yönetir ve makine kodu önbelleklerini APC gibi çocukları arasında paylaştırır. min-procs yönergesine 1'den büyük bir değer atanmışsa PHP yanıtçılarının sayısı PHP_FCGI_CHILDREN değerinin katları olacaktır (2 min-procs * 16 çocuk eşittir 32 yanıtçı).

Spawn-fcgi ile çatallama

Lighttpd, fastcgi süreçlerinin çatallanmasını kolaylaştırmak için spawn-fcgi adında bir programla gelir.

php-cgi'nin çatallanması

Süreçleri spawn-fcgi kullanmaksızın çatallamak mümkünse de, biraz ağır kaldırma çalışmak gerekir. Gelen istekleri karşılamak için PHP'nin kaç çocuk çatallayacağı PHP_FCGI_CHILDREN ortam değişkeni ile belirlenir. PHP'nin her çocuğunun kaç isteklik yaşayacağını ise PHP_FCGI_MAX_REQUESTS belirler. Aşağıda, PHP yanıtçılarının çatallanmasına yardımcı olan basit bir bash betiği verilmiştir.

Örnek 2 - FastCGI Yanıtçılarının Çatallanması

#!/bin/sh

# php-cgi çalıştırılabilirinin yeri
PHP=/usr/local/bin/php-cgi

# PID dosyasının yeri
PHP_PID=/tmp/php.pid

# Dinlenecek adres
#FCGI_BIND_ADDRESS=10.0.1.1:10000
# Dinlenecek soket
FCGI_BIND_ADDRESS=/tmp/php.sock

PHP_FCGI_CHILDREN=16
PHP_FCGI_MAX_REQUESTS=10000

env -i PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN \
       PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS \
       $PHP -b $FCGI_BIND_ADDRESS &

echo $! > "$PHP_PID"

Uzak FCGI (nesnel) örneklerine bağlanmak

Uygulamaları dengelemek için Fastcgi örnekleri çok sayıda uzak makineye çatallanabilir.

Örnek 3 - Uzak FCGI örneklerine bağlanmak

fastcgi.server = ( ".php" =>
   (( "host" => "10.0.0.2", "port" => 1030 ),
    ( "host" => "10.0.0.3", "port" => 1030 ))
)


Caudium

PHP, » Caudium HTTP Sunucusu için bir Pike modülü olarak derlenebilir. PHP'yi Caudium ile kullanmak için aşağıdaki basit kurulum adımlarını izleyerek kurabilirsiniz:

Örnek 1 Caudium Kurulum Adımları

1.  PHP 4 kurulumuna başlamadan önce Caudium kurulmuş olmalıdır. PHP 4'ün
    düzgün çalışması için Pike 7.0.268 veya daha yenisi gerekir. Bu örneğin
    amaçları gereği, Caudium'un /opt/caudium/server/ altında kurulu olduğunu
    varsayacağız.
2.  php-x.y.z (x.y.z sürüm numarasıdır) dizinine geçin.
3.  ./configure --with-caudium=/opt/caudium/server
4.  make
5.  make install
6.  Çalışmaktaysa Caudium'u yeniden başlatın.
7.  Çizgesel kurulum arayüzüne oturum açın ve PHP 4 desteği vermek istediğiniz
    sanal sunucuya gidin.
8.  Add Module'e tıklayın ve PHP4 Betik Destek modülünü bulup ekleyin.
9.  Eğer belgeler, PHP 4 yorumlayıcısının kullanılabilir durumda olmadığını
    söylüyorsa sunucuyu yeniden başlatmamış olabilirsiniz, yeniden başlatmayı
    deneyin. PHP4.so ile ilgili hatalar için
    /opt/caudium/logs/debug/default.1'e bakın. Ayrıca,
    caudium/server/lib/[pike-version]/PHP4.so
    dosyasının varlığından emin olun.
10. Gerekirse PHP Betik Destek modülünü yapılandırın.

Şüphesiz, Caudium modülünüzü PHP 4'te mevcut çeşitli eklentileri desteklemesi için derleyebilirsiniz. Eklentilere özel yapılandırma seçenekleri için eklenti belgelerine bakınız.

Bilginize: PHP 4'ü MySQL desteği ile derlerken normal MySQL istemci kodunun kullanıldığına emin olun. Aksi takdirde, Pike, MySQL desteğine sahipse çelişkili durumlar ortaya çıkabilir. MySQL kurulum dizinini --with-mysql seçeneği ile belirterek bunu sağlayabilirsiniz.



fhttpd ile ilgili bilgiler

PHP'yi bir fhttpd modülü olarak derlemek için "Build as an fhttpd module?" sorusuna "yes" yanıtı verip (yapılandırmada --with-fhttpd=DİZİN seçeneği) fhttpd kaynak kök dizinini belirtin. /usr/local/src/fhttpd dizini öntanımlıdır. fhttpd ile çalışırsa PHP'yi bir modül olarak derlemek daha iyi denetim ve uzaktan yönetim yeteneği ile daha yüksek başarım sağlar.

Bilginize: PHP 4.3.0'dan itibaren fhttpd desteklenmemektedir.



Sun Solaris'te Sun, iPlanet ve Netscape Sunucuları

Bu bölümde, PHP'nin Sun Solaris üzerinde Sun Java Sistem, Sun ONE, iPlanet ve Netscape HTTP Sunucusu kurulumlarına özgü bilgilere ve ipuçlarına yer verilmiştir.

PHP 4.3.3'ten itibaren PHP betikleri NSAPI modülü ile kullanılarak özel dizin listeleri ve hata sayfaları üretebilebilmektedir. Apache uyumluluğu sağlamak için ek işlevler de mevcuttur. Mevcut HTTP sunucuları desteği hakkında bilgi edinmek için alt istekler ile ilgili bölümü okuyunuz.

Netscape Girişimci Sunucusu (NES) için PHP yapılandırması hakkında daha ayrıntılı bilgiyi » http://benoit.noss.free.fr/php/install-php4.html adresinde bulabilirsiniz.

PHP'yi Sun Java Sistem, Sun ONE, iPlanet ve Netscape HTTP sunucularında derlemek için, kurulum dizinini --with-nsapi=[DiZiN] seçeneği ile belirtin; öntanımlı dizin: /opt/netscape/suitespot/. Ayrıca /php-xxx-version/sapi/nsapi/nsapi-readme.txt dosyasını da okuyun.

  1. Aşağıdaki paketleri » http://www.sunfreeware.com/ veya başka bir siteden indirip kurabilirsiniz:

    • autoconf-2.13
    • automake-1.4
    • bison-1_25-sol26-sparc-local
    • flex-2_5_4a-sol26-sparc-local
    • gcc-2_95_2-sol26-sparc-local
    • gzip-1.2.4-sol26-sparc-local
    • m4-1_4-sol26-sparc-local
    • make-3_76_1-sol26-sparc-local
    • mysql-3.23.24-beta (mysql desteği istiyorsanız)
    • perl-5_005_03-sol26-sparc-local
    • tar-1.13 (GNU tar)

  2. PATH ortam değişkeninde gerekli dizinlerin bulunduğundan emin olun ( PATH=.:/usr/local/bin:/usr/sbin:/usr/bin:/usr/ccs/bin) ve export PATH ile sisteminizde kullanılabilir olmasını sağlayın.
  3. gunzip php-x.x.x.tar.gz (.gz paketi değilse 4'e gidin).
  4. tar xvf php-x.x.x.tar
  5. Bu işlem sonucunda oluşan PHP dizinine geçin: cd ../php-x.x.x
  6. Netscape sunucunuz /opt/netscape/suitespot/ dizininde kurulu değilse, aşağıdaki seçeneğe bulunduğu yeri yazın:

    ./configure --with-mysql=/usr/local/mysql \
                --with-nsapi=/opt/netscape/suitespot/ \
                --enable-libgcc

  7. Bir make ve ardından make install yapın.

Temel kurulum bitip ilgili benioku dosyalarını da okuduktan sonra bir kaç adımlık yapılandırma işlemi kalmış olacak.

Sun/iPlanet/Netscape için Yapılandırma Talimatları

Öncelikle, sunucunun bütün paylaşımlı kütüphaneleri bulabilmesi için bazı dizinleri LD_LIBRARY_PATH ortam değişkenine eklemeniz gerekebilir. Bunun yapılacağı en uygun yer HTTP sunucunuzu başlatan betiktir. Bu betik genellikle, /bir/yol/server/https-sunucuismi/start gibi bir dosyadır. HTTP sunucunuzun /bir/yol/server/https-sunucuismi/config/ dizininde yer alan yapılandırma dosyalarını da düzenlemeniz gerekecek.

  1. Aşağıdaki satırı mime.types dosyasına ekleyin (bunu yönetim sunucusunda yapabilirsiniz):

    type=magnus-internal/x-httpd-php exts=php
    

  2. magnus.conf (>= 6 sürümü sunucular için) veya obj.conf (< 6 sürümü sunucular için) dosyalarını düzenlemek için açın ve aşağıdaki satırları mime types init satırının sonrasına ekleyin. shlib (paylaşımlı kütüphane) sisteminize göre değişiklik gösterebilir, genellikle /opt/netscape/suitespot/bin/libphp4.so gibi bir dosyadır.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="/opt/netscape/suitespot/bin/libphp4.so"
    Init fn="php4_init" LateInit="yes" errorString="PHP ilklendirilemedi!" [php_ini="/bir/yol/php.ini"]
    

    (PHP >= 4.3.3) php_ini değiştirgesi isteğe bağlı olsa da oraya HTTP sunucunuzun yapılandırma dizininde bulunan php.ini dosyanızı yerleştirebilirsiniz.

  3. obj.conf dosyasındaki öntanımlı nesneyi yapılandırın (vserver.obj.conf dosyasında sanal sunucu sınıfları [sürüm 6.0+] için):

    <Object name="default">
    .
    .
    .
    .#DiKKAT: Bu satır tüm 'ObjectType' satırlarından sonra ve
    .#        tüm 'AddLog' satırlarından önce yer almalıdır.
    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    .
    .
    </Object>
    

    (PHP >= 4.3.3) Bazı özel php.ini değerlerini ek değiştirgeler olarak ekleyebilirsiniz, örneğin php4_execute çağrısı bağlamına özgü docroot="/bir/yol/docroot" atamasını yapabilirsiniz. Mantıksal ini yönergeleri için lütfen "On","Off",... değil (çünkü doğru çalışmayacaktır), 0 ve 1 değerlerini kullanınız. Örneğin, zlib.output_compression="On" yerine zlib.output_compression=1 yazın.

  4. Bu sadece, içinde PHP betiklerinden başka dosya bulunmayan (bir cgi-bin dizini gibi) bir dizini yapılandırmak istediğiniz takdirde gerekir :

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    

    Bundan sonra, Yönetim sunucusunda bir dizini yapılandırıp ona x-httpd-php MIME türünü atayabilirsiniz. Bu dizindeki tüm dosyalar PHP tarafından çalıştırılacağından oradaki dosyaların uzantılarını .html olarak değiştirip PHP kullanıldığını gizleyebilirsiniz.

  5. Kimlik doğrulama ayarları: PHP kimlik doğrulaması diğer kimlik doğrulamalarıyla kullanılamaz. Bu işlem tamamen PHP betikleriniz üzerinden geçer. PHP kimlik doğrulamasını sunucunun tamamı için yapılandırmak isterseniz aşağıdaki satırı öntanımlı nesnenize ekleyiniz:

    <Object name="default">
    AuthTrans fn=php4_auth_trans
    .
    .
    .
    </Object>
    

  6. PHP kimlik doğrulamasını tek bir dizin için kullanmak istiyorsanız şunu ekleyin:

    <Object ppath="d:\kimlik\dogrulaması\yapilacak\dizin\*">
    AuthTrans fn=php4_auth_trans
    </Object>
    

Bilginize: PHP'nin kullanacağı yığıt boyutu HTTP sunucusunun yapılandırmasına bağlıdır. Çok büyük PHP betiklerinin çalışmaması halinde Yönetim sunucusundan ("MAGNUS EDITOR" bölümünden) boyutu arttırmanızı öneririz.

CGI ortamı ve php.ini dosyasında önerilen değişiklikler

Bir Sun JSWS/Sun ONE WS/iPlanet/Netscape sunucusu çok evreli bir HTTP sunucusu olarak çalıştığı takdirde PHP betiklerinin yazımı özel bir dikkat gerektirir. Bunun sebebi, tüm isteklerin aynı süreç uzayında (HTTP sunucusunun kendi uzayı) çalışması ve bu uzayın (ortam değişkenlerince) tek bir ortama sahip olmasıdır. PATH_INFO, HTTP_HOST gibi CGI ortam değişkenlerini almak isterseniz, bunu getenv() işlevli eski PHP yöntemleriyle veya benzer yollarla ($_ENV gibi küresellerle) yapmaya çalışmak doğru değildir. Geçerli CGI değişkenleri olmaksızın sadece çalışan HTTP sunucusunun ortamını alırsınız!

Bilginize: Soru: Ortamda neden (geçersiz) CGI değişkenleri var?
Yanıt: Bunun sebebi, HTTP sunucusu sürecini Yönetim sunucusundan başlatmanız ve başlatma betiğinin bir CGI betiği olarak çalışmasıdır (yönetim sunucusu içinde bir CGI betiği!!). Başlatılan HTTP sunucusunun bazı CGI ortam değişkenlerine sahip olmasının sebebi budur. HTTP sunucusunu yönetim sunucusunun dışında çalıştırırsanız bunun sebebini daha iyi anlarsınız. HTTP sunucusunu root kullanıcısı olarak komut satırından kendiniz başlatın ve ortamda artık CGI tarzı ortam değişkenlerinin bulunmadığını görün.

CGI değişkenlerini doğru yöntemle almak için betiklerinizde değişiklik yapmalısınız. PHP 4'te bu işlem için $_SERVER süper küreselini kullanabilirsiniz. $HTTP_HOST gibi değişkenleri kullanan eski betikleriniz varsa php.ini içinde register_globals=On yaptıktan başka değişken sırasını da değiştirin (önemli: Artık ortama ihtiyacınız olmayacağından "E"yi silin):

variables_order = "GPCS"
register_globals = On

Özel dizin listeleri ve hata sayfaları (PHP >= 4.3.3)

"404 Not Found" ve benzeri durumlarda hata sayfaları üretimi için PHP'yi kullanabilirsiniz. Üzerine yazmak istediğiniz her hata sayfası için obj.conf dosyasındaki nesneye aşağıdaki satırı ekleyiniz:

Error fn="php4_execute" code=XXX script="/bir/yol/betik.php" [inikey=value inikey=value...]

Burada XXX, HTTP hata kodudur. Sizinkiyle çelişen başka Error yönergeleri varsa onları silin. Tüm hatalar için hep aynı sayfayı kullanacaksanız code değiştirgesini belirtmeyin. Betiğiniz hata kodunu $_SERVER['ERROR_TYPE'] ile alacaktır.

Bir diğer olanak, özel yapım dizin listeleri üretimidir. Dizin içeriğini gösteren bir PHP betiği yazdıktan sonra, obj.conf dosyasında öntanımlı type="magnus-internal/directory" Service satırını şöyle değiştirin:

Service fn="php4_execute" type="magnus-internal/directory" script="/bir/yol/betik.php" [inikey=value inikey=value...]

Hata sayfaları ve dizin listeleri için özgün yol ve dönüşmüş yol $_SERVER['PATH_INFO'] ve $_SERVER['PATH_TRANSLATED'] değişkenlerinden alınabilir.

nsapi_virtual() ve alt istekler (PHP >= 4.3.3)

NSAPI modülü, HTTP sunucusunda alt istekler yapmak ve sonuçları bir sayfaya yerleştirmek için artık nsapi_virtual() işlevine sahiptir (rumuz: virtual()). Bu işlev NSAPI kütüphanesinin bazı belgelenmemiş özelliklerini kullanır. Unix üzerinde modül özdevinimli olarak gerekli işlevlerin varlığını araştırır ve kullanılabilecekse kullanır. Aksi takdirde, nsapi_virtual() iptal edilir.

Bilginize: ÖNEMLİ: nsapi_virtual() desteği DENEYSEL'dir!!!



CGI ve Komut Satırı Ayarları

PHP'yi bir CGI programı olarak derlemek öntanımlıdır. Bu sayede HTTP sunucuda çalışmayacak betikleri yorumlamak için veya CGI işlemleri için kullanılabilecek bir komut satırı yorumlayıcısı oluşturulmuş olur.PHP'nin bir modül olarak çalıştığı bir HTTP sunucusu genellikle başarım sorunlarına bir çözüm olarak kullanılır. Bununla birlikte, CGI sürümü, farklı PHP sayfalarını farklı kullanıcı kimlikleriyle çalıştırabilme imkanı sunar.

Uyarı

CGI kipinde çalışan bir sunucu olası saldırılara açık hale gelir. Sunucunuzu böyle saldırılardan nasıl koruyacağınızı öğrenmek için CGI güvenliği bölümünü okuyunuz.

PHP 4.3.0 ve sonrasında, PHP'ye bazı önemli eklemeler yapıldı. Ayrıca, CGI çalıştırılabiliri ile aynı isimde çalıştırılabilire sahip CLI adında yeni bir SAPI geldi. {PREFIX}/bin/php çalıştırılabilirinde kurulu olan şeyler yapılandırmanızı nasıl yaptığınıza bağlıdır ve bu, PHP'nin komut satırından kullanımı bölümünde ayrıntılı olarak açıklanmıştır.

Sınama

PHP'yi bir CGI programı olarak derlediyseniz, derlemenizi make test komutunu vererek sınayabilirsiniz. Derlemenizi sınamak daima iyidir. Bu yolla sonradan karşılaşabileceğiniz sorunları daha ortaya çıkmadan yakalama şansınız olur.

Değişkenlerin kullanımı

Bazı sunucu kaynaklı ortam değişkenleri geçerli » CGI/1.1 belirtiminde tanımlanmamıştır; sadece şu değişkenler tanımlıdır: AUTH_TYPE, CONTENT_LENGTH, CONTENT_TYPE, GATEWAY_INTERFACE, PATH_INFO, PATH_TRANSLATED, QUERY_STRING, REMOTE_ADDR, REMOTE_HOST, REMOTE_IDENT, REMOTE_USER, REQUEST_METHOD, SCRIPT_NAME, SERVER_NAME, SERVER_PORT, SERVER_PROTOCOL ve SERVER_SOFTWARE. Bunların dışında kalan herşey 'üretici eklentileri' olarak ele alınmalıdır.



HP-UX'e Özgü Kurulum Bilgileri

Bu bölüm PHP'nin HP-UX sistemlere kurulumu hakkında bilgiler ve ipuçları içerir.

PHP'nin HP-UX sistemlere kurulumunda iki seçenek söz konusudur: Ya kendiniz derlersiniz ya da bir başkasının derlediği çalıştırılabiliri kurarsınız.

Resmi derlenmiş paketleri » http://software.hp.com/ adresinden edinebilirsiniz.

Kılavuzun bu bölümü yazılana kadar, PHP'nin (ve ilgili eklentilerin) HP-UX sistemlerde derlenmesi ile ilgili belgeler kaldırılmıştı. Bunları artık bir dış kaynaktan okuyabileceksiniz: » Building Apache and PHP on HP-UX 11.11



OpenBSD Kurulum Bilgiler

Bu bölüm PHP'nin » OpenBSD 3.6 sistemlere kurulumu hakkında bilgiler ve ipuçları içerir.

İkil Paketlerin Kullanımı

PHP'yi OpenBSD üzerine kurmak için ikil paketlerin kullanımı en basit ve önerilen bir yoldur. Temel paket, modül paketlerinden ayrıdır ve her modül paketi diğerlerinden bağımsız olarak kurulup kaldırılabilir. İhtiyaç duyacağınız dosyaları OpenBSD CD'nizde veya FTP sitesinde bulabilirsiniz.

İhtiyacınız olan ana paket php4-core-4.3.8.tgz olup, temel motoru (artı gettext ve iconv) içerir. Modül paketleri ise php4-mysql-4.3.8.tgz veya php4-imap-4.3.8.tgz gibi isimler alırlar. Bu modülleri php.ini dosyanızda etkin ve etkisiz kılmak için phpxs komutuna ihtiyacınız olacak.

Örnek 1 - OpenBSD Paket Kurulum Örneği

# pkg_add php4-core-4.3.8.tgz
# /usr/local/sbin/phpxs -s
# cp /usr/local/share/doc/php4/php.ini-recommended /var/www/conf/php.ini
  (add in mysql)
# pkg_add php4-mysql-4.3.8.tgz
# /usr/local/sbin/phpxs -a mysql
  (add in imap)
# pkg_add php4-imap-4.3.8.tgz
# /usr/local/sbin/phpxs -a imap
  (remove mysql as a test)
# pkg_delete php4-mysql-4.3.8
# /usr/local/sbin/phpxs -r mysql
  (install the PEAR libraries)
# pkg_add php4-pear-4.3.8.tgz

OpenBSD'deki ikil paketler hakkında ayrıntılı bilgi edinmek için » packages(7) kılavuz sayfasını okuyunuz.

Portların Kullanımı

Ayrıca, PHP'yi kaynak paketinden » port ağacını kullanarak da derleyebilirsiniz. Ancak, bu sadece OpenBSD üzerinde tecrübeli kullanıcılar için önerilebilecek bir yoldur. PHP4 portu iki alt dizine ayrılır: çekirdek ve eklentiler. Eklentilerin bulunduğu dizin desteklenen tüm PHP modülleri için alt paketler üretir. Bu modüllerden üretilmesini istemedikleriniz için no_* FLAVOR'unu kullanınız. Örneğin imap modülünün derlenmeden geçilmesi için FLAVOR'a no_imap atayınız.

Bilinen Sorunlar

  • Apache'nin öntanımlı kurulumu bir » chroot(2) hücresinde çalışır, böylece PHP betiklerinin /var/www altındaki dosyalara erişmesi engellenir. Bu bakımdan PHP oturum dosyalarının saklanması için ya /var/www/tmp diye bir dizine ya da başka bir oturum arayüzü kullanmaya ihtiyacınız olacaktır. Buna ek olarak, veritabanı soketlerinin de hücre içine yerleştirilmesi veya localhost arayüzünü dinlemesi gerekir. Ağ işlevleri kullanıyorsanız, /etc dizinindeki /etc/resolv.conf ve /etc/services gibi dosyaların /var/www/etc dizinine taşınması gerekecektir. OpenBSD PEAR paketi özdevinimli olarak doğru chroot dizinlerine kurulur dolayısıyla onun için özel bir değişiklik yapmak gerekmez. OpenBSD üzerinde Apache hakkında daha ayrıntılı bilgi edinmek için » OpenBSD SSS'sine bakınız.
  • » gd için OpenBSD 3.6 paketi XFree86'nın kurulu olmasını gerektirir. X11 için gereken bazı yazı tipi özelliklerini istemiyorsanız bunun yerine php4-gd-4.3.8-no_x11.tgz paketini kurunuz.

Eski Dağıtımlar

OpenBSD'nin eski dağıtımları PHP'yi duruk ilintili derlemek için FLAVORS sistemini kullanırlar. Bu yöntemle ikil paketleri üretmek zor olduğundan artık bu yol önerilmemektedir. İsterseniz hala eski port ağaçlarını kullanabilirsiniz fakat OpenBSD ekibi tarafından artık desteklenmemektedirler. Bu konuda fikirleriniz varsa port'un şu anki sürdürücüsü: Anil Madhavapeddy (avsm at openbsd dot org).



Solaris'e özgü Kurulum İpuçları

Bu bölüm PHP'nin Solaris sistemlere kurulumu hakkında bilgiler ve ipuçları içerir.

Gerekli Yazılımlar

Solaris kurulumlarında sıklıkla C derleyicilerin ve bunlarla ilgili araçların yokluğu sözkonusu olur. Bu araçların GNU sürümlerinin gerekliliği hakkında bilgi edinmek için lütfen SSS'nin bu bölümünü okuyunuz. Gereken yazılımlar:

  • gcc (önerilir, fakat başka C derleyiciler de iş görür)
  • make
  • flex
  • bison
  • m4
  • autoconf
  • automake
  • perl
  • gzip
  • tar
  • GNU sed

Bunlara ek olarak, Oracle veya MySQL gibi yapılandırmanıza özgü bir takım ek yazılımların kurulması da gerekebilir.

Paketlerin kullanımı

Kurulması gereken bileşinlerin çoğunu kurmak için pkgadd kullanarak Solaris kurulum işlemlerini kolaylaştırabilirsiniz.



Debian GNU/Linux Kurulum Bilgileri

Bu bölüm Unix sistemlerde PHP'nin » Debian GNU/Linux kurulumu hakkında bilgiler ve ipuçları içerir.

PHP'nin Unix üzerinde derlenmesi ile ilgili talimatlar Debian için de geçerli olsa da bu kılavuz sayfasında ayrıca, hem apt-get hem de aptitude komutlarının kullanımı gibi diğer seçeneklere özgü bilgilere de yer verilmiştir. Bu kılavuz sayfasında bu iki komut kimi zaman diğerinin yerine kullanılmıştır.

APT kullanımı

Öncelikle dikkat edeceğiniz şey, Apache2 ile tümleştirmek için libapache2-mod-php5 ve PEAR ile tümleştirmek için php-pear gibi PHP ile ilgili diğer paketlerinde gerekli olabileceğidir.

İkinci olarak, bir paketi kurmadan önce paket listesini güncellemeniz yerinde bir hareket olacaktır. Bu işlem genellikle apt-get update komutu çalıştırılarık yapılır.

Örnek 1 - Apache2 ile kurulum örneği

# apt-get install php5-common libapache2-mod-php5 php5-cli

APT, Apache2 için hazırlanmış PHP 5 modülünü ve bu modülü etkinleştirmek için bağımlı olduğu diğer paketleri özdevinimli olarak kuracaktır. Yapılan değişikliğin geçerli olması için Apache2 yeniden başlatılmalıdır. Örnek:

Artık herşey yerli yerine oturduğuna göre aşağıdaki örneği izleyerek Apache ve PHP'yi kurabilirsiniz:

Örnek 2 - PHP kurulduktan sonra Apache2'nin dirdirilip yeniden başlatılması

# /etc/init.d/apache2 stop
# /etc/init.d/apache2 start

Yapılandırma üzerinde daha iyi denetim

Bir önceki bölümde PHP sadece çekirdek modüllerle kurulmuştu. Çok geçmeden MySQL, cURL, GD ve benzeri modülleri etkinleştirme ihtiyacı duyabilirsiniz. Bunları da apt-get komutuyla kurabilirsiniz.

Örnek 3 - Ek PHP 5 paketleri listesinin alınma yöntemleri

# apt-cache search php5
# aptitude search php5
# aptitude search php5 |grep -i mysql

Bu örnek komutların çıktısından da görebileceğiniz gibi, php5-cgi, php5-cli ve php5-dev gibi özel paketlerde dahil olmak üzere kurabileceğiniz çok sayıda PHP modülü vardır. Listeyi dikkatlice inceleyip ihtiyacınız olanları seçtikten sonra apt-get veya aptitude ile bunları kurabilirsiniz. Debian bunlar içinde bağımlılık denetimleri yapacağından, örneğin MySQL ve cURL kurmak istediğinizde bunların bağımlı olduğu paketleri de kurmayı teklif edecektir:

Örnek 4 - MySQL ve cURL PHP modüllerinin kurulumu

# apt-get install php5-mysql php5-curl

APT özdevinimli olarak farklı php.ini (/etc/php5/apache2/php.ini, /etc/php5/conf.d/pdo.ini ve benzeri) dosyalarına uygun satırları ve eklentinin türüne bağlı olarak extension=foo.so benzeri girdileri ekleyecektir. Bu değişikliklerin de etkili olabilmesi için Apache2'nin yeniden başlatılması gerekir.

Bilinen sorunlar

  • Bir betiğin sonucu yerine betiğin PHP kaynak kodlarını görüyorsanız, Debian muhtemelen /etc/apache2/apache2.conf dosyasına (veya benzeri bir dosyaya) PHP ile ilgili satırları eklememiştir. Bu konu ile ilgili ayrıntılar için Debian kılavuzuna bakınız.
  • Eğer bir eklenti tanımlı gibi gözüktüğü halde işlevlerini kullanamıyorsanız ilgili ini dosyasının yüklendiğinden ve Apache2'nin yeniden başlatıldığından emin olmalısınız.
  • Debian üzerinde paket kurmak için kullanılabilecek iki temel komut vardır: apt-get ve aptitude. Bu iki komut arasındaki farklar için dağıtımınızla gelen belgelere bakınız.



Mac OS X üzerine Kurulum

İçindekiler

Bu bölümde, PHP'nin Mac OS X üzerindeki kurulumlarına özgü bilgilere ve ipuçlarına yer verilmiştir. Mac OS X'in birbirlerinden pek az farklı iki sürümü vardır: İstemci ve Sunucu. Burada PHP'nin her iki sisteme de kurulumundan bahsedilecektir. PHP'nin MacOS 9 ve öncesinde kullanılamadığına dikkat ediniz.


Paketlerin Kullanımı

PHP'nin Mac OS X için bir kaç tane paketlenmiş ve derlenmiş sürümü vardır. Standart bir yapılandırma için bunlar yeterlidir, ancak farklı özelliklere ihtiyaç duyarsanız (güvenli sunucu, farklı bir veritabanı sürücüsü gibi), kendi PHP'nizi ve/veya HTTP sunucunuzu derlemeniz gerekebilir. Bu işleri yapacak tecrübeniz yoksa, sizin ihtiyaçlarınıza uygun olarak derlenmiş paketlerin olup olmadığını araştırmalısınız.

Aşağıdakiler, Mac OS üzerinde PHP için paket ve derlenmiş ikillerin kurulumunu kolaylaştıracaktır:



Paketlenmiş PHP Kullanımı

OS X'in 10.0.0 sürümünden itibaren PHP Meklerde standart hale geldi. PHP'yi öntanımlı HTTP sunucusunda etkin kılmak için Apache yapılandırma dosyası httpd.conf'ta bir kaç satırı etkin duruma getirmek gerekir, bunun yanında CGI ve/veya CLI öntanımlı olarak etkin (Terminal programından kolayca erişilebilir) kılınabilir.

Aşağıdaki talimatları kullanarak PHP'yi etkin kılmak demek çabucak bir yerel geliştirme ortamına sahip olmak demektir. Daima PHP'nin en yeni sürümünü kullanmanızı hararetle öneririz. Gelişimi sürmekte olan çoğu yazılım gibi yeni sürümlerde eski hatalar sürekli düzeltilmekte ve yeni özellikler eklenmektedir. Ayrıntılar için MAC OS X kurulum belgelerine bakınız. Aşağıdaki talimatların ayrıntı düzeyi başlangıç düzeyinde bir kullanıcıya göre olup öntanımlı ayarlarla çalışmak üzere düzenlenmiştir. Daha yeni sürümlerin derlenmesi veya daha yeni paketlerin kurulması tüm kullanıcılara tavsiye edilmektedir.

Standard kurulum türü mod_php kullanmak olup Mac OS X üzerinde Apache HTTP Sunucusu için mod_php'yi etkin kılmak (öntanımlı HTTP sunucusuna Sistem Tercihlerinden erişilebilir) amacıyla şu adımlar izlenmelidir:

  1. Apache yapılandırma dosyasını bulup açın. Öntanımlı olarak yeri: /etc/apache2/httpd.conf Bu dosyanın sahibi root olduğundan ve öntanımlı olarak onun özelinde olduğundan Finder veya Spotlight kullanarak dosyayı bulmak zor olabilir.

    Bilginize: Dosyayı açmanın tek yolu Terminal'de nano gibi Unix temelli bir metin düzenleyici kullanmaktır. Dosyanın sahibi root olduğundan dosyayı (root olarak) açmak için Terminal'de sudo komutunu kullanmalıyız (root parolası istenecektir): sudo nano /etc/apache2/httpd.conf Önemli nano komutları: ^w (arama), ^o (kayıt), and ^x (çıkış). Burada ^ imi, Ctrl tuşu anlamındadır.

    Bilginize: Mac OS X'in 10.5'ten önceki sürümleri PHP ve Apache'nin eski sürümleriyle gelir. Böyle makinelerde Apache yapılandırma dosyası /etc/httpd/httpd.conf olabilir.

  2. Bir metin düzenleyici ile aşağıdaki satırların başlarındaki # imlerini kaldırın (bu iki satır genelde birarada değildir, onları arayıp bulmalısınız):

    # LoadModule php5_module libexec/httpd/libphp5.so
    
    # AddModule mod_php5.c
    
    Konuma/yola dikkat. PHP'yi gelecekte tekrar derlerseniz yukarıdaki dosyaların yerine yenilerini koymayı unutmayın. Yoksa bu satırları tekrar açıklama haline getirmelisiniz.

  3. PHP olarak yorumlanacak uzantıları belirleyiniz (örnekler: .php .html ve .inc)

    (Mac Panther'den itibaren) httpd.conf dosyasında bulunan aşağıdaki deyimden dolayı PHP etkin kılındığı anda .php uzantılı dosyalar özdevinimli olarak PHP tarafından yorumlanır.

    <IfModule mod_php5.c>
        # php etkinse, .php ve .phps dosyalarını yorumlasın isteriz.
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        # Çoğu kullanıcı index.php'yi ister
        <IfModule mod_dir.c>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>
    

    Bilginize: OS X 10.5 (Leopard) öncesinde, PHP 5 yerine PHP 4 kullanılırdı; dolayısıyla yukarıdaki 5'leri 4'lere çevirmeniz gerekir.

  4. DirectoryIndex yönergesinde belirtilen öntanımlı dizin içerik dosyasının yüklendiğinden emin olun. Bu ayrıca httpd.conf içinde de atanır. Bu amaçla genellikle index.php ve index.html kullanılır. PHP'nin varlığını sınayan yukarıdakı satırlardan dolayı öntanımlı olarak index.php etkindir. Gerekirse bu ayarı kendinize göre değiştirin.
  5. Ya php.ini dosyasının yerini ayarlayın ya da öntanımlıyı kullanın Mac OS X üzerindeki öntanımlı yeri genellikle /usr/local/php/php.ini olup bir phpinfo() işlev çağrısı da yerini gösterecektir. Eğer bir php.ini kullanılmamışsa, PHP öntanımlı değerleri kullanacaktır. php.ini'yi bulmak için SSS'ye bakabilirsiniz.
  6. DocumentRoot'u belirleyip ayarlayın. Bu, HTTP sunucusunun belge kök dizinidir. Bu dizindeki dosyalar HTTP sunucusu tarafından sunulur. Dolayısıyla PHP dosyaları da tarayıcıya gönderilmeden önce PHP tarafından yorumlanır. Genelde öntanımlı belge kök dizini /Library/WebServer/Documents olup httpd.conf dosyasında belirtilmesi gerekir. Ayrıca, her kullanıcının kendi öntanımlı belge kök dizini vardır: /Users/kullanıcı/Sites
  7. Bir phpinfo() dosyası oluşturun

    phpinfo() işlevi PHP ile ilgili bilgileri gösterir. Aşağıdaki içeriğe sahip bir dosyayı belge kök dizininde oluşturun:

    <?php phpinfo(); ?>

  8. Apache'yi yeniden başlatın ve yukarıdaki PHP dosyasını yükleyin Apache'yi başlatmak için ya kabukta sudo apachectl graceful komutunu verin ya da OS X Sistem Tercihlerinden "Kişisel HTTP Sunucusu" seçeneğini durdurup başlatın. Öntanımlı olarak, yerel dosyaları tarayıcıya yüklemek için şöyle bir URL kullanılır: http://localhost/info.php. Kullanıcı dizinizdeki belge kök dizinini kullanarak bunu şöyle yapabilirsiniz: http://localhost/~kullanıcı/info.php

CLI (veya eski sürümlerde CGI) çalıştırılabilirinin ismi php olup genellikle bulunduğu yer /usr/bin/php'dir. PHP kılavuzunun komut satırı bölümünü okuyun ve Terminal'i açıp PHP çalıştırılabilirinin sürümünü öğrenmek için php -v komutunu çalıştırın. phpinfo() işlevine yapılacak bir çağrı da bu bilgiyi gösterecektir.



OS X Sunucusu için Derleme

Mac OS X Sunucu Kurulumu

  1. Apache ve PHP'nin en son sürümlerini indirin.
  2. Tar paketlerini açıp aşağıdaki gibi Apache configure betiğini çalıştırın:

    ./configure --exec-prefix=/usr \
    --localstatedir=/var \
    --mandir=/usr/share/man \
    --libexecdir=/System/Library/Apache/Modules \
    --iconsdir=/System/Library/Apache/Icons \
    --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
    --enable-shared=max \
    --enable-module=most \
    --target=apache

  3. Derleyicinin bazı en iyilemeler yapmasını isterseniz şu satırı da ekleyebilirsiniz:

    setenv OPTIM=-O2

  4. PHP 4 kaynak dizinine geçin ve PHP'yi yapılandırın:

    ./configure --prefix=/usr \
        --sysconfdir=/etc \
        --localstatedir=/var \
        --mandir=/usr/share/man \
        --with-xml \
        --with-apache=/src/apache_1.3.12

    Başka eklentilerin de (MySQL, GD, ve benzeri) kurulmasını istiyorsanız onları da buraya ekleyin. --with-apache seçeneğine Apache kaynak dizininizi yazın (örn, /src/apache_1.3.12).

  5. Ardından make ve make install. Bunun sonucunda Apache kaynak dizini altına src/modules/php4 diye bir dizin eklenmiş olacak.
  6. Artık Apache'yi PHP 4 ile birlikte yeniden derleyebilirsiniz:

    ./configure --exec-prefix=/usr \
    --localstatedir=/var \
    --mandir=/usr/share/man \
    --libexecdir=/System/Library/Apache/Modules \
    --iconsdir=/System/Library/Apache/Icons \
    --includedir=/System/Library/Frameworks/Apache.framework/Versions/1.3/Headers \
    --enable-shared=max \
    --enable-module=most \
    --target=apache \
    --activate-module=src/modules/php4/libphp4.a

    libmodphp4.a dosyasının güncel olmadığına dair bir hata iletisi alabilirsiniz. Bu durumda, Apacha kaynak ağacının src/modules/php4 dizinine geçip şu komutu verin: ranlib libmodphp4.a. Bu, ilintileme tablosunu güncel hale getirecektir. Ardından kaynak ağacının kök dizinine dönüp yukarıdaki configure komutunu tekrar çalıştırın. Ardından tekrar make ve make install yapın.

  7. php.ini-development dosyasını PHP 4 kaynak dizininden bin dizinine ismini değiştirerek kopyalayın cp php.ini-development /usr/local/bin/php.ini veya (/usr/local dizinine kurmuyorsanız) cp php.ini-development /usr/bin/php.ini .



MacOS X İstemcide Apache için PHP Modülü Derleme

Aşağıdaki talimatlar MacOS X'de bir PHP modülünü Apache HTTP sunucusuna kurmanıza yardımcı olacak. Bu sürüm MySQL, PostgreSQL ve iODBC veritabanlarından başka, cURL, GD, PDFLib, LDAP, vs. desteğini de içermektedir. Bu talimatlar » Marc Liyanage tarafından sağlanmıştır.

Uyarı

Bunu yaparken dikkatli olun, yoksa Apache HTTP sunucunuzu bozabilirsiniz!

Bilginize: Bu talimatlar sadece Apple tarafından dağıtılan özgün Apache HTTP sunucusunda çalışır. Apache’yi günceller veya yeniden derlerseniz PHP modülünü de yeniden derleyip kurmanız gerekir.

Kurulumu gerçekleştirmek için:

  1. Bir uçbirim penceresi açın.
  2. Apache 1.3 için şunu indirin: wget http://www2.entropy.ch/download/entropy-php-5.2.4-1.tar.gz
  3. Apache 2 için şunu indirin: wget http://www2.entropy.ch/download/entropy-php-5.2.4-1-apache2.tar.gz
  4. Sıkıştırılmış tar paketini açın. Fakat bunu yaparken StuffIt Expander KULLANMAYIN. Yerine Apple'ın BOMArchiveHelper'ını veya komut satırını kullanın.
  5. Paket kurucu uygulamaya çift tıklayıp uygulamayı başlatın ve uygulamadaki adımları izleyin.

Hepsi bu kadar! Artık PHP çalışıyor olmalı. Bunu ev dizininizdeki Sites dizinine dnm.php adında bir dosyayı yerleştirip deneyebilirsiniz. Bu dosyaya şu satırı yazın: <?php phpinfo() ?>

Şimdi tarayıcınızda 127.0.0.1/~kullanıcı_adınız/dnm.php sayfasını açın. PHP modülünüz hakkında bilgi içeren bir durum tablosu görüyor olmalısınız.




Windows Sistemlerine Kurulum

İçindekiler

Bu bölümdeki bilgiler Windows 98/Me ve Windows NT/2000/XP/2003 içindir. PHP, Windows 3.1 gibi 16 bitlik platformlarda çalışmaz ve bazen desteklenen Windows platformlarından Win32 olarak bahsederiz. Windows 95, PHP 4.3.0'dan beri desteklenmemektedir.

Bilginize: Windows 98/ME/NT4, PHP 5.3.0'dan beri desteklenmemektedir.

Bilginize: Windows 95, PHP 4.3.0'dan beri desteklenmemektedir.

PHP'yi Windows'a kurmanın başlıca iki yolu vardır: Ya el yordamıyla kurarsınız ya da kurucuyu kullanırsınız.

Microsoft Visual Studio'ya sahipseniz PHP'yi kaynak kodundan da derleyebilirsiniz.

PHP'yi Windows sisteminize kurduktan sonra çeşitli eklentiler yüklemek suretiyle işlevselliğini arttırabilirsiniz.

Uyarı

Genel Ağ'da çeşitli hepsibiyerde kurucular bulabilirsiniz fakat bunların hiçbiri PHP.net tarafından desteklenmez. Sisteminizin güvenliği ve verimliliği açısından en iyi seçimin » http://www.php.net/downloads.php adresinden edinebileceğiniz resmi Windows paketleri olduğuna inanıyoruz.


Windows Installer (PHP 5.1.0 and earlier)

The Windows PHP installer is available from the downloads page at » http://www.php.net/downloads.php. This installs the CGI version of PHP and for IIS, PWS, and Xitami, it configures the web server as well. The installer does not include any extra external PHP extensions (php_*.dll) as you'll only find those in the Windows Zip Package and PECL downloads.

Bilginize: While the Windows installer is an easy way to make PHP work, it is restricted in many aspects as, for example, the automatic setup of extensions is not supported. Use of the installer isn't the preferred method for installing PHP.

First, install your selected HTTP (web) server on your system, and make sure that it works.

Run the executable installer and follow the instructions provided by the installation wizard. Two types of installation are supported - standard, which provides sensible defaults for all the settings it can, and advanced, which asks questions as it goes along.

The installation wizard gathers enough information to set up the php.ini file, and configure certain web servers to use PHP. One of the web servers the PHP installer does not configure for is Apache, so you'll need to configure it manually.

Once the installation has completed, the installer will inform you if you need to restart your system, restart the server, or just start using PHP.

Uyarı

Be aware, that this setup of PHP is not secure. If you would like to have a secure PHP setup, you'd better go on the manual way, and set every option carefully. This automatically working setup gives you an instantly working PHP installation, but it is not meant to be used on online servers.



Windows Installer (PHP 5.2 and later)

The Windows PHP installer for later versions of PHP is built using MSI technology using the Wix Toolkit (» http://wix.sourceforge.net/). It will install and configure PHP and all the built-in and PECL extensions, as well as configure many of the popular web servers such as IIS, Apache, and Xitami.

First, install your selected HTTP (web) server on your system, and make sure that it works. Then proceed with one of the following install types.

Normal Install

Run the MSI installer and follow the instructions provided by the installation wizard. You will be prompted to select the Web Server you wish to configure first, along with any configuration details needed.

You will then be prompted to select which features and extensions you wish to install and enable. By selecting "Will be installed on local hard drive" in the drop-down menu for each item you can trigger whether to install the feature or not. By selecting "Entire feature will be installed on local hard drive", you will be able to install all sub-features of the included feature ( for example by selecting this options for the feature "PDO" you will install all PDO Drivers ).

Uyarı

It is not recommended to install all extensions by default, since many other them require dependencies from outside PHP in order to function properly. Instead, use the Installation Repair Mode that can be triggered thru the 'Add/Remove Programs' control panel to enable or disable extensions and features after installation.

The installer then sets up PHP to be used in Windows and the php.ini file, and configures certain web servers to use PHP. The installer will currently configure IIS, Apache, Xitami, and Sambar Server; if you are using a different web server you'll need to configure it manually.

Silent Install

The installer also supports a silent mode, which is helpful for Systems Administrators to deploy PHP easily. To use silent mode:

       
msiexec.exe /i php-VERSION-win32-install.msi /q

You can control the install directory by passing it as a parameter to the install. For example, to install to e:\php:

       
msiexec.exe /i php-VERSION-win32-install.msi /q INSTALLDIR=e:\php
You can also use the same syntax to specify the Apache Configuration Directory (APACHEDIR), the Sambar Server directory (SAMBARDIR), and the Xitami Server directory (XITAMIDIR).

You can also specify what features to install. For example, to install the mysqli extension and the CGI executable:

       
msiexec.exe /i php-VERSION-win32-install.msi /q ADDLOCAL=cgi,ext_php_mysqli

The current list of Features to install is as follows:

 
MainExecutable - php.exe executable ( no longer available as of PHP 5.2.10/5.3.0; it is now included by default )
ScriptExecutable - php-win.exe executable
ext_php_* - the various extensions ( for example: ext_php_mysql for MySQL )
apache13 - Apache 1.3 module
apache20 - Apache 2.0 module
apache22 - Apache 2,2 module
apacheCGI - Apache CGI executable
iis4ISAPI - IIS ISAPI module
iis4CGI - IIS CGI executable
iis4FastCGI - IIS CGI executable
NSAPI - Sun/iPlanet/Netscape server module
netserve - NetServe Web Server CGI executable
Xitami - Xitami CGI executable
Sambar - Sambar Server ISAPI module
CGI - php-cgi.exe executable
PEAR - PEAR installer
Manual - PHP Manual in CHM Format

For more information on installing MSI installers from the command line, visit » http://msdn.microsoft.com/en-us/library/aa367988.aspx

Upgrading PHP with the Install

To upgrade, run the installer either graphically or from the command line as normal. The installer will read your current install options, remove your old installation, and reinstall PHP with the same options as before. It is recommended that you use this method of keeping PHP updated instead of manually replacing the files in the installation directory.



Manual Installation Steps

This section contains instructions for manually installing and configuring PHP on Microsoft Windows. For the instructions on how to use PHP installer to setup and configure PHP and a web server on Windows refer to Windows Installer (PHP 5.2 and later).

Selecting and downloading the PHP distribution package

Download the PHP zip binary distribution from » PHP for Windows: Binaries and Sources. There are several different versions of the zip package - chose the version that is suitable for the web server being used:

  • If PHP is used with IIS then choose PHP 5.3 VC9 Non Thread Safe or PHP 5.2 VC6 Non Thread Safe;

  • If PHP is used with Apache 1 or Apache 2 then choose PHP 5.3 VC6 or PHP 5.2 VC6.

Bilginize: VC9 Versions are compiled with the Visual Studio 2008 compiler and have improvements in performance and stability. The VC9 versions require you to have the » Microsoft 2008 C++ Runtime (x86) or the » Microsoft 2008 C++ Runtime (x64) installed.

The PHP package structure and content

Unpack the content of the zip archive into a directory of your choice, for example C:\PHP\. The directory and file structure extracted from the zip will look as below:

Örnek 1 PHP 5 package structure


c:\php
   |
   +--dev
   |  |
   |  |-php5ts.lib                 -- php5.lib in non thread safe version
   |
   +--ext                          -- extension DLLs for PHP
   |  |
   |  |-php_bz2.dll
   |  |
   |  |-php_cpdf.dll
   |  |
   |  |-...
   |
   +--extras                       -- empty 
   |
   +--pear                         -- initial copy of PEAR
   |
   |
   |-go-pear.bat                   -- PEAR setup script
   |
   |-...
   |
   |-php-cgi.exe                   -- CGI executable
   |
   |-php-win.exe                   -- executes scripts without an opened command prompt
   |
   |-php.exe                       -- Command line PHP executable (CLI)
   |
   |-...
   |
   |-php.ini-development           -- default php.ini settings
   |
   |-php.ini-production            -- recommended php.ini settings
   |
   |-php5apache2_2.dll             -- does not exist in non thread safe version
   |
   |-php5apache2_2_filter.dll      -- does not exist in non thread safe version
   |
   |-...
   |
   |-php5ts.dll                    -- core PHP DLL ( php5.dll in non thread safe version)
   | 
   |-...

Below is the list of the modules and executables included in the PHP zip distribution:

  • go-pear.bat - the PEAR setup script. Refer to » Installation (PEAR) for more details.

  • php-cgi.exe - CGI executable that can be used when running PHP on IIS via CGI or FastCGI.

  • php-win.exe - the PHP executable for executing PHP scripts without using a command line window (for example PHP applications that use Windows GUI).

  • php.exe - the PHP executable for executing PHP scripts within a command line interface (CLI).

  • php5apache2_2.dll - Apache 2.2.X module.

  • php5apache2_2_filter.dll - Apache 2.2.X filter.

Changing the php.ini file

After the php package content has been extracted, copy the php.ini-production into php.ini in the same folder. If necessary, it is also possible to place the php.ini into any other location of your choice but that will require additional configuration steps as described in PHP Configuration.

The php.ini file tells PHP how to configure itself, and how to work with the environment that it runs in. Here are a number of settings for the php.ini file that help PHP work better with Windows. Some of these are optional. There are many other directives that may be relevant to your environment - refer to the list of php.ini directives for more information.

Required directives:

  • extension_dir = <path to extension directory> - The extension_dir needs to point to the directory where PHP extensions files are stored. The path can be absolute (i.e. "C:\PHP\ext") or relative (i.e. ".\ext"). Extensions that are listed lower in the php.ini file need to be located in the extension_dir.

  • extension = xxxxx.dll - For each extension you wish to enable, you need a corresponding "extension=" directive that tells PHP which extensions in the extension_dir to load at startup time.

  • log_errors = On - PHP has an error logging facility that can be used to send errors to a file, or to a service (i.e. syslog) and works in conjunction with the error_log directive below. When running under IIS, the log_errors should be enabled, with a valid error_log.

  • error_log = <path to the error log file> - The error_log needs to specify the absolute, or relative path to the file where PHP errors should be logged. This file needs to be writable for the web server. The most common places for this file are in various TEMP directories, for example "C:\inetpub\temp\php-errors.log".

  • cgi.force_redirect = 0 - This directive is required for running under IIS. It is a directory security facility required by many other web servers. However, enabling it under IIS will cause the PHP engine to fail on Windows.

  • cgi.fix_pathinfo = 1 - This lets PHP access real path info following the CGI Spec. The IIS FastCGI implementation needs this set.

  • fastcgi.impersonate = 1 - FastCGI under IIS supports the ability to impersonate security tokens of the calling client. This allows IIS to define the security context that the request runs under.

  • fastcgi.logging = 0 - FastCGI logging should be disabled on IIS. If it is left enabled, then any messages of any class are treated by FastCGI as error conditions which will cause IIS to generate an HTTP 500 exception.

Optional directives

  • max_execution_time = ## - This directive tells PHP the maximum amount of time that it can spend executing any given script. The default for this is 30 seconds. Increase the value of this directive if PHP application take long time to execute.

  • memory_limit = ###M - The amount of memory available for the PHP process, in Megabytes. The default is 128, which is fine for most PHP applications. Some of the more complex ones might need more.

  • display_errors = Off - This directive tells PHP whether to include any error messages in the stream that it returns to the Web server. If this is set to "On", then PHP will send whichever classes of errors that you define with the error_reporting directive back to web server as part of the error stream. For security reasons it is recommended to set it to "Off" on production servers in order not to reveal any security sensitive information that is often included in the error messages.

  • open_basedir = <paths to directories, separated by semicolon>, e.g. openbasedir="C:\inetpub\wwwroot;C:\inetpub\temp". This directive specified the directory paths where PHP is allowed to perform file system operations. Any file operation outside of the specified paths will result in an error. This directive is especially useful for locking down the PHP installation in shared hosting environments to prevent PHP scripts from accessing any files outside of the web site's root directory.

  • upload_max_filesize = ###M and post_max_size = ###M - The maximum allowed size of an uploaded file and post data respectively. The values of these directives should be increased if PHP applications need to perform large uploads, such as for example photos or video files.

PHP is now setup on your system. The next step is to choose a web server, and enable it to run PHP. Choose a web server from the table of contents.

In addition to running PHP via a web server, PHP can run from the command line just like a .BAT script. See Command Line PHP on Microsoft Windows for further details.



ActiveScript

This section contains notes specific to the ActiveScript installation.

ActiveScript is a Windows only SAPI that enables you to use PHP script in any ActiveScript compliant host, like Windows Script Host, ASP/ASP.NET, Windows Script Components or Microsoft Scriptlet control.

As of PHP 5.0.1, ActiveScript has been moved to the » PECL repository. Bu PECL eklentisi için bir DLL mevcut değildir. Ayrıca, Windows üzerinde kurulum bölümüne de bakınız.

Bilginize: You should read the manual installation steps first!

After installing PHP, you should download the ActiveScript DLL (php5activescript.dll) and place it in the main PHP folder (e.g. C:\php).

After having all the files needed, you must register the DLL on your system. To achieve this, open a Command Prompt window (located in the Start Menu). Then go to your PHP directory by typing something like cd C:\php. To register the DLL just type regsvr32 php5activescript.dll.

To test if ActiveScript is working, create a new file, named test.wsf (the extension is very important) and type:

<job id="test">
 
 <script language="PHPScript">
  $WScript->Echo("Hello World!");
 </script>
 
</job>

Save and double-click on the file. If you receive a little window saying "Hello World!" you're done.

Bilginize: In PHP 4, the engine was named 'ActivePHP', so if you are using PHP 4, you should replace 'PHPScript' with 'ActivePHP' in the above example.

Bilginize: ActiveScript doesn't use the default php.ini file. Instead, it will look only in the same directory as the .exe that caused it to load. You should create php-activescript.ini and place it in that folder, if you wish to load extensions, etc.



Microsoft IIS

This section contains PHP installation instructions specific to Microsoft Internet Information Services (IIS).



Microsoft IIS 5.1 and IIS 6.0

This section contains instructions for manually setting up Internet Information Services (IIS) 5.1 and IIS 6.0 to work with PHP on Microsoft Windows XP and Windows Server 2003. For instructions on setting up IIS 7.0 and later versions on Windows Vista, Windows Server 2008, Windows 7 and Windows Server 2008 R2 refer to Microsoft IIS 7.0 and later.

Configuring IIS to process PHP requests

Download and install PHP in accordance to the instructions described in manual installation steps

Bilginize: Non-thread-safe build of PHP is recommended when using IIS. The non-thread-safe builds are available at » PHP for Windows: Binaries and Sources Releases.

Configure the CGI- and FastCGI-specific settings in php.ini file as shown below:

Örnek 1 CGI and FastCGI settings in php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Download and install the » Microsoft FastCGI Extension for IIS 5.1 and 6.0. The extension is available for 32-bit and 64-bit platforms - select the right download package for your platform.

Configure the FastCGI extension to handle PHP-specific requests by running the command shown below. Replace the value of the "-path" parameter with the absolute file path to the php-cgi.exe file.

Örnek 2 Configuring FastCGI extension to handle PHP requests

cscript %windir%\system32\inetsrv\fcgiconfig.js -add -section:"PHP" ^
-extension:php -path:"C:\PHP\php-cgi.exe"

This command will create an IIS script mapping for *.php file extension, which will result in all URLs that end with .php being handled by FastCGI extension. Also, it will configure FastCGI extension to use the executable php-cgi.exe to process the PHP requests.

Bilginize: At this point the required installation and configuration steps are completed. The remaining instructions below are optional but highly recommended for achieving optimal functionality and performance of PHP on IIS.

Impersonation and file system access

It is recommended to enable FastCGI impersonation in PHP when using IIS. This is controlled by the fastcgi.impersonate directive in php.ini file. When impersonation is enabled, PHP will perform all the file system operations on behalf of the user account that has been determined by IIS authentication. This ensures that even if the same PHP process is shared across different IIS web sites, the PHP scripts in those web sites will not be able to access each others' files as long as different user accounts are used for IIS authentication on each web site.

For example IIS 5.1 and IIS 6.0, in its default configuration, has anonymous authentication enabled with built-in user account IUSR_<MACHINE_NAME> used as a default identity. This means that in order for IIS to execute PHP scripts, it is necessary to grant IUSR_<MACHINE_NAME> account read permission on those scripts. If PHP applications need to perform write operations on certain files or write files into some folders then IUSR_<MACHINE_NAME> account should have write permission to those.

To determine which user account is used by IIS anonymous authentication, follow these steps:

  1. In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";

  2. Expand the list of web sites under the "Web Sites" node in the tree view, right-click on a web site that is being used and select "Properties";

  3. Click the "Directory Security" tab;

  4. Take note of a "User name:" field in the "Authentication Methods" dialog

To modify the permissions settings on files and folders, use the Windows Explorer user interface or icacls command.

Örnek 3 Configuring file access permissions

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Set index.php as a default document in IIS

The IIS default documents are used for HTTP requests that do not specify a document name. With PHP applications, index.php usually acts as a default document. To add index.php to the list of IIS default documents, follow these steps:

  1. In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";

  2. Right-click on the "Web Sites" node in the tree view and select "Properties";

  3. Click the "Documents" tab;

  4. Click the "Add..." button and enter "index.php" for the "Default content page:".

FastCGI and PHP Recycling configuration

Configure IIS FastCGI extension settings for recycling of PHP processes by using the commands shown below. The FastCGI setting instanceMaxRequests controls how many requests will be processed by a single php-cgi.exe process before FastCGI extension shuts it down. The PHP environment variable PHP_FCGI_MAX_REQUESTS controls how many requests a single php-cgi.exe process will handle before it recycles itself. Make sure that the value specified for FastCGI InstanceMaxRequests setting is less than or equal to the value specified for PHP_FCGI_MAX_REQUESTS.

Örnek 4 Configuring FastCGI and PHP recycling

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-InstanceMaxRequests:10000

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHP_FCGI_MAX_REQUESTS:10000

Configuring FastCGI timeout settings

Increase the timeout settings for FastCGI extension if there are applications that have long running PHP scripts. The two settings that control timeouts are ActivityTimeout and RequestTimeout. Refer to » Configuring FastCGI Extension for IIS 6.0 for more information about those settings.

Örnek 5 Configuring FastCGI timeout settings

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-ActivityTimeout:90

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-RequestTimeout:90

Changing the Location of php.ini file

PHP searches for php.ini file in several locations and it is possible to change the default locations of php.ini file by using PHPRC environment variable. To instruct PHP to load the configuration file from a custom location run the command shown below. The absolute path to the directory with php.ini file should be specified as a value of PHPRC environment variable.

Örnek 6 Changing the location of php.ini file

cscript %windir%\system32\inetsrv\fcgiconfig.js -set -section:"PHP" ^
-EnvironmentVars:PHPRC:"C:\Some\Directory\"



Microsoft IIS 7.0 and later

This section contains instructions for manually setting up Internet Information Services (IIS) 7.0 and later to work with PHP on Microsoft Windows Vista SP1, Windows 7, Windows Server 2008 and Windows Server 2008 R2. For instructions on setting up IIS 5.1 and IIS 6.0 on Windows XP and Windows Server 2003 refer to Microsoft IIS 5.1 and IIS 6.0.

Enabling FastCGI support in IIS

FastCGI module is disabled in default installation of IIS. The steps to enable it differ based on the version of Windows being used.

To enable FastCGI support on Windows Vista SP1 and Windows 7:

  1. In the Windows Start Menu choose "Run:", type "optionalfeatures.exe" and click "Ok";

  2. In the "Windows Features" dialog expand "Internet Information Services", "World Wide Web Services", "Application Development Features" and then enable the "CGI" checkbox;

  3. Click OK and wait until the installation is complete.

To enable FastCGI support on Windows Server 2008 and Windows Server 2008 R2:

  1. In the Windows Start Menu choose "Run:", type "CompMgmtLauncher" and click "Ok";

  2. If the "Web Server (IIS)" role is not present under the "Roles" node, then add it by clicking "Add Roles";

  3. If the "Web Server (IIS)" role is present, then click "Add Role Services" and then enable the "CGI" checkbox under "Application Development" group;

  4. Click "Next" and then "Install" and wait for the installation to complete.

Configuring IIS to process PHP requests

Download and install PHP in accordance to the instructions described in manual installation steps

Bilginize: Non-thread-safe build of PHP is recommended when using IIS. The non-thread-safe builds are available at » PHP for Windows: Binaries and Sources Releases.

Configure the CGI- and FastCGI-specific settings in php.ini file as shown below:

Örnek 1 CGI and FastCGI settings in php.ini

fastcgi.impersonate = 1
fastcgi.logging = 0
cgi.fix_pathinfo=1
cgi.force_redirect = 0

Configure IIS handler mapping for PHP by using either IIS Manager user interface or a command line tool.

Using IIS Manager user interface to create a handler mapping for PHP

Follow these steps to create an IIS handler mapping for PHP in IIS Manager user interface:

  1. In the Windows Start Menu choose "Run:", type "inetmgr" and click "Ok";

  2. In the IIS Manager user interface select the server node in the "Connections" tree view;

  3. In the "Features View" page open the "Handler Mappings" feature;

  4. In the "Actions" pane click "Add Module Mapping...";

  5. In the "Add Module Mapping" dialog enter the following:

    • Request path: *.php
    • Module: FastCgiModule
    • Executable: C:\[Path to PHP installation]\php-cgi.exe
    • Name: PHP_via_FastCGI

  6. Click "Request Restrictions" button and then configure the mapping to invoke handler only if request is mapped to a file or a folder;

  7. Click OK on all the dialogs to save the configuration.

Using command line tool to create a handler mapping for PHP

Use the command shown below to create an IIS FastCGI process pool which will use php-cgi.exe executable for processing PHP requests. Replace the value of the fullPath parameter with the absolute file path to the php-cgi.exe file.

Örnek 2 Creating IIS FastCGI process pool

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/fastCGI ^
/+[fullPath='c:\PHP\php-cgi.exe']

Configure IIS to handle PHP specific requests by running the command shown below. Replace the value of the scriptProcessor parameter with the absolute file path to the php-cgi.exe file.

Örnek 3 Creating handler mapping for PHP requests

%windir%\system32\inetsrv\appcmd set config /section:system.webServer/handlers ^
/+[name='PHP_via_FastCGI', path='*.php',verb='*',modules='FastCgiModule',^
scriptProcessor='c:\PHP\php-cgi.exe',resourceType='Either']

This command creates an IIS handler mapping for *.php file extension, which will result in all URLs that end with .php being handled by FastCGI module.

Bilginize: At this point the required installation and configuration steps are completed. The remaining instructions below are optional but highly recommended for achieving optimal functionality and performance of PHP on IIS.

Impersonation and file system access

It is recommended to enable FastCGI impersonation in PHP when using IIS. This is controlled by the fastcgi.impersonate directive in php.ini file. When impersonation is enabled, PHP will perform all the file system operations on behalf of the user account that has been determined by IIS authentication. This ensures that even if the same PHP process is shared across different IIS web sites, the PHP scripts in those web sites will not be able to access each other's files as long as different user accounts are used for IIS authentication on each web site.

For example IIS 7, in its default configuration, has anonymous authentication enabled with built-in user account IUSR used as a default identity. This means that in order for IIS to execute PHP scripts, it is necessary to grant IUSR account read permission on those scripts. If PHP applications need to perform write operations on certain files or write files into some folders then IUSR account should have write permission to those.

To determine what user account is used as an anonymous identity in IIS 7 use the following command. Replace the "Default Web Site" with the name of IIS web site that you use. In the output XML configuration element look for the userName attribute.

Örnek 4 Determining the account used as IIS anonymous identity

%windir%\system32\inetsrv\appcmd.exe list config "Default Web Site" ^
/section:anonymousAuthentication

<system.webServer>
  <security>
    <authentication>
      <anonymousAuthentication enabled="true" userName="IUSR" />
    </authentication>
   </security>
</system.webServer>

Bilginize: If userName attribute is not present in the anonymousAuthentication element, or is set to an empty string, then it means that the application pool identity is used as an anonymous identity for that web site.

To modify the permissions settings on files and folders, use the Windows Explorer user interface or icacls command.

Örnek 5 Configuring file access permissions

icacls C:\inetpub\wwwroot\upload /grant IUSR:(OI)(CI)(M)

Set index.php as a default document in IIS

The IIS default documents are used for HTTP requests that do not specify a document name. With PHP applications, index.php usually acts as a default document. To add index.php to the list of IIS default documents, use this command:

Örnek 6 Set index.php as a default document in IIS

%windir%\system32\inetsrv\appcmd.exe set config ^
-section:system.webServer/defaultDocument /+"files.[value='index.php']" ^
/commit:apphost

FastCGI and PHP Recycling configuration

Configure IIS FastCGI settings for recycling of PHP processes by using the commands shown below. The FastCGI setting instanceMaxRequests controls how many requests will be processed by a single php-cgi.exe process before IIS shuts it down. The PHP environment variable PHP_FCGI_MAX_REQUESTS controls how many requests a single php-cgi.exe process will handle before it recycles itself. Make sure that the value specified for FastCGI InstanceMaxRequests setting is less than or equal to the value specified for PHP_FCGI_MAX_REQUESTS.

Örnek 7 Configuring FastCGI and PHP recycling

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='c:\php\php-cgi.exe'].instanceMaxRequests:10000

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/+"[fullPath='C:\{php_folder}\php-cgi.exe'].environmentVariables.^
[name='PHP_FCGI_MAX_REQUESTS',value='10000']"

Configuring FastCGI timeout settings

Increase the timeout settings for FastCGI if it is expected to have long running PHP scripts. The two settings that control timeouts are activityTimeout and requestTimeout. Use the commands below to change the timeout settings. Make sure to replace the value in the fullPath parameter to contain the absolute path to the php-cgi.exe file.

Örnek 8 Configuring FastCGI and PHP recycling

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].activityTimeout:"90"  /commit:apphost

%windir%\system32\inetsrv\appcmd.exe set config -section:system.webServer/fastCgi ^
/[fullPath='C:\php\php-cgi.exe',arguments=''].requestTimeout:"90"  /commit:apphost

Changing the Location of php.ini file

PHP searches for php.ini file in several locations and it is possible to change the default locations of php.ini file by using PHPRC environment variable. To instruct PHP to load the configuration file from a custom location run the command shown below. The absolute path to the directory with php.ini file should be specified as a value of PHPRC environment variable.

Örnek 9 Changing the location of php.ini file

appcmd.exe set config  -section:system.webServer/fastCgi ^
/+"[fullPath='C:\php\php.exe',arguments=''].environmentVariables.^
[name='PHPRC',value='C:\Some\Directory\']" /commit:apphost



Apache 1.3.x on Microsoft Windows

This section contains notes and hints specific to Apache 1.3.x installs of PHP on Microsoft Windows systems. There are also instructions and notes for Apache 2 on a separate page.

Bilginize: Please read the manual installation steps first!

There are two ways to set up PHP to work with Apache 1.3.x on Windows. One is to use the CGI binary (php.exe for PHP 4 and php-cgi.exe for PHP 5), the other is to use the Apache Module DLL. In either case you need to edit your httpd.conf to configure Apache to work with PHP, and then restart the server.

It is worth noting here that now the SAPI module has been made more stable under Windows, we recommend it's use above the CGI binary, since it is more transparent and secure.

Although there can be a few variations of configuring PHP under Apache, these are simple enough to be used by the newcomer. Please consult the Apache Documentation for further configuration directives.

After changing the configuration file, remember to restart the server, for example, NET STOP APACHE followed by NET START APACHE, if you run Apache as a Windows Service, or use your regular shortcuts.

Bilginize: Windows üzerinde, Apache yapılandırma dosyalarına c:\dizin\dosya.uzn gibi dosya yollarını eklerken tüm tersbölü çizgilerini normal bölü çizgilerine çevirmeyi unutmayınız: c:/dizin/dosya.uzn. Dizin yollarını eklerken sona da bir bölü çizgisi eklemeniz gerekebilir.

Installing as an Apache module

You should add the following lines to your Apache httpd.conf file:

Örnek 1 PHP as an Apache 1.3.x module

This assumes PHP is installed to c:\php. Adjust the path if this is not the case.

For PHP 4:

# Add to the end of the LoadModule section
# Don't forget to copy this file from the sapi directory!
LoadModule php4_module "C:/php/php4apache.dll"

# Add to the end of the AddModule section
AddModule mod_php4.c

For PHP 5:

# Add to the end of the LoadModule section
LoadModule php5_module "C:/php/php5apache.dll"

# Add to the end of the AddModule section
AddModule mod_php5.c

For both:

# Add this line inside the <IfModule mod_mime.c> conditional brace
AddType application/x-httpd-php .php

# For syntax highlighted .phps files, also add
AddType application/x-httpd-php-source .phps

Installing as a CGI binary

If you unzipped the PHP package to C:\php\ as described in the Manual Installation Steps section, you need to insert these lines to your Apache configuration file to set up the CGI binary:

Örnek 2 PHP and Apache 1.3.x as CGI

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php

# For PHP 4
Action application/x-httpd-php "/php/php.exe"

# For PHP 5
Action application/x-httpd-php "/php/php-cgi.exe"

# specify the directory where php.ini is
SetEnv PHPRC C:/php

Note that the second line in the list above can be found in the actual versions of httpd.conf, but it is commented out. Remember also to substitute the c:/php/ for your actual path to PHP.

Uyarı

CGI kipinde çalışan bir sunucu olası saldırılara açık hale gelir. Sunucunuzu böyle saldırılardan nasıl koruyacağınızı öğrenmek için CGI güvenliği bölümünü okuyunuz.

If you would like to present PHP source files syntax highlighted, there is no such convenient option as with the module version of PHP. If you chose to configure Apache to use PHP as a CGI binary, you will need to use the highlight_file() function. To do this simply create a PHP script file and add this code: <?php highlight_file('some_php_script.php'); ?>.



Apache 2.0.x on Microsoft Windows

This section contains notes and hints specific to Apache 2.0.x installs of PHP on Microsoft Windows systems. We also have instructions and notes for Apache 1.3.x users on a separate page.

Bilginize: You should read the manual installation steps first!

Bilginize: Apache 2.2.x Support
Users of Apache 2.2.x may use the documentation below except the appropriate DLL file is named php5apache2_2.dll and it only exists as of PHP 5.2.0. See also » http://snaps.php.net/

Uyarı

Apache 2'nin bir hizmet ortamında evreli MPM'lerle kullanımını önermiyoruz. Bunun yerine prefork MPM'sini veya Apache 1 kullanmanızı öneririz. Bunun sebebini SSS altında Apache ve evreli MPM'ler başlığı altında bulabilirsiniz.

You are highly encouraged to take a look at the » Apache Documentation to get a basic understanding of the Apache 2.0.x Server. Also consider to read the » Windows specific notes for Apache 2.0.x before reading on here.

Bilginize: PHP ve Apache 2.0.x uyumluluk bilgileri
Aşağıdaki PHP sürümlerinin Apache 2.0.x'in en son sürümleri ile çalıştığı bilinmektedir:

PHP'nin bu sürümleri Apache 2.0.40 ve sonrası ile uyumludur.
Apache 2.0 SAPI desteği PHP 4.2.0 ile başlamıştır. PHP'nin 4.2.3 sürümü Apache 2.0.39'da çalışır. PHP'nin 4.2.3 sürümünü bundan başka bir Apache sürümü ile kullanmayın. Ancak, PHP'nin 4.3.0 ve sonraki sürümlerini Apache2'nin en son sürümleri ile gönül rahatlığıyla kullanabilirsiniz.
PHP'nin bahsi geçen bütün sürümleri hala Apache 1.3.x ile çalışmaktadır. Apache 2.x.x'in Apache 1.3.x ile uyumlu (tek evreli çok süreçli) yapılandırmaları ile de aynı durum sözkonusudur.

Uyarı

Apache 2.0.x is designed to run on Windows NT 4.0, Windows 2000 or Windows XP. At this time, support for Windows 9x is incomplete. Apache 2.0.x is not expected to work on those platforms at this time.

Download the most recent version of » Apache 2.0.x and a fitting PHP version. Follow the Manual Installation Steps and come back to go on with the integration of PHP and Apache.

There are two ways to set up PHP to work with Apache 2.0.x on Windows. One is to use the CGI binary the other is to use the Apache module DLL. In either case you need to edit your httpd.conf to configure Apache to work with PHP and then restart the server.

Bilginize: Windows üzerinde, Apache yapılandırma dosyalarına c:\dizin\dosya.uzn gibi dosya yollarını eklerken tüm tersbölü çizgilerini normal bölü çizgilerine çevirmeyi unutmayınız: c:/dizin/dosya.uzn. Dizin yollarını eklerken sona da bir bölü çizgisi eklemeniz gerekebilir.

Installing as a CGI binary

You need to insert these three lines to your Apache httpd.conf configuration file to set up the CGI binary:

Örnek 1 PHP and Apache 2.0 as CGI

ScriptAlias /php/ "c:/php/"
AddType application/x-httpd-php .php

# For PHP 4
Action application/x-httpd-php "/php/php.exe"

# For PHP 5
Action application/x-httpd-php "/php/php-cgi.exe"

Uyarı

CGI kipinde çalışan bir sunucu olası saldırılara açık hale gelir. Sunucunuzu böyle saldırılardan nasıl koruyacağınızı öğrenmek için CGI güvenliği bölümünü okuyunuz.

Installing as an Apache module

You need to insert these two lines to your Apache httpd.conf configuration file to set up the PHP module for Apache 2.0:

Örnek 2 PHP and Apache 2.0 as Module

# For PHP 4 do something like this:
LoadModule php4_module "c:/php/php4apache2.dll"
# Don't forget to copy the php4apache2.dll file from the sapi directory!
AddType application/x-httpd-php .php

# For PHP 5 do something like this:
LoadModule php5_module "c:/php/php5apache2.dll"
AddType application/x-httpd-php .php

# configure the path to php.ini
PHPIniDir "C:/php"

Bilginize: Remember to substitute your actual path to PHP for the c:/php/ in the above examples. Take care to use either php4apache2.dll or php5apache2.dll in your LoadModule directive and not php4apache.dll or php5apache.dll as the latter ones are designed to run with Apache 1.3.x.

Bilginize: If you want to use content negotiation, read related FAQ.

Uyarı

Don't mix up your installation with DLL files from different PHP versions. You have the only choice to use the DLL's and extensions that ship with your downloaded PHP version.



Sun, iPlanet and Netscape servers on Microsoft Windows

This section contains notes and hints specific to Sun Java System Web Server, Sun ONE Web Server, iPlanet and Netscape server installs of PHP on Windows.

From PHP 4.3.3 on you can use PHP scripts with the NSAPI module to generate custom directory listings and error pages. Additional functions for Apache compatibility are also available. For support in current web servers read the note about subrequests.

CGI setup on Sun, iPlanet and Netscape servers

To install PHP as a CGI handler, do the following:

  • Copy php4ts.dll to your systemroot (the directory where you installed Windows)
  • Make a file association from the command line. Type the following two lines:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • In the Netscape Enterprise Administration Server create a dummy shellcgi directory and remove it just after (this step creates 5 important lines in obj.conf and allow the web server to handle shellcgi scripts).
  • In the Netscape Enterprise Administration Server create a new mime type (Category: type, Content-Type: magnus-internal/shellcgi, File Suffix:php).
  • Do it for each web server instance you want PHP to run

More details about setting up PHP as a CGI executable can be found here: » http://benoit.noss.free.fr/php/install-php.html

NSAPI setup on Sun, iPlanet and Netscape servers

To install PHP with NSAPI, do the following:

  • Copy php4ts.dll to your systemroot (the directory where you installed Windows)
  • Make a file association from the command line. Type the following two lines:

    assoc .php=PHPScript
    ftype PHPScript=c:\php\php.exe %1 %*

  • In the Netscape Enterprise Administration Server create a new mime type (Category: type, Content-Type: magnus-internal/x-httpd-php, File Suffix: php).
  • Edit magnus.conf (for servers >= 6) or obj.conf (for servers < 6) and add the following: You should place the lines after mime types init.

    Init fn="load-modules" funcs="php4_init,php4_execute,php4_auth_trans" shlib="c:/php/sapi/php4nsapi.dll"
    Init fn="php4_init" LateInit="yes" errorString="Failed to initialise PHP!" [php_ini="c:/path/to/php.ini"]
    

    (PHP >= 4.3.3) The php_ini parameter is optional but with it you can place your php.ini in your web server configuration directory.

  • Configure the default object in obj.conf (for virtual server classes [Sun Web Server 6.0+] in their vserver.obj.conf): In the <Object name="default"> section, place this line necessarily after all 'ObjectType' and before all 'AddLog' lines:

    Service fn="php4_execute" type="magnus-internal/x-httpd-php" [inikey=value inikey=value ...]
    

    (PHP >= 4.3.3) As additional parameters you can add some special php.ini-values, for example you can set a docroot="/path/to/docroot" specific to the context php4_execute is called. For boolean ini-keys please use 0/1 as value, not "On","Off",... (this will not work correctly), e.g. zlib.output_compression=1 instead of zlib.output_compression="On"

  • This is only needed if you want to configure a directory that only consists of PHP scripts (same like a cgi-bin directory):

    <Object name="x-httpd-php">
    ObjectType fn="force-type" type="magnus-internal/x-httpd-php"
    Service fn=php4_execute [inikey=value inikey=value ...]
    </Object>
    

    After that you can configure a directory in the Administration server and assign it the style x-httpd-php. All files in it will get executed as PHP. This is nice to hide PHP usage by renaming files to .html.

  • Restart your web service and apply changes
  • Do it for each web server instance you want PHP to run

Bilginize: More details about setting up PHP as an NSAPI filter can be found here: » http://benoit.noss.free.fr/php/install-php4.html

Bilginize: The stacksize that PHP uses depends on the configuration of the web server. If you get crashes with very large PHP scripts, it is recommended to raise it with the Admin Server (in the section "MAGNUS EDITOR").

CGI environment and recommended modifications in php.ini

Important when writing PHP scripts is the fact that Sun JSWS/Sun ONE WS/iPlanet/Netscape is a multithreaded web server. Because of that all requests are running in the same process space (the space of the web server itself) and this space has only one environment. If you want to get CGI variables like PATH_INFO, HTTP_HOST etc. it is not the correct way to try this in the old PHP way with getenv() or a similar way (register globals to environment, $_ENV). You would only get the environment of the running web server without any valid CGI variables!

Bilginize: Why are there (invalid) CGI variables in the environment?
Answer: This is because you started the web server process from the admin server which runs the startup script of the web server, you wanted to start, as a CGI script (a CGI script inside of the admin server!). This is why the environment of the started web server has some CGI environment variables in it. You can test this by starting the web server not from the administration server. Use the command line as root user and start it manually - you will see there are no CGI-like environment variables.

Simply change your scripts to get CGI variables in the correct way for PHP 4.x by using the superglobal $_SERVER. If you have older scripts which use $HTTP_HOST, etc., you should turn on register_globals in php.ini and change the variable order too (important: remove "E" from it, because you do not need the environment here):

variables_order = "GPCS"
register_globals = On

Special use for error pages or self-made directory listings (PHP >= 4.3.3)

You can use PHP to generate the error pages for "404 Not Found" or similar. Add the following line to the object in obj.conf for every error page you want to overwrite:

Error fn="php4_execute" code=XXX script="/path/to/script.php" [inikey=value inikey=value...]

where XXX is the HTTP error code. Please delete any other Error directives which could interfere with yours. If you want to place a page for all errors that could exist, leave the code parameter out. Your script can get the HTTP status code with $_SERVER['ERROR_TYPE'].

Another possibility is to generate self-made directory listings. Just create a PHP script which displays a directory listing and replace the corresponding default Service line for type="magnus-internal/directory" in obj.conf with the following:

Service fn="php4_execute" type="magnus-internal/directory" script="/path/to/script.php" [inikey=value inikey=value...]

For both error and directory listing pages the original URI and translated URI are in the variables $_SERVER['PATH_INFO'] and $_SERVER['PATH_TRANSLATED'].

Note about nsapi_virtual() and subrequests (PHP >= 4.3.3)

The NSAPI module now supports the nsapi_virtual() function (alias: virtual()) to make subrequests on the web server and insert the result in the web page. The problem is, that this function uses some undocumented features from the NSAPI library.

Under Unix this is not a problem, because the module automatically looks for the needed functions and uses them if available. If not, nsapi_virtual() is disabled.

Under Windows limitations in the DLL handling need the use of a automatic detection of the most recent ns-httpdXX.dll file. This is tested for servers till version 6.1. If a newer version of the Sun server is used, the detection fails and nsapi_virtual() is disabled.

If this is the case, try the following: Add the following parameter to php4_init in magnus.conf/obj.conf:

Init fn=php4_init ... server_lib="ns-httpdXX.dll"

where XX is the correct DLL version number. To get it, look in the server-root for the correct DLL name. The DLL with the biggest filesize is the right one.

You can check the status by using the phpinfo() function.

Bilginize: But be warned: Support for nsapi_virtual() is EXPERIMENTAL!!!



OmniHTTPd Server

This section contains notes and hints specific to » OmniHTTPd on Windows.

Bilginize: You should read the manual installation steps first!

Uyarı

CGI kipinde çalışan bir sunucu olası saldırılara açık hale gelir. Sunucunuzu böyle saldırılardan nasıl koruyacağınızı öğrenmek için CGI güvenliği bölümünü okuyunuz.

You need to complete the following steps to make PHP work with OmniHTTPd. This is a CGI executable setup. SAPI is supported by OmniHTTPd, but some tests have shown that it is not so stable to use PHP as an ISAPI module.

Bilginize: Important for CGI users
Read the faq on cgi.force_redirect for important details. This directive needs to be set to 0.

  1. Install OmniHTTPd server.

  2. Right click on the blue OmniHTTPd icon in the system tray and select Properties

  3. Click on Web Server Global Settings

  4. On the 'External' tab, enter: virtual = .php | actual = c:\php\php.exe (use php-cgi.exe if installing PHP 5), and use the Add button.

  5. On the Mime tab, enter: virtual = wwwserver/stdcgi | actual = .php, and use the Add button.

  6. Click OK

Repeat steps 2 - 6 for each extension you want to associate with PHP.

Bilginize: Some OmniHTTPd packages come with built in PHP support. You can choose at setup time to do a custom setup, and uncheck the PHP component. We recommend you to use the latest PHP binaries. Some OmniHTTPd servers come with PHP 4 beta distributions, so you should choose not to set up the built in support, but install your own. If the server is already on your machine, use the Replace button in Step 4 and 5 to set the new, correct information.



Sambar Server on Microsoft Windows

This section contains notes and hints specific to the » Sambar Server for Windows.

Bilginize: You should read the manual installation steps first!

This list describes how to set up the ISAPI module to work with the Sambar server on Windows.

  • Find the file called mappings.ini (in the config directory) in the Sambar install directory.

  • Open mappings.ini and add the following line under [ISAPI]:

    Örnek 1 ISAPI configuration of Sambar

    #for PHP 4
    *.php = c:\php\php4isapi.dll
    
    #for PHP 5
    *.php = c:\php\php5isapi.dll
    

    (This line assumes that PHP was installed in c:\php.)

  • Now restart the Sambar server for the changes to take effect.

Bilginize: If you intend to use PHP to communicate with resources which are held on a different computer on your network, then you will need to alter the account used by the Sambar Server Service. The default account used for the Sambar Server Service is LocalSystem which will not have access to remote resources. The account can be amended by using the Services option from within the Windows Control Panel Administation Tools.



Xitami on Microsoft Windows

This section contains notes and hints specific to » Xitami on Windows.

Bilginize: You should read the manual installation steps first!

This list describes how to set up the PHP CGI binary to work with Xitami on Windows.

Bilginize: Important for CGI users
Read the faq on cgi.force_redirect for important details. This directive needs to be set to 0. If you want to use $_SERVER['PHP_SELF'] you have to enable the cgi.fix_pathinfo directive.

Uyarı

CGI kipinde çalışan bir sunucu olası saldırılara açık hale gelir. Sunucunuzu böyle saldırılardan nasıl koruyacağınızı öğrenmek için CGI güvenliği bölümünü okuyunuz.

  • Make sure the web server is running, and point your browser to xitamis admin console (usually http://127.0.0.1/admin), and click on Configuration.

  • Navigate to the Filters, and put the extension which PHP should parse (i.e. .php) into the field File extensions (.xxx).

  • In Filter command or script put the path and name of your PHP CGI executable i.e. C:\php\php.exe for PHP 4, or C:\php\php-cgi.exe for PHP 5.

  • Press the 'Save' icon.

  • Restart the server to reflect changes.



Building from source

This chapter teaches how to compile PHP from sources on windows, using Microsoft's tools. To compile PHP with cygwin, please refer to Unix Sistemlere Kurulum.

This chapter is outdated therefore it's temporarily been removed from the manual. For now, consider the following:



Installation of extensions on Windows

After installing PHP and a web server on Windows, you will probably want to install some extensions for added functionality. You can choose which extensions you would like to load when PHP starts by modifying your php.ini. You can also load a module dynamically in your script using dl().

The DLLs for PHP extensions are prefixed with php_.

Many extensions are built into the Windows version of PHP. This means additional DLL files, and the extension directive, are not used to load these extensions. The Windows PHP Extensions table lists extensions that require, or used to require, additional PHP DLL files. Here's a list of built in extensions:

In PHP 4 (updated PHP 4.3.11): BCMath, Caledar, COM, Ctype, FTP, MySQL, ODBC, Overload, PCRE, Session, Tokenizer, WDDX, XML ve Zlib

In PHP 5 (updated PHP 5.0.4), the following changes exist. Built in: DOM, LibXML, Iconv, SimpleXML, SPL ve SQLite. And the following are no longer built in: MySQL and Overload.

The default location PHP searches for extensions is C:\php4\extensions in PHP 4 and C:\php5 in PHP 5. To change this setting to reflect your setup of PHP edit your php.ini file:

  • You will need to change the extension_dir setting to point to the directory where your extensions lives, or where you have placed your php_*.dll files. For example:

    extension_dir = C:\php\extensions

  • Enable the extension(s) in php.ini you want to use by uncommenting the extension=php_*.dll lines in php.ini. This is done by deleting the leading ; from the extension you want to load.

    Örnek 1 Enable Bzip2 extension for PHP-Windows

    // change the following line from ...
    ;extension=php_bz2.dll
    
    // ... to
    extension=php_bz2.dll

  • Some of the extensions need extra DLLs to work. Couple of them can be found in the distribution package, in the C:\php\dlls\ folder in PHP 4 or in the main folder in PHP 5, but some, for example Oracle (php_oci8.dll) require DLLs which are not bundled with the distribution package. If you are installing PHP 4, copy the bundled DLLs from C:\php\dlls folder to the main C:\php folder. Don't forget to include C:\php in the system PATH (this process is explained in a separate FAQ entry).

  • Some of these DLLs are not bundled with the PHP distribution. See each extensions documentation page for details. Also, read the manual section titled Installation of PECL extensions for details on PECL. An increasingly large number of PHP extensions are found in PECL, and these extensions require a separate download.

Bilginize: If you are running a server module version of PHP remember to restart your web server to reflect your changes to php.ini.

The following table describes some of the extensions available and required additional dlls.

PHP Extensions
Extension Description Notes
php_bz2.dll bzip2 compression functions None
php_calendar.dll Calendar conversion functions Built in since PHP 4.0.3
php_crack.dll Crack functions None
php_ctype.dll ctype family functions Built in since PHP 4.3.0
php_curl.dll CURL, Client URL library functions Requires: libeay32.dll, ssleay32.dll (bundled)
php_dba.dll DBA: DataBase (dbm-style) Abstraction layer functions None
php_dbase.dll dBase functions None
php_dbx.dll dbx functions  
php_domxml.dll DOM XML functions PHP <= 4.2.0 requires: libxml2.dll (bundled) PHP >= 4.3.0 requires: iconv.dll (bundled)
php_dotnet.dll .NET functions PHP <= 4.1.1
php_exif.dll EXIF functions php_mbstring.dll. And, php_exif.dll must be loaded after php_mbstring.dll in php.ini.
php_fbsql.dll FrontBase functions PHP <= 4.2.0
php_fdf.dll FDF: Forms Data Format functions. Requires: fdftk.dll (bundled)
php_filepro.dll filePro functions Read-only access
php_ftp.dll FTP functions Built-in since PHP 4.0.3
php_gd.dll GD library image functions Removed in PHP 4.3.2. Also note that truecolor functions are not available in GD1, instead, use php_gd2.dll.
php_gd2.dll GD library image functions GD2
php_gettext.dll Gettext functions PHP <= 4.2.0 requires gnu_gettext.dll (bundled), PHP >= 4.2.3 requires libintl-1.dll, iconv.dll (bundled).
php_hyperwave.dll HyperWave functions None
php_iconv.dll ICONV characterset conversion Requires: iconv-1.3.dll (bundled), PHP >=4.2.1 iconv.dll
php_ifx.dll Informix functions Requires: Informix libraries
php_iisfunc.dll IIS management functions None
php_imap.dll IMAP POP3 and NNTP functions None
php_ingres.dll Ingres functions Requires: Ingres libraries
php_interbase.dll InterBase functions Requires: gds32.dll (bundled)
php_java.dll Java functions PHP <= 4.0.6 requires: jvm.dll (bundled)
php_ldap.dll LDAP functions PHP <= 4.2.0 requires libsasl.dll (bundled), PHP >= 4.3.0 requires libeay32.dll, ssleay32.dll (bundled)
php_mbstring.dll Multi-Byte String functions None
php_mcrypt.dll Mcrypt Encryption functions Requires: libmcrypt.dll
php_mhash.dll Mhash functions PHP >= 4.3.0 requires: libmhash.dll (bundled)
php_mime_magic.dll Mimetype functions Requires: magic.mime (bundled)
php_ming.dll Ming functions for Flash None
php_msql.dll mSQL functions Requires: msql.dll (bundled)
php_mssql.dll MSSQL functions Requires: ntwdblib.dll (bundled)
php_mysql.dll MySQL functions PHP >= 5.0.0, requires libmysql.dll (bundled)
php_mysqli.dll MySQLi functions PHP >= 5.0.0, requires libmysql.dll (libmysqli.dll in PHP <= 5.0.2) (bundled)
php_oci8.dll Oracle 8 functions Requires: Oracle 8.1+ client libraries
php_openssl.dll OpenSSL functions Requires: libeay32.dll (bundled)
php_overload.dll Object overloading functions Built in since PHP 4.3.0
php_pdf.dll PDF functions None
php_pgsql.dll PostgreSQL functions None
php_printer.dll Printer functions None
php_shmop.dll Shared Memory functions None
php_snmp.dll SNMP get and walk functions NT only!
php_soap.dll SOAP functions PHP >= 5.0.0
php_sockets.dll Socket functions None
php_sybase_ct.dll Sybase functions Requires: Sybase client libraries
php_tidy.dll Tidy functions PHP >= 5.0.0
php_tokenizer.dll Tokenizer functions Built in since PHP 4.3.0
php_w32api.dll W32api functions None
php_xmlrpc.dll XML-RPC functions PHP >= 4.2.1 requires: iconv.dll (bundled)
php_xslt.dll XSLT functions PHP <= 4.2.0 requires sablot.dll, expat.dll (bundled). PHP >= 4.2.1 requires sablot.dll, expat.dll, iconv.dll (bundled).
php_yaz.dll YAZ functions Requires: yaz.dll (bundled)
php_zip.dll Zip File functions Read only access
php_zlib.dll ZLib compression functions Built in since PHP 4.3.0



Command Line PHP on Microsoft Windows

This section contains notes and hints specific to getting PHP running from the command line for Windows.

Bilginize: You should read the manual installation steps first!

Getting PHP to run from the command line can be performed without making any changes to Windows.

C:\PHP5\php.exe -f "C:\PHP Scripts\script.php" -- -arg1 -arg2 -arg3

But there are some easy steps that can be followed to make this simpler. Some of these steps should already have been taken, but are repeated here to be able to provide a complete step-by-step sequence.

  • Add the location of the PHP executable (php.exe, php-win.exe or php-cli.exe depending upon your PHP version and display preferences) to the PATH environment variable. Read more about how to add your PHP directory to PATH in the corresponding FAQ entry.

  • Add the .PHP extension to the PATHEXT environment variable. This can be done at the same time as amending the PATH environment variable. Follow the same steps as described in the FAQ but amend the PATHEXT environment variable rather than the PATH environment variable.

    Bilginize: The position in which you place the .PHP will determine which script or program is executed when there are matching filenames. For example, placing .PHP before .BAT will cause your script to run, rather than the batch file, if there is a batch file with the same name.

  • Associate the .PHP extension with a file type. This is done by running the following command:

    assoc .php=phpfile
    

  • Associate the phpfile file type with the appropriate PHP executable. This is done by running the following command:

    ftype phpfile="C:\PHP5\php.exe" -f "%1" -- %~2
    

Following these steps will allow PHP scripts to be run from any directory without the need to type the PHP executable or the .PHP extension and all parameters will be supplied to the script for processing.

The example below details some of the registry changes that can be made manually.

Örnek 1 Registry changes

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\.php]
@="phpfile"
"Content Type"="application/php"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile]
@="PHP Script"
"EditFlags"=dword:00000000
"BrowserFlags"=dword:00000008
"AlwaysShowExt"=""

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\DefaultIcon]
@="C:\\PHP5\\php-win.exe0"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell]
@="Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open]
@="&Open"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\phpfile\shell\Open\command]
@="\"C:\\PHP5\\php.exe\" -f \"%1\" -- %~2"

With these changes the same command can be written as:

"C:\PHP Scripts\script" -arg1 -arg2 -arg3
or, if your "C:\PHP Scripts" path is in the PATH environment variable:
script -arg1 -arg2 -arg3

Bilginize: There is a small problem if you intend to use this technique and use your PHP scripts as commandline filter, like the example below:

dir | "C:\PHP Scripts\script" -arg1 -arg2 -arg3
or
dir | script -arg1 -arg2 -arg3
You may find that the script simply hangs and nothing is output. To get this operational, you need to make another registry change.
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\Explorer]
"InheritConsoleHandles"=dword:00000001
Further information regarding this issue can be found in this » Microsoft Knowledgebase Article : 321788.




PECL eklentilerinin kurulması

İçindekiler


PECL Kurulumları Hakkında

» PECL, » PEAR üzerinden kullanılabililen bir PHP eklentileri deposudur. Kılavuzun bu bölümü PECL eklentilerinin nasıl edinileceği ve nasıl kurulacağını göstermek için tasarlanmıştır.

Bu talimatlarda, PHP kaynak kodunun /php/kaynak/dizininiz/ altında bulunduğu ve PECL eklentisinin isminin eklenti olduğu varsayılacaktır. Hazırlıklarınızı buna göre yapın. Bu talimatlarda ayrıca, » pear komutunu kullanmayı bildiğiniz varsayılacaktır. PEAR kılavuzundaki pear komutu ile ilgili bilgiler pecl komutu için de geçerlidir.

Burada genel olarak eklentinin paylaşımlı olarak derlenmesi, kurulması ve yüklenmesi üzerinde durulacaktır. Sonraki bölümlerde açıklanan yöntemler eklentiyi nasıl derleyip kuracağınızla ilgili çeşitli talimatlar içerir, fakat bunları sizin yerinize özdevinimli olarak yüklemezler. Eklentiler bir extension yönergesi eklenerek yüklenebilirler. Bunun için php.ini dosyasını veya dl() işlevini kullanabilirsiniz.

PHP modüllerini derlerken, derleme için gerekli araçların (autoconf, automake, libtool gibi) birbirleriyle en uyumlu sürümlerini kullanıyor olmak önemlidir. Gerekli araçlar ve bunların gerekli sürümleriyle ilgili ayrıntılı bilgiyi » Anonim SVN Talimatları sayfasında bulabilirsiniz.



PECL Eklentilerinin İndirilmesi

PECL eklentilerini indirmek için çeşitli seçenekler vardır:

  • pecl install eklenti komutu eklenti kodunu özdevinimli olarak indirir, dolayısıyla ayrı bir indirme işlemine gerek kalmaz.
  • » http://pecl.php.net/ PECL sitesi, PHP Geliştirme Ekibi tarafından önerilen farklı eklentiler hakkında bilgiler içerir. Burada bulunan bilgilerden bazıları: ChangeLog dosyaları, dağıtım notları, gereksinimler ve benzeri ayrıntılar.
  • pecl download eklenti komutu PECL sitesinine dağıtım listesinde bulunan eklentileri indirip kurmak için » pecl komutu kullanılabilir. İstenen sürümler ayrıca belirtilebilir.
  • SVN Çoğu PECL eklentisi ayrıca SVN'de de bulunmaktadır. SVN içeriğini tarayıcınızla » http://svn.php.net/viewvc/pecl/ adresinde inceleyebilirsiniz. Eklentileri doğrudan SVN'den indirmek için sırayla aşağıdaki komutları verebilirsiniz.


    $ svn checkout http://svn.php.net/repository/pecl/extname/trunk eklenti

  • Windows için Artık PHP projesi PECL eklentilerinin Windows çalıştırılabilirlerini derlememektedir. Ancak, Windows altında PHP derlemek için PHP'nin Windows için derlenmesi başlıklı bölüme bakabilirsiniz.


Bir PHP Eklentisinin Windows Kurulumu

Windows'ta bir PHP eklentisini yüklemenin iki yolu vardır: Ya eklentiyi PHP içinde derlersiniz ya da DLL olarak yüklersiniz. Derlenmiş bir eklentiyi yüklemek en kolay ve en çok tercih edilen yoldur.

Bir eklentiyi yüklemek için sisteminizde o eklentinin ".dll" dosyasının bulunması gerekir. Tüm eklentiler özdevinimli olarak belirli aralıklarla PHP Grubu tarafından derlenirler (bunları indirmek için sonraki bölüme bakınız).

Bir eklentiyi PHP içinde derlemek için Kaynak kod paketinden derleme belgesine bakınız.

Bir eklentiyi tek başına (yani bir DLL olarak) derlemek için Kaynak kod paketinden derleme belgesine bakınız. Eğer DLL dosyası ne PHP dağıtımınızda ne de PECL sitesinde mevcutsa, eklentiyi kullanmaya başlamadan önce derlemek zorunda kalabilirsiniz.

Bir eklenti nereden bulunur?

PHP eklentileri genellikle "php_*.dll" biçeminde isimlendirilirler (yıldız iminin yerine eklentinin ismi gelir) ve "PHP\ext" (PHP 4'te "PHP\extensions") dizini altında bulunurlar.

PHP, geliştiricilerin büyük çoğunluğunca en faydalı bulunan eklentilerle birlikte gelir. Bunlara "çekirdek" eklentiler adı verilir.

Bununla birlikte, çekirdek eklentilerle sağlanmamış bir işlevselliğe ihtiyaç duyarsanız, PECL sitesinde bakabilirsiniz. PHP Eklentileri Halk Kütüphanesi (PECL - PHP Extension Community Library) bir PHP Eklentileri deposu olup PHP eklentilerinin geliştirilmesi ve indirilmesi için barındırma oluşumlarını ve bilinen tüm eklentilerin bir dizinini içerir.

Kendi kullanımınız için bir eklenti geliştiriyorsanız PECL'de barındırılmasını isteyebilirsiniz, böylece ihtiyaçları aynı olan başkaları da eklentinizden yararlanabilir. Bunun bazı olumlu yan etkileri de vardır: Geribildirim, teşekkür, hata bildirimi, hatta düzeltme ve yama alma şansınız olur. Eklentinizi barındırılmak üzere PECL'ye göndermeden önce lütfen http://pecl.php.net/package-new.php adresini ziyaret ediniz.

Hangi eklenti indirilecek?

Çoğu zaman her DLL'nin çok sayıda sürümü vardır:

  • Farklı sürüm numaraları (en azından ilk iki sayı tutmalı)
  • Farklı evre güvenceli olanlar
  • Farklı işlemciler için olanlar (x86, x64, ...)
  • Farklı hata ayıklama seçenekli olanlar
  • vs.

Şunu aklınızdan çıkarmayın: Eklenti ayarlarınız kullandığınız PHP çalıştırılabilirinin ayarları ile aynı olmalıdır. Aşağıdaki PHP betiği PHP ayarlarınızın tamamını size söyleyecektir:

Örnek 1 phpinfo() kullanımı

<?php
phpinfo
();
?>

Ya da komut satırından şunu çalıştırın:

sürücü:\\dizin\yolu\php\executable\php.exe -i

Bir eklentinin yüklenmesi

Bir PHP eklentisini yüklemenin en bilinen yolu eklentiyi php.ini dosyasına eklemektir. Dikkatli incelerseniz php.ini dosyanızda bir çok eklentinin zaten ekli olduğunu görürsünüz. Eklentiyi etkin kılmak için tek yapacağınız eklentinin belirtildiği satırın başındaki noktalı virgülü silmek olacaktır.

;extension=php_eklenti.dll
extension=php_eklenti.dll

Bununla birlikte, bazı HTTP sunucuları, PHP çalıştırılabilirinin yanına konmuş php.ini dosyasını kullanmadıklarından eklentinizi göremeyebilirler. HTTP sunucunuzun kullandığı php.ini dosyasının bulunduğu yeri phpinfo() işlevini kullanarak öğrenebilirsiniz:

Configuration File (php.ini) Path 	C:\WINDOWS
Loaded Configuration File 	        C:\Program Files\PHP\5.2\php.ini

Eklentiyi etkin kıldıktan sonra php.ini dosyanızı kaydedin ve HTTP sunucunuzu yeniden başlattıktan sonra tekrar phpinfo() çıktısına bakın. Yeni eklentiyi artık kendi bölümünde görüyor olmanız gerekir.

Sorunların çözümlenmesi

Eğer eklenti phpinfo() çıktısında görünmüyorsa sorunun kaynağını bulmak için günlük dosyalarınıza bakmalısınız.

PHP'yi komut satırından kullanıyorsanız (CGI), eklenti yükleme hatasını doğrudan ekranda görebilirsiniz.

PHP'yi bir HTTP sunucusu ile kullanıyorsanız günlük dosyalarının yeri ve biçemi kullandığınız yazılıma göre değişir. Günlüklerin yerini bulmak için kullandığınız HTTP sunucusunun belgelerine bakınız.

Sorunların çoğu DLL dosyasının yeri ile ilgilidir. php.ini içindeki "extension_dir" yönergesinin değeri ile derleme sırasında yapılan ayarlar arasında bir tutarsızlık olabilir.

Eğer sorun derleme sırasında yapılan ayarlarla uyumsuzluktan kaynaklanıyorsa muhtemelen indirdiğiniz DLL dosyasını doğru yere koymamışsınız demektir. Eklentiyi doğru ayarlarla tekrar indirmeyi deneyin. Bunu yaptıktan sonra tekrar phpinfo() çıktısına bakmayı unutmayın.



Paylaşımlı PECL eklentilerinin pecl komutu ile derlenmesi

PECL, paylaşımlı PHP eklentilerinin oluşturulmasını kolaylaştırır. » pecl komutunu şöyle kullanabilirsiniz:


$ pecl install eklenti

Bu komutla eklentinin kaynak kodu indirilecek, derlenecek ve eklenti.so adıyla extension_dir yönergesinde belirtilen dizine kurulacaktır. Böylece eklenti.so php.ini üzerinden yüklenebilir duruma gelmiş olacaktır.

Öntanımlı olarak, pecl komutu, alfa veya beta olarak imlenmiş paketleri kurmaz. Eklentinin henüz kararlı bir sürümü yoksa, beta sürümü şöyle kurabilirsiniz:


$ pecl install eklenti-beta

Ayrıca belli bir sürümü şu şekilde kurabilirsiniz:


$ pecl install eklenti-0.1

Bilginize: Eklentiyi php.ini dosyasında etkin kıldıktan sonra değişikliklerin etkin olması için HTTP sunucunuzu (hizmetini) yeniden başlatın.



Paylaşımlı PECL eklentilerinin phpize ile derlenmesi

pecl komutu ile kurulumun mümkün olmadığı durumlar olabilir. Bir güvenlik duvarı arkasındasınızdır veya eklentinin PECL uyumlu paketi yoktur ya da henüz dağıtılmamış SVN sürümünü kurmak istiyorsunuzdur, vs. Böyle bir eklentinin derleme işlemini daha alt seviye derleme araçlarını kullanarak kendiniz gerçekleştirebilirsiniz.

Bir PHP eklentisini derleme işlemine hazırlamak için phpize komutu kullanılır. Aşağıdaki örnekte, eklentinin kaynak kod paketinin eklenti dizininde bulunduğu varsayılmıştır:

$ cd eklenti
$ phpize
$ ./configure
$ make
# make install

Başarılı bir kurulum sonucunda eklenti PHP eklentileri dizinine eklenti.so adıyla yerleştirilir. Eklentiyi etkin kılmak için php.ini dosyanıza bir extension=eklenti.so satırı eklemeniz gerekecektir.

Eğer sisteminizde phpize komutu yoksa ve RPM gibi önceden derlenmiş paketleri kullanabiliyorsanız, phpize komutunu ve PHP eklentilerini derlemek için gerekli başlık dosyalarını içermesi muhtemel uygun bir PHP geliştirme sürümünü kurmanız gerekebilir.

Komutun kullanım bilgilerini görmek için phpize --help komutunu verin.



PECL eklentilerinin PHP içinde duruk olarak derlenmesi

Bazen bir PECL eklentisini PHP çalıştırılabilirinin içinde duruk olarak derlemeniz gerekebilir. Bunu yapmak için eklentiyi /php/kaynak/dizininiz/ext/ dizinine yerleştirmeniz ve PHP kaynak paketinin configure betiğini yeniden çalıştırmanız gerekir.

$ cd /php/kaynak/dizininiz/ext
$ pecl download eklenti
$ gzip -d < eklenti.tgz | tar -xvf -
$ mv eklenti-x.x.x eklenti

Bu işlemin sonucunda eklenti şöyle bir dizinin altına yerleştirilmiş olacaktır:


/php/kaynak/dizininiz/ext/eklenti

Artık PHP kaynak paketinin configure betiğini yeniden oluşturup PHP'yi her zamanki gibi derleyebilirsiniz:


$ cd /php/kaynak/dizininiz/
$ rm configure
$ ./buildconf --force
$ ./configure --help
$ ./configure --with-eklenti --enable-baskabireklenti --with-filanca
$ make
$ make install

Bilginize: buildconf betiğini çalıştırabilmek için autoconf 2.13 ve automake 1.4+ paketlerinin sisteminizde kurulu olması gerekir (daha yeni autoconf sürümleri de çalışır ama onlar desteklenmemektedir).

--enable-eklenti seçeneğinin mi yoksa --with-eklenti seçeneğinin mi kullanılacağı eklentiye bağlıdır. Genellikle harici kütüphanelere ihtiyacı olmayan eklentiler --enable seçeneğini kullanırlar. Hangisinin kullanılacağından emin olmak için buildconf'tan sonra şunu çalıştırın:


$ ./configure --help | grep eklenti




Sorunlar?

İçindekiler


SSS'yi okuyun

Bazı sorunlar diğerlerine göre daha sık karşımıza çıkar. En bilinenlerini bu kılavuzun SSS bölümünde liste halinde bulabilirsiniz.



Diğer Sorunlar

Hala bir çözüme ulaşamadıysanız, PHP kurulum posta listesinden birileri belki size yardımcı olabilir. Sizin sorununuzla daha önce karşılaşan biri olmuş mu acaba diye önce liste arşivlerini bir araştırın, hala uygun bir çözüm bulamadıysanız sorununuzu listeye yazın, aynı sorunla daha önce karşılaşmış biri size yardımcı olabilir. Liste arşivlerine » http://www.php.net/support.php adresindeki destek sayfasından erişebilirsiniz. PHP kurulum listesine üye olmak için » php-install-subscribe@lists.php.net adresine boş bir ileti gönderiniz. Posta listesinin adresi: » php-install@lists.php.net.

Posta listesinde yardım almak istiyorsanız, ortamınız hakkında gerekli bilgiler (kullandığınız işletim sistemi, PHP sürümü, HTTP sunucusu, PHP'yi CGI olarak mı yoksa modül olarak mı çalıştırdığınız, safe_mode, vs. kullanımı) dikkatlice ve ayrıntılı olarak vermeye çalışın. Bunun yanında sorununuzu denemeyi veya aynı sorunu üretmeyi mümkün kılacak kodları veya ayrıntıları vermeye çalışın.



Hata Bildirme

PHP'de bir hata bulduğunuzu düşünüyorsanız, lütfen bize bildirin. Siz bildirmezseniz PHP geliştiricilerinin muhtemelen bundan haberleri olmayacak ve gerekli değişiklikleri yapmayacaklardır. Hataları » http://bugs.php.net/ adresindeki hata izleme sistemini kullanarak bildirebilirsiniz. Hataları lütfen posta listelerine ve kişisel posta adreslerine bildirmeyiniz. Hata izleme sistemine özellik isteklerinizi de bildirebilirsiniz.

Bir hatayı bildirmeden önce lütfen » Hata nasıl bildirilir? sayfasını okuyunuz!




Çalışma Anı Yapılandırması

İçindekiler


Yapılandırma Dosyası

Yapılandırma dosyası (php.ini) PHP başlatıldığında okunur. PHP'nin sunucu modülü sürümlerinde bu işlem bir kereliğine HTTP sunucusu başlatıldığında gerçekleşir. CGI ve CLI sürümlerinde ise PHP'nin her çağrılışında işlem tekrarlanır.

php.ini sırasıyla şuralarda aranır:

  • SAPI modülüne özgü konum (Apache 2'de PHPIniDir yönergesi, CGI ve CLI için -c komut satırı seçeneği, NSAPI'de php_ini değiştirgesi, THTTPD'de PHP_INI_PATH ortam değişkeni)

  • PHPRC ortam değişkeni. PHP 5.2.0 öncesinde aşağıda bahsedilen kayıt defteri anahtarından sonra bu değişkene bakılırdı.

  • PHP 5.2.0'dan itibaren, PHP'nin farklı sürümlerine ait php.ini dosyaları için Windows kayıt defterinde sırayla aşağıdaki yerlere bakılmaktadır: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z], [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] ve [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]. Burada x, y ve z harfleri PHP'nin ana, alt ve yama sürümlerini belirtir. Bu anahtarlarda bir IniFilePath değeri varsa ilk bulunan php.ini konumu kullanılır.

  • [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] anahtarının \IniFilePath değeri. (Windows Kayıt Defteri kaydı)

  • Geçerli çalışma dizini (CLI dışında)

  • HTTP sunucusunun dizini (SAPI modülleri için) veya PHP dizini (Windows için)

  • Windows dizini (C:\windows veya C:\winnt) (Windows için) veya --with-config-file-path derleme seçeneği ile belirtilen dizin.

php-SAPI.ini mevcutsa (burada SAPI, kullanılan SAPI'dir, dolayısıyla php-cli.ini veya php-apache.ini gibi bir dosya ismidir), php.ini yerine bu dosya kullanılır. SAPI ismi php_sapi_name() işlevi ile saptanabilir.

Bilginize: Apache HTTP sunucusunun başlatıldığında kök dizine geçmesi PHP'nin php.ini dosyasını dosya sisteminin kök dizininde aramasına sebep olur.

php.ini yönergelerinin eklentilerle ilgili olanlarının belgeleri her eklentinin kendi belgeleri içindedir. Temel yönergelerin listesini eklerde bulabilirsiniz. Tamamı olmasa da yönergelerin büyük çoğunluğu kılavuzda belgelenmiş durumdadır. Kurulu PHP sürümünüzde geçerli yönergelerin tam listesi için kendi içinde iyi açıklanmış php.ini dosyanızı okuyun. Ayrıca, SVN'de bulunan » en son php.ini dosyası da bu konuda size yardımcı olabilir.

Örnek 1 - php.ini örneği

; bir noktalı virgülden (;) sonra gelen tüm metin parçaları yok sayılır
[php] ; bölüm imleyiciler de (köşeli ayraç içindeki metinler) yok sayılır
; Mantıksal değerler için şu değerlerden herhangi biri kullanılabilir:
;      true,  on,  yes
;      false, off, no, none
register_globals = off
track_errors = yes

; Dizgeleri çift tırnak imlerinin arasında belirtebilirsiniz
include_path = ".:/usr/local/lib/php"

; tersbölü karakterleri diğer karakterler gibi ele alınır
include_path = ".;c:\php\lib"

PHP'nin 5.1.0 sürümünden beri .ini dosyalarında bulunan yönergelere isimleriyle değişken olarak erişilebilmektedir. Örnek: open_basedir = ${open_basedir} ":/new/dir".



.user.ini dosyaları

PHP 5.3.0'dan beri, dizinler için .htaccess tarzı INI dosyaları desteklenmektedir. Bu dosyalar sadece CGI/FastCGI SAPI tarafından işlenir. Bu işlevsellik ile PECL htscanner eklentisi atıl duruma düşmüştür. Apache kullanıyorsanız aynı etkiyi elde etmek için .htaccess dosyalarını kullanın.

Ana php.ini dosyasına ek olarak, PHP istenen PHP dosyasının bulunduğu dizinden itibaren her dizini INI dosyaları için tarar ve bunları geçerli belge kök dizinine uygulanıyormuş gibi uygular ($_SERVER['DOCUMENT_ROOT'] değişkenine atandığı gibi). .user.ini tarzı INI dosyalarında sadece PHP_INI_PERDIR ve PHP_INI_USER kipindeki INI ayarları işleme sokulur.

Kullanıcı INI dosyalarını denetlemek için iki yeni INI yönergesi kullanılmaktadır: user_ini.filename ve user_ini.cache_ttl.

user_ini.filename ile PHP'nin dizinlerde arayacağı dosyanın ismi belirtilir. .user.ini öntanımlı değerdir.

user_ini.cache_ttl ile kullanıcı INI dosyalarının ne sıklıkta denetleneceği belirtilir. 300 saniye (5 dakika) öntanımlı değerdir.



Yapılandırma ayarlarının yeri

   Bu kipler, bir PHP yönergesinin nerede ve ne zaman atanabileceğini    belirlerler ve bu kılavuzdaki her yönerge bu kiplerden biri ile    ilişkilidir. Örneğin, bazı ayarlar bir PHP betiğinin içinde    ini_set() kullanarak atanabilirken bazıları da    php.ini veya httpd.conf dosyasında atanabilirler.  

 Örneğin, output_buffering    ayarı için kip PHP_INI_PERDIR olup    ini_set() kullanarak atanamaz. Bununla birlikte,    display_errors yönergesinin    kipi PHP_INI_ALL olup ini_set()    kullanımı dahil her yerde atanabilir.  

PHP_INI_* kiplerinin tanımları
Kip Değeri Anlamı
PHP_INI_USER 1 Girdi Windows registry veya kullanıcı betiklerinde atanabilir.
PHP_INI_PERDIR 6 Girdi php.ini, .htaccess veya httpd.conf dosyasında atanabilir.
PHP_INI_SYSTEM 4 Girdi php.ini veya httpd.conf dosyasında atanabilir.
PHP_INI_ALL 7 Girdi herhangi bir yerde atanabilir.


Yapılandırma ayarlarının değiştirilmesi

PHP'nin bir Apache modülü olarak çalıştırılması

PHP'yi bir Apache modülü olarak kullanırken, yapılandırma ayarlarını Apache yapılandırma dosyalarındaki (httpd.conf ve .htaccess dosyaları) yönergeleri kullanarak da değiştirebilirsiniz. Bunu yapabilmek için Apache yapılandırmasında "AllowOverride Options" veya "AllowOverride All" olması gerekir.

PHP yapılandırmasını Apache yapılandırma dosyaları içinden değiştirmenize imkan veren çeşitli Apache yönergeleri vardır. PHP_INI_ALL, PHP_INI_PERDIR veya PHP_INI_SYSTEM olarak belirtilebilen yönergeleri eklerdeki php.ini yönergelerinin listesi sayfasında bulabilirsiniz.

php_value isim değer

Belirtilen değeri ismi belirtilen yönergeye atar. Sadece PHP_INI_ALL ve PHP_INI_PERDIR türü yönergeler için kullanılabilir. Önceki atanan değeri silmek için değer olarak none kullanın.

Bilginize: Mantıksal değer atamak için php_value yönergesini değil, php_flag (aşağıya bakınız) yönergesini kullanmalısınız.

php_flag isim on|off

Bir mantıksal yapılandırma yönergesi atamak için kullanılır. Sadece PHP_INI_ALL ve PHP_INI_PERDIR türü yönergeler için kullanılabilir.

php_admin_value isim değer

İsmi belirtilen yönergeye belirtilen değeri atar. .htaccess dosyalarında kullanılamaz. Bu yönerge ile atanan hiçbir yönerge türü ini_set() veya .htaccess tarafından geçersiz kılınamaz. Önceki atanan değeri silmek için değer olarak none kullanın.

php_admin_flag isim on|off

Bir mantıksal yapılandırma yönergesi atamak için kullanılır. .htaccess dosyalarında kullanılamaz. Bu yönerge ile atanan hiçbir yönerge türü .htaccess tarafından geçersiz kılınamaz.

Örnek 1 - Apache yapılandırma örneği

<IfModule mod_php5.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag safe_mode on
</IfModule>
<IfModule mod_php4.c>
  php_value include_path ".:/usr/local/lib/php"
  php_admin_flag safe_mode on
</IfModule>

Dikkat

PHP sabitleri PHP dışında mevcut değildir. Örneğin, httpd.conf dosyasında error_reporting yönergesine E_ALL veya E_NOTICE PHP sabitlerini atayamazsınız. Bunu yaparsanız daima 0 olarak değerlendirileceklerdir. Sabitleri kullanmak yerine bunların bit maskelerini kullanın. Bu sabitler php.ini içinde kullanılabilir.

PHP yapılandırmasının Windows kayıt defteri üzerinden değiştirilmesi

PHP, Windows üzerinde çalışırken, yapılandırma değerleri Windows kayıt defteri kullanılarak her dizin için ayrı ayrı değiştirilebilir. Yapılandırma değerleri defterde HKLM\SOFTWARE\PHP\Per Directory Values anahtarının dizin isimlerine karşılık gelen alt anahtarlarında saklanır. Örneğin, c:\inetpub\wwwroot dizini için yapılandırma değerleri HKLM\SOFTWARE\PHP\Per Directory Values\c\inetpub\wwwroot anahtarında saklanır. Dizin ile ilgili ayarlar, dizin içinde ve alt dizinlerde çalıştırılan her betik için geçerli olur. Anahtar altındaki değerler PHP yapılandırma yönergelerinin isimlerini ve dizge değerlerini içermelidir. Değerlerde bulunan PHP sabitleri çözümlenmez. Sadece, PHP_INI_USER türü değişebilir yapılandırma değerleri bu yolla atanabilir, PHP_INI_PERDIR değerleri atanamaz.

Diğer PHP arayüzleri

PHP'yi nasıl çalıştırdığınızdan bağımsız olarak, belli değerleri betiğinizin çalışması sırasında ini_set() işlevi sayesinde değiştirebilirsiniz. Bu konuda daha ayrıntılı bilgi için ini_set() sayfasına bakınız.

Sistem yapılandırmanızla ilgili ayarlar ve mevcut değerleri ilginizi çekiyorsa phpinfo() işlevini çalıştırabilir ve elde ettiğiniz sayfayı inceleyebilirsiniz. Ayrıca, yapılandırma yönergelerinin her birine çalışma anında ini_get() veya get_cfg_var() işlevini kullanarak erişebilirsiniz.





Dil Başvuru Kılavuzu


Temel Sözdizimi

İçindekiler


HTML'den Kaçmak

PHP bir dosyayı çözümlerken, hangi bölümü yorumlayıp hangi bölümü yorumlamadan geçeceğine açılış ve kapanış etiketlerine bakarak karar verir. PHP'nin bu şekilde çalışıyor olması, PHP'nin çesitli türde birçok belgenin içine gömülebilmesini sağlar, çünkü PHP başlangıç ve bitiş etiketlerinin dışında kalan her şey PHP çözümleyicisi tarafından gözardı edilir. Çoğu zaman, bu örnekte olduğu gibi PHP'nin HTML içine gömülmüş olduğunu göreceksiniz.

<p>Bu bölüm gözardı edilecektir.</p>
<?php echo 'Bu bölüm PHP tarafından çözümlenecektir.'?>
<p>Bu bölüm de gözardı edilecektir.</p>

Daha gelişmiş yapılar da kullanmanız mümkündür:

Örnek 1 - Gelişmiş önceleme

<?php
if ($ifade) {
    
?>
    <strong>Bu önerme doğrudur.</strong>
    <?php
} else {
    
?>
    <strong>Bu önerme yanlıştır.</strong>
    <?php
}
?>

Bu beklendiği gibi çalışacaktır, çünkü PHP, ?> kapanış etiketi ile karşılaştığında, tekrar bir açılış etiketi ile karşılaşana kadar bulduğu herşeyi (kapanış etiketinden sonraki satırsonu karakteri hariç - bkz, deyim ayırma) çıktılayacaktır. Buradaki örnek oldukça basit, ancak büyük metin bloklarını görüntülemek istediğimizde PHP'yi çözümleme kipinden çıkartmak çoğu zaman tüm metni echo() ya da print() ile görüntülemekten daha verimlidir.

PHP ile kullanılabilecek dört farklı açılış ve kapanış etiketi çifti vardır. Bunlardan ikisi, <?php ?> ve <script language="php"> </script> her zaman kullanılabilir durumdadır. Diğer ikisi, kısa etiketler ve ASP tarzı etiketler olup php.ini yapılandırma dosyası içersinden açılıp kapatılabilirler. Bazı kişiler kısa etiketleri ve ASP tarzı etiketleri daha kullanışlı bulmaktadır, ancak bu ikisi daha az taşınabilir olduklarından genellikle tavsiye edilmemektedir.

Bilginize: Bir diğer önemli nokta, PHP'yi XML ya da XHTML içine gömmek istiyorsanız standartlarla uyumlu kalabilmek için <?php ?> etiketlerini kullanmanız gerektiğidir.

Örnek 2 - PHP Açılış ve Kapanış Etiketleri

1.  <?php echo 'XHTML ya da XML belgeleri sunacaksanız, böyle yapın'?>

2.  <script language="php">
        
echo 'bazı düzenleyiciler (FrontPage gibi) işlem
                yönergelerini sevmezler'
;
    
</script>

3.  <? echo 'Bu en basit, SGML işlem yönergesidir'?>
    <?= ifade ?> Bu "<? echo ifade ?>" için bir kısayoldur.

4.  <% echo 'İsterseniz ASP tarzı etiketler kullanabilirsiniz'; %>
    <%= $degisken; # Bu "<% echo . . ." %> için bir kısayoldur.

Bir ve iki numaralı örneklerde gözüken etiketler her zaman kullanılabilirler. Bu ikisinden birincisi en geniş kullanıma sahip olanı ve en çok tercih edilenidir.

Kısa etiketler (üçüncü gibi) yalnızca php.ini içersinde short_open_tag yapılandırma yönergesiyle etkinleştirilmişlerse ya da PHP, --enable-short-tags derleme seçeneği ile yapılandırılmışsa kullanılabilirler.

ASP tarzı etiketler (dördüncü örnek) php.ini dosyasında asp_tags yapılandırma yönergesiyle etkinleştirilmişlerse kullanılabilirler.

Bilginize: Geliştirdiğiniz uygulamaları ya da kütüphaneleri başkalarına dağıtacaksanız ya da bu uygulamaları denetiminizde olmayan PHP sunucularına kuracaksanız kısa etiketleri kullanmaktan kaçınmalısınız, çünkü hedef sunucu kısa etiketleri desteklemiyor olabilir. Kodlarınızın taşınabilir ve yeniden dağıtılabilir olması için, alışkanlıkla kısa etiketleri kullanmadığınızdan emin olun.



Deyim Ayrımı

C ya da Perl'de olduğu gibi, PHP de deyimlerin birbirlerinden her bir deyimin sonuna konulacak noktalı virgülle ayrılmasını gerektirir. Bir PHP kod bloğunun sonunda yer alan kapanış etiketi kendinden önceki deyim için noktalı virgül işlevi görür; yani, bir PHP bloğunun son satırının sonuna noktalı virgül koymak zorunda değilsiniz. Kapanış etiketi aynı zamanda satırsonu karakterini de kendisi ekleyecektir.

<?php
    
echo 'Bu bir denemedir';
?>

<?php echo 'Bu bir denemedir' ?>

<?php echo 'Son kapanış etiketini koymadık';

Bilginize: Dosya sonunda PHP kapanış etiketini kullanmak isteğe bağlıdır, hatta dosya sonlarında istemdışı boş satırlar oluşması gibi durumlarda include(), require() gibi işlevlerin kullanımında yararlı bile olabilir, dahası sonradan yanıta başlık eklemeye devam edebilirsiniz. Bu özellik ayrıca, çıktı tamponlama kullanıyorsanız ve betiğe include() ile eklediğiniz dosyalar tarafından üretilen kısımların sonunda gereksiz boş satırların oluşmasını istemediğinizde de işe yarar.



Açıklamalar

PHP, 'C', 'C++' ve Unix kabuk tarzı (Perl tarzı) açıklamaların hepsini destekler. Örnegin:

<?php
    
echo 'Bu bir denemedir'// Bu tek satırlık c++ tarzı açıklamadır
    /* Bu, C tarzı çok satırlı
       bir açıklamadır */
    
echo 'Bir deneme daha';
    echo 
'Bu da sonuncusu'# Bu tek satırlık kabuk tarzı açıklamadır
?>

"Tek satırlık" bir açıklamanın etki alanı yalnızca satır sonuna ya da PHP kod bloğunun sonuna kadardır. Yani, // ... ?> ya da # ... ?> kullanımından sonra gelecek HTML kodu YAZDIRILACAKTIR: ?> etiketi PHP kipinden çıkılmasına ve HTML kipine dönülmesini sağlar, // ya da # kullanımı bunu etkileyemez asp_tags yapılandırma yönergesi etkinse, asp tarzı // %> ve # %> kullanımı da böyle çalışır. Bununla birlikte, </script> etiketi tek satırlık açıklama için böyle duruma yol açmaz.

<h1>Bu <?php # echo 'basit';?> bir örnektir.</h1>
<p>Yukarıdaki başlık 'Bu bir örnektir' diye gösterilecektir.</p>

Bir 'C' tarzı açıklama ilk */ ile karşılaşıldığı noktada sona erer. 'C' tarzı açıklamaları iç içe kullanmamalısınız. Büyük miktarda kod bloğunu açıklama haline getirirken bu yanlış genellikle yapılır.

<?php
 
/*
    echo 'Bu bir denemedir'; /* Bu açıklama sorun çıkaracak. */
 
*/
?>




Türler

İçindekiler


Giriş

PHP sekiz ilkel veri türü destekler.

Dört sayıl tür:

İki bileşik tür:

Ve son olarak iki özel tür:

Bu kılavuzda ayrıca, okunabilirliği arttırmak için bazı sözde türlere de yer verilmiştir:

Ve sözde değişken: $... .

Kılavuzun bazı yerlerinde tür ismi olarak "double" hala kalmış olabilir. Bunları "float" olarak ele alın; iki isminde varlık sebebi tamamen tarihseldir.

Normal olarak, değişken türünü programcı belirlemez; çalışma anında değişkenin bulunduğu bağlama göre buna PHP karar verir.

Bilginize: Bir ifadenin değerinin ve türünün ne olduğuna bakmak için var_dump() işlevini kullanabilirsiniz. Hata ayıklama amacıyla bir değişkenin türünü öğrenmek için gettype() işlevini kullanın. Belli bir türü sınamak için gettype() değil is_tür işlevlerini kullanın. Bazı örnekler:

<?php
$a_bool 
TRUE;   // boolean türünde
$a_str  "foo";  // string türünde
$a_str2 'foo';  // string türünde
$an_int 12;     // integer  türünde

echo gettype($a_bool); // boolean basar
echo gettype($a_str);  // string basar

// Değişken bir tamsayı ise değeri dört arttır
if (is_int($an_int)) {
    
$an_int += 4;
}

// $bool bir dizge ise değeri çıktıla
// (hiçbir şey çıktılanmayacaktır)
if (is_string($a_bool)) {
    echo 
"Dizge: $a_bool";
}
?>

Bir değişkenin türünün mutlaka belli bir türe dönüşmesini isterseniz ya tür çarpıtma yapın ya da settype() işlevini kullanın.

Yerine göre bazı durumlarda bir değişkenin değeri farklı değerlendirilir. Daha ayrıntılı bilgi için Tür Dönüşümü bölümüne bakınız. Ayrıca, türlerle ilgili çeşitli karşılaştırmaların listelendiği Tür karşılaştırma tabloları da yararlı olabilir.



boolean

En basit türdür. Bir mantıksal ifadenin sonucu TRUE veya FALSE olan bir doğruluk değeridir.

Bilginize: boolean türü PHP 4'ten beri vardır.

Sözdizimi

Bir boolean sayılını belirtmek için TRUE veya FALSE anahtar sözcüğü kullanılır. Her ikisi de harf büyüklüğüne duyarsızdır.

<?php
$foo 
True// $foo değişkenine TRUE değeri atanır.
?>

Genelde, boolean türünde bir değer döndüren bir çeşit işleç vardır ve bu değer bir denetim yapısına aktarılır.

<?php
// == işleci, eşitliği sınar ve
// boolean türünde bir değer döndürür
if ($eylem == "sürümü göster") {
    echo 
"Sürüm numarası 1.23'tür.";
}

// Bu gereksizdir...
if ($ayırıcı_göster == TRUE) {
    echo 
"<hr>\n";
}

// ... böylesi daha iyidir:
if ($ayırıcı_göster) {
    echo 
"<hr>\n";
}
?>

boolean türüne dönüşüm

Bir değeri doğrudan boolean türüne dönüştürmek için (bool) veya (boolean) çarpıtmalarını kullanabilirsiniz. Ancak, bir boolean değiştirge gerektiren bir işleç, işlev veya denetim yapısı dönüşümün özdevinimli olarak yapılmasını sağladığından çoğu durumda tür çarpıtma gereksizdir.

Ayrıca, Tür Dönüşümü bölümüne de bakınız.

Aşağıdaki değerler boolean türüne dönüşümde FALSE olarak ele alınırlar:

Bunların dışında kalan tüm değerler TRUE olarak ele alınır (resource türler dahil).

Uyarı

-1 ve sıfırdan farklı diğer değerler (pozitif veya negatif) TRUE olarak ele alınır.

<?php
var_dump
((bool) "");        // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -2);        // bool(true)
var_dump((bool) "foo");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array());   // bool(false)
var_dump((bool) "false");   // bool(true)
?>


integer

Bir integer türünde değer şu kümeden bir tamsayıdır: Z = {..., -2, -1, 0, 1, 2, ...}.

Bunlara da bakınız:

Syntax

integer türünde değerler onluk, sekizlik veya onaltılık tabanda belirtilebilirler ve önlerinde isteğe bağlı bir + veya - işareti bulunabilir.

Sekizlik gösterimde sayıların önüne 0 (sıfır), onaltılık gösterimde ise 0x getirilir.

Örnek 1 - Tamsayı sayıllar

<?php
$a 
1234// onluk tabanda bir sayı
$a = -123// negatif bir sayı
$a 0123// sekizlik tabanda bir sayı (onluk: 83)
$a 0x1A// onaltılık tabanda bir sayı (onluk: 26)
?>

Biçimsel olarak integer sayılların yapısı:

onluk     : [1-9][0-9]*
          | 0

onaltılık : 0[xX][0-9a-fA-F]+

sekizlik  : 0[0-7]+

tamsayı   : [+-]?onluk
          | [+-]?onaltılık
          | [+-]?sekizlik

Bir integer türün genişliği platforma göre değişir. 32 bitlik sistemlerde azami değer 2 milyon civarında iken 64 bitlik sistemlerde 9E18 civarındadır. PHP işaretsiz tamsayıları (C'deki unsigned) desteklemez. integer türün genişliği PHP 4.4.0'da PHP_INT_SIZE sabitine ve olası en büyük değeri ise PHP 5.0.5'te PHP_INT_MAX sabitine atanmıştır.

Uyarı

Sekizlik bir değer içinde geçersiz bir rakam kullanılmışsa (8, 9 gibi) o ve kalan tüm rakamlar yok sayılır.

Örnek 2 - Sekizlik garabeti

<?php
var_dump
(01090); // sekizlik: 010, onluk: 8
?>

Tamsayılarda taşma

PHP, integer türünde bir değerin bellekte integer türüne ayrılan genişliğe sığmadığını saptarsa float türünde bir değer olarak ele alır ve bu durum yapılan bir işlem sırasında ortaya çıkmışsa işlemden dönen değer float türünde olur.

<?php
$büyük_sayı 
=  2147483647;
var_dump($büyük_sayı);
// çıktısı: int(2147483647)

$büyük_sayı =  2147483648;
var_dump($büyük_sayı);
// çıktısı: float(2147483648)

// aynısı 2^31 ve 2^32-1 arasındaki onaltılık değerler için de geçerlidir:
var_dump0xffffffff );
// çıktısı: float(4294967295)

// ancak 2^32-1'den büyük onaltılık değerler için geçersizdir:
var_dump0x100000000 );
// output: int(2147483647)

$milyon 1000000;
$büyük_sayı =  50000 $million;
var_dump($büyük_sayı);
// çıktısı: float(50000000000)
?>
Uyarı

Ne yazık ki, bunun negatif sayılar için her zaman çalışmaması şeklinde kendini gösteren bir PHP yazılım hatası mevcuttu. Örneğin, -50000 * $milyon işleminin sonucu -429496728 olmaktadır. Ancak, her iki terimin işareti pozitif olduğunda hiçbir sorun çıkmamaktadır.

Bu hata PHP 4.1.0'da düzeltilmiştir.

PHP'de sonucun integer türünde elde edileceği bir bölme işlemi mevcut değildir. 1/2 işleminin sonucu float türünde 0.5 değeridir. Bu değer (integer) ile çarpıtılarak aşağı yuvarlamak suretiyle bir tamsayıya dönüştürülebilirse de round() işlevini kullanırsanız dönüşümün nasıl yapılacağını kendiniz belirleyebilirsiniz.

<?php
var_dump
(25/7);         // float(3.5714285714286)
var_dump((int) (25/7)); // int(3)
var_dump(round(25/7));  // float(4)
?>

integer türüne dönüşüm

Bir değeri doğrudan integer türüne dönüştürmek için (int) veya (integer) çarpıtmasını kullanabilirsiniz. Ancak, çoğu durumda türü çarpıtmak gerekmez, bir tamsayı değer gerektiren bir işlev veya denetim yapısı, değeri özdevinimli olarak integer türüne dönüştürecektir. Ayrıca, bir değer integer türüne intval() işleviyle de dönüştürülebilir.

Ayrıca, Tür Dönüşümü bölümüne de bakınız.

boolean türünden dönüşüm

FALSE, 0'a (sıfır); TRUE, 1'e (bir) dönüştürülür.

float türünden dönüşüm

float türünden integer türüne dönüşümde sayı sıfıra yaklaştırılarak yuvarlanır.

Dönüşüm sonucu integer türüne ayrılan genişliğe (normalde +/- 2.15e+9 = 2^31) sığmıyorsa, float türün hassasiyeti integer türünde tam bir sonuç vermeyeceğinden sonuç tanımsızdır. Bu durumda ne bir uyarı ne de bir bilgi verilir!

Uyarı

Ondalık kısmı integer türüne asla dönüştürmeyin, yoksa beklenmedik sonuçlar elde edebilirsiniz.

<?php
echo (int) ( (0.1+0.7) * 10 ); // çıktısı: 7!
?>

Ayrıca bakınız: Kayan noktalı sayılarda hassasiyet uyarısı.

string türünden dönüşüm

Dizgelerin sayılara dönüşümü bölümüne bakınız.

Diğer türlerden dönüşüm

Dikkat

Diğer türlerden integer türüne dönüşümün nasıl davranacağı henüz kesin olarak tanımlanmamıştır. Gözlemlediğiniz bir davranışın doğruluğuna güvenmeyiniz, ileride bu davranış hiçbir bilgi verilmeden değiştirilebilir.



float

Gerçek sayılar (veya kayan noktalı sayılar) şu sözdizimleri ile belirtilebilir:

<?php
$a 
1.234;
$b 1.2e3;
$c 7E-10;
?>

Biçimsel olarak:

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
USTEL_DNUM    [+-]?(({LNUM} | {DNUM}) [eE][+-]? {LNUM})

Bir gerçek sayının bellekte kapladığı genişlik platforma göre değişmekteyse de kabaca 14 hanelik bir hassasiyetle ~1.8e308'lik olası bir en büyük değer (64 bitlik IEEE biçemi) hepsi için sağlanır.

Uyarı

Kayan nokta hassasiyeti

Normal olarak, 0.1 veya 0.7 gibi basit ondalık sayılar az da olsa bir kayıp olmaksızın dahili ikil karşılıklarına dönüştürülemezler. Bunun şöyle bir sonucu olur: örneğin, floor((0.1+0.7)*10) işlevinden beklendiği gibi 8 değil, 7 döner; bunun sebebi dahili gösterimin aslında 7.9 gibi bir değer olmasıdır.

Bunun asıl sebebi, noktanın sağındaki rakam sayısı sonsuz olan bazı ondalık sayıları ifade etmekteki zorluktur. Örneğin, 1/3 ifadesinin ondalık sonucu 0.3'tür.

Bu bakımdan, son ondalık hanesine bakarak sonucun ne olacağına karar verilemez, bu bakımdan kayan noktalı sayılar arasında asla eşitlik karşılaştırmaları yapılmaz. Eğer daha yüksek hassasiyet isteniyorsa keyfi hassasiyetli matematik işlevleri ve gmp işlevleri kullanılabilir.

float türüne dönüşüm

string türleri float türlere dönüştürmek için gereken bilgileri Dizgelerin sayılara dönüşümü bölümünde bulabilirsiniz. Diğer türlerden float türüne dönüşüm için değer önce integer türüne dönüştürülür. Daha fazla bilgi için integer türüne dönüşüm bölümüne bakınız. PHP 5 itibariyle, bir object tür float türe dönüştürülmeye çalışılırsa bir uyarı üretilir.



string

Bir dizge string türünde bir sayıl değer olup bir dizi karakterden oluşur. PHP 6 öncesi her karakter tek bayt ile ifade ediliyordu. Yani, olası karakter sayısı 256'dan ibaretti. Bu yüzden PHP Evrenkod için yerleşik desteğe sahip olamıyordu. Temel Evrenkod işlevselliği hakkında bilgi edinmek için utf8_encode() ve utf8_decode() işlevlerine bakınız.

Bilginize: Bir dizgenin çok büyük olması bir sorun teşkil etmez. PHP, string türünde bir değer için boyut sınırlaması yapmaz; tek sınırlama PHP'nin çalıştığı makinede PHP'nin kullanımına ayrılan bellek miktarıdır.

Sözdizimi

string türünde bir sayıl dört şekilde belirtilebilir:

Tek tırnaklı dizgeler

Bir dizgeyi belirtmenin en basit yolu dizgeyi tek tırnak (') imlerinin arasına almaktır.

Tek tırnaklı bir dizge içinde tek tırnağı sayıl değeriyle kullanmak isterseniz önüne bir tersbölü imi getirmelisiniz (\). Bir tersbölü imini sayıl değeriyle kullanmak isterseniz onun da önüne bir tersbölü imi getirmelisiniz (\\). Tersbölü imini bunlardan başka bir karakterin önünde kullanırsanız, tersbölü imi karakterle birlikte basılır.

Bilginize: Diğer iki sözdiziminin aksine, değişkenler ve özel karakterlerin öncelemleri tek tırnaklı dizgelerin içinde kullanıldıklarında yorumlanmazlar.

<?php
echo 'Bu basit bir dizgedir';

echo 
'Dizgelerin içinde satırsonu karakterlerini
tıpkı buradaki gibi
kullanabilirsiniz'
;

// Çıktısı: Arnold dedi ki: "I'll be back"
echo 'Arnold dedi ki: "I\'ll be back"';

// Çıktısı: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';

// Çıktısı: You deleted C:\*.*?
echo 'You deleted C:\*.*?';

// Çıktısı: This will not expand: \n a newline
echo 'This will not expand: \n a newline';

// Çıktısı: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>

Çift tırnaklı dizgeler

Eğer bir dizge çift tırnak (") içine alınmışsa PHP, aşağıdaki özel karakter öncelemlerini yorumlayacaktır:

Tersbölü ile öncelenmiş karakterler
Öncelem Anlamı
\n satırsonu (LF veya ASCII 10 (0x0A))
\r satırbaşı (CR veya ASCII 13 (0x0D))
\t yatay sekme (HT veya ASCII 9 (0x09))
\v düşey sekme (VT veya ASCII 11 (0x0B)) (PHP 5.2.5 ve sonrası)
\f sayfa ileri (FF veya ASCII 12 (0x0C)) (PHP 5.2.5 ve sonrası)
\\ tersbölü
\$ dolar imi
\" çift tırnak
\[0-7]{1,3} Bu düzenli ifade ile eşleşen dizilim, karakterin sekizlik gösterimidir.
\x[0-9A-Fa-f]{1,2} Bu düzenli ifade ile eşleşen dizilim, karakterin onaltılık gösterimidir.

Tersbölü imini bunlardan başka bir karakterin önünde kullanırsanız, tersbölü imi karakterle birlikte basılır. PHP 5.1.1'den önce, \{$var} içindeki tersbölü imi basılmıyordu.

Çift tırnaklı dizgelerin en önemli özelliği içerdiği değişkenlerin yorumlanmasıdır. Bu konuda daha ayrıntılı bilgi edinmek için Değişken çözümleme bölümüne bakınız.

Yorumlu metinler

Bir dizgenin sınırlarını belirlemenin üçüncü yolu, yorumlu metin sözdizimidir. Bir yorumlu metin daima <<< karakterleri ile başlar ve hemen ardından bir betimleyici ve bir satırsonu karakteri gelir. Asıl dizge satırsonu karakterinden sonra yer alır. Dizgenin sonunu belirtmek üzere dizgenin sonuna, baştaki betimleyici konur.

Kapanış betimleyicisinin dizgeden sonraki satırın başında olması gerekir. Ayrıca, betimleyici PHP'deki diğer isimlere uygulanan kurallara uygun olmalıdır: Sadece bir harfle veya alt çizgi imi ile başlayabilir; sadece harfler, rakamlar veya alt çizgi imleri içerebilir.

Uyarı

Kapanış betimleyicisinin bulunduğu satırda betimleyicinin hemen ardına konan noktalı virgül (;) dışında hiçbir karakter bulunmaması çok önemli olup buna özellikle dikkat etmelisiniz. Yani, betimleyici özellikle girintilenmemeli; noktalı virgülden önce ve sonra herhangi bir boşluk karakteri bulunmamalıdır. Ayrıca, kapanış betimleyicisinden hemen önce gelen karakterin yerel işletim sistemine özgü satırsonu karakteri olması çok önemlidir. Bu karakter Unix ve Mac OS X için \n'dir. Kapanış betimleyicisinden (ve olası noktalı virgül karakterinden) sonraki karakter de böyle bir satırsonu karakteri olmalıdır.

Eğer bu kurallara uyulmaz ve kapanış betimleyicisinin etrafı temiz tutulmazsa kapanış betimleyicisi algılanamayacağından PHP kapanış betimleyicisini aramaya devam edecektir. Eğer dosyanın sonuna kadar uygun bir kapanış betimleyicisi bulunamazsa son satırda bir çözümleme hatası oluşacaktır.

Yorumlu metinler sınıf özelliklerini ilklendirmek için kullanılamazlar. PHP 5.3'ten beri bu sınırlama sadece değişken içeren yorumlu metinler için geçerlidir. Bunun yerine yorumsuz metinler kullanılabilir.

Örnek 1 - Geçersiz örnek

<?php
class foo {
    public 
$bar = <<<EOT
bar
EOT;
}
?>

Yorumlu metinler tıpkı çift tırnaklı dizgeler gibi davranırlar. Yorumlu metin çift tırnaklar arasına alınmaz ve metin içindeki çift tırnak imlerinin tersbölü ile öncelenmesi gerekmez, ancak yukarıda çift tırnaklı dizgeler için belirtilen öncelem kodları kullanılabilir. Değişkenler yorumlanır, fakat yorumlanan metin içinde yer alan karmaşık değişkenler ifade edilirken dizgelerde dikkate alınması gerekenler yorumlu metinlerde de dikkate alınmalıdır.

Örnek 2 - Yorumlu metin örneği

<?php
$str 
= <<<EOD
Yorumlu metin sözdizimi
kullanılarak çok sayıda
satıra bölünmüş dizge örneği.
EOD;

/* Değişkenlerin de kullanıldığı daha karmaşık bir örnek */
class foo
{
    var 
$foo;
    var 
$bar;

    function 
foo()
    {
        
$this->foo 'Foo';
        
$this->bar = array('Bar1''Bar2''Bar3');
    }
}

$foo = new foo();
$name 'Kimimben';

echo <<<EOT
Adım "$name" ve işim $foo->foo basmak.
Şimdi 
{$foo->bar[1]} basıyorum.
Bu büyük 'A' basmalı: \x41\n
EOT;
?>

Yukarıdaki örneğin çıktısı:

Adım "Kimimben" ve işim Foo basmak.
Şimdi Bar2 basıyorum.
Bu büyük 'A' basmalı: A

Ayrıca işlev değiştirgesinde veri aktarırken de yorumlu metin kullanılabilir:

Örnek 3 - Değiştirgelerde yorumlu metin kullanımı

<?php
var_dump
(array(<<<EOD
foobar!
EOD
));
?>

PHP 5.3.0'dan itibaren, duruk değişkenleri ve sınıf özelliklerini veya sabitlerini yorumlu metin sözdizimini kullanarak ilklendirmek mümkündür:

Örnek 4 - Duruk değer olarak yorumlu metin kullanımı

<?php
// Duruk değişkenler
function foo()
{
 static 
$bar = <<<LABEL
Burada  hiçbir şey yok...
LABEL;
}

// Sınıf özellikleri ve sabitleri
class foo
{
 const 
BAR = <<<FOOBAR
Sınıf sabiti örneği
FOOBAR;

 public 
$baz = <<<FOOBAR
Özellik örneği
FOOBAR;
}
?>

PHP 5.3.0 ile ayrıca, yorumlu metinlerin bildiriminde çift tırnak kullanımı olasılığı da dikkate alınmıştır:

Örnek 5 - Yorumlu metin bildiriminde çift tırnak kullanımı

<?php
echo <<<"TIRNAKLI"
Merhaba Dünya!
TIRNAKLI;
?>

Bilginize: Yorumlu metin desteği PHP 4'te eklenmiştir.

Yorumsuz metinler

Yorumlu metinlerin çift tırnaklı dizgelere karşılık gelmesi gibi yorumsuz metinler de tek tırnaklı dizgelere karşılık gelir. Yorumsuz metinler de yorumlular gibi belirtilir ama, yorumsuz metin içinde çözümleme yapılmaz. Yorumsuz metinler, PHP kodlarını veya büyük metin bloklarını herhangi bir önlem almaksızın içine yerleştirmek için elverişlidirler. Belirtilen metin bloğunun çözümlenmemesinden dolayı SGML'nin <![CDATA[ ]]> oluşumu ile benzer özelliklere sahiptir.

Yorumsuz metin de yorumlu metindeki <<< dizgesini kullanır fakat betimleyicisi tek tırnak içine alınır; yani, şuna benzer: <<<'EOT'. Yorumlu metin için geçerli tüm diğer kurallar yorumsuz metin için de geçerlidir; özellikle de kapanış betimleyici ile ilgili olanlar.

Örnek 6 - Yorumsuz metin örneği

<?php
$str 
= <<<'EOD'
Yorumlu metin sözdizimi
kullanılarak çok sayıda
satıra bölünmüş dizge örneği.
EOD;

/* Değişkenli daha karmaşık bir örnek. */
class foo
{
    public 
$foo;
    public 
$bar;

    function 
foo()
    {
        
$this->foo 'Foo';
        
$this->bar = array('Bar1''Bar2''Bar3');
    }
}

$foo = new foo();
$name 'Kimimben';

echo <<<'EOT'
İsmim "$name" ve işim $foo->foo basmak.
Artık {$foo->bar[1]} basıyorum.
Bu büyük 'A' basmalı: \x41
EOT;
?>

Yukarıdaki örneğin çıktısı:

İsmim "$name" ve işim $foo->foo basmak.
Artık {$foo->bar[1]} basıyorum.
Bu büyük 'A' basmalı: \x41

Bilginize: Yorumlu metinlerin aksine yorumsuz metinler herhangi bir duruk veri bağlamında kullanılabilirler. Sınıf özelliklerini veya sabitlerini yorumsuz metin kullanarak ilklendirme örneği:

Örnek 7 - Duruk veri örneği

<?php
class foo {
    public 
$bar = <<<'EOT'
bar
EOT;
}
?>

Bilginize: Yorumlu metin desteği PHP 5.3.0'da eklenmiştir.

Değişken çözümleme

Bir dizge çift tırnaklar arasında veya bir yorumlu metin olarak belirtilmişse içindeki değişkenler çözümlenir.

İki sözdizimi türü vardır: Biri basit, diğeri karmaşık. Basit sözdizimi en çok kullanılanı ve elverişli olanıdır; bir değişken, bir dizi değeri veya bir nesne özelliğini bir dizge içinde en az çabayla kullanmayı sağlar.

Karmaşık sözdizimi PHP4'ten itibaren kullanılmakta olup ifadeyi sarmalayan kaşlı ayraçlar biçiminde kendini gösterir.

Basit Sözdizimi

Çözümleyici, bir dolar imine ($) rastlandığında, geçerli bir değişken ismi oluşturmak için alabildiği bütün dizgecikleri açgözlülükle toplar. Değişken isminin kaşlı ayraçlar arasına alınması ismin sonunun açıkça belirtilmesini sağlar.

<?php
$bira 
'Bira';
echo 
"$bira'nın tadı berbattır"// çalışır; "'" değişken adında geçersizdir
echo "$biralar geldi";   // çalışmaz; 'lar' değişken isminde geçerlidir
                         // ama değişken "$biralar" değildir.
echo "${bira}lar geldi"// çalışır
echo "{$bira}lar geldi"// çalışır
?>

Bir dizi indisi veya bir nesne özelliği de benzer şekilde çözümlenebilir. Dizi indislerinde indis sonunu, kapayan köşeli ayraç (]) belirler. Aynı kural, basit değişkenler olarak nesne özelliklerine de uygulanır.

<?php
// Bu örnekler dizge içinde dizi kullanımına özgüdür.
// Dizilerin dizgesel anahtarları daima tırnak içine alınır,
// bu amaçla kaşlı ayraçlar kullanılmaz.

// Bütün hataları görelim
error_reporting(E_ALL);

$meyve = array('çilek' => 'kırmızı''muz' => 'sarı');

// Çalışır, fakat bunun dizge dışında farklı çalışacağına dikkat edin
echo "Bir muz $meyve[muz] renktedir.";

// Çalışır
echo "Bir muz {$meyve['muz']} renktedir.";

// çalışır, fakat PHP aşağıda açıklandığı gibi önce muz adında bir sabit arar
echo "Bir muz {$meyve[muz]} renktedir.";

// Çalışmaz, kaşlı ayraç kullanın. Bir çözümleme hatasına yol açar.
echo "Bir muz $meyve['muz'] renktedir.";

// Çalışır
echo "Bir muz " $meyve['muz'] . " renktedir.";

// Çalışır
echo "Bu karenin bir kenarı $square->width metre uzunluktadır.";

// Çalışmaz. Çözüm için karmaşık sözdizimine bakın.
echo "Bu karenin bir kenarı $square->width00 santimetre uzunluktadır.";
?>

Bunlardan daha karmaşık herşey için karmaşık sözdizimini kullanmalısınız.

Karmaşık (kaşlı ayraçlı) sözdizimi

Buna karmaşık denmesinin sebebi sözdiziminin karmaşıklığı değil, karmaşık ifadelerin kullanımını mümkün kılmasıdır.

Aslında, isim alanındaki her değer, bir dizge içinde bu sözdizimi ile yer alabilir. İfade basitçe dizge dışındaki gösterimiyle yazılıp { ve } arasına alınır. { öncelenemeyeceğinden bu sözdizimi sadece $ iminin { iminin hemen ardında yer aldığı durumlarda tanınır. {\$ kullanımı bir sayıl {$ alınmasıyla sonuçlanır. Bazı örnekler:

<?php
// Tüm hataları görelim
error_reporting(E_ALL);

$şahane 'harika';

// Çalışmaz, çıktısı: Bu çok { harika}
echo "Bu çok { $şahane}";

// Çalışır, çıktısı: Bu çok harika
echo "Bu çok {$şahane}";
echo 
"Bu çok ${şahane}";

// Çalışır
echo "Bu karenin bir kenarı {$square->width}00 santimetre uzunluktadır.";

// Çalışır
echo "Bu çalışır: {$arr[4][3]}";

// $foo[bar] bir dizge dışında neden yanlışsa bu da o yüzden yanlıştır.
// Yani, bu yine de çalışır fakat PHP önce foo adında bir sabit
// arayacağından çalışır; bununla birlikte E_NOTICE seviyesinde
// bir hata oluşacaktır (tanımsız sabit).
echo "Bu yanlış: {$arr[foo][3]}";

// Çalışır. Çok boyutlu dizileri dizgelerin içinde kullanılırken,
// dizileri daima kaşlı ayraçlar arasına alın.
echo "Bu çalışır: {$arr['foo'][3]}";

// Çalışır.
echo "Bu çalışır: " $arr['foo'][3];

echo 
"Bu da çalışır: {$obj->values[3]->name}";

echo 
"$name adlı değişkenin değeri: {${$name}}";

echo 
"Adı getName() işlevinin dönüş değeri olan değişkenin değeri: {${getName()}}";

echo 
"Adı \$object->getName() yönteminin dönüş değeri olan değişkenin değeri: {${$object->getName()}}";
?>

Bu sözdizimini kullanan dizgeler içindeki değişkenler üzerinden de sınıf özelliklerine erişmek mümkündür.

<?php
class foo {
    var 
$bar 'I am bar.';
}

$foo = new foo();
$bar 'bar';
$baz = array('foo''bar''baz''quux');
echo 
"{$foo->$bar}\n";
echo 
"{$foo->$baz[1]}\n";
?>

Yukarıdaki örneğin çıktısı:


I am bar.
I am bar.

Bilginize: İşlev ve yöntem çağrılarının, duruk sınıf değişkenlerinin ve sınıf sabitlerinin {$} içinde çağrılması PHP 5'ten beri çalışmaktadır. Erişilen değer, dizgenin tanımlandığı etki alanındaki bir değişkenin ismi olarak yorumlanır. Kaşlı ayraçların tek başına kullanımı ({}), duruk sınıf değişkenlerinin veya sınıf sabitlerinin değerlerine veya işlev ve yöntemlerin dönüş değerlerine erişim için kullanılmaz.

<?php
// Tüm hatalar gösterilsin.
error_reporting(E_ALL);

class 
beers {
    const 
softdrink 'rootbeer';
    public static 
$ale 'ipa';
}

$rootbeer 'A & W';
$ipa 'Alexander Keith\'s';

// Bu çalışır; çıktısı: I'd like an A & W
echo "I'd like an {${beers::softdrink}}\n";

// Bu da çalışır; çıktısı: I'd like an Alexander Keith's
echo "I'd like an {${beers::$ale}}\n";
?>

Dizge erişimi ve karaktere göre değişiklik

Dizgelerin içindeki karakterlere, dizilerin köşeli ayraçları arasında karakterin dizinin başlangıcından itibaren (ilk karakterin indisi sıfır olmak üzere) kaçıncı karakter olduğu belirtilerek ($dizge[42] gibi) erişilebilir veya o karakterde değişiklik yapılabilir. Dizgeler bu nedenle bir karakter dizisi olarak düşünülür.

Bilginize: Dizge karakterlerine ayrıca $str{42} biçeminde kaşlı ayraçlar kullanılarak da erişilebilirse de bu sözdiziminin kullanımı PHP 5.3.0 itibariyle önerilmemektedir. Bu amaçla kaşlı ayraçları değil, daima köşeli ayraçları tercih edin; örnek: $str[42].

Uyarı

Karakter indisi olarak dizgenin uzunluğundan büyük bir değer belirtmek, dizgenin sonuna boşlukların eklenmesine sebep olur. Tamsayı olmayan indis değerleri tamsayıya dönüştürülür. Kuraldışı indis belirtimi E_NOTICE'e sebep olur. Yazma sırasında negatif indisler bir E_NOTICE çıktılanmasına sebep olurken okuma işlemi boş dizge okunmasıyla sonuçlanır. Atanmış bir dizgenin sadece ilk karakteri kullanılır. Boş dizge atamak NULL atamasıyla sonuçlanır.

Örnek 8 - Bazı dizge örnekleri

<?php
// Dizgenin ilk karakterini alalım
$str 'This is a test.';
$first $str[0];

// Dizgenin üçüncü karakterini alalım
$third $str[2];

// Dizgenin son karakterini alalım
$str 'This is still a test.';
$last $str[strlen($str)-1];

// Dizgenin son karakterini değiştirelim
$str 'Look at the sea';
$str[strlen($str)-1] = 'e';

?>

Bilginize: Diğer türlerdeki değişkenlere [] veya {} kullanarak erişme çabası NULL dönmesiyle sonuçlanır.

Kullanışlı işlevler ve işleçler

Dizgeler '.' (nokta) işleci kullanılarak ardarda eklenebilir. '+' (toplama) işlecinin bu amaçla kullanımının yararsız oluşuna dikkat ediniz. Daha ayrıntılı bilgi edinmek için Dizge İşleçleri belgesine bakınız.

Dizgelerde değişiklik yapmak için çok sayıda yararlı işlev mevcuttur.

Genel işlevler için Dizge İşlevlerine, ileri düzey bul ve değiştir işlevselliği için düzenli ifade işlevlerine veya Perl uyumlu düzenli ifade işlevlerine bakınız.

Ayrıca, URL dizgeleri için işlevler ve dizgeleri şifrelemek veya şifrelerini çözmek için mcrypt ve mhash işlevleri vardır.

Son olarak, karakter türü işlevlerine de bakabilirsiniz.

Dizgeye dönüşüm

Bir değer bir dizgeye (string) tür çarpıtması veya strval() işleviyle dönüştürülür. Bir dizgenin gerekli olduğu ifade bağlamlarında dizgeye dönüşüm özdevinimli olarak gerçekleşir. Bu genellikle, echo() veya print() işlevleri kullanılırken veya bir değişken bir dizge ile karşılaştırılırken gerçekleşir. Aşağıdakilere, Türler ve Tür Dönüşümü bölümlerinde daha ayrıntılı değinilmiştir. Ayrıca, settype() işlevine de bakabilirsiniz.

boolean türündeki TRUE değeri string türündeki "1" değerine dönüştürülür. boolean türündeki FALSE değeri string türündeki "" değerine (boş dizgeye) dönüştürülür. Bu şekilde, boolean ve string değerler arasında her iki yönde de dönüşüm yapılabilmektedir.

integer veya float türünde bir değerin string türüne dönüşümü sayının dizgesel gösterimiyle (üstel gösterim dahil) sonuçlanır. Kayan noktalı sayılar üstel gösterim kullanılarak dönüştürülebilir (4.1E+6 gibi).

Bilginize: Ondalık nokta karakteri betiğin çalıştığı yerele (LC_NUMERIC) özgüdür. Bakınız: setlocale() işlevi.

Diziler daima "Array" dizgesine dönüştürülür; bundan dolayı echo() ve print() bir dizinin içeriğini kendiliklerinden gösteremezler. Tek bir dizi elemanını görüntüleyebilmek için echo $arr['foo'] gibi bir oluşum kullanınız. İçeriğin tamamının görüntülenebilmesiyle ilgili ipuçları için aşağıya bakınız.

object türler PHP 4'te daima "Object" dizgesine dönüştürülür. Nesne özelliklerinin değerlerini hata ayıklama amacıyla basmak için aşağıdaki paragrafı okuyunuz. Nesne sınıfının ismini öğrenmek için get_class() işlevini kullanınız. PHP 5 itibariyle, uygulanabildiği takdirde, __toString yöntemi kullanılır.

resource türler daima "Resource id #1" benzeri bir dizgeye dönüştürülürler; buradaki 1, özkaynağa PHP tarafından çalışma anında atanan eşsiz bir sayıdır. Bu yapıya güvenmeseniz iyi olur; ilerde değişebilir. Özkaynağın türünü öğrenmek için get_resource_type() işlevini kullanınız.

NULL daima boş bir dizgeye dönüştürülür.

Yukarıda bahsedildiği gibi, bir diziyi, nesneyi veya özkaynağı doğrudan dönüştürmek, bunların değerleri hakkında işe yarar hiçbir bilgi sağlamaz. Bu tür içerikleri daha verimli şekilde incelemek isterseniz print_r() ve var_dump() işlevlerine bakınız.

Çoğu PHP değeri kalıcı olarak saklamak amacıyla dizgelere dönüştürülebilir. Bu yönteme dizgeleştirme adı verilir ve serialize() işlevi tarafından gerçekleştirilir. Eğer PHP motoru WDDX desteğiyle derlenmişse PHP değerleri ayrıca iyi biçimli XML metin olarak da dizgeleştirilebilir.

Dizgelerin sayılara dönüşümü

Bir dizge, sayısal bir bağlamda değerlendirildiğinde sonuçlanacak değer ve türün nasıl belirleneceği aşağıda açıklanmıştır.

Dizge, '.', 'e' veya 'E' karakterlerini içermiyorsa ve sayısal değeri PHP_INT_MAX ile tanımlanan genişlikte bir tamsayı ise string tür bir integer tür olarak, aksi takdirde bir float olarak değerlendirilir.

Değerin dizgenin başında belirtileceği varsayılır. Eğer dizge geçerli bir sayısal veri ile başlıyorsa sayısal değer olarak bu kullanılır. Aksi takdirde değer 0 (sıfır) olacaktır. Geçerli sayısal veri isteğe bağlı bir işaret ile başlar, bir veya daha fazla sayıda rakam ile isteğe bağlı bir ondalık nokta içerebilir ve isteğe bağlı bir üstel gösterimle sona erer. Üs, 'e' veya 'E' harfini takibeden bir veya daha fazla rakamdan oluşur.

<?php
$foo 
"10.5";                // $foo float'tır (11.5)
$foo "-1.3e3";              // $foo float'tır (-1299)
$foo "bob-1.3e3";           // $foo integer'dir (1)
$foo "bob3";                // $foo integer'dir (1)
$foo "10 Small Pigs";       // $foo integer'dir (11)
$foo "10.2 Little Piggies"// $foo float'tır (14.2)
$foo "10.0 pigs " 1;          // $foo float'tır (11)
$foo "10.0 pigs " 1.0;        // $foo float'tır (11)
?>

Bu dönüşüm nakkında daha ayrıntılı bilgi edinmek için strtod(3) Unix kılavuz sayfasına bakınız.

Bu bölümdeki örneklerden birini denemek isterseniz örnekleri kopyala/yapıştır yöntemiyle aşağıdaki satıra yerleştirip neler olup bittiğini görebilirsiniz:

<?php
echo "\$foo==$foo; " gettype ($foo) . " türündedir<br />\n";
?>

Tamsayıya dönüştürerek C'deki gibi bir karakterin kodunu alabilmeyi beklemeyin. Karakter/ASCII kod dönüşümleri için ord() ve chr() işlevlerini kullanınız.



array

PHP'de bir dizi aslında sıralı bir eşlemdir. Bir eşlem, değerleri anahtarlarla ilişkilendiren bir veri türüdür. Bu veri türü farklı kullanım amaçları için en iyilenebilir; bir dizi, bir yöneysel liste, bir isim-değer çiftleri tablosu, bir sözlük, bir nesne listesi, yığıt, kuyruk ve daha bir sürü başka şey olarak ele alınabilir. Dizilerin değerleri, ağaçlar, diziler ve hatta çok boyutlu diziler bile olabilir.

Tüm bu veri yapılarının açıklanması bu kılavuzun amacını aşar. Fakat, en azından her biri için birer örnek verilebilir. Bu konuda daha fazla bilgi edinmek için bu konuyla ilgili olarak yayımlanmış eserleri inceleyiniz.

Sözdizimi

Bir dizinin array() ile belirtilmesi

Bir dizi array() işlevi kullanılarak belirtilebilir. Değiştirge olarak, birbirlerinden virgüllerle ayrılmış çok sayıda anahtar => değer çifti alabilir.

array(  anahtar  =>  değer
     , ...
     )
// anahtar sadece integer veya string türünde olabilir.
// değer herhangi bir türde herhangi bir değer olabilir.
<?php
$dizi 
= array("fu" => "bar"12 => true);

echo 
$dizi["fu"]; // bar
echo $dizi[12];    // 1
?>

Bir anahtar ya integer ya da string türünde olabilir. Bir anahtar, sadece onluk tamsayı gösterimiyle belirtilmişse bir tamsayı anahtar olarak yorumlanır. Yani, "8" belirtilmeşse bu tamsayı 8 olarak ele alınacak ama "08" belirtilmişse dizge "08" olarak ele alınacaktır. float türünde belirtilen bir anahtar integer türüne aşağı yuvarlanır. PHP için indisli ve ilişkisel diziler, her ikisi de integer ve string türünde indisler içerebildiğinden aynı çeşitten dizilerdir.

değer herhangi bir PHP türünde herhangi bir değer olabilir.

Bilginize: Tanımlanmamış bir dizi anahtarına erişmeye çalışmakla tanımsız bir değişkene erişmeye çalışmak arasında fark yoktur: E_NOTICE seviyesinde bir hata iletisi çıktılanır ve sonuç NULL olur

<?php
$dizi 
= array("birdizi" => array(=> 513 => 9"a" => 42));

echo 
$dizi["birdizi"][6];    // 5
echo $dizi["birdizi"][13];   // 9
echo $dizi["birdizi"]["a"];  // 42
?>

Bir anahtar belirtmeksizin bir değer atanıyorsa değer, mevcut tamsayı anahtarların en büyüğüne bir eklenerek elde edilen tamsayı anahtarlı elemana atanır. Bir anahtar mevcut anahtarlardan biriyle değer atıyorsa, yeni değer mevcut eleman değerinin üzerine yazılır.

<?php
// Bu iki dizi birbirinin aynıdır:
array(=> 433256"b" => 12);

array(
=> 43=> 32=> 56"b" => 12);
?>
Uyarı

PHP 4.3.0 öncesinde, en büyük indisi bir negatif tamsayı olan bir diziye anahtarsız değer atanması durumunda değere anahtarı yukarıda açıklandığı gibi atanırdı. PHP 4.3.0 ve sonrasında ise böyle bir durumda yeni değer 0 anahtarına atanmaktadır.

anahtar olarak TRUE belirtilirse bu tamsayı 1 olarak, FALSE belirtilirse tamsayı 0 olarak yorumlanır. anahtar olarak NULL kullanımı bir boş dizge olarak yorumlanır. Boş dizgeyle anahtar belirtimi, yeni değerin boş dizge anahtarlı olarak atanmasına sebep olur ve bu, anahtar belirtmeksizin (boş köşeli ayraçlarla) atama yapmak anlamında değerlendirilmez.

array veya object türünde anahtar belirtilemez. Aksi takdirde şöyle bir uyarı alırsınız: Illegal offset type (Kuraldışı konumlama türü).

Köşeli ayraçlarla atama ve değişiklik yapmak

Mevcut bir dizi, doğrudan değer atamak suretiyle değiştirilebilir.

Bu işlem, diziye köşeli ayraçlar arasında belirtilen bir anahtar kullanılarak değer atamak biçeminde yapılır. Diziye yeni bir değer atamak için köşeli ayraçlar boş olarak ([]) belirtilebilir.

$dizi[anahtar] = değer;
$dizi[] = değer;

// anahtar sadece integer veya string türünde olabilir.
// değer herhangi bir türde herhangi bir değer olabilir.

$dizi mevcut değilse oluşturulur, dolayısıyla bu da yeni bir dizi oluşturma yöntemidir. Belli bir değeri değiştirmek için yeni değer elemana mevcut anahtar kullanılarak atanır. Belli bir elemanı (anahtar/değer çiftini) diziden silmek için unset() işlevi kullanılır.

<?php
$dizi 
= array(=> 112 => 2);

$dizi[] = 56;    // Betiğin bu noktasında bu atama
                 // $dizi[13] = 56; ile aynıdır

$dizi["x"] = 42// "x" anahtarlı yeni bir eleman atar

unset($dizi[5]); // Elemanı diziden siler

unset($dizi);    // Dizinin tamamını siler
?>

Bilginize: Yukarıda değinildiği gibi, bir diziye yeni değeri bir anahtar belirtmeden atamak, mevcut en büyük tamsayı indisine bir eklenerek elde edilen anahtar kullanılarak gerçekleşir. Dizide henüz bir tamsayı indis yoksa anahtar olarak 0 (sıfır) kullanılır.
Dikkat ederseniz, dizinin mevcut olması halinde, yeni bir değer atamak için en büyük tamsayı indisli anahtar kullanmaya gerek yoktur. Buna sadece dizi yeniden indislenmişse gerek olabilir. Aşağıdaki örnek anlatımı pekiştirecektir:

<?php
// Basit bir dizi oluşturalım.
$dizi = array(12345);
print_r($dizi);

// Şimdi bütün elemanları silelim ama dizi kalsın:
foreach ($dizi as $i => $value) {
    unset(
$dizi[$i]);
}
print_r($dizi);

// Bir eleman ekleyelim (dikkat: yeni anahtar 0 değil 5 olacak!)
$dizi[] = 6;
print_r($dizi);

// Yeniden indisleyelim:
$dizi array_values($dizi);
$dizi[] = 7;
print_r($dizi);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)
Array
(
)
Array
(
    [5] => 6
)
Array
(
    [0] => 6
    [1] => 7
)

Kullanışlı işlevler

Dizilerle çalışmak için kullanılabilecek işlevlerin tamamını Dizi İşlevleri bölümünde bulabilirsiniz.

Bilginize: unset() işlevi bir diziden anahtar silmeyi mümkün kılar. Ama bu silme işlemi dizinin yeniden indislenmesiyle sonuçlanmaz. Eğer silme işleminin gerçekten "sil ve kaydır" yapmasını istiyorsanız, anahtarı sildikten sonra array_values() işlevini kullanarak diziyi yeniden indislemelisiniz.

<?php
$a 
= array(=> 'bir'=> 'iki'=> 'üç');
unset(
$a[2]);
/* Bu silme işlemi dizi şöyle tanımlanmış gibi sonuçlanacaktır:
   $a = array(1 => 'bir', 3 => 'üç');
   böyle DEĞİL:
   $a = array(1 => 'bir', 2 =>'üç');
*/

$b array_values($a);
// $b artık array(0 => 'bir', 1 =>'üç') olmuştur
?>

foreach denetim yapısı özellikle diziler için tasarlanmıştır. Diziler üzerinde hareket edilmesini kolaylaştırır.

Diziler ne yapar, ne yapmaz?

$foo[bar] niye yanlıştır?

Bir dizge sayıllı indis daima tırnak içinde kullanılır. Örneğin, $foo[bar] yanlışken $foo['bar'] doğrudur. Ama, neden? Eski betiklerde şu sözdizimine sıkça rastlanır:

<?php
$foo
[bar] = 'düşman';
echo 
$foo[bar];
// ve saire
?>

Bu yanlıştır, ama çalışır. Bunun sebebi, bu kodun bir dizgeden ziyade tanımsız bir sabit (bar) belirtiyor olmasıdır. PHP ilerde şans eseri ismi aynı zamanda değeri olan bir sabit tanımlayabilir. PHP özdevinimli olarak bir çıplak dizgeyi (tırnak içine alınmamış bir dizgeyi), bu çıplak dizgeyi içeren bir dizgeye dönüştüreceğinden bu çalışır. Örneğin, bar isminde tanımlanmış bir sabit yoksa, PHP bar sabitine 'bar' dizgesini yerleştirecek ve bunu kullanacaktır.

Bilginize: Bu, "anahtarlar daima tırnak içine alınır" demek değildir. sabitleri ve değişkenleri tek tırnak içine almayın, çünkü o zaman yorumlanmazlar.

<?php
error_reporting
(E_ALL);
ini_set('hataları_göster'true);
ini_set('html_hataları'false);
// Basit bir dizi:
$dizi = array(12);
$sayaç count($dizi);
for (
$i 0$i $sayaç$i++) {
    echo 
"\n$i indisi inceleniyor: \n";
    echo 
"Kötü: " $dizi['$i'] . "\n";
    echo 
"İyi: " $dizi[$i] . "\n";
    echo 
"Kötü: {$dizi['$i']}\n";
    echo 
"İyi: {$dizi[$i]}\n";
}
?>

Yukarıdaki örneğin çıktısı:

0 indisi inceleniyor:

Notice: Undefined index: $i in /dosya/yolu/betik.php on line 10
Kötü:
İyi: 1

Notice: Undefined index: $i in /dosya/yolu/betik.php on line 12
Kötü:
İyi: 1

1 indisi inceleniyor:

Notice: Undefined index: $i in /dosya/yolu/betik.php on line 10
Kötü:
İyi: 2

Notice: Undefined index: $i in /dosya/yolu/betik.php on line 12
Kötü:
İyi: 2

Bu davranışla ilgili diğer örnekler:

<?php
// Tüm hataları görelim
error_reporting(E_ALL);

$dizi = array('meyve' => 'elma''sebze' => 'havuç');

// Doğru
print $dizi['meyve'];  // elma
print $dizi['sebze'];  // havuç

// Yanlış. Bu çalışır, fakat meyve tanımlanmamış bir sabit
// olmadığından E_NOTICE seviyesinde bir PHP hatası oluşur
//
// Notice: Use of undefined constant meyve - assumed 'meyve'...
print $dizi[meyve];    // elma

// Bu, neler olup bittiğini gösteren bir sabit tanımlar;
// 'sebze' değeri meyve sabitine atanır.
define('meyve''sebze');

// Şimdi farkı görelim
print $dizi['meyve'];  // elma
print $dizi[meyve];    // havuç

// Bir dizge içinde olduğundan bu da doğrudur.
// Dizge içinde kalan sabitler, sabit olarak ele alınmazlar;
// dolayısıyla burada bir E_NOTICE oluşmaz.
print "Turfanda $dizi[meyve]";      // Turfanda elma

// Bir istisna: Dizge içinde kaşlı ayraç içine alınmış
// sabitler, sabit olarak ele alınırlar.
print "Turfanda {$dizi[meyve]}";     // Turfanda havuç
print "Turfanda {$dizi['meyve']}";   // Turfanda elma

// Bu çalışmaz ve şöyle bir çözümleme hatasıyla sonuçlanır:
// Parse error: parse error, expecting T_STRING' or T_VARIABLE' or T_NUM_STRING'
// Bu, dizgeler içindeki süper küresellere de uygulanır.
print "Turfanda $dizi['meyve']";
print 
"Turfanda $_GET['foo']";

// Ard arda eklemek de bir seçenektir
print "Turfanda " $dizi['meyve']; // Turfanda elma
?>

error_reporting yönergesine E_NOTICE seviyesinden hataları gösterecek bir atama yapılırsa (örneğin, E_ALL atanarak), böyle kullanımlar hemen görünür duruma gelir. error_reporting yönergesinin öntanımlı değeriyle E_NOTICE seviyesinden hatalar gösterilmez.

Sözdizimi bölümünde değinildiği gibi, köşeli ayraçlar ('[' ve ']') içinde belirtilenlerin birer ifade olması gerekir. Yani, aşağıdaki gibi bir kod çalışacaktır:

<?php
echo $dizi[birişlev($bar)];
?>

Bu, bir işlevin dönüş değerinin dizi indisi olarak kullanımına bir örnektir. PHP kendi sabitlerini de tanır:

<?php
$error_descriptions
[E_ERROR]   = "Ölümcül bir hata oluştu";
$error_descriptions[E_WARNING] = "PHP bir uyarı verdi";
$error_descriptions[E_NOTICE]  = "Bu sadece bilgilendirici bir uyarı";
?>

E_ERROR sabitinin de ilk örnekteki bar kadar geçerli bir betimleyici oluşuna dikkat ediniz. Fakat, E_ERROR eşittir 1, vb. olduğundan aşağıdaki örnek de aynı işi yapar:

<?php
$error_descriptions
[1] = "Ölümcül bir hata oluştu";
$error_descriptions[2] = "PHP bir uyarı verdi";
$error_descriptions[8] = "Bu sadece bilgilendirici bir uyarı";
?>
O halde bunun nesi kötü?

Bilinmeyen bir gelecekte PHP ekibi başkalarının kodlarıyla çelişen bir sabit, bir anahtar sözcük veya bir değişken eklemek isteyebilir. Örneğin, empty ve default birer anahtar sözcük olduklarından bu amaçla kullanılmaları yanlıştır.

Bilginize: Yinelemek gerekirse, çift tırnak imleri arasına alınmış bir dizge, dizi indisini tırnak içine almadığından geçerlidir; yani, "$foo[bar]" geçeridir. Yukarıdaki örnekleri bu gözle tekrar inceleyin ve ayrıca dizgelerin içinde değişken çözümleme bölümüne de bakın.

Diziye dönüşüm

integer, float, string, boolean veya resource türünde bir değeri array türünde bir değere dönüştürme işlemi, sıfır indisli bir elemana bu değerin atanması ile sonuçlanır. Başka bir deyişle, (array)$sayılDeğer ile array($sayılDeğer) arasında bir fark yoktur.

Bir object türü array türüne dönüştürme işlemi, elemanları nesnenin üyeleri olan bir dizi ile sonuçlanır. Anahtarlar, bir kaç istisnai durum dışında üyelerin isimleridir: Tamsayı özellikler erişilebilir değildir; private değişkenlerin önüne sınıf isimleri getirilir; public değişkenlerin önünde bir '*' olur. Diğer taraftan, başlarına birşeyler eklenmiş böyle değişkenlerin değerleri NULL olur. Bu durum beklenmedik davranışlara yol açabilir:

<?php

class {
    private 
$A// Bu '\0A\0A' haline gelir.
}

class 
extends {
    private 
$A// Bu '\0B\0A' haline gelir.
    
public $AA// Bu 'AA' haline gelir.
}

var_dump((array) new B());
?>

Bu örneğin çıktısı 'AA' isimli iki anahtar görüntülerse de onlardan birinin ismi aslında '\0A\0A''dır.

NULL, bir diziye dönüştürülmek istenirse sonuç boş bir dizi olur.

Karşılaştırma

Dizileri array_diff() işleviyle veya dizi işleçleri kullanılarak karşılaştırmak mümkündür.

Örnekler

PHP'nin array türü çok yeteneklidir. Bazı örnekler:

<?php
// Bu:
$a = array( 'renk'   => 'kırmızı',
            
'lezzet' => 'tatlı',
            
'şekil'  => 'yuvarlak',
            
'isim'   => 'elma',
            
4        // anahtarı 0 olacaktır
          
);

$b = array('a''b''c');

// . . . buna tamamen eşdeğerdir:
$a = array();
$a['renk']   = 'kırmızı';
$a['lezzet'] = 'tatlı';
$a['şekil']  = 'yuvarlak';
$a['isim']   = 'elma';
$a[]         = 4;        // anahtarı 0 olacaktır

$b = array();
$b[] = 'a';
$b[] = 'b';
$b[] = 'c';

// Yukarıdaki kod çalıştırıldığında $a, array('renk' => 'kırmızı',
// 'lezzet' => 'tatlı', 'şekil' => 'yuvarlak', 'isim' => 'elma', 0 => 4)
// dizisiyle, $b ise array(0 => 'a', 1 => 'b', 2 => 'c') veya basitçe
// array('a', 'b', 'c') dizisiyle sonuçlanacaktır.
?>

Örnek 1 - array() kullanımı

<?php
// Özellik eşlemeli dizi
$map = array( 'sürüm'    => 4,
              
'sistem'   => 'Linux',
              
'dil'      => 'english',
              
'kısaltma' => true
            
);

// tamamen sayısal anahtarlar
$dizi = array(  7,
                
8,
                
0,
              
156,
              -
10
              
);
// Bu, array(0 => 7, 1 => 8, ...) ile aynıdır

$geçişli = array(        10// key = 0
                 
5    =>  6,
                 
3    =>  7,
                 
'a'  =>  4,
                         
11// anahtar = 6 (en büyük tamsayı indis 5 idi)
                 
'8'  =>  2// anahtar = 8 (tamsayı!)
                 
'02' => 77// anahtar = '02'
                 
0    => 12  // 10 değerinin üzerine 12 yazılacak
                  
);

// boş dizi
$boş = array();
?>

Örnek 2 - Derlem

<?php
$renkler 
= array('Turuncu''Pembe''Mor''Turkuaz');

foreach (
$renkler as $renk) {
    echo 
"$renk rengi sever misiniz?\n";
}

?>

Yukarıdaki örneğin çıktısı:

Turuncu rengi sever misiniz?
Pembe rengi sever misiniz?
Mor rengi sever misiniz?
Turkuaz rengi sever misiniz?

PHP5'ten beri dizi değerleri gönderimli aktarıldıklarından dizi değerlerini doğrudan değiştirmek mümkündür. Fakat arada bazı şeyler yapmak gerekir:

Örnek 3 - Derlem

<?php
<?php
$renkler 
= array('Turuncu''Pembe''Mor''Turkuaz');

// PHP 5
foreach ($renkler as &$renk) {
    
$renk strtoupper($renk);
}

unset(
$renk); /* Aşağıdaki atamalarda $renk son
                 dizi elemanını değiştirmesin */

// Eski sürümü yeniden elde edelim
foreach ($renkler as $anahtar => $renk) {
    
$renkler[$anahtar] = strtoupper($renk);
}

print_r($renkler);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => TURUNCU
    [1] => PEMBE
    [2] => MOR
    [3] => TURKUAZ
)

Bu örnekte dizi indisleri 1'den başlatılmaktadır.

Örnek 4 - İndisi 1'den başlatmak

<?php
$ilkçeyrek  
= array(=> 'Ocak''Şubat''Mart');
print_r($ilkçeyrek);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [1] => Ocak
    [2] => Şubat
    [3] => Mart
)

Örnek 5 - Diziyi doldurmak

<?php
// bir diziyi bir dizin'in içeriği ile dolduralım
$tutamak opendir('.');
while (
false !== ($dosya readdir($tutamak))) {
    
$dosyalar[] = $dosya;
}
closedir($tutamak);
?>

Diziler sıralıdır. Sıralama çeşitli sıralama işlevleri ile değiştirilebilir. Daha fazla bilgi için Dizi İşlevleri bölümüne bakınız. Bir dizinin eleman sayısını öğrenmek için count()işlevi kullanılabilir.

Örnek 6 - Dizi elemanlarının sıraya sokulması

<?php
sort
($dosyalar);
print_r($dosyalar);
?>

Bir dizinin elemanlarına her türlü değer atanabileceğinden başka bir dizi de atanabilir. Böylece iç içe ve çok boyutlu dizilerin oluşturulması mümkün olur.

Örnek 7 - İç içe ve çok boyutlu diziler

<?php
$yemişler 
= array ( "yemişler"  => array ( "a" => "iğde",
                                           
"b" => "badem",
                                           
"c" => "ceviz"
                                         
),
                    
"sayılar"   => array ( 1,
                                           
2,
                                           
3,
                                           
4,
                                           
5,
                                           
6
                                         
),
                    
"yuvalar"   => array (        "birinci",
                                            
5  => "ikinci",
                                                  
"üçüncü"
                                          
)
                );

// Yukarıdaki dizinin değerlerinin kullanıldığı bazı örnekler
echo $yemişler["yuvalar"][5];    // "ikinci" basar
echo $yemişler["meyveler"]["a"]; // "iğde" basar
unset($yemişler["yuvalar"][0]);  // "birinci" silinir

// Yeni bir çok boyutlu dizi oluşturalım
$meyveler["elma"]["yeşil"] = "ekşi";
?>

Dizi atamaları daima değerleri kopyalamak şeklinde gerçekleşir. Bir diziyi gönderimli olarak kopyalamak için gönderim işleci kullanılır.

<?php
$dizi1 
= array(23);
$dizi2 $dizi1;
$dizi2[] = 4// $dizi2 değişti,
              // $dizi1 hala array(2, 3)

$dizi3 = &$dizi1;
$dizi3[] = 4// şimdi $dizi1 ve $dizi3 aynı
?>


object

Nesne İlklendirme

Yeni bir nesne oluşturmak için (bir sınıfın bir örneğini oluşturmak için) new deyimi kullanılır:

<?php
class kediler
{
    function 
birŞeySöyle()
    {
        echo 
"Miyav.";
    }
}

$kedi = new kediler;
$kedi->birŞeySöyle();
?>

Çok daha ayrıntılı bilgiyi Sınıflar ve Nesneler faslında bulabilirsiniz.

object türüne dönüşüm

Eğer object türünde bir değer object türüne dönüştürülürse bir değişiklik olmaz. Başka türde bir değer object türüne dönüştürülürse yerleşik stdClass sınıfının yeni bir örneği oluşturulmuş olur. Eğer değer NULL ise yeni örnek boş olur. Bir dizi object türüne dönüştürülürse dizi elemanlarının isimleri değerleriyle birlikte nesnenin özellikleri haline gelirler. Diğer değerler ise, scalar adlı üye değişkenin değeri haline gelirler.

<?php
$nesne 
= (object) 'heyo';
echo 
$nesne->scalar;  // çıktısı: 'heyo'
?>


resource

resource türünde bir değişken harici bir özkaynağa bir gönderim içeren özel bir değişkendir. Özkaynaklar özel işlevler tarafından oluşturulur ve kullanılırlar. resource türüyle ilişkilendirilebilen özkaynakların ve özel işlevlerin bir listesini eklerde bulabilirsiniz.

Bilginize: resource türü PHP 4'ten itibaren mevcuttur.

Ayrıca, get_resource_type() işlevine de bakınız.

resource türüne dönüşüm

Açık dosyalara, veritabanı bağlantılarına, resim tuval alanlarına ve benzerlerine birer tanıtıcı sağlayan değişkenleri resource türüne dönüştürmenin bir anlamı yoktur.

Özkaynakları serbest bırakmak

PHP 4'ün Zend Motoru sayesinde gönderimsiz kalan özkaynaklar özdevinimli olarak saptanarak bunlara ayrılan bellek çöp toplayıcı tarafından serbest bırakılmaktadır. Bu sebeple bir özkaynağa ayrılan belleği serbest bırakmak ihtiyacı nadiren ortaya çıkar.

Bilginize: Kalıcı veritabanı bağlantıları bu kuralın bir istisnasıdır. Çöp toplayıcı tarafından yok edilmezler. Bu konuda daha ayrıntılı bilgi edinmek için kalıcı bağlantılar bölümüne bakınız.



NULL

Özel NULL değeri, değeri olmayan bir değişken anlamına gelir. NULL değerinin olası tek türü NULL'dur.

Bilginize: NULL türü PHP 4'ten itibaren mevcuttur.

Bir değişken NULL türündeyse:

  • Kendisine NULL sabiti atanmış demektir.

  • Kendisine herhangi bir değer atanmamış demektir.

  • unset() işlevine aktarılmış demektir.

Sözdizimi

NULL türünde, büyük-küçük harfe duyarlı olarak tek bir değer vardır: NULL.

<?php
$var 
NULL;
?>

Ayrıca, is_null() ve unset() işlevlerine de bakınız.

NULL türüne çarpıtım

Bir değişkenin türü (null) ile çarpıtılırsa değişken değersiz bırakılarak tanımsız hale getirilmiş olur.



Bu belgede kullanılan sözde türler ve değişkenler

mixed

mixed anahtar sözcüğü, bir değiştirgenin çok sayıda tür (ama hepsini değil) kabul edebileceğini belirtir.

Örneğin, str_replace() işlevi sadece string veya array türünde değer kabul ederken, gettype() işlevi tüm PHP türlerini kabul eder.

number

number anahtar sözcüğü, bir değiştirgenin integer veya float türünde değer kabul edeceğini belirtir.

callback

call_user_func(), usort() gibi işlevler değiştirge olarak kullanıcı tanımlı geriçağırım işlevlerini kabul ederler. Geriçağırım işlevleri her zaman basit işlevler olmayabilir, nesne yöntemleri ve hatta duruk sınıf yöntemleri bile olabilirler.

Bir PHP işlevi, string türündeki ismiyle aktarılır. Şu dil oluşumları dışında herhangi bir yerleşik veya kullanıcı tanımlı işlev kullanılabilir: array(), echo(), empty(), eval(), exit(), isset(), list(), print() veya unset().

Örneklenmiş bir nesnenin bir yöntemi, nesnenin ismi 0. indiste, yöntem ismi 1. indiste yer alan bir dizi olarak aktarılır.

Duruk sınıf yöntemleri de sınıf ismi 0. indiste içerilerek, sınıf bir nesne olarak örneklenmeksizin aktarılabilir.

create_function() işlevi bildik kullanıcı tanımlı işlevlerden başka, bir anonim geriçağırım işlevi oluşturmak için de kullanılabilir. PHP 5.3.0'dan itibaren işleve değiştirge olarak bir anonim işlev aktarmak mümkün oldu.

Örnek 1 - Geriçağırım işlevi örnekleri

<?php

// Bir geriçağırım işlevi örneği
function geriçağırım_işlevim() {
    echo 
'merhaba dünya!';
}

// Bir geriçağırım yöntemi örneği
class Sınıfım {
    static function 
geriçağırımYöntemim() {
        echo 
'Merhaba Dünya!';
    }
}

// 1. tür: Basit geriçağırım
call_user_func('geriçağırım_işlevim');

// 2. tür: Duruk sınıf yöntemi çağrısı
call_user_func(array('Sınıfım''geriçağırımYöntemim'));

// 3. tür: Nesne yöntemi çağrısı
$nesne = new Sınıfım();
call_user_func(array($nesne'geriçağırımYöntemim'));

// 4. tür: Duruk sınıf yöntemi çağrısı (PHP 5.2.3 ve sonrası)
call_user_func('Sınıfım::geriçağırımYöntemim');

// 5. tür: Göreli duruk sınıf yöntemi çağrısı (PHP 5.2.3 ve sonrası)
class {
    public static function 
kimsin() {
        echo 
"A\n";
    }
}

class 
extends {
    public static function 
kimsin() {
        echo 
"B\n";
    }
}

call_user_func(array('B''parent::kimsin')); // A
?>

Örnek 2 - Anonim işlev kullanan bir geriçağırım işlevi örneği

<?php
// Anonim işlevimiz
$double = function($a) {
    return 
$a 2;
};

// Sayı aralığımız
$numbers range(15);

// Aralık içindeki her elemanın boyutunu
// ikiye katlamak için geriçağırım işlevi
// olarak burada anonim bir işlev kullanalım
$new_numbers array_map($double$numbers);

print 
implode(' '$new_numbers);
?>

Yukarıdaki örneğin çıktısı:

2 4 6 8 10

Bilginize: PHP4'te, kopyayı değil de asıl nesneyi işaret eden bir geriçağırım oluşturmak için gönderim kullanmak gerekir. Daha fazla bilgi için Gönderimler Hakkında bölümüne bakınız.

void

void bir dönüş türü olarak dönüş değerinin yararsız olduğu anlamına gelir. void bir değiştirge listesinde kullanıldığında işlevin değiştirge kabul etmediği anlamına gelir.

... (üçlü nokta)

$... değiştirgesi işlev bildirimlerinde "ve benzerleri" anlamına gelir. Bu değişken ismi bir işlevde kullanıldığında işlev sonsuz sayıda değiştirge alabilir.



Tür Dönüşümü

PHP değişken bildiriminde tür tanımlamayı gerektirmez (veya desteklemez); bir değişkenin türü kullanıldığı bağlama göre saptanır. Yani, string türünde bir değer $var değişkenine atanırsa $var, string türünde bir değişken haline gelir. $var değişkenine bir integer değer atanırsa $var, integer türünde bir değişken haline gelir.

Toplama işleci '+', PHP'nin özdevinimli tür dönüşümüne iyi bir örnektir. Bir toplama işleminde terimlerden biri float türündeyse her iki terim float olarak ele alınır ve sonuç float türünde olur. Aksi takdirde, terimler integer olarak yorumlanır ve sonuç integer türünde olur. Yalnız dikkat edin, bu işlem ne terimlerin kendi türlerini ne de ifadenin kendi türünü değiştirir.

<?php
$foo 
"0";  // $foo string türündedir (ASCII 48)
$foo += 2;   // $foo integer türündedir (2)
$foo $foo 1.3;  // $foo float türündedir (3.3)
$foo "10 Little Piggies"// $foo integer türündedir (15)
$foo "10 Small Pigs";     // $foo integer türündedir (15)
?>

Eğer yukarıdaki son iki örnek size tuhaf geldiyse Dizgelerin sayıya dönüşümü konusuna bakınız.

Bir değişkeni belli bir türe dönüşmeye zorlamak istiyorsanız Tür Çarpıtma konusuna bakınız. Bir değişkenin türünü değiştirmek istiyorsanız settype() işlevine bakınız.

Bu bölümdeki örnekleri sınamak için var_dump() işlevini kullanınız.

Bilginize: array türüne özdevinimli dönüşüm şimdilik tanımsızdır.
Ayrıca, PHP dizgelerde konumlar üzerinden indislemeyi dizi indislemede kullanılan sözdizimiyle desteklediğinden aşağıdaki örnek tüm PHP sürümleri için geçerli bir örnektir:

<?php
$a    
'car'// $a string türündedir
$a[0] = 'b';   // $a hala string türündedir
echo $a;       // -> bar
?>

Daha fazla bilgi edinmek için Karakterinden dizgeye erişim konusuna bakınız.

Tür Çarpıtma

PHP'de tür çarpıtma (type casting) C'deki gibi çalışır: İstenen türün ismi parantez içinde türü çarpıtılacak değişkenin önüne yazılır.

<?php
$foo 
10;               // $foo integer türündedir
$bar = (boolean) $foo;   // $bar boolean türündedir
?>

İzin verilen çarpıtmalar:

  • (int), (integer) - integer türüne dönüşüm
  • (bool), (boolean) - boolean türüne dönüşüm
  • (float), (double), (real) - float türüne dönüşüm
  • (string) - string türüne dönüşüm
  • (binary) - ikil string türe dönüşüm(PHP 6)
  • (array) - array türüne dönüşüm
  • (object) - object türüne dönüşüm
  • (unset) - NULL'a dönüşüm (PHP 5)

(binary) çarpıtması ve b önekinin ileriye dönük desteği PHP 5.2.1'de eklenmiştir.

Parantezler içinde sekmelere ve boşluklara izin verildiğinden aşağıdaki iki deyim eşdeğerdir:

<?php
$foo 
= (int) $bar;
$foo = ( int ) $bar;
?>

Normal dizgelerin ikil dizgelere dönüştürülmesi:

<?php
$binary 
= (binary) $string;
$binary b"ikil dizge";
?>

Bilginize: Bir değişkenin türünü string türüne çarpıtmak yerine değişkeni çift tırnak içine almak aynı sonucu sağlar:

<?php
$foo 
10;            // $foo integer türündedir
$str "$foo";        // $str string türündedir
$fst = (string) $foo// $fst de string türündedir

// Bu, "bunlar aynı" basar
if ($fst === $str) {
    echo 
"bunlar aynı";
}
?>

Belli türler arasında çarpıtma yapılırken tam olarak ne olup bittiği açıkça belli olmayabilir. Daha fazla bilgi için şu bölümlere bakınız:




Değişkenler

İçindekiler


Temeller

PHP'de değişkenler dolar işaretini takip eden bir değişken adı ile gösterilir. Değişken adı büyük-küçük harf duyarlıdır.

Değişken isimleri PHP'deki diğer yaftalarla aynı kurallara tabidir. Geçerli bir değişken ismi bir harf veya alt çizgi imi ile başlar, herhangi sayıda harf, sayı veya alt çizgi iminden oluşur. Düzenli ifade olarak, şu şekilde ifade edilebilir: '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'

Bilginize: Burada kastedilen harf a-z veya A-Z arasındaki ASCII harfler ve 127 ile 255 (0x7f-0xff) arasındaki baytlardır.

Bilginize: $this atama yapılamayan özel bir değişkendir.

İpucu

Ayrıca Kullanıcı Alanı İsimlendirme Kılavuzu belgesine de bakınız.

Değişkenlerle ilgili işlevler hakkında bilgi için, Değişkenlerle ilgili işlevler belgesine bakınız.

<?php
$var 
'Kemal';
$Var 'gel';
echo 
"$var$Var";      // "Kemal, gel" yazdırır

$4site 'dene bakalım';     // geçersiz; sayı ile başlar
$_4site 'dene bakalım';    // geçerli; alt çizgi ile başlar
$diğer 'gerekirse diye';   // geçerli; ISO-8859-9'da 'ğ' harfi 127-255
                             // arasında, UTF-8'de ise iki baytı 127-255
                             // arasındadır.
?>

Öntanımlı olarak, değişkenler her zaman değerleriyle atanır. Başka bir deyişle, bir değişkene bir ifade atandığında özgün ifade bütün değeriyle hedef değişkene kopyalanır. Bu demektir ki, örneğin, bir değişkenin değerini başka bir değişkene atadıktan sonra, değişkenlerden birisinin değerini değiştirmenin diğeri üzerinde etkisi olmayacaktır. Bu çeşit atama hakkında daha fazla bilgi için, İfadeler bölümüne bakınız.

PHP değişkenlere değer atamak için başka bir yol daha sunar: Gönderimli atama. Yani, yeni değişken sadece asıl değişkene gönderim yapar (diğer bir deyişle, "onun takma adı olur" veya "onu gösterir") Gönderim yapılan değişkendeki değişiklikler aslını da etkiler, tersi de geçerlidir.

Gönderimli atama için, gönderim yapılacak (daha önce değer atanmış) değişkenin başına ve imi (&) ekleyin. Örneğin, aşağıdaki kod parçası iki kez 'Benim adım Mustafa' yazar:

<?php
$foo 
'Mustafa';          // 'Mustafa' değerini $foo değişkenine ata
$bar = &$foo;              // $foo değişkenini $bar değişkenine gönderimli ata
$bar "Benim adım $bar";  // $bar değişkenini değiştir ...
echo $bar;
echo 
$foo;                 // $foo değişkeninin değeri de değişti.
?>

Dikkat edilmesi gereken önemli bir şey de sadece isimli değişkenlerin gönderimle atanabileceğidir.

<?php
$foo 
25;
$bar = &$foo;      // Bu geçerli bir atamadır.
$bar = &(24 7);  // Geçersiz; isimlendirilmemiş bir ifadeye gönderim yapıyor

function test()
{
   return 
25;
}

$bar = &test();    // Geçersiz.
?>

PHP'de değişkenleri ilklendirmek gerekmez ancak baştan bir değer atamak oldukça iyi bir alışkanlıktır. İlklendirilmeyen değişkenlerin kullanıldıkları bağlamda türlerine bağlı olarak öntanımlı değerleri vardır; öntanımlı değer boolean için FALSE, integer ve float için sıfır, string için boş metin (örnekte echo() da kullanıldı), array için ise boş bir dizidir.

Örnek 1 - İlklendirilmemiş değişkenlerin öntanımlı değerleri

<?php
// Herhangi bir bağlamda tanımlanmamış veya
// gönderim yapılmamış değişken;  NULL sonuç verir.
var_dump($tanımsız_değişken);

// Mantıksal değer kullanımı;  'false' çıktısı verir
// (Bu sözdizimi için üç terimli işlecine bakınız)
echo($tanımsız_mantıksallık "true\n" "false\n");

// Dizge kullanımı;  çıktısı: 'string(3) "abc"'
$tanımsız_metin .= 'abc';
var_dump($tanımsız_metin);

// Tamsayı kullanımı;  'int(25)' çıktılar.
$tanımsız_tamsayı += 25;    // 0 + 25 => 25
var_dump($tanımsız_tamsayı);

// Gerçek sayı kullanımı;  'float(1.25)' çıktılar.
$tanımsız_sayı += 1.25;
var_dump($tanımsız_sayı);

// Dizi kullanımı; çıktısı: array(1) {  [3]=>  string(3) "def" }
$tanımsız_dizi[3] = "def"// array() + array(3 => "def") => array(3 => "def")
var_dump($tanımsız_dizi);

// Nesne kullanımı; yeni stdClass nesnesi oluşturur
// (Öntanımlı sınıflar belgesine bakınız:
// http://www.php.net/manual/tr/reserved.classes.php)
// Çıktısı: object(stdClass)#1 (1) {  ["foo"]=>  string(3) "bar" }
$tanımsız_nesne->foo 'bar';
var_dump($tanımsız_nesne);
?>

İlklendirilmemiş bir değişkenin öntanımlı değerine güvenmek, içinde aynı değişken isminin kullanıldığı bir dosyayı betiğe dahil ettiğinizde sorun çıkarır. Bunun aynı zamanda büyük bir güvenlik riski omuşturmaması için register_globals yönergesine 'on' değeri atanmalıdır. İlklendirilmemiş değişken kullanımı E_NOTICE seviyesinde hata oluşturur, ancak ilklendirilmemiş bir diziye eleman eklenmesi halinde hata oluşmaz. isset() dil oluşumu bir değişkenin ilklendirilip ilklendirilmediğini öğrenmek için kullanılabilir.



Öntanımlı Değişkenler

PHP çalıştırdığı herhangi bir betiğe çok sayıda önceden tanımlı değişken sağlar. Ancak, bu değişkenlerin çoğu hangi sunucunun çalıştığına, sunucunun sürümüne ve kurulumuna ve başka bir çok şeye bağlı olduğu için tam olarak belgelendirilememektedir. Bu değişkenlerden bazıları PHP komut satırından çalıştığında mevcut olmayacaktır. Bu değişkenlerin listesi için, lütfen Öntanımlı Değişkenler kısmına bakınız.

Uyarı

PHP 4.2.0 ve sonrasında, register_globals PHP yönergesinin öntanımlı değeri off'tur. Bu PHP'de büyük bir değişikliktir. register_globals'ın off olması betik genelinde geçerli önceden tanımlı bir gurup değişkeni etkiler. Örneğin, DOCUMENT_ROOT'u almak için $DOCUMENT_ROOT yerine $_SERVER['DOCUMENT_ROOT'], http://mesela.dom/dnm.php?id=3 adresi için $id yerine $_GET['id'] veya $HOME yerine $_ENV['HOME'] kullanmalısınız.

Bu değişiklikle ilgili bilgi için, register_globals yapılandırma yönergesini, güvenlik bölümündeki Küresel Kayıtların Kullanımı belgesini, PHP » 4.1.0 ve » 4.2.0 sürüm duyurularını okuyun.

Süper küresel diziler gibi PHP'nin Önceden Tanımlı Değişkenlerinin de kullanımı önerilmektedir.

PHP, 4.1.0 sürümünden sonra, ortam değişkenleri ve kullanıcı girdi değişkenleri ile HTTP sunucusundaki değişkenleri (eğer uygulanabiliyorsa) içeren bir takım önceden tanımlı diziler sağlamaktadır. Bu yeni diziler özel olmaktan ziyade özdevinimli olarak küreseldir, yani, özdevinimli olarak her etki alanında bulunurlar. Bu nedenle, "Süper küreseller" olarak bilinirler. (PHP'de kullanıcı-tanımlı süper küreseller için bir mekanizma yoktur.) Süper küreseller aşağıda listelenmiştir; PHP önceden tanımlı değişkenlerin açıklamaları ve doğaları ise Öntanımlı Değişkenler bölümünde listelenmiştir. Ayrıca, eskiden kalma öntanımlı değişkenlerin de ($HTTP_*_VARS) hala mevcut olduğunu bilmenizde yarar var. PHP 5.0.0'dan itibaren öntanımlı değişken dizileri register_long_arrays yönergesi ile iptal edilebilmektedir.

Bilginize: Değişken değişkenler
İşlevler veya sınıf yöntemleri içinde süper küreseller değişken değişkenleri olarak kullanılamazlar.

Bilginize: Süper küreseller ve HTTP_*_VARS aynı anda var olabilirlerse de birbirlerinin yerine kullanılamazlar, yani birini değiştirmekle diğerini değiştirmiş olmazsınız.

Eğer variables_order yönergesine uygun değişkenler atanmamışsa, ilgili oldukları PHP önceden tanımlı dizileri de boş bırakılır.



Değişken etki alanı

Bir değişkenin etki alanı içinde tanımlandığı bağlamdır. Hemen her PHP değişkeninin sadece tek bir etki alanı vardır. Bu tek etki alanı betiğe include() ve require() ile dahil edilen dosyalara da uzanır. Örneğin:

<?php
$a 
1;
include 
'b.inc';
?>

Burada $a değişkeni içerilen b.inc betiğinin içinde mevcut olacaktır. Fakat, kullanıcı tanımlı işlevlerin etki alanı işleve özeldir. Yani, bir işlev içinde kullanılan herhangi bir değişkenin etki alanı öntanımlı olarak işlevin yerel etki alanı ile sınırlıdır. Örneğin:

<?php
$a 
1/* küresel etki alanı */

function deneme()
{
    echo 
$a/* işlevin etki alanı */
}

deneme();
?>

Bu betik herhangi bir çıktı üretmeyecektir, çünkü echo ifadesi $a değişkeninin yerel sürümüne atıf yapmakta olup bu etki alanı içinde değişkene bir değer atanmamıştır. Bunun C dilinden bir miktar farklı olduğuna dikkat etmiş olabilirsiniz, C dilinde küresel değişkenler, özellikle yerel bir tanımla geçersiz kılınmadıkları sürece, işlevler tarafından özdevinimli olarak erişilebilir olacaktır. Bu bazı sorunlara neden olabilir, öyle ki birileri dikkatsizlikle küresel değişkeni değiştirebilir. PHP'de küresel değişkenler eğer bir işlev içinde kullanılacaksa, o işlev içinde global sözcüğü ile bildirilmeleri gerekir.

global anahtar sözcüğü

İlk olarak, global kullanımına bir örnek verelim:

Örnek 1 - global kullanımı

<?php
$a 
1;
$b 2;

function 
topla()
{
    global 
$a$b;

    
$b $a $b;
}

topla();
echo 
$b;
?>

Yukarıdaki betik 3 çıktısı verecektir. $a ve $b işlev içinde küresel tanımlanarak, her iki değişkene yapılan bütün atıflar küresel sürüme yapılmış olacaktır. Bir işlev tarafından işlenebilecek küresel değişken sayısında bir sınır yoktur.

Küresel etki alanındaki değişkenlere erişimin ikinci yolu PHP tarafından tanımlanmış özel $GLOBALS dizisini kullanmaktır. Önceki örnek şu şekilde yazılabilir:

Örnek 2 - global yerine $GLOBALS kullanımı

<?php
$a 
1;
$b 2;

function 
topla()
{
    
$GLOBALS['b'] = $GLOBALS['a'] + $GLOBALS['b'];
}

topla();
echo 
$b;
?>

$GLOBALS dizisi, anahtarı küresel değişkenin ismi, elemanının değeri değişkenin içeriği olan bir ilişkisel dizidir. $GLOBALS dizisinin her etki alanında mevcut oluşuna dikkat edin, bunun sebebi$GLOBALS dizisinin bir süper küresel olmasıdır. Süper küresellerin gücünü gösteren bir örnek aşağıda verilmiştir:

Örnek 3 - Süper küreselleri ve etki alanlarını gösteren örnek

<?php
function test_global()
{
    
// Çoğu öntanımlı değişken "süper" değildir ve işlev etki
    // alanında geçerli olmak 'global' olmayı gerektirir.
    
global $HTTP_POST_VARS;

    echo 
$HTTP_POST_VARS['isim'];

    
// Süper küreseller her etki alanında geçerlidirler ve
    // 'global' olarak bildirilmeleri gerekmez. Süper küreseller
    // PHP 4.1.0'dan beri mevcutturlar ve HTTP_POST_VARS'ın
    // kullanımı artık önerilmemektedir.
    
echo $_POST['isim'];
}
?>

Duruk değişkenlerin kullanımı

Değişken etki alanı ile ilgili önemli özelliklerden biri duruk değişkenlerdir. Bir duruk bir değişken sadece işlevin etki alanında geçerli olup, programın çalışması bu etki alanını terkettiği zaman değerini kaybetmez. Aşağıdaki örneğı ele alalım:

Örnek 4 - Duruk değişkenlere ihtiyacı gösteren örnek

<?php
function dene()
{
    
$a 0;
    echo 
$a;
    
$a++;
}
?>

Bu işlev her çağrıldığında $a'yı 0 yapar ve 0 yazdırır, bu nedenle oldukça kullanışsızdır. Değişkeni artıran $a++ bir işe yaramaz çünkü işlev çıktığı gibi $a değişkeni kaybolur. Kaldığı değeri kaybetmeyecek kullanışlı bir sayaç işlevi yapması için $a değişkeni aşağıda static olarak bildirilmiştir.

Örnek 5 - Duruk değişkenlerin kullanım örneği

<?php
function dene()
{
    static 
$a 0;
    echo 
$a;
    
$a++;
}
?>

Artık, $a değişkeni sadece dene() işlevinin ilk çağrılışında ilklendirilecek ve işlevin her çağrılışında $a değişkeninin değerini bastıktan sonra değerini bir artıracaktır.

Duruk değişkenler aynı zamanda kendini çağıran işlevlerle çalışmak için de bir yol sunar. Kendini çağıran (recursive) işlev kendi kendini çağırır. Böyle bir işlev dikkatli yazılmazsa sonsuza kadar kendi kendini çağırır. Kendini çağırmayı bir noktada sonlandıracak uygun bir yönteminiz olmalıdır. Aşağıdaki basit işlev, kendini çağırmayı nerede durduracağını bilerek 10'a kadar sayar:

Örnek 6 - Kendini çağıran işlevlerle duruk değişkenler

<?php
function say()
{
    static 
$sayaç 0;

    
$sayaç++;
    echo 
"$sayaç\n";
    if (
$sayaç 10) {
        
say();
    }
    
$sayaç--;
}
say();
?>

Bilginize: Duruk değişkenler yukarıdaki örneklerde yapıldığı gibi tanımlanabilir. Bu değişkenlere ifadelerin sonuçlarını değer olarak atamaya çalışmak çözümleme hatasına neden olacaktır.

Örnek 7 - Duruk değişken bildirimi

<?php
function foo(){
    static 
$int 0;          // doğru
    
static $int 1+2;        // yanlış  (ifade olduğu için)
    
static $int sqrt(121);  // yanlış  (bu da ifade olduğu için)

    
$int++;
    echo 
$int;
}
?>


Bilginize: Duruk bildirimler derleme sırasında çözümlenir.

global ve static değişkenlere gönderim

PHP 4'ün işletmeni olan Zend Motoru 1, static ve global değişken niteleyicilerini gönderim olarak gerçeklemiştir. Örneğin, global deyimi ile bir işlevin etki alanında geçerli kılınan bir küresel değişken aslında kendine bir gönderim oluşturur. Bu durum aşağıdaki örnekte de görüldüğü gibi beklenmedik davranışlara yol açabilir:

<?php
function gönderimli_küresel_dene() {
    global 
$nesne;
    
$nesne = &new stdclass;
}

function 
gönderimsiz_küresel_dene() {
    global 
$nesne;
    
$nesne = new stdclass;
}

gönderimli_küresel_dene();
var_dump($nesne);
gönderimsiz_küresel_dene();
var_dump($nesne);
?>

Yukarıdaki örneğin çıktısı:


NULL
object(stdClass)#1 (0) {
}

Aynı davranış static deyimine de uyar. Gönderimler duruk olarak saklanmazlar:

<?php
function &gönderimli_örnek() {
    static 
$obj;

    echo 
'Duruk nesne: ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Duruk değişkene gönderim atayalım
        
$obj = &new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

function &
gönderimsiz_örnek() {
    static 
$obj;

    echo 
'Duruk nesne: ';
    
var_dump($obj);
    if (!isset(
$obj)) {
        
// Duruk değişkene nesne atayalım
        
$obj = new stdclass;
    }
    
$obj->property++;
    return 
$obj;
}

$nesne1 gönderimli_örnek();
$bu_da_nesne1 gönderimli_örnek();
echo 
"\n";
$nesne2 gönderimsiz_örnek();
$bu_da_nesne2 gönderimsiz_örnek();
?>

Yukarıdaki örneğin çıktısı:


Duruk nesne: NULL
Duruk nesne: NULL

Duruk nesne: NULL
Duruk nesne: object(stdClass)#3 (1) {
["property"]=>
int(1)
}

Bu örnek, bir duruk değişkene gönderimli atama yapılması halinde, &gönderimli_örnek() işlevi ikinci kez çağrıldığında değişkene atanan değerin saklanmadığını gösterir.



Değişken değişkenler

Bazen değişken değişken isimlerine sahip olabilmek kullanışlı olur. Bu, devingen olarak belirtilebilen ve kullanılabilen bir değişken ismidir. Normal bir değişken şöyle bir deyimle atanır:

<?php
$a 
'merhaba';
?>

Bir değişken değişken bir değişkenin değerini alır ve bir değişkenin ismi gibi davranır. Yukarıdaki örnekteki, merhaba, iki tane dolar imi ile bir değişken ismi olarak kullanlabilir

<?php
$$a 'dünya';
?>

Bu noktada PHP sembol ağacında iki değişken tanımlanmış ve saklanmış olur: $a "merhaba" içerirken $merhaba ise "dünya" içerir. Bu nedenle, aşağıdaki iki örnek aynı sonucu üretir:

<?php
echo "$a ${$a}";
?>
<?php
echo "$a $merhaba";
?>

Her ikisi de 'merhaba dünya' üretir.

Değişken değişkenleri dizilerle kullanmak için, bir anlam karmaşası sorununu çözümlemeniz gerekir. $$a[1] yazdığınızda değişken olarak $a[1]'i mi kastettiğiniz, yoksa $$a'nın değişken olmasını isteyip [1] ile o değişkenin indisini mi kastettiğinizi çözümleyicinin bilmesi gerekir. Bu anlam karmaşasını çözümleyen söz dizimi, birinci durum için ${$a[1]} ve ikinci için ${$a}[1]'dir.

Sınıf özelliklerine değişken özellik isimlerinden de erişilebilir. Değişken özellik ismi çağrının yapıldığı etki alanı içinde çözümlenir. Örneğin, $foo->$zam gibi bir değişkeniniz olsun; burada $zam'ın etki alanı incelenir ve $foo özelliğinin ismi olarak kullanılır. $zam, bir diziye erişim için kullanılıyorsa yine aynı durum geçerlidir.

Örnek 1 - Değişken işlevi örneği

<?php
class foo {
    var 
$zam 'Buna zam derler.';
}

$foo = new foo();
$zam 'zam';
$maz = array('foo''zam''maz''para');
echo 
$foo->$zam "\n";
echo 
$foo->$maz[1] . "\n";
?>

Yukarıdaki örneğin çıktısı:


Buna zam derler.
Buna zam derler.

Uyarı

Değişken değişkenlerin işlev ve sınıf yöntemleri içinde PHP'nin Süper küresel dizileri ile kullanılamayacağını unutmayınız. $this değişkeni de devingen olarak gönderimli olamayan özel bir değişkendir.



Dış Kaynaklı Değişkenler

HTML Formları (GET ve POST)

Bir PHP betiğine bir form gönderildiğinde o formdaki bilgi betik tarafından özdevinimli olarak kullanılır. Bu bilgiye erişmek için birçok yol vardır, örneğin:

Örnek 1 - Basit bir HTML formu

<form action="foo.php" method="post">
    Name:  <input type="text" name="kullanici_adi" /><br />
    Email: <input type="text" name="eposta" /><br />
    <input type="submit" name="submit" value="Beni gönder!" />
</form>

Kurulumunuza ve kişisel tercihlerinize bağlı olarak, HTML formlarınızdaki bilgiye erişimin birçok yolu vardır. Bazı örnekler:

Örnek 2 - Basit bir POST HTML formundan bilgiye erişim

<?php
// PHP 4.1.0'dan beri vardır

   echo $_POST['kullanici_adi'];
   echo $_REQUEST['kullanici_adi'];

   import_request_variables('p', 'p_');
   echo $p_kullanici_adi;

// PHP 6'dan beri yoktur. PHP 5.0.0'dan itibaren, bu uzun öntanımlı
// değişkenler register_long_arrays yönergesi ile etkisiz kılınabilir.

   echo $HTTP_POST_VARS['kullanici_adi'];

// Eğer PHP yönergesi register_globals = on ise kullanılabilir.
// PHP 4.2.0'dan itibaren register_globals'ın öntanımlı değeri off'dur.
// Bu yöntemin kullanımı/güvenilmesi tercih edilmez.

   echo $kullanici_adi;
?>

Bunun yerine önceden tanımlı uygun bir GET değişkeni kullanmak dışında, GET formunun kullanımı aynıdır. GET ayrıca QUERY_STRING (Bir URL'de '?' iminden sonraki bilgi) sorgu dizgesine de uygulanır. Bu bakımdan örneğin, http://mesela.dom/dnm.php?id=3 $_GET['id'] ile erişilebilen GET verisini içerir. Ayrıca, $_REQUEST değişkenine ve import_request_variables() işlevine de bakınız.

Bilginize: $_POST ve $_GET gibi Süper küresel diziler PHP 4.1.0'dan itibaren vardır.

Bilginize: Değişken isimlerindeki noktalar ve boşluklar altçizgi karakterine dönüştürülür. Örneğin, <input name="a.b" /> ifadesi $_REQUEST["a_b"] haline gelir.

Bahsedildiği gibi, PHP 4.2.0'dan önce register_globals yönergesinin öntanımlı değeri on'du. PHP topluluğu herkesi bu yönergeye güvenmemeleri, off olarak kabul ederek kodu buna göre yazmaları konusunda teşvik etmektedir.

Bilginize: magic_quotes_gpc yapılandırma yönergesi Get, Post ve Cookie değerlerini etkiler. Eğer değeri 'on' yapılırsa, (It's "PHP!") değeri özdevinimli olarak (It\'s \"PHP!\") olur. Veritabanına kayıt için önceleme gerekir. Ayrıca, addslashes(), stripslashes() ve magic_quotes_sybase işlevlerine de bakınız.

PHP form değişkenleri bağlamında dizileri de anlar (ilgili SSS'ye bakınız). Örneğin, ilgili değişkenleri birlikte gruplayabilir veya bu özelliği çoklu seçim girdisinden değerleri almak için kullanabilirsiniz. Örneğin, bir formu kendine gönderelim ve gönderilen veriyi gösterelim:

Örnek 3 - Daha karmaşık form değişkenleri

<?php
if ($_POST) {
    echo 
'<pre>';
    echo 
htmlspecialchars(print_r($_POSTtrue));
    echo 
'</pre>';
}
?>
<form action="" method="post">
    Adı:  <input type="text" name="personal[isim]" /><br />
    Eposta: <input type="text" name="personal[eposta]" /><br />
    Bira: <br />
    <select multiple name="bira[]">
        <option value="efes">Efes</option>
        <option value="tuborg">Tuborg</option>
        <option value="venus">Venüs</option>
    </select><br />
    <input type="submit" value="Gönder!" />
</form>

Gönder düğmesi değişken isimleri

Bir formu gönderirken, şöyle bir etiketle standart gönder düğmesi yerine resim kullanılabilir:

<input type="image" src="image.gif" name="sub" />

Kullanıcı resim üzerinde bir yere tıkladığında, eşlik eden form iki ek değişkenle sunucuya iletilmiş olur: sub_x ve sub_y. Bunlar kullanıcın resim üzerinde tıkladığı noktanın koordinatlarını içerir. Deneyimliler tarayıcı tarafından gönderilen asıl değişken isimlerinin alt çizgi yerine nokta içerdiğine dikkat etmiş olabilirler, fakat PHP noktaları özdevinimli olarak alt çizgiye çevirir.

HTTP Çerezleri

PHP, » Netscape Belirtiminde tanımlandığı gibi HTTP çerezlerini şeffaf olarak destekler. Çerezler kullanıcıları izleyip tanımlamak amacıyla kullanıcının tarayıcısında veri saklamak için kullanılan bir yöntemdir. Çerezleri setcookie() işlevini kullanarak belirtebilirsiniz. Çerezler HTTP başlığının bir parçasıdır, bu nedenle setcookie() işlevi tarayıcıya herhangi bir çıktı gönderilmeden önce çağrılmak zorundadır. Bu kısıtlama header() işlevi için de geçerlidir. Çerez verisi $_COOKIE, $HTTP_COOKIE_VARS veya $_REQUEST gibi uygun çerez veri dizisinde bulunur. Ayrıntılar ve örnekler için setcookie() kılavuz sayfasına bakınız.

Eğer tek bir çerez değişkenine birden fazla değer atamak isterseniz, değişkeni bir dizi olarak atayabilirsiniz. Örneğin:

<?php
  setcookie
("Cerezim[foo]"'Deneme 1'time()+3600);
  
setcookie("Cerezim[bar]"'Deneme 2'time()+3600);
?>

Her ne kadar betiğinizde Cerezim tek bir dizi olsa da bu iki ayrı çerez oluşturacaktır. Eğer birden fazla değere sahip tek bir çerez atamak isterseniz, önce değer üzerinde serialize() veya explode() kullanmayı düşünün.

Yolu veya alan adı farklı olmadığı sürece aynı isimdeki bir çerez önceki çerezin üzerine yazılır. Böylece, isterseniz örneğin bir alışveriş sepeti uygulaması için bir sayaç tutabilir ve bunu karşıya aktarabilirsiniz.

Örnek 4 - setcookie() örneği

<?php
if (isset($_COOKIE['sayac'])) {
    
$sayac $_COOKIE['sayac'] + 1;
} else {
    
$sayac 1;
}
setcookie('sayac'$sayactime()+3600);
setcookie("Sepet[$sayac]"$maltime()+3600);
?>

Gelen değişken isimleri içindeki noktalar

Genellikle, PHP bir betiğe aktarılan değişken isimlerini değiştirmez. Fakat, nokta iminin PHP'de değişken isimlerinde geçerli bir karakter olmadığına dikkat edilmelidir. Örnek:

<?php
$varname
.ext;  /* geçersiz değişken ismi */
?>

Burada, yazım denetleyicinin gördüğü $varname isimli bir değişkeni takip eden bir dizge birleştirme işlemi ve çıplak bir (tırnaklarla çevrilmemiş, herhangi bir anahtar veya anahtar sözcük ile eşleşmeyen dizge) 'ext' metnidir. Açıkça görülüyor ki, bu istenen sonucu vermemektedir.

Bu nedenle, PHP'nin gelen değişken isimlerindeki nokta imlerini alt çizgi imi ile değiştirdiğini bilmekte yarar vardır.

Değişken türlerini belirlemek

Değişken türlerini PHP belirlediği ve (genellikle) gerektiği gibi değiştirdiği için, verilen bir değişkenin herhangi bir anda hangi türde olduğu sorgulanmadan bilinemez. PHP'de bir değişkenin hangi türde olduğunu bulan birçok işlev vardır. Örnek: gettype(), is_array(), is_float(), is_int(), is_object() ve is_string(). Ayrıca Türler bölümüne de bakınız.




Sabitler

İçindekiler

Bir sabit basit bir değerin betimleyicisidir (ismidir). İsminden de anlaşılacağı gibi, betiğin çalışması sırasında bu değer değiştirilemez (aslında birer sabit olmayan sihirli sabitler hariç). Sabitler öntanımlı olarak büyük-küçük harf duyarlıdır. Geleneksel olarak, sabit isimleri daima büyük harfle yazılır.

Bir sabite verilen isim PHP'de varolan diğer tüm isimlerle aynı kurallara tabidir. Geçerli bir sabit ismi bir harfle ya da alt çizgi imi ile başlar, herhangi bir sayıda harf, rakam ya da alt çizgi ile devam eder. Bir sabit ismi düzenli ifade olarak, şu şekilde ifade edilebilir: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*

İpucu

Ayrıca Kullanıcı Alanı İsimlendirme Kılavuzu belgesine de bakınız.

Örnek 1 - Geçerli ve geçersiz sabit isimleri

<?php

// Geçerli sabit isimleri
define("FOO",     "bir şey");
define("FOO2",    "başka bir şey");
define("FOO_BAR""daha başka bir şey");

// Geçersiz sabit isimleri
define("2FOO",    "bir şey");

// Bu geçerli olmasına rağmen kullanmaktan kaçınılmalıdır.
// PHP bir gün betiğinizin çalışmasını bozacak bir sihirli
// sabit kullanmaya karar verebilir.
define("__FOO__""bir şey");

?>

Bilginize: Burada bir harften söz ettiğimiz zaman, ASCII a-Z veya A-Z arasındaki ki bir karakterden veya karakter kodu 127-255 (0x7f-0xff) arasındaki bir karakterden bahsetmiş oluyoruz.

Süper küresellerde olduğu gibi, sabitlerin etki alanı da betiklerin genelidir. "Etki alanı" hakkında daha ayrıntılı bilgi edinmek için Değişken Etki Alanı bölümünü okuyunuz.


Söz dizimi

Bir sabiti define() işlevini kullanarak veya PHP 5.3.0'dan itibaren sınf tanımlarının dışında const anahtar sözcüğünü kullanarak tanımlayabilirsiniz. Bir sabit tanımlandıktan sonra, asla değiştirilemez ya da tanımsız yapılamaz.

Bir sabit ismine yalnızca bir sayıl değer (boolean, integer, float veya string) atanabilir. Sabitleri resource olarak kayıt altına almak mümkündür, fakat umulmadık sonuçlara yol açabileceğinden bundan kaçınılmalıdır.

Bir sabitin değerini basitçe ismini belirterek alabilirsiniz. Değişkenlerin aksine, sabitlerin önüne $ imi eklemeniz gerekmez. Bunun yanında, bir sabitin ismini devingen şekilde elde etmek isterseniz, sabitin değerini okumak için constant() işlevini de kullanabilirsiniz. Tanımlanmış sabitlerin tamamının bir listesini almak için, get_defined_constants() işlevini kullanabilirsiniz.

Bilginize: Sabitlerin ve (genel) değişkenlerin isim alanları farklıdır. Bu, örneğin TRUE ile $TRUE değerlerinin farklı olabilecekleri anlamına gelir.

Tanımlanmamış bir sabit ismi kullanırsanız, PHP, bir sabit değil bir sayıl değer kullanmak istediğinizi varsayar ve sabiti string türünde bir değer (SABIT yerine "SABIT" ) olarak ele alır. Böyle bir durumda E_NOTICE seviyesinde bir hata çıktılanır. Ayrıca, $foo[bar] kullanımının (evvelce define() işleviyle bar isminde bir sabit tanımlamamışsanız) neden yanlış olduğuyla ilgili açıklamayı $foo[bar] neden yanlıştır? başlığı altında bulabilirsiniz. Bir sabitin tanımlı olup olmadığını defined() işlevi sayesinde kolayca öğrenebilirsiniz.

Sabitler ve değişkenler arasındaki farklar:

  • Bir sabit ismi $ imi ile başlamaz.
  • Sabitler basit bir atama ile değil, sadece define() işlevi kullanılarak tanımlanabilirler.
  • Sabitler, değişken etki alanı kurallarına bağlı olmaksızın her yerde tanımlanabilir ve her yerden erişilebilir.
  • Sabitler tanımlandıktan sonra yeniden tanımlanamaz ya da tanımsız duruma getirilemez.
  • Bir sabite sadece bir sayıl değer (boolean, integer, float veya string türünde bir değer) atanabilir.

Örnek 1 - Sabitlerin Tanımlanması

<?php
define
("CONSTANT""Merhaba dünya.");
echo 
CONSTANT// "Merhaba dünya" çıktılar.
echo Constant// "Constant" çıktılar ve bir bilgi iletisi gösterir.
?>

Örnek 2 - Sabitlerin const ile tanımlanması

<?php
// PHP 5.3.0 ve sonrasında çalışır
const CONSTANT 'Merhaba Dünya';

echo 
CONSTANT;
?>

Ayrıca, Sınıf Sabitleri belgesine de bakınız.



Sihirli Sabitler

PHP, çalışan her betiğin erişebileceği çok sayıda öntanımlı sabit'e sahiptir. Öte yandan, bu sabitlerin çoğu, çeşitli eklentiler tarafından tanımlandığından, sadece eklenti bir modül olarak veya PHP içinde derlenmişse kullanılabilir.

Değerleri kullanıldıkları yere göre değişen beş sihirli sabit vardır. Örneğin, __LINE__ sabitinin değeri betiğin hangi satırında kullanıldığına bağlıdır. Bu özel sabitler büyük-küçük harf farkına duyarsızdır ve aşağıda listelenmişlerdir:

Birkaç "sihirli" PHP sabiti
İsim Açıklama
__LINE__ Dosyada bu sabitin bulunduğu satırın numarası.
__FILE__ Dosyanın tam dosya yolu ve dosya ismi. include() işlevi ile betiğe eklenen bir dosyanın içinde kullanıldığında betiğin ismini değil, eklenen dosyanın ismini içerir. PHP 4.0.2'den itibaren, __FILE__ değeri daima sembolik bağları çözümlenmiş olarak mutlak dosya yolunu içerirken, daha eski sürümler bazı durumlarda göreli dosya yolunu içerebilir.
__DIR__ Dosyanın bulurduğu dizin. Dahil edilen bir dosyanın içinde kullanıldığında dahil edilen dosyanın dizini döner. Bu dirname(__FILE__) işlevine eşdeğerder. Bu dizin isminin sonuna bir kök dizin olmadıkça bir bölü imi konmaz. (PHP 5.3.0'da eklenmiştir.)
__FUNCTION__ İşlev ismi. (PHP 4.3.0 ile eklenmiştir). PHP 5 itibariyle bu sabit, işlev ismini bildirimindeki haliyle (büyük-küçük harf duyarlı) içerir. PHP 4 sürümünde ise bu değer her zaman küçük harflerden oluşur.
__CLASS__ Sınıf ismi. (PHP 4.3.0 ile eklenmiştir). PHP 5 itibariyle bu sabit, sınıf ismini bildirimindeki haliyle (büyük-küçük harf duyarlı) içerir. PHP 4 sürümünde ise bu değer her zaman küçük harflerden oluşur.
__METHOD__ Yöntem ismi. (PHP 5.0.0 ile eklenmiştir). Bu sabit, yöntem ismini daima bildirimindeki haliyle (büyük-küçük harf duyarlı) içerir.
__NAMESPACE__ Geçerli isim alanının adı (harf büyüklüğüne duyarlı). Bu sabit derleme anında tanımlanır (PHP 5.3.0'da eklenmiştir).

Ayrıca bakınız: get_class(), get_object_vars(), file_exists() ve function_exists().




İfadeler

İfadeler, PHP'nin en önemli yapı taşlarındandır. PHP'de, hemen hemen yazdığınız her şey bir ifadedir. Bir ifadenin en basit ama en etkili tanımı şudur: "Bir değere sahip olan herşey".

İfadelerin en basit şekli sabitler ve değişkenlerdir. "$a = 5" yazdığınızda, '5' değerini $a değişkenine atamış olursunuz. '5', açık bir şekilde, 5 değerine sahiptir, ya da başka bir deyişle '5', değeri 5 olan bir ifadedir (bu durumda, '5' bir tamsayı sabittir).

Bu atamadan sonra, $a'nın değerinin 5 olmasını beklersiniz, dolayısıyla $b = $a yazdığınızda, bunun $b = 5 yazmışsınız gibi davranmasını beklersiniz. Başka bir deyişle, $a da değeri 5 olan ifadedir. Her şey doğru çalışırsa, olması gereken de tam budur.

İşlevler, ifadelerin biraz daha karmaşık örnekleridir. Örneğin, aşağıdaki işleve bakalım:

<?php
function foo ()
{
    return 
5;
}
?>

İşlev kavramına aşina iseniz (değilseniz, işlevler bölümünü inceleyebilirsiniz), şu örnekten hareketle $c = foo() yazmak ile $c = 5 yazmak arasında bir fark olmadığını bilirsiniz. İşlevler, değeri dönüş değeri olan ifadelerdir. foo() işlevi 5 değerini döndürdüğünden, "foo()" ifadesinin değeri 5'tir. İşlevlerin amacı normalde duruk bir değer döndürmek değildir, bir hesaplamanın sonucunu döndürürler.

Elbette, PHP'deki değerlerin hep tamsayılar olması gerekmez, zaten çoğunlukla değildirler. PHP dört çeşit sayıl değer destekler: Tamsayı (integer) değerler, kayan noktalı (float) değerler, dizge (string) değerler ve mantıksal boolean değerler (sayıl değerler, dizilerin aksine daha küçük parçalara bölemeyeceğiniz değerlerdir). PHP ayrıca iki bileşik (sayıl olmayan) tür destekler: Diziler ve nesneler. Bu değer türlerinden her biri bir değişkene atanabilir ya da bir işlevden döndürülebilir.

PHP, birçok başka dilin yaptığı gibi ifadeleri çok ileriye götürmüştür. PHP ifade-yönelimli bir dildir, bunun sebebi hemen hemen her şeyin bir ifade olmasıdır. Az önce üzerinde çalıştığımız '$a = 5' örneğini ele alalım. Burada iki değer kullanımı sözkonusudur, bir tamsayı sabit olan '5' ve 5 olarak değiştirilmiş $a'nın değeri. Ancak gerçek şu ki, burada bu ikiliye ek olarak başka bir değer daha vardır, o da atamanın kendi değeridir. Atamanın kendisi atanan değerle değerlendirilir, bu örnekte bu 5'tir. Uygulamada, ne yaptığından bağımsız olarak "$a = 5", değeri 5 olan bir ifadedir. Böylece, "$b = ($a = 5)" yazmak, "$a = 5; $b = 5;" yazmak gibidir (noktalı virgül deyimin sonlandırıldığını gösterir). Atamalar sağdan sola doğru işlendiğinden, "$b = $a = 5" de yazabilirsiniz.

İfade yönelimi ile ilgili diğer güzel bir örnek atama öncesi ve sonrası arttırma ve eksiltme işlemleridir. PHP ve diğer birçok dilin kullanıcıları, değişken++ ve değişken-- gösterimine az çok aşinadır. Bunlar arttırma ve eksiltme işleçleridir. PHP/FI 2'de, $a++ deyiminin bir değeri yoktur (bir ifade değildir), bu yüzden onu atayamaz ya da herhangi bir yerde kullanamazsınız. PHP, arttırma/eksiltme ifadelerinin yeteneklerini, bu ifadeleri C dilindekine benzer şekilde iyileştirerek genişletmiştir. PHP'de, C'de olduğu gibi önceden arttırma ve sonradan arttırma diye iki tür arttırma vardır. Bunların her ikisi de değişkenin değerini bir arttırır ve değişken üzerindeki etkileri aynıdır. Fark, arttırma ifadesinin değerindedir. Önceden arttırma, ++$değişken olarak yazılır ve arttırılmış değer öncelik alır (PHP değişkenin değerini önce arttırır, sonra okur, bu sebeple önceden arttırma ismi verilmiştir). Sonradan arttırma ise, $değişken++ olarak yazılır ve değer arttırılmadan önceki özgün değer önceliklidir (PHP değişkenin değerini okuduktan sonra değerini arttırır, bu sebeple sonradan arttırma ismi verilmiştir).

Çok geniş bir kullanıma sahip olan ifade türlerinden birisi de karşılaştırma ifadeleridir. Bu ifadeler FALSE ya da TRUE değerlerinden birini alırlar. PHP > (büyüktür), >= (büyüktür ya da eşittir), == (eşittir), != (eşit değildir), < (küçüktür) ve <= (küçüktür ya da eşittir) gösterimlerini destekler. Dil aynı zamanda aynılık işleçlerini de destekler: === (eşit ve aynı türdedir) ve !== (ne eşit ne de aynı türdedir). Bu ifadeler çoğunlukla if deyimleri gibi koşula bağlı işlemlerde kullanılmaktadırlar.

Vereceğimiz son ifade örneği işleçli atama ifadeleridir. $a'nın değerini 1 arttırmak istediğinizde, basitçe '$a++' ya da '++$a' yazmanızın yeterli olduğunu zaten biliyorsunuz. Ama ya birden daha büyük bir değer, örneğin 3 eklemek isterseniz? '$a++' ifadesini birkaç kez yazabilirsiniz, ama bunun pek verimli ya da kullanışlı yöntem olmadığı oldukça açık. '$a = $a + 3' çok daha yaygın bir kullanımdır. '$a + 3' ifadesi $a'nın değerini önce 3 arttırır sonra sonucu $a'ya atar, böylece $a'nın değeri 3 arttırılmış olur. PHP'de, birkaç dilde olduğu gibi C benzeri, daha temiz gözükecek ve daha kısa biçimde yazabileceğiniz bir gösterim daha vardır. $a'nın mevcut değerine 3 ekleme işlemi '$a += 3' biçiminde yazılabilir. Bunun anlamı tam olarak "$a'nın değerini al, 3 ekle ve yeni değeri $a'ya ata" olacaktır. Daha kısa ve temiz olmasının yanında, bu kod daha hızlı çalıştırılacaktır. '$a += 3' işleminin değeri, normal bir atama işleminde olduğu gibi, atanan değerdir. Bu değerin 3 OLMADIĞINA dikkat edin, bu değer $a ile 3'ün toplamıdır ($a’ya bu değer atanır). İşleçli atama kipinde herhangi bir iki terimli işleç kullanılabilir, örneğin '$a -= 5' ($a'nın değerinden 5 çıkarılır), '$b *= 7' ($b'nin değeri 7 ile çarpılır), vs.

Diğer dillerde görmediyseniz size farklı gözükebilecek bir ifade daha vardır, o da üç terimli koşul işlecidir:

<?php
$birinci 
$ikinci $üçüncü
?>

İlk alt ifadenin değeri TRUE (sıfırdan farklı) ise, ikinci alt ifade değerlendirilir ve koşullu ifadenin sonucu bu olur. Aksi takdirde, üçüncü alt ifade değerlendirilir ve koşullu ifadenin sonucu bu olur.

Aşağıdaki örnek, önceden ve sonradan arttırma işleçlerini ve ifadelerini genelde biraz daha iyi anlamanıza yardımcı olacaktır:

<?php
function double($i)
{
    return 
$i*2;
}
$b $a 5;    /* beş değerini $a ve $b değişkenlerine atar */
$c $a++;      /* sonradan arttırma, $a'nın özgün değerini (5) $c'ye atar */
$e $d = ++$b/* önceden arttırma, $b'nin arttırılmış değerini (6) $d
                   ve $e'ye atar */

/* bu noktada, $d ve $e 6'ya eşittir */

$f double($d++);  /* $d'nin değerini arttırmadan önce $d'nin değerinin iki
                       katını $f'ye atar,  2*6 = 12 */
$g double(++$e);  /* $e'nin değerini arttırdıktan sonra iki katını alıp
                       $g'ye atar,  2*7 = 14 */
$h $g += 10;      /* önce, $g 10 arttırılır ve değeri 24 olur. Sonra bu
                       değer (24) $h'ye atanır ve onun da değeri 24 olur. */
?>

Bazı ifadeler deyim olarak ele alınabilir. Bu durumda, deyim 'ifade' ';' şeklinde, noktalı virgülle sonlandırılmış bir ifade şeklinde olacaktır. '$=$a=5;' olduğunda, $a=5 geçerli bir ifadedir, ancak kendi başına bir deyim değildir. '$b=$a=5;' ise geçerli bir deyimdir.

Son olarak bahsetmemiz gereken bir konu da ifadelerin gerçek değeridir. Birçok olayda, çoğunlukla da koşula bağlı çalışmalarda ve döngülerde, ifadenin kendi değeri ile değil, TRUE ya da FALSE olması ile ilgileniyor olacaksınız. TRUE ve FALSE sabitleri (büyük-küçük harf duyarsız) olası iki mantıksal değerdir. Gerektiğinde, bir ifade özdevinimli olarak mantıksal değere dönüştürülür. Tür çarpıtma bölümünde bunun nasıl gerçekleştiği ayrıntılı olarak anlatılmıştır.

PHP ifadeleri tümüyle ve çok güçlü bir biçimde uygulamaya geçirmiştir ve bunların tamamını belgelemek bu kılavuzun kapsamının dışında kalır. Yukarıdaki örnekler hangi ifadelerle nasıl kullanışlı ifadeler oluşturabileceğiniz hakkında yeterli fikir verecektir. Bu kılavuzun geri kalanında, geçerli herhangi bir PHP ifadesini belirtmek için ifade sözcüğünü kullanacağız.



İşleçler

İçindekiler

Bir işleç, başka bir değer üretmek üzere bir veya daha fazla değerle (programcı dilinde ifadeyle) beslenen bir şeydir (yani, değerler işleçle birlikte bir ifade haline gelir). Bu bakımdan, bir değer döndüren işlevler ve benzeri oluşumlar (print gibi) ya da belirtilenden başka bir şey döndürmeyen (echo gibi) oluşumlar birer işleç olarak düşünülebilir.

Üç tür işleç vardır. İlki tek bir değerle çalışan tek terimli işleç olup ! (olumsuzlama işleci) veya ++ (arttırım işleci) buna birer örnektir. İkinci işleç grubu iki terimlilerdir; PHP'nin desteklediği işleçlerin çoğunluğu bu grupta olup aşağıda İşleç Önceliği bölümünde liste halinde verilmişlerdir.

Üçüncü grupta üç terimli işleç yer alır: ?:. Bir ifadeye bağlı olarak iki deyim veya çalıştırma yolunu seçmekten ziyade diğer iki ifadeden birini seçmek için kullanılır. İşlecin üç ifadesini parantez içinde belirtmek iyi bir uygulamadır.


İşleç Önceliği

İşleç önceliği iki ifadenin birbirine hangi sıkılıkta bağlı olduğunu belirtir. Örneğin, 1 + 5 * 3 ifadesinin sonucu 18 değil, 16'dır. Çünkü, çarpma ("*") işlecinin önceliği toplama ("+") işlecinden yüksektir. Önceliği arttırmak için gerekirse parantezler kullanılabilir. Örneğin, (1 + 5) * 3 ifadesinin sonucu 18 olacaktır. Eğer işleç önceliklerinde eşitlik sözkonusu olursa soldaki işleç sağdakinden öncelikli olur.

Aşağıdaki listede işleçler en yüksek öncelikliden başlayıp en düşük öncelikliye doğru sıralanmışlardır. Aynı satırda yer alan işleçler eşöncelikli olup hangi sırada ele alınacaklarına değerlendirme sırasında karar verilir.

İşleç Öncelikleri
İlişkilendirme İşleçler Ek bilgi
yönsüz clone new clone ve new
soldan [ array()
yönsüz ++ -- arttırım/eksiltim
sağdan ~ - (int) (float) (string) (array) (object) (bool) @ Türler
yönsüz instanceof Türler
sağdan ! mantıksal
soldan * / % aritmetik
soldan + - . aritmetik ve dizge
soldan << >> bitsel
yönsüz < <= > >= <> karşılaştırma
yönsüz == != === !== karşılaştırma
left & bitsel ve gönderimler
soldan ^ bitsel
soldan | bitsel
soldan && mantıksal
soldan || mantıksal
soldan ? : üç terimli
sağdan = += -= *= /= .= %= &= |= ^= <<= >>= atama
soldan and mantıksal
soldan xor mantıksal
soldan or mantıksal
soldan , birçok kullanım

Soldan ilişkilendirme, ifadenin soldan sağa, sağdan ilişkilendirme ise sağdan sola değerlendirileceği anlamına gelir.

Örnek 1 - Öncelik yönü

<?php
$a 
5// (3 * 3) % 5 = 4
$a true true 2// (true ? 0 : true) ? 1 : 2 = 2

$a 1;
$b 2;
$a $b += 3// $a = ($b += 3) -> $a = 5, $b = 5
?>

Parantezleri kodun okunabilirliğini arttırmak için kullanın.

Bilginize: Eşitlik (=) işleci çoğu işleçten daha düşük önceliğe sahip olduğundan PHP halen şuna benzer ifadelere izin vermektedir: foo() işlevinin dönüş değerini $a değişkenine atayan if (!$a = foo()) ifadesi.



Aritmetik İşleçler

Okulda öğrendiğiniz temel aritmetiği hatırlıyor musunuz? Bu işleçler tam da öyle çalışır.

Aritmetik İşleçler
Örnek İsim Sonuç
-$a Olumsuzlama $a'nın eksi işaretlisi.
$a + $b Toplama $a ile $b'nin toplamı.
$a - $b Çıkarma $a'nın $b'den farkı.
$a * $b Çarpma $a ile $b'nin çarpımı.
$a / $b Bölme $a'nın $b'ye bölümü.
$a % $b Kalan $a'nın $b'ye bölümünden kalan.

Bölme işlecinin tamsayı bölüm vermesi için iki teriminin de tamsayı (veya dönüşüm sonucu tamsayı olan dizge) olması ve birbirlerine tam olarak bölünmesi gerekir, aksi takdirde bölüm gerçek sayı olacaktır.

Kalan işlecinin (%) terimleri gerçek sayılarsa ondalık kısımları atılarak tamsayıya dönüştürülürler.

Bilginize: $a % $b işleminin sonucu, $a negatifse negatif olacaktır.

Matematik işlevleri bölümüne de bakınız.



Atama İşleçleri

Temel atama işleci "=" imidir. Programlamaya yeni başlayanlar bu işleci"eşittir" diye okurlar. Aslında yapılan işlem bir şeyleri birbirlerine eşitlemek değildir. Yaptığı iş sağındaki ifadenin değerini solundaki terimin değeri haline getirmektir, yani imleci içeren ifadeyi birşey'in değeri diye okumak daha doğrudur.

Bir atama ifadesinin değeri atanan değerdir. Yani, "$a = 3" ifadesinin değeri 3'tür. Bunun bir takım yan sonuçları da vardır:

<?php

$a 
= ($b 4) + 5// $a'nın değeri 9, $b'nin değeri 4 olur.

?>

Temel atama işlecinden başka atama işlemini temel aritmetik, ikil aritmetik işlemleriyle veya dizi ya da dizge birleştirme işlemleriyle birleştiren, "birleşik atama işleçleri" vardır. Örnek:

<?php

$a 
3;
$a += 5// $a'nın değeri 8 olur, asıl işlem: $a = $a + 5;
$b "Herkese ";
$b .= "Merhaba!"// $b'nin değeri "Herkese Merhaba!" olur.
                  // asıl işlem: $b = $b . "Merhaba!";

?>

Atama işleminin özgün değişkeni yeni değişkene kopyaladığına (değeriyle atadığına) dikkat ediniz. Dolayısıyla birinde yapılan değişiklik diğerini etkilemeyecektir. Kapalı bir döngü içinde büyükçe bir diziye atama işlemleri yapma ihtiyacı duyarsanız bu ayrı bir anlam kazanır. Gönderimli atama $değişken = &$diğerdeğişken; sözdizimi ile desteklenmektedir. 'Gönderimli atama' denince, iki değişkenin aynı veriyi gösterdiğini ve birbirlerinden birşeyler kopyalamadıklarını anlıyoruz. Gönderimler hakkında daha ayrıntılı bilgi edinmek için Gönderimlerle ilgili herşey bölümüne bakınız. PHP 5'ten itibaren, clone anahtar sözcüğü ile yeni bir nesneye atama yapılmadıkça, nesneler gönderimli olarak atanırlar.



Bitsel İşleçler

Bitsel işleçler, bir tamsayının içindeki belli bitleri 0 ya da 1 yaparlar.

Bitsel İşleçler
Örnek İsim Sonuç
$a & $b Ve Hem $a hem de $b'de 1 olan bitler sonuçta 1 yapılır.
$a | $b Veya $a veya $b'de 1 olan bitler sonuçta 1 yapılır.
$a ^ $b Ayrıcalıklı Veya Hem $a hem de $b'de 0 veya 1 olan bitler sonuçta 0, diğerleri 1 yapılır.
~ $a Değil $a'nın 0 olan bitleri 1, 1 olanları 0 yapılır.
$a << $b Sola kaydırma $a'nın bitleri $b adım sola kaydırılır (her adım ikiyle çarpma işlemine denktir).
$a >> $b Sağa kaydırma $a'nın bitleri $b adım sağa kaydırılır (her adım ikiye bölme işlemine denktir).

PHP'de bit kaydırma bir aritmetik işlemdir. Kaydırma sonucu her iki uçtan da taşan bitler silinir. Sola kaydırmada sağdan eksilen bitler sıfırlarla doldurulur, bu arada işaret biti soldan taşarak silinir, yani sola kaydırmada terimin işareti korunmaz. Sağa kaldırmada ise işaret biti yerinden oynatılmaz, yani sağa kaydırmada terimin işareti korunur.

Bir işlemin öncelik almasını istiyorsanız yaylı ayraçları kullanın. Örneğin, $a & $b == true işleminde önce eşitlik sonra bitsel VE uygulanırken ($a & $b) == true işleminde ise önce bitsel VE sonra eşitlik uygulanır.

Veri türü dönüşümlerinde dikkatli olun. Eğer sol ve sağ taraf değiştirgelerinin ikisi de dizge ise bitsel işleçler terimlerdeki karakterlerin ASCII değerleri üzerinde işlem yapacaktır.

PHP'nin error_reporting yönergesi gerçekte neler olup bittiğini göstermek
için bitsel değerler kullanır. Sadece bilgilendirmeleri değil hataların
tümünü görmek isterseniz php.ini dosyasında ilgili yere şunu yazın:
E_ALL & ~E_NOTICE

      

Bu E_ALL için şöyle çalışır:
00000000000000000111011111111111

Keza E_NOTICE...
00000000000000000000000000001000

... ve ~ ile ters çevrilerek:
11111111111111111111111111110111

Son olarak, her iki değer üzerinde etkin bitleri bulmak için
VE (&) işlecini kullanır:
00000000000000000111011111110111

      

Bunu sağlamanın bir başka yolu da sadece bir değerde veya diğerinde etkin
bitleri bulmak için XOR (^) kullanmaktır:
E_ALL ^ E_NOTICE

      

error_reporting yönergesi bitleri etkin kılmayı göstermek için de
kullanılabilir. Sadece hataları ve kurtarılabilir göstermenin yolu:
E_ERROR | E_RECOVERABLE_ERROR

      

Bu işlem etkin bitleri almak için
00000000000000000000000000000001

ve
00000000000000000001000000000000

E_ERROR'ları üzerinde VEYA (|) işlecini kullanır:
00000000000000000001000000000001

      

Örnek 1 - Tamsayılar üzerinde bitsel işlemler

<?php
/*
 * Üstteki bölümü yoksayın,
 * çıktıyı iyileştirmek için biçemlemekten başka birşey yapmıyor.
 */

$format '(%1$2d = %1$04b) = (%2$2d = %2$04b)'
        
' %3$s (%4$2d = %4$04b)' "\n";

echo <<<EOH
 ---------     ---------  -- ---------
   sonuç         değer    işl   dnm
 ---------     ---------  -- ---------
EOH;


/*
 * Örnekler burada.
 */

$değerler = array(01248);
$dnm 4;

echo 
"\n Bitsel VE \n";
foreach (
$değerler as $değer) {
    
$sonuç $değer $dnm;
    
printf($format$sonuç$değer'&'$dnm);
}

echo 
"\n Bitsel Ayrıcalıklı VEYA \n";
foreach (
$değerler as $değer) {
    
$sonuç $değer $dnm;
    
printf($format$sonuç$değer'|'$dnm);
}

echo 
"\n Bitsel Ayrıcalıklı VEYA (XOR) \n";
foreach (
$değerler as $değer) {
    
$sonuç $değer $dnm;
    
printf($format$sonuç$değer'^'$dnm);
}
?>

Yukarıdaki örneğin çıktısı:

 ---------     ---------  -- ---------
   sonuç         değer    işl   dnm
 ---------     ---------  -- ---------
 Bitsel VE
( 0 = 0000) = ( 0 = 0000) & ( 5 = 0101)
( 1 = 0001) = ( 1 = 0001) & ( 5 = 0101)
( 0 = 0000) = ( 2 = 0010) & ( 5 = 0101)
( 4 = 0100) = ( 4 = 0100) & ( 5 = 0101)
( 0 = 0000) = ( 8 = 1000) & ( 5 = 0101)

 Bitsel Ayrıcalıklı VEYA
( 5 = 0101) = ( 0 = 0000) | ( 5 = 0101)
( 5 = 0101) = ( 1 = 0001) | ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) | ( 5 = 0101)
( 5 = 0101) = ( 4 = 0100) | ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) | ( 5 = 0101)

 Bitsel Ayrıcalıklı VEYA (XOR)
( 5 = 0101) = ( 0 = 0000) ^ ( 5 = 0101)
( 4 = 0100) = ( 1 = 0001) ^ ( 5 = 0101)
( 7 = 0111) = ( 2 = 0010) ^ ( 5 = 0101)
( 1 = 0001) = ( 4 = 0100) ^ ( 5 = 0101)
(13 = 1101) = ( 8 = 1000) ^ ( 5 = 0101)

Örnek 2 - Dizgeler üzerinde bitsel işlemler

<?php
echo 12 9// '5' çıktılar

echo "12" "9"// Gerisilme karakterini çıktılar (ASCII 8)
                 // ('1' (ascii 49)) ^ ('9' (ascii 57)) =  ASCII 8

echo "hallo" "hello"// Çıktılanan ASCII değerler #0 #4 #0 #0 #0
                        // 'a' ^ 'e' = #4

echo "3"// 1 çıktılar
              // 2 ^ ((int)"3") == 1

echo "2" 3// 1 çıktılar
              // ((int)"2") ^ 3 == 1
?>

Örnek 3 - Tamsayılarda bit kaydırma

<?php
/*
 * Bunlar örnektir.
 */

echo "\n--- POZİTİF TAMSAYILARDA SAĞA BİT KAYDIRMA ---\n";

$dgr 4;
$hane 1;
$snç $dgr >> $hane;
p($snç$dgr'>>'$hane'işaret bitinin kopyası sola kaydırıldı');

$dgr 4;
$hane 2;
$snç $dgr >> $hane;
p($snç$dgr'>>'$hane);

$dgr 4;
$hane 3;
$snç $dgr >> $hane;
p($snç$dgr'>>'$hane'bitler sağa kaydırıldı');

$dgr 4;
$hane 4;
$snç $dgr >> $hane;
p($snç$dgr'>>'$hane'yukarıdakiyle aynı; 0\'dan sonrası kaydırılamaz');


echo 
"\n--- NEGATİF TAMSAYILARDA SAĞA BİT KAYDIRMA ---\n";

$dgr = -4;
$hane 1;
$snç $dgr >> $hane;
p($snç$dgr'>>'$hane'işaret bitinin kopyası sola kaydırıldı');

$dgr = -4;
$hane 2;
$snç $dgr >> $hane;
p($snç$dgr'>>'$hane'bitler sağa kaydırıldı');

$dgr = -4;
$hane 3;
$snç $dgr >> $hane;
p($snç$dgr'>>'$hane'yukarıdakiyle aynı; -1\'dan sonrası kaydırılamaz');


echo 
"\n--- POZİTİF TAMSAYILARDA SOLA BİT KAYDIRMA ---\n";

$dgr 4;
$hane 1;
$snç $dgr << $hane;
p($snç$dgr'<<'$hane'sağ taraf sıfırlarla doldurulur');

$dgr 4;
$hane = (PHP_INT_SIZE 8) - 4;
$snç $dgr << $hane;
p($snç$dgr'<<'$hane);

$dgr 4;
$hane = (PHP_INT_SIZE 8) - 3;
$snç $dgr << $hane;
p($snç$dgr'<<'$hane'işaret bitleri dışa kaydırılır');

$dgr 4;
$hane = (PHP_INT_SIZE 8) - 2;
$snç $dgr << $hane;
p($snç$dgr'<<'$hane'bitler sola kaydırıldı');


echo 
"\n--- NEGATİF TAMSAYILARDA SOLA BİT KAYDIRMA ---\n";

$dgr = -4;
$hane 1;
$snç $dgr << $hane;
p($snç$dgr'<<'$hane'sağ taraf sıfırlarla doldurulur');

$dgr = -4;
$hane = (PHP_INT_SIZE 8) - 3;
$snç $dgr << $hane;
p($snç$dgr'<<'$hane);

$dgr = -4;
$hane = (PHP_INT_SIZE 8) - 2;
$snç $dgr << $hane;
p($snç$dgr'<<'$hane'işaret biti dahil, bitler soldan dışa kaydırıldı');


/*
 * Bundan sonrasını yoksayın; çıktıyı biçemlemekten başka bir şey yapmıyor.
 */

function p($snç$dgr$op$hane$ilt '') {
    
$format '%0' . (PHP_INT_SIZE 8) . "b\n";

    
printf("İfade: %d = %d %s %d\n"$snç$dgr$op$hane);

    echo 
" Onluk:\n";
    
printf("  değer=%d\n"$dgr);
    
printf("  sonuç=%d\n"$snç);

    echo 
" İkilik:\n";
    
printf('  değer=' $format$dgr);
    
printf('  sonuç=' $format$snç);

    if (
$ilt) {
        echo 
" DİKKAT: $ilt\n";
    }

    echo 
"\n";
}
?>

Yukarıdaki örneğin 32 bitlik makinelerdeki çıktısı:


--- POZİTİF TAMSAYILARDA SAĞA BİT KAYDIRMA ---
İfade: 2 = 4 >> 1
 Onluk:
  değer=4
  sonuç=2
 İkilik:
  değer=000000000000000000000000000100
  sonuç=000000000000000000000000000010
 DİKKAT: işaret bitinin kopyası sola kaydırıldı

İfade: 1 = 4 >> 2
 Onluk:
  değer=4
  sonuç=1
 İkilik:
  değer=000000000000000000000000000100
  sonuç=000000000000000000000000000001

İfade: 0 = 4 >> 3
 Onluk:
  değer=4
  sonuç=0
 İkilik:
  değer=000000000000000000000000000100
  sonuç=000000000000000000000000000000
 DİKKAT: bitler sağa kaydırıldı

İfade: 0 = 4 >> 4
 Onluk:
  değer=4
  sonuç=0
 İkilik:
  değer=000000000000000000000000000100
  sonuç=000000000000000000000000000000
 DİKKAT: yukarıdakiyle aynı; 0'dan sonrası kaydırılamaz


--- NEGATİF TAMSAYILARDA SAĞA BİT KAYDIRMA ---
İfade: -2 = -4 >> 1
 Onluk:
  değer=-4
  sonuç=-2
 İkilik:
  değer=111111111111111111111111111100
  sonuç=111111111111111111111111111110
 DİKKAT: işaret bitinin kopyası sola kaydırıldı

İfade: -1 = -4 >> 2
 Onluk:
  değer=-4
  sonuç=-1
 İkilik:
  değer=111111111111111111111111111100
  sonuç=111111111111111111111111111111
 DİKKAT: bitler sağa kaydırıldı

İfade: -1 = -4 >> 3
 Onluk:
  değer=-4
  sonuç=-1
 İkilik:
  değer=111111111111111111111111111100
  sonuç=111111111111111111111111111111
 DİKKAT: yukarıdakiyle aynı; -1'dan sonrası kaydırılamaz


--- POZİTİF TAMSAYILARDA SOLA BİT KAYDIRMA ---
İfade: 8 = 4 << 1
 Onluk:
  değer=4
  sonuç=8
 İkilik:
  değer=000000000000000000000000000100
  sonuç=000000000000000000000000001000
 DİKKAT: sağ taraf sıfırlarla doldurulur

İfade: 4611686018427387904 = 4 << 60
 Onluk:
  değer=4
  sonuç=4611686018427387904
 İkilik:
  değer=000000000000000000000000000100
  sonuç=010000000000000000000000000000

İfade: -9223372036854775808 = 4 << 61
 Onluk:
  değer=4
  sonuç=-9223372036854775808
 İkilik:
  değer=000000000000000000000000000100
  sonuç=100000000000000000000000000000
 DİKKAT: işaret bitleri dışa kaydırılır

İfade: 0 = 4 << 62
 Onluk:
  değer=4
  sonuç=0
 İkilik:
  değer=000000000000000000000000000100
  sonuç=000000000000000000000000000000
 DİKKAT: bitler sola kaydırıldı


--- NEGATİF TAMSAYILARDA SOLA BİT KAYDIRMA ---
İfade: -8 = -4 << 1
 Onluk:
  değer=-4
  sonuç=-8
 İkilik:
  değer=111111111111111111111111111100
  sonuç=111111111111111111111111111000
 DİKKAT: sağ taraf sıfırlarla doldurulur

İfade: -9223372036854775808 = -4 << 61
 Onluk:
  değer=-4
  sonuç=-9223372036854775808
 İkilik:
  değer=111111111111111111111111111100
  sonuç=100000000000000000000000000000

İfade: 0 = -4 << 62
 Onluk:
  değer=-4
  sonuç=0
 İkilik:
  değer=111111111111111111111111111100
  sonuç=000000000000000000000000000000
 DİKKAT: işaret biti dahil, bitler soldan dışa kaydırıldı

Yukarıdaki örneğin 64 bitlik makinelerdeki çıktısı:


--- POZİTİF TAMSAYILARDA SAĞA BİT KAYDIRMA ---
İfade: 2 = 4 >> 1
 Onluk:
  değer=4
  sonuç=2
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=0000000000000000000000000000000000000000000000000000000000000010
 DİKKAT: işaret bitinin kopyası sola kaydırıldı

İfade: 1 = 4 >> 2
 Onluk:
  değer=4
  sonuç=1
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=0000000000000000000000000000000000000000000000000000000000000001

İfade: 0 = 4 >> 3
 Onluk:
  değer=4
  sonuç=0
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=0000000000000000000000000000000000000000000000000000000000000000
 DİKKAT: bitler sağa kaydırıldı

İfade: 0 = 4 >> 4
 Onluk:
  değer=4
  sonuç=0
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=0000000000000000000000000000000000000000000000000000000000000000
 DİKKAT: yukarıdakiyle aynı; 0'dan sonrası kaydırılamaz


--- NEGATİF TAMSAYILARDA SAĞA BİT KAYDIRMA ---
İfade: -2 = -4 >> 1
 Onluk:
  değer=-4
  sonuç=-2
 İkilik:
  değer=1111111111111111111111111111111111111111111111111111111111111100
  sonuç=1111111111111111111111111111111111111111111111111111111111111110
 DİKKAT: işaret bitinin kopyası sola kaydırıldı

İfade: -1 = -4 >> 2
 Onluk:
  değer=-4
  sonuç=-1
 İkilik:
  değer=1111111111111111111111111111111111111111111111111111111111111100
  sonuç=1111111111111111111111111111111111111111111111111111111111111111
 DİKKAT: bitler sağa kaydırıldı

İfade: -1 = -4 >> 3
 Onluk:
  değer=-4
  sonuç=-1
 İkilik:
  değer=1111111111111111111111111111111111111111111111111111111111111100
  sonuç=1111111111111111111111111111111111111111111111111111111111111111
 DİKKAT: yukarıdakiyle aynı; -1'dan sonrası kaydırılamaz


--- POZİTİF TAMSAYILARDA SOLA BİT KAYDIRMA ---
İfade: 8 = 4 << 1
 Onluk:
  değer=4
  sonuç=8
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=0000000000000000000000000000000000000000000000000000000000001000
 DİKKAT: sağ taraf sıfırlarla doldurulur

İfade: 4611686018427387904 = 4 << 60
 Onluk:
  değer=4
  sonuç=4611686018427387904
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=0100000000000000000000000000000000000000000000000000000000000000

İfade: -9223372036854775808 = 4 << 61
 Onluk:
  değer=4
  sonuç=-9223372036854775808
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=1000000000000000000000000000000000000000000000000000000000000000
 DİKKAT: işaret bitleri dışa kaydırılır

İfade: 0 = 4 << 62
 Onluk:
  değer=4
  sonuç=0
 İkilik:
  değer=0000000000000000000000000000000000000000000000000000000000000100
  sonuç=0000000000000000000000000000000000000000000000000000000000000000
 DİKKAT: bitler sola kaydırıldı


--- NEGATİF TAMSAYILARDA SOLA BİT KAYDIRMA ---
İfade: -8 = -4 << 1
 Onluk:
  değer=-4
  sonuç=-8
 İkilik:
  değer=1111111111111111111111111111111111111111111111111111111111111100
  sonuç=1111111111111111111111111111111111111111111111111111111111111000
 DİKKAT: sağ taraf sıfırlarla doldurulur

İfade: -9223372036854775808 = -4 << 61
 Onluk:
  değer=-4
  sonuç=-9223372036854775808
 İkilik:
  değer=1111111111111111111111111111111111111111111111111111111111111100
  sonuç=1000000000000000000000000000000000000000000000000000000000000000

İfade: 0 = -4 << 62
 Onluk:
  değer=-4
  sonuç=0
 İkilik:
  değer=1111111111111111111111111111111111111111111111111111111111111100
  sonuç=0000000000000000000000000000000000000000000000000000000000000000
 DİKKAT: işaret biti dahil, bitler soldan dışa kaydırıldı

Uyarı

32 bitlik sistemlerde 32 bitten fazla sağa kaydırma yapmayın. 32 bitten daha geniş bir sayıyla sonuçlanacak şekilde sola kaydırma yapmayın. PHP_INT_MAX'tan büyük sayılar üzerinde bitsel işlemler yapacaksanız gmp eklentisindeki işlevleri kullanın.

Ayrıca bakınız: pack(), unpack(), gmp_and(), gmp_or(), gmp_xor(), gmp_testbit(), gmp_clrbit()



Karşılaştırma İşleçleri

Karşılaştırma işleçleri isminden de anlaşılacağı üzere iki değerin karşılaştırılmasını sağlarlar. Çeşitli veri türleri arasındaki karşılaştırma örneklerinin yer aldığı tür karşılaştırma tabloları ilginizi çekebilir.

Karşılaştırma İşleçleri
Örnek İsim Sonuç
$a == $b Eşittir $a ve $b aynı değere sahipse sonuç TRUE olur.
$a === $b Aynıdır $a ve $b aynı değere sahipse ve türleri de aynıysa sonuç TRUE olur. (PHP 4'ten beri vardır.)
$a != $b Eşit değildir $a ve $b aynı değere sahip değilse sonuç TRUE olur.
$a <> $b Eşit değildir $a ve $b aynı değere sahip değilse sonuç TRUE olur.
$a !== $b Farklıdır $a ve $b aynı değere sahip değilse veya türleri aynı değilse sonuç TRUE olur. (PHP 4'ten beri vardır.)
$a < $b Küçüktür $a kesin olarak $b'den küçükse sonuç TRUE olur.
$a > $b Büyüktür $a kesin olarak $b'den büyükse sonuç TRUE olur.
$a <= $b Küçük veya eşittir $a, $b'den küçük veya ona eşitse sonuç TRUE olur.
$a >= $b Büyük veya eşittir $a, $b'den büyük veya ona eşitse sonuç TRUE olur.

Bir tamsayıyı bir dizge ile karşılaştırmak isterseniz dizge önce bir sayıya dönüştürülür. İki sayısal dizge tamsayı karşılaştırması olarak ele alınır. Bu kurallar ayrıca switch deyimine de uygulanır.

<?php
var_dump
(== "a"); // 0 == 0 -> doğru
var_dump("1" == "01"); // 1 == 1 -> doğru
var_dump("1" == "1e0"); // 1 == 1 -> doğru

switch ("a") {
case 
0:
    echo 
"0";
    break;
case 
"a"// burası hiç işlem görmez, çünkü "a" daima 0 ile eşleşir
    
echo "a";
    break;
}
?>

Çeşitli türler arasında karşılaştırma aşağıdaki tabloya ve tablodaki sıralamaya uygun olarak yapılır.

Çeşitli Türlerin Karşılaştırılması
1. Terimin Türü 2. Terimin Türü Sonuç
null veya string string NULL, "" dizgesine dönüştürülür, sayısal veya alfabetik karşılaştırma yapılır.
bool veya null herhangi bir tür bool türüne dönüşümden sonra FALSE < TRUE karşılaştırması yapılır
object object Yerleşik sınıflar kendi karşılaştırmalarını tanımlayabilir. Farklı sınıflar karşılaştırılamazlar. Aynı sınıfın özellikleri dizilerdeki gibi (PHP 4) karşılaştırırılır. PHP 5'in uygulaması farklıdır.
string, resource veya number string, resource veya number Diziler ve özkaynaklar sayılara dönüştürülür, sayısal karşılaştırma yapılır.
array array Daha az üyeye sahip dizi diğerinden küçüktür. Eğer 1. terimin anahtarı 2. terimde yoksa diziler karşılaştırılamaz. Karşılaştırma daima değerler karşılaştırılarak yapılır (aşağıdaki örneğe bakınız).
array herhangi bir tür array daima büyüktür.
object herhangi bir tür object daima büyüktür

Örnek 1 - Özetle Standard Dizi Karşılaştırması

<?php
// Diziler bunun gibi standart karşılaştırma işleçleri ile karşılaştırılır
function standard_dizi_karşılaştır($trm1$trm2)
{
    if (
count($ter1) < count($ter2)) {
      return -
1;                          // $ter1 < $ter2
    
} elseif (count($op1) > count($op2)) {
        return 
1;                         // $ter1 > $ter2
    
}
    foreach (
$ter1 as $anh => $değ) {
        if (!
array_key_exists($anh$ter2)) {
            return 
null;                   // karşılaştırılamaz
        
} elseif ($değ $ter2[$anh]) {
            return -
1;
        } elseif (
$değ $ter2[$anh]) {
            return 
1;
        }
    }
    return 
0// $ter1 == $ter2
}
?>

Ayrıca, strcasecmp(), strcmp() işlevlerine, Dizi işleçlerine ve Türler bölümüne de bakınız.

Üç Terimli İşleç

Diğer bir karşılaştırma işleci ?: (üç terimli) işlecidir.

Örnek 2 - Öntanımlı bir değer atama

<?php
// Üç terimli işleç için kullanım örneği
$action = (empty($_POST['action'])) ? 'default' $_POST['action'];

// Yukarıdaki kod ile buradaki if/else deyimi aynı işlemi yapar.
if (empty($_POST['action'])) {
    
$action 'default';
} else {
    
$action $_POST['action'];
}

?>

(ifade1) ? (ifade2) : (ifade3) ifadesinin sonucu, ifade1 doğruysa ifade2 değilse ifade3'dir.

PHP 5.3'ten itibaren üç terimli işlecin orta parçasını dışarda bırakmak mümkündür. ifade1 ?: ifade3 ifadesinin sonucu ifade1 TRUE ise ifade1 ile değilse ifade3'tür.

Bilginize: Üç terimli işleç aslında bir deyimdir, dolayısıyla sonucu bir değişkene atanamaz. Bir değişkeni gönderimli döndürmek istediğiniz takdirde bu önem kazanır. Gönderimli olarak değer döndüren bir işlevde return $var == 42 ? $a : $b; deyimi bu bakımdan çalışmaz ve güncel PHP sürümlerinde bir uyarı gösterilir.

Bilginize: Üç terimli işleçleri iç içe kullanmanız önerilmez. PHP'nin böyle bir işlemin tek bir deyimde yapılmak istenmesi durumundaki davranışı beklendiği gibi olmayabilir.

Örnek 3 - İç içe üç terimli davranışı

<?php
// ilk bakışta aşağıdaki deyimin sonucu 'true' olacak sanılır.
echo (true?'true':false?'t':'f');

// ancak gerçekte çıktı 't' olur.
// Çünkü üç terimli ifade soldan sağa değerlendirilir.

// Aynı deyimi şöyle yazarsanız, durum anlaşılır hale gelir
echo ((true 'true' false) ? 't' 'f');

// Burada, ilk ifade mantıksal olarak doğru olduğundan sonuç 'true'
// olacak, böylece ikinci üç terimlinin ilk terimi 'true' olacak ve
// ikinci üç terimliden 't' dönecektir.
?>




Hata Denetim İşleçleri

PHP tek bir hata denetim işlecini destekler: kuyruklu a imi (@). PHP'de bir deyimin başına getirildiğinde, bu deyimin üreteceği olası hata iletileri yok sayılır.

Eğer track_errors özelliği etkinse bu deyimin ürettiği hata iletileri $php_errormsg değişkenine kaydedilir. Her hata oluşunda yeni hata eskisinin yerini alacağından bu değişkene yeterli sıklıkta bakmanız gerekir.

<?php
/* Kasıtlı dosya hatası */
$dosyam = @file ('var_olmayan_dosya') or
    die (
"Dosya açılamadı: hata '$php_errormsg' değişkeninde kayıtlı");

// İfadelerle çalışır ama işlevlerle çalışmaz:
$değer = @$cache[$key];
// $key indisi mevcut değilse bir uyarı çıktılanır.

?>

Bilginize: Kuyruklu a işleci sadece ifadelerin başında kullanıldığında çalışır. Kısaca: Bir değer elde edebildiğiniz herşeyin başına @ getirebilirsiniz. Örneğin, değişkenlerin işlev veya include() çağrılarının, sabitlerin ve benzerlerinin başına @ getirebilirsiniz. Ama işlev veya sınıf tanımlarının veya if ve foreach gibi denetim yapılarının başına @ koyamazsınız.

Ayrıca, error_reporting() işlevine ve Hata İşleme ve Günce Kayıt İşlevleri bölümüne bakınız.

Uyarı

Şu an @ hata denetim işleci, betiğin çalışmasını sonlandıracak önemli hataların raporlanmasını bile iptal edebilmektedir. Bu bakımdan, işleci örneğin bir işlevden kaynaklanabilecek hataları bastırmak için kullanıyorsanız, işlev tanımında yaptığınız yazım hataları veya işlevin yokluğu halinde ne olup bittiğini anlamadan betiğiniz sonlanıverebilir.



Çalıştırma İşleci

PHP tek bir çalıştırma işlecini destekmektedir: ters tırnak imleri (``). Bunların bildiğiniz tek tırnaklar olmadığına dikkat edin! Ters tırnak imlerinin arasına yazılmış komutları PHP komut satırında çalıştıracak ve çıktısını döndürecektir. Yani, komut satırına birşey çıktılanmaz; ama sonucu bir değişkene atayabilirsiniz. Çalıştırma işleci shell_exec() işlevinin yaptığı işi yapar.

<?php
$output 
= `ls -al`;
echo 
"<pre>$output</pre>";
?>

Bilginize: safe_mode etkinse veya shell_exec() işlevi etkin değilse, çalıştırma işleci etkin değildir.

Ayrıca, Program Çalıştırma İşlevleri, popen(), proc_open() işlevleri ve PHP'nin komut satırından kullanılması bölümüne de bakınız.



Arttırım ve Eksiltim İşleçleri

PHP, C tarzı önceden ve sonradan arttırım ve eksiltim işleçlerini destekler.

Bilginize: Arttırım ve eksiltim işleçleri mantıksal değerler üzerinde etkisizdir. NULL değerini eksiltmenin bir etkisi yoktur fakat arttırmanın sonucu 1'dir.

Arttırım ve Eksiltim İşleçleri
Örnek İsim Etkisi
++$a Önceden arttırım $a bir arttırıldıktan sonra döndürülür.
$a++ Sonradan arttırım $a döndürüldükten sonra değeri bir arttırılır.
--$a Önceden eksiltim $a bir eksiltildikten sonra döndürülür.
$a-- Sonradan eksiltim $a döndürüldükten sonra değeri bir eksiltilir.

Basit bir betik örneği:

<?php
echo "<h3>Sonradan arttırım</h3>\n";
$a 5;
echo 
"5 olmalı: " $a++ . "<br />\n";
echo 
"6 olmalı: " $a "<br />\n";

echo 
"<h3>Önceden arttırım</h3>\n";
$a 5;
echo 
"6 olmalı: " . ++$a "<br />\n";
echo 
"6 olmalı: " $a "<br />\n";

echo 
"<h3>Sonradan eksiltim</h3>\n";
$a 5;
echo 
"5 olmalı: " $a-- . "<br />\n";
echo 
"4 olmalı: " $a "<br />\n";

echo 
"<h3>Önceden eksiltim</h3>\n";
$a 5;
echo 
"4 olmalı: " . --$a "<br />\n";
echo 
"4 olmalı: " $a "<br />\n";
?>

PHP, karakter değişkenleri üzerinde çalışırken C'nin değil Perl'in yöntemlerini izler. Örneğin, Perl'de 'Z'+1 ifadesi 'AA' değerini döndürürken, C'de '[' döner ( ord('Z') == 90, ord('[') == 91 ). Karakterlerin arttırılabileceğini fakat azaltılamayacağını ve sadece ASCII harflerin (a-z ve A-Z) desteklendiğine dikkat ediniz.

Örnek 1 - Karakter değişkenleri üzerinde aritmetik işlemler

<?php
$i 
'W';
for (
$n=0$n<6$n++) {
    echo ++
$i "\n";
}
?>

Yukarıdaki örneğin çıktısı:

X
Y
Z
AA
AB
AC

Mantıksal değerlere arttırım ve eksiltim uygulamanın bir etkisi olmaz.



Mantıksal İşleçler

Mantıksal İşleçler
Örnek İsim Sonuç
$a and $b Ve $a ve $b her ikisi de doğruysa sonuç doğrudur (TRUE).
$a or $b Veya $a veya $b doğruysa sonuç doğrudur.
$a xor $b Ayrıcalıklı Veya $a veya $b doğruysa sonuç doğru, her ikiside doğruysa sonuç yanlıştır (FALSE).
! $a Değil $a doğru değilse sonuç doğrudur.
$a && $b Ve $a ve $b her ikisi de doğruysa sonuç doğrudur.
$a || $b Veya $a veya $b doğruysa sonuç doğrudur.

Ve, Veya işleçlerinin iki farklı türü olmasının sebebi önceliklerinin farklı oluşudur. (Bakınız: İşleç Önceliği.)

Örnek 1 - Örneklerle mantıksal işleçler

<?php
// --------------------
// Aşağıdaki ifadelerde ilk terim sonucu belirlediğinden ikinci
// terime hiç bakılmayacak, yani foo() işlevi hiç çağrılmayacaktır.
$a = (false && foo());
$b = (true  || foo());
$c = (false and foo());
$d = (true  or  foo());

// --------------------
// "||" işlecinin önceliği "or" işlecinden yüksektir.
// İfadenin sonucu $e'ye atanır (false || true)
// Tıpkı şöyle: ($e = (false || true))
$e false || true;

// false sabiti $f'ye atanır ve true yoksayılır
// Tıpkı böyle: (($e = false) or true)
$f false or true;

var_dump($e$f);

// --------------------
// "&&" işlecinin önceliği "and" işlecinden yüksektir.
// İfadenin sonucu $g'ye atanır (true && false)
// Tıpkı böyle: ($g = (true && false))
$g true && false;

// true sabiti $h'ya atanır ve false yoksayılır
// Tıpkı böyle: (($h = true) and false)
$h true and false;

var_dump($g$h);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

bool(true)
bool(false)
bool(false)
bool(true)


Dizge İşleçleri

İki tane dizge işleci vardır. İlki sol ve sağ terimlerini ard arda ekleyen birleştirme işleci ('.'), ikincisi ise sağ taraftaki değiştirgeyi sol taraftaki değiştirgeye ekleyen birleştirerek atama işlecidir (.=). Daha fazla bilgi için atama işleçleri bölümüne bakınız.

<?php
$a 
"Merhaba ";
$b $a "Dünyalı!"// $b artık "Merhaba Dünyalı!" içeriyor

$a "Merhaba ";
$a .= "Dünyalı!";     // $a artık "Merhaba Dünyalı!" içeriyor
?>

Ayrıca, string türünün açıklamasına ve Dizge İşlevleri bölümüne bakınız.



Dizi İşleçleri

Dizi İşleçleri
Örnek İsim Sonuç
$a + $b Birleşim $a ve $b'nin birleşimi.
$a == $b Eşitlik $a ve $b aynı anahtar/değer çiftlerine sahipse sonuç doğrudur.
$a === $b Aynılık $a ve $b aynı anahtar/değer çiftlerine sahipse ve bunların sırası ve türleri aynıysa sonuç doğrudur.
$a != $b Eşitsizlik $a ve $b birbirine eşit değilse sonuç doğrudur.
$a <> $b Eşitsizlik $a ve $b birbirine eşit değilse sonuç doğrudur.
$a !== $b Farklılık $a ve $b aynı dizi değilse sonuç doğrudur.

+ işleci sağ taraftaki dizinin elemanlarını sol taraftaki dizinin elemanlarının arasına ekler. Bunu yaparken anahtarları aynı olan elemanların üzerine yazılmaz.

<?php
$a 
= array("a" => "elma""b" => "armut");
$b = array("a" => "vişne""b" => "kiraz""c" => "çilek");

$c $a $b;
echo 
"\$a ve \$b'nin birleşimi: \n";
var_dump($c);

$c $b $a;
echo 
"\$b ve \$a'nın birleşimi: \n";
var_dump($c);
?>

Betik çalıştırıldığında şu çıktıyı verir:

$a ve $b'nin birleşimi:
array(3) {
  ["a"]=>
  string(4) "elma"
  ["b"]=>
  string(5) "armut"
  ["c"]=>
  string(6) "çilek"
}
$b ve $a'nın birleşimi:
array(3) {
  ["a"]=>
  string(6) "vişne"
  ["b"]=>
  string(5) "kiraz"
  ["c"]=>
  string(6) "çilek"
}

Aynı anahtar ve değere sahip dizi elemanları birbirine eşit kabul edilir.

Örnek 1 - Dizilerin karşılaştırılması

<?php
$a 
= array("elma""armut");
$b = array(=> "armut""0" => "elma");

var_dump($a == $b); // bool(true)
var_dump($a === $b); // bool(false)
?>

Ayrıca, array türünün açıklamasına ve Dizi İşlevleri bölümüne de bakınız.



Tür İşleçleri

instanceof işleci, bir PHP değişkeninin belli bir sınıfın nesnel örneği olup olmadığını saptar:

Örnek 1 - instanceof ve sınıflar

<?php
class Sınıfım
{
}

class 
BaşkaSınıf
{
}
$a = new Sınıfım;

var_dump($a instanceof Sınıfım);
var_dump($a instanceof BaşkaSınıf);
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(false)

instanceof ayrıca, bir değişkenin, bir ebeveyn sınıftan miras alınan bir sınıfın nesnel örneği olup olmadığını saptamak için de kullanılabilir:

Örnek 2 - Miras alınan sınıflar ve instanceof kullanımı

<?php
class EbeveynSınıf
{
}

class 
Sınıfım extends EbeveynSınıf
{
}

$a = new Sınıfım;

var_dump($a instanceof Sınıfım);
var_dump($a instanceof EbeveynSınıf);
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(true)

Bir nesne bir sınıfın örneği değilse bunu sınamak için mantıksal değil işleci kullanılabilir.

Örnek 3 - Bir sınıfın örneği olmayan bir sınıfın instanceof ile sınanması

<?php
class Sınıfım
{
}

$a = new Sınıfım;
var_dump(!($a instanceof stdClass));
?>

Yukarıdaki örneğin çıktısı:

bool(true)

Son olarak, instanceof işleci, bir değişkenin, bir arayüzü gerçekleyen bir sınıfın örneği olup olmadığını sınamak için kullanılabilir:

Örnek 4 - Arayüzler için instanceof kullanımı

<?php
interface Arayüzüm
{
}

class 
Sınıfım implements Arayüzüm
{
}

$a = new Sınıfım;

var_dump($a instanceof Sınıfım);
var_dump($a instanceof Arayüzüm);
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(true)

instanceof işlecinin normal olarak bir sayıl sınıf ismi ile kullanılmasının yanında başka bir nesne veya bir dizge değişkeni ile de kullanılabilir:

Örnek 5 - Başka değişkenlerle instanceof kullanımı

<?php
interface Arayüzüm
{
}

class 
Sınıfım implements Arayüzüm
{
}

$a = new Sınıfım;
$b = new Sınıfım;
$c 'Sınıfım';
$d 'BaşkaSınıf';

var_dump($a instanceof $b); // $b, Sınıfım sınıfının bir nesnesidir
var_dump($a instanceof $c); // $c 'Sınıfım' dizgesini içerir
var_dump($a instanceof $d); // $d 'BaşkaSınıf' dizgesini içerir
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(true)
bool(false)

Burada bilmeniz gereken bir kaç zorluk vardır. PHP 5.1.0 öncesinde, instanceof işleci, sınıf mevcut değilse __autoload() çağrısı yapardı. Buna ek olarak, sınıf yüklenmemişse bir ölümcül hata oluşurdu. Bunun olmaması için bir devingen sınıf gönderimi veya sınıf ismini içeren bir dizge değişkeni kullanılabilir:

Örnek 6 - PHP 5.0'da instanceof ile ölümcül hatalardan ve sınıf ismi aramalarından kaçınmak

<?php
$d 
'BaşkaSınıf';
var_dump($a instanceof $d); // burada ölümcül hata oluşmaz
?>

Yukarıdaki örneğin çıktısı:

bool(false)

instanceof işleci PHP 5'ten itibaren mevcuttur. Evvelce is_a() işlevi kullanılırdı fakat instanceof kullanımını teşvik etmek için is_a() kullanımı önerilmemekteyse de PHP 5.3.0'dan itibaren bundan vazgeçilmiştir.

Ayrıca, get_class() ve is_a() işlevlerine de bakınız.




Denetim Yapıları

İçindekiler


Giriş

Bütün PHP betikleri bir dizi deyimden oluşur. Bir deyim; bir atama, bir işlev çağrısı, bir döngü, bir koşullu deyim hatta hiçbir şey yapmayan bir deyim (boş bir deyim) olabilir. Deyimler bir noktalı virgülle sonlandırılır. Ek olarak, deyimler kaşlı ayraçlar içine alınarak deyim grupları haline getirilebilirler. Bir deyim grubu da kendi başına bir deyim olarak kabul edilir. Bu fasılda deyim türlerinden bahsedeğiz.



if

if oluşumu, PHP dahil olmak üzere birçok programlama dilindeki en önemli yapı taşlarından biri olup kod bölümlerinin koşullu olarak çalıştırılabilmelerini sağlar. PHP, C dilindekine benzer bir if yapısı sunar:

if (ifade)
    deyim

İfadelerle ilgili bölümde de anlatıldığı gibi, ifade kendi mantıksal değeri üzerinden değerlendirilir. ifade'nin sonucu TRUE ise, PHP deyim'i çalıştırır, FALSE ise gözardı eder. Hangi değerlerin FALSE olarak değerlendirildiği hakkında daha fazla bilgiyi boolean türüne dönüşüm bölümünde bulabilirsiniz.

Aşağıdaki örnek, $a değeri $b değerinden büyük olduğu takdirde a büyüktür b metnini görüntüleyecektir:

<?php
if ($a $b)
    echo 
"a büyüktür b";
?>

Çoğunlukla birden çok deyimin koşullu olarak çalıştırılmasını isteyeceksiniz. Elbette, her deyimi ayrı ayrı if cümlecikleri içine almanıza gerek yoktur. Birden çok deyimi tek bir deyim grubu içine toplayabilirsiniz. Örneğin, aşağıdaki kod $a değeri $b değerinden büyük olduğu takdirde a büyüktür b metnini görüntüleyecektir ve sonrasında $a değişkeninin değerini $b değişkenine atayacaktır:

<?php
if ($a $b) {
    echo 
"a büyüktür b";
  
$b $a;
}
?>

Sonsuz sayıda if deyimi bir başka if deyiminin içine gömülebilir. Bu, uygulamanızın çeşitli bölümlerine koşullu deyimler uygulayabilmeniz için tam bir esneklik sağlar.



else

Çoğu zaman belli bir koşul sağlandığında bir deyimin, o koşul sağlanmadığında başka bir deyimin çalıştırılmasını isteyeceksiniz. Bunun için else kullanılmaktadır. Else, bir if deyimini FALSE döndürdüğü takdirde bir deyim çalıştırmak üzere genişletir. Örneğin, aşağıdaki kod $a değeri $b değerinden büyükse a büyüktür b, büyük değilse a büyük değildir b iletisini görüntüleyecektir:

<?php
if ($a $b) {
    echo 
"a büyüktür b";
} else {
    echo 
"a büyük değildir b";
}
?>

Else deyimi yalnızca if deyiminin FALSE döndürdüğü durumda çalıştırılacaktır. Aynı durum, FALSE döndüren herhangi bir elseif ifadesinin olması durumunda da geçerlidir (bakınız elseif).



elseif/else if

elseif, isminden de anlaşılacağı gibi, if ve else deyimlerinin biraraya gelmesiyle oluşur. else gibi, orijinal if ifadesinin FALSE döndürdüğü durumda farklı bir deyimin çalıştırılması için kullanılır. Ancak, else'ten farklı olarak, ilgili deyimi sadece kendisine ait koşullu ifade TRUE değerini döndürdüğü takdirde çalıştıracaktır. Örneğin, aşağıdaki kod a büyüktür b, a eşittir b ya da a küçüktür b iletisini görüntüleyecektir:

<?php
if ($a $b) {
    echo 
"a büyüktür b";
} elseif (
$a == $b) {
    echo 
"a eşittir b";
} else {
    echo 
"a küçüktür b";
}
?>

Aynı if deyimine ait birden çok elseif bulunabilir. İlk önce hangi elseif deyimi TRUE değerini döndürürse (eğer döndüren varsa) o deyim çalıştırılır. Bu deyimi 'elseif' biçiminde tek sözcük olarak kullanabileceğiniz gibi, 'else if' biçiminde iki sözcük olarak da kullanabilirsiniz, sonuç aynı olacaktır. Sözdiziminin anlamlandırılması açısından küçük bir farklılık olsa da (C diline aşinaysanız, onda da böyledir) sonuç olarak her ikisi de aynı sonucu üretecektir.

elseif ifadesi yalnızca kendisinden önceki if ifadesi ve bu ifadeye bağlı kendisinden önce gelen diğer tüm elseif ifadeleri FALSE ile sonuçlandığında çalıştırılır ve TRUE olarak değerlendirilir.

Bilginize: elseif ve else if, yukarıdaki örnekten anlaşılacağı üzere sadece kaşlı ayraçlar kullanıldığı zaman tamamen aynı şekilde ele alınacaktır. if ve elseif için iki noktalı sözdizimi kullanıldığında elseif'i iki sözcüğe ayırmamanız gerekir, yoksa PHP bir çözümleme hatası vererek başarısız olur.

<?php

/* Yanlış Yöntem: */
if($a $b):
    echo 
$a." büyüktür ".$b;
else if(
$a == $b): // Bu derlenmez.
    
echo "Üstteki satır bir çözümleme hatasına yol açar.";
endif;


/* Doğru Yöntem: */
if($a $b):
    echo 
$a." büyüktür ".$b;
elseif(
$a == $b): // Sözcüklerin birleşik oluşuna dikkat!
    
echo $a." eşittir ".$b;
else:
    echo 
$a." ne büyük ne de eşittir ".$b;
endif;

?>



Denetim yapıları için diğer sözdizimi

PHP bazı denetim yapıları için farklı bir sözdizimi sağlar. Bu yapılar if, while, for, foreach ve switch yapılarıdır. Her durumda, bu farklı sözdiziminin basit şekli açılışta kullanılan kaşlı ayracın yerine iki nokta imi (:) ve kapanışta kullanılan kaşlı ayraç yerine de sırasıyla endif;, endwhile;, endfor;, endforeach; ya da endswitch; deyimlerinden birini kullanmaktır.

<?php if ($a == 5): ?>
A eşittir 5
<?php endif; ?>

Yukarıdaki örnekte, içeriği "A eşittir 5" olan HTML bloğu iki noktalı sözdimi kullanılarak yazılmış bir if deyiminin içine gömülmüştür. HTML bloğu yalnızca $a değişkeni 5'e eşit olduğunda gösterilecektir.

İki noktalı sözdimi, else ve elseif için de kullanılabilir. Birazdan vereceğimiz örnek, iki noktalı sözdizimi ile yazılmış elseif ve else içeren bir if yapısıdır:

<?php
if ($a == 5):
    echo 
"a eşittir 5";
    echo 
"...";
elseif (
$a == 6):
    echo 
"a eşittir 6";
    echo 
"!!!";
else:
    echo 
"a ne 5 ne de 6'dır";
endif;
?>

Bilginize: Aynı denetim kümesi içinde karışık sözdizimi desteklenmemektedir.

Daha fazla örnek için while, for ve if cümleciklerine bakabilirsiniz.



while

while döngüsü PHP'de yer alan en basit döngü türüdür. C'deki karşılığı ile aynı şekilde çalışır. Bir while deyiminin basit kullanımı:

while (ifade)
    deyim

While deyiminin anlamı basittir. while deyimindeki ifade TRUE olduğu müddetçe etki alanındaki deyimleri PHP tekrar tekrar çalıştırır. İfadenin değeri döngünün her yinelenişinde yeniden değerlendirilir, deyimlerin çalıştırılması sırasında bu ifadenin değeri FALSE olsa bile, etki alanındaki deyimlerin tamamı çalıştırılıncaya kadar işlem devam eder. (PHP döngü içindeki deyimleri her yinelemede bir kere çalıştırır.) Bazen, while ifadesi daha başlangıçta FALSE değerini verir, bu durumda while etki alanındaki deyimler tek bir defa bile çalıştırılmazlar.

if deyiminde olduğu gibi, birden çok deyimi aynı while döngüsü içinde kaşlı ayraçlar arasında veya iki noktalı sözdizimini kullanarak gruplayabilirsiniz:

while (ifade):
    deyimler
    ...
endwhile;

Aşağıdaki örnekler birbirleri ile aynıdırlar, her ikisi de sayıları 1'den 10'a kadar yazacaktır:

<?php
/* örnek 1 */

$i 1;
while (
$i <= 10) {
    echo 
$i++;  /* yazdırılan değer $i
                    değerinin artıştan önceki
                    değeridir (sonda-arttırım) */
}

/* örnek 2 */

$i 1;
while (
$i <= 10):
    echo 
$i;
    
$i++;
endwhile;
?>



do-while

do-while döngüsü, while döngüsüne çok benzer; farkı, doğrulama ifadesinin her yinelemenin başında değil sonunda değerlendiriliyor olmasıdır. while döngüsü ile temek farklılık, do-while kullanıldığında ilk yinelemenin daima yapılıyor olmasıdır (ifadenin doğruluğuna yalnızca yinelemenin sonunda bakılır); halbuki while döngüsünde, ifadenin doğruluğuna her yinelemenin öncesinde bakılmakta ve ifadenin sonucu doğru değilse yineleme hiç başlatılmadan döngü sonlandırılmaktadır.

do-while döngüsü için yalnızca tek bir sözdizimi mevcuttur:

<?php
$i 
0;
do {
    echo 
$i;
} while (
$i 0);
?>

Yukarıdaki döngü tam olarak bir defa çalışacaktır, ilk tekrardan sonra ifadenin doğruluğuna bakıldığında FALSE değerini verecek ($i sıfırdan büyük değildir) ve döngünün çalışması sonlanacaktır.

<?php
do {
    if (
$i 5) {
        echo 
"i yeterince büyük değil";
        break;
    }
    
$i *= $çarpan;
    if (
$i $alt_sınır) {
        break;
    }
   echo 
"i uygun";

    
/* i değerini işle */

} while (0);
?>

Burada neler olup bittiğini anlamadıysanız endişelenmeyin. Bu 'özelliği' kullanmadan da oldukça gelişmiş ve güçlü uygulamalar geliştirebilirsiniz. PHP 5.3.0'dan beri bu özelliğin yerine goto kullanılabilmektedir.



for

for döngüsü, PHP'deki en karmaşık döngü yapısıdır. C'deki karşılığıyla aynı biçimde çalışır. for döngüsünün sözdimi:

for (ifade1; ifade2; ifade3)
    deyim

İlk ifade (ifade1) döngünün en başında bir kereliğine koşulsuz olarak çalıştırılır.

Her yinelemenin başında ifade2 yeniden değerlendirilir. Bu ifadeden TRUE sonucu elde edilirse, döngüye devam edilir ve döngünün etki alanındaki deyimler çalıştırılır. Bu ifadeden FALSE sonucu elde edildiğinde etki alanındaki deyimler çalıştırılmaksızın döngü sonlandırılır.

ifade3 ise her yinelemenin sonunda çalıştırılır.

Bu ifadelerin herbirini boş bırakmak da mümkündür. ifade2nin boş olması, döngünün sonsuza kadar çalıştırılacağı anlamına gelir (PHP, C'deki gibi bu durumu TRUE olarak değerlendirir). Döngülerden genellikle bir şarta bağlı olarak break deyimi ile çıkmak isteyeceğiniz düşünüldüğünde, bu durum düşündüğünüz kadar kullanışsız değildir.

Aşağıdaki örnekleri ele alalım. Hepsi de 1'den 10'a kadar sayıları görüntülemektedir:

<?php
/* örnek 1 */

for ($i 1$i <= 10$i++) {
    echo 
$i;
}

/* örnek 2 */

for ($i 1; ; $i++) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
}

/* örnek 3 */

$i 1;
for (; ; ) {
    if (
$i 10) {
        break;
    }
    echo 
$i;
    
$i++;
}

/* örnek 4 */

for ($i 1$j 0$i <= 10$j += $i, print $i$i++);
?>

Elbette, kullandığımız ilk örnek en güzel örnek olarak gözükmektedir (ya da belki dördüncü örnek), ancak birçok durumda for döngüsü içerisinde boş ifadeler kullanmayı oldukça kullanışlı bulabilirsiniz.

PHP, iki noktalı sözdizimini for döngüleri için de desteklemektedir.

for (ifade1; ifade2; ifade3):
    deyimler
    ...
endfor;

Çoğu kullanıcının yaptığı gibi diziler üzerindeki yinelemeleri şöyle yapabilirsiniz:

<?php
/*
 * Diziye baştan bir kaç veri atıp daha sonra
 * döngü içinde verilerde değişiklik yapacağız.
 */
$bizimkiler = Array(
        Array(
'isim' => 'Ali''tuz' => 856412),
        Array(
'isim' => 'Veli''tuz' => 215863)
        );

for(
$i 0$i sizeof($bizimkiler); ++$i)
{
    
$bizimkiler[$i]['tuz'] = rand(000000999999);
}
?>

Sorun ikinci ifadede gizlidir. Her yinelemede dizinin boyutları yeniden hesaplandığından kod yavaş çalışabilir. Örnekte boyut değişmediğinden dizi boyutunu önce bir değişkene atıp ifadede bu değişken kullanılarak kod en iyilenebilir. Aşağıdaki bunun yapılışı örneklenmiştir:

<?php
$bizimkiler 
= Array(
        Array(
'isim' => 'Ali''tuz' => 856412),
        Array(
'isim' => 'Veli''tuz' => 215863)
        );

for(
$i 0$size sizeof($bizimkiler); $i $size; ++$i)
{
    
$bizimkiler[$i]['salt'] = rand(000000999999);
}
?>



foreach

PHP 4 ile birlikte Perl ve bazı diğer dillerde mevcut olan foreach yapısı da kullanıma sunulmuştur. Bu deyim diziler üzerinde yineleme yapmayı kolaylaştırmaktadır. foreach yalnızca diziler için kullanılabilir; farklı veri türünde veya ilklendirilmemiş bir değişken ile kullanmak istediğinizde hata verir. İki sözdizimi mevcuttur; ikincisi birinciden biraz daha kullanışlıdır:

foreach (dizi_ifadesi as $değer)
    deyim
foreach (dizi_ifadesi as $isim => $değer)
    deyim

İlk sözdizimi dizi_ifadesi ile belirtilen dizinin üzerinde döngü oluşturur. Her yinelemede, sırası gelen elemanın değeri $değer değişkenine atanır ve dizi göstericisi bir arttırılır (böylece bir sonraki yinelemede dizinin bir sonraki elemanına bakılması sağlanmış olur).

İkinci yöntem de aynı şeyi yapar, ek olarak her yinelemede sırası gelen elemanın anahtarı $isim değişkenine atanır.

PHP 5'den itibaren, nesneleri yinelemek mümkün olmuştur.

Bilginize: foreach ilk çalışmaya başladığında, dizi göstericisi özdevinimli olarak ilk elemanı gösterecek biçimde sıfırlanır. Bu sebeple, foreach deyiminden önce reset() işlevini çalıştırmanıza gerek yoktur.

Bilginize: Dizi gönderimli olmadıkça, foreach dizinin kendisi üzerinde değil, bir kopyası üzerinde çalışır. Bundan dolayı özgün dizi göstericisi değiştirilmez ve döndürülen dizi elemanı üzerinde yapılan değişiklikler özgün diziye yansıtılmaz.

PHP 5'den itibaren, $değer değişkeninin önüne & koyarak dizi elemanları üzerinde kolayca değişiklik yapılabilmektedir. Bu kullanımla değeri kopyalamak yerine kendisine bir gönderim yapılması sağlanır.

<?php
$dizi 
= array(1234);
foreach (
$dizi as &$değer) {
    
$value $değer 2;
}
// $dizi artık array(2, 4, 6, 8) olmuştur
unset($değer); // son eleman da işlendiğine göre gönderimi kaldıralım
?>

Bu durum yalnızca yinelenen diziye gönderim yapılabiliyorsa mümkündür (örneğin, bir değişkense), yani aşağıdaki kod çalışmaz:

<?php
foreach (array(1234) as &$value) {
    
$value $value 2;
}

?>

Uyarı

$değer gönderim için kullanıldığından foreach döngüsünün sonunda son dizi elemanına gönderimli olarak kalır, bu bakımdan döngünün sonunda bu gönderimin unset() işlevi kullanılarak kaldırılması önerilir.

Bilginize: foreach, hata iletilerinin '@' kullanılarak gözardı edilmesi özelliğini desteklemez.

Aşağıdaki iki döngünün aynı işi yaptığını farkedeceksiniz:

<?php
$dizi 
= array("bir""iki""üç");
reset($dizi);
while (list(, 
$değer) = each($dizi)) {
    echo 
"Değer: $değer<br />\n";
}

foreach (
$dizi as $değer) {
    echo 
"Değer: $değer<br />\n";
}
?>

Aşağıdakiler de işlevsel olarak aynıdır:

<?php
$dizi 
= array("bir""iki""üç");
reset($dizi);
while (list(
$isim$değer) = each($dizi)) {
    echo 
"Anahtar: $isim; Değer: $değer<br />\n";
}

foreach (
$dizi as $isim => $değer) {
    echo 
"Anahtar: $isim; Değer: $değer<br />\n";
}
?>

Değişik kullanımlara örnekler:

<?php
/* foreach örneği 1: yalnızca değer */

$a = array(12317);

foreach (
$a as $v) {
   echo 
"\$a değişkeninin şu anki değeri: $v.\n";
}

/* foreach örneği 2: değer (örnek olması için anahtar
 *  ile birlikte yazdırılmıştır) */

$a = array(12317);

$i 0/* yalnızca örnekleme için */

foreach ($a as $v) {
    echo 
"\$a[$i] => $v.\n";
    
$i++;
}

/* foreach örneği 3: anahtar ve değer */

$a = array(
    
"bir" => 1,
    
"iki" => 2,
    
"üç"  => 3,
    
"on yedi" => 17
);

foreach (
$a as $k => $v) {
    echo 
"\$a[$k] => $v.\n";
}

/* foreach örneği 4: çok boyutlu diziler */
$a = array();
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach (
$a as $v1) {
    foreach (
$v1 as $v2) {
        echo 
"$v2\n";
    }
}

/* foreach örneği 5: devingen diziler */

foreach (array(12345) as $v) {
    echo 
"$v\n";
}
?>



break

break deyimi, for, foreach, while, do-while ve switch yapılarının çalışmasını sonlandırmak için kullanılır.

break deyiminde istenirse bir sayısal ifade belirtilebilir. Bu sayı iç içe yapılardan içten dışa kaç yapının aynı anda durdurulacağını belirler.

<?php
$arr 
= array('sıfır''bir''iki''üç''dur''dört''beş');
while (list(, 
$val) = each($arr)) {
    if (
$val == 'dur') {
        break;    
/* Burada 'break 1;' de yazabilirsiniz. */
    
}
    echo 
"$val<br />\n";
}

/* Sayısal değer kullanımı. */

$i 0;
while (++
$i) {
    switch (
$i) {
    case 
5:
        echo 
"5'de<br />\n";
        break 
1;  /* Yalnızca switch'ten çıkar. */
    
case 10:
        echo 
"10'da; çıkılıyor<br />\n";
        break 
2;  /* switch ve while'dan aynı anda çıkılır. */
    
default:
        break;
    }
}
?>



continue

continue deyimi döngü yapılarının içinde kullanılır. Bu deyim kullanıldığında, döngünün kalan kısmı atlanır ve sonraki yineleme başlatılır.

Bilginize: PHP'de switch deyimi continue deyiminin kullanılabileceği döngülerden biri olarak kabul edilmektedir.

continue deyimi ile seçime bağlı sayısal bir değer kullanılarak, atlama işleminin kaç seviye üstteki döngüye kadar uygulanacağı belirtilebilir.

<?php
while (list($key$value) = each($arr)) {
    if (!(
$key 2)) { // tek sayıları atla
        
continue;
    }
    
do_something_odd($value);
}

$i 0;
while (
$i++ < 5) {
    echo 
"Dış<br />\n";
    while (
1) {
        echo 
"&nbsp;&nbsp;Orta<br />\n";
        while (
1) {
            echo 
"&nbsp;&nbsp;İç<br />\n";
            continue 
3;
        }
        echo 
"Bu hiçbir zaman çıktı vermez.<br />\n";
    }
    echo 
"Bundan da çıktı alamazsınız.<br />\n";
}
?>

continue deyiminden sonra noktalı virgül konmazsa bu durum karışıklığa yol açabilir. Yapmamanız gereken ile ilgili bir örnek:

<?php
for ($i 0$i 5; ++$i) {
    if (
$i == 2)
        continue
    print 
"$i\n";
}
?>

Şu biçimde bir çıktı almayı bekleyebilirsiniz:

0
1
3
4

Ancak çıktı şu şekilde olacaktır:

2

Bunun sebebi print() işlevinden dönen değerin int(1) olması ve bu dönen değerin PHP tarafından yukarıda bahsedilen seçime sağlı sayısal değer olarak algılanmasıdır.



switch

switch deyimi, aynı ifade içersinde yer alan bir dizi IF deyimine benzer. Birçok durumda, aynı değişkeni (ya da ifadeyi) birden çok değerle karşılaştırmak ve her karşılaştırmanın sonucunu ayrı bir kod parçası çalıştırarak değerlendirmek istersiniz. İşte bu, switch deyiminin varlık sebebidir.

Bilginize: Başka bazı dillerden farklı olarak, continue deyimi switch ile uygulanabilir ve break ile benzerlik gösterir. Bir döngü içerisinde switch kullandıysanız ve kodun yürütülmesine dıştaki döngünün sonraki yinelemeden devam etmesini istiyorsanız, continue 2 kullanabilirsiniz.

Bilginize: switch ve case gevşek karşılaştırma yapar.

Aşağıdaki iki örnek aynı şeyi yazmanın iki farklı yolunu göstermektedir. Birincisi bir dizi if ve elseif deyiminin kullanımını, ikincisi ise switch deyiminin kullanımını örneklemektedir:

Örnek 1 - switch yapısı

<?php
if ($i == 0) {
    echo 
"i eşittir 0";
} elseif (
$i == 1) {
    echo 
"i eşittir 1";
} elseif (
$i == 2) {
    echo 
"i eşittir 2";
}

switch (
$i) {
case 
0:
    echo 
"i eşittir 0";
    break;
case 
1:
    echo 
"i eşittir 1";
    break;
case 
2:
    echo 
"i eşittir 2";
    break;
}
?>

Örnek 2 - switch ile dizge kullanımı

<?php
switch ($i) {
case 
"elma":
    echo 
"i bir elmadır";
    break;
case 
"çikolata":
    echo 
"i bir çikolatadır";
    break;
case 
"kek":
    echo 
"i bir kektir";
    break;
}
?>

Hatalardan kaçınmak için switch deyiminin nasıl çalıştığını anlamak önemlidir. switch deyimi satır satır ele alınır (aslında deyim deyim). Başlangıçta, hiçbir kod çalıştırılmaz. Yalnızca switch ifadesiyle birlikte verilen değer ile uyuşan case deyimi bulunduğunda PHP ilgili deyimleri çalıştırmaya başlar. PHP switch bloğu sonlanana kadar ya da ilk break deyimi ile karşılaşıncaya kadar çalışmasına devam eder. Bir case bloğunun sonuna break koymazsanız, PHP sonraki case deyiminden kodları çalıştırmaya devam eder. Örnek:

<?php
switch ($i) {
case 
0:
    echo 
"i eşittir 0";
case 
1:
    echo 
"i eşittir 1";
case 
2:
    echo 
"i eşittir 2";
}
?>

Burada, $i 0'a eşit ise, PHP tüm echo deyimlerini çalıştıracaktır! $i 1'e eşit ise, PHP son iki echo deyimini çalıştıracaktır! Beklediğiniz sonucu ('i eşittir 2' metninin görüntülenmesi) yalnızca $i 2'ye eşitse almanız mümkün olacaktır. Bu durumun oluşmaması için, break deyimini kullanmayı unutmamanız önemlidir (yine de, bazı durumlarda break deyimini kullanmak istemeyebilirsiniz).

Bir switch deyiminde, koşul yalnızca bir defa sorgulanır ve sonuç her bir case deyimi ile karşılaştırılır. Bir elseif deyiminde ise, koşul tekrar sorgulanır. Kullanmak istediğiniz koşul basit bir karşılaştırma işleminden daha karmaşıksa ve/veya bir döngü içerisindeyse, switch kullanmak daha hızlı olabilir.

case bloğu kod içermeyebilir ve amacı yalnızca denetimi bir sonraki case bloğuna geçirmek olabilir.

<?php
switch ($i) {
case 
0:
case 
1:
case 
2:
    echo 
"i 3'ten küçüktür ama negatif değildir";
    break;
case 
3:
    echo 
"i eşittir 3";
}
?>

default durumu özel bir durumdur. Bu durum diğer hiçbir case ile uyuşmayan değerler için kullanılır ve en sonda yer almalıdır. Örneğin:

<?php
switch ($i) {
case 
0:
    echo 
"i eşittir 0";
    break;
case 
1:
    echo 
"i eşittir 1";
    break;
case 
2:
    echo 
"i eşittir 2";
    break;
default:
    echo 
"i ne 0, ne 1 ne de 2'ye eşittir";
}
?>

case ifadesi bir basit tür olarak değerlendirilebilecek herhangi bir tür olabilir; yani, tam sayı (integer), gerçel sayı (float) veya dizge (string) olabilir. Diziler (array) ya da nesneler (object), bir basit türe indirgenmedikleri sürece kullanılamazlar.

İki noktalı sözdizimi switch deyimi için de desteklenmektedir. Daha fazla bilgi için, Denetim yapıları için diğer söz dizimi bölümünü inceleyebilirsiniz.

<?php
switch ($i):
case 
0:
    echo 
"i eşittir 0";
    break;
case 
1:
    echo 
"i eşittir 1";
    break;
case 
2:
    echo 
"i eşittir 2";
    break;
default:
    echo 
"i ne 0, ne 1 ne de 2'ye eşittir;
endswitch;
?>

case’ten sonraki iki nokta yerine aşağıdaki gibi deyim sonunda noktalı virgül kullanmak da mümkündür:

<?php
switch($içecek)
{
    case 
'su';
    case 
'süt';
    case 
'ayran';
        echo 
'İyi seçim';
    default;
        echo 
'Lütfen yeniden seçiniz...';
    break;
}
?>



declare

declare yapısı bir kod bloğunun çalıştırılması esnasında uygulanacak yönergeleri belirlemek için kullanılır. declare yapısının sözdizimi diğer akış denetim yapılarının söz dizimi ile benzerdir:

declare (yönerge)
    deyim

yönerge bölümü, declare bloğunun davranışını belirlemek için kullanılır. Şimdilik yalnızca iki yönerge kullanılabilmektedir: ticks yönergesi (Daha fazla bilgi edinmek için aşağıya, ticks yönergesine bakınız.) ve encoding yönergesi.

Bilginize: encoding yönergesi PHP 5.3.0'da eklenmiştir.

declare bloğunun deyim bölümünün nasıl çalıştırılacağı ve çalışma esnasındaki yan etkilerinin ne olacağı yönerge bölümünde belirtilen yönergeye bağlı olabilir.

declare bloğu kendinden sonra gelen tüm kodu etkilemesi için genel betik kapsamında da kullanılabilir. Bununla birlikte, declare bloğu dahil edilen bir dosyanın içindeyse ebeveyn dosya bundan etkilenmez.

<?php
// aşağıdaki iki örnek aynıdır:

// bunu kullanabilirsiniz:
declare(ticks=1) {
    
// betiğin tamamı burada
}

// ya da bunu kullanabilirsiniz:
declare(ticks=1);
    
// betiğin tamamı burada
?>

Tikler

Bir "tik", declare bloğu içersinde çözümleyici tarafından çalıştırılan her N tiklenebilir deyimde bir ortaya çıkan bir olaydır. N değeri, declare bloğunun yönerge bölümünde ticks=N kullanılarak belirtilir.

Her deyim tik sayımına dahil edilebilir değildir. Koşullu ifadeler ve değiştirge ifadeleri bu tür deyimlerdendir.

Her tik ile oluşturulacak eylem register_tick_function() işlevi ile belirtilir. Daha ayrıntılı bilgi için aşağıdaki örneğe bakınız. Her tik için birden fazla olayın oluşabileceğini gözardı etmeyiniz.

Örnek 1 - Tik kullanım örneği 1

<?php

declare(ticks=1);

// Her tik deyimde bir çalıştırılacak işlev
function tik_eylemci()
{
    echo 
"tik_eylemci() çağrıldı\n" ;
}

// Tik eylemcisini belirtelim
register_tick_function("tik_eylemci");

$a 1;

if (
$a 0) {
        
$a += 2;
        print(
$a);
}
?>

Örnek 2 - Tik kullanım örneği 2

<?php

function tik_eylemci()
{
    echo 
"tik_eylemci() çağrıldı\n" ;
}

$a 1;
tik_eylemci();

if (
$a 0) {
        
$a += 2;
        
tik_eylemci();
        print(
$a);
        
tik_eylemci();
}
tik_eylemci();

?>

Ayrıca, register_tick_function() ve unregister_tick_function() işlevlerini de inceleyin.

encoding

Her betiğin karakter kodlaması betiğin başında encoding yönergesi ile belirtilebilir.

Örnek 3 - Betik için kodlama belirtmek

<?php
declare(encoding='ISO-8859-1');
// kodlar burada
?>

Dikkat

İsim alanları ile birlikte kullanıldığında, tek geçerli sözdizimi declare(encoding='...'); olup, buradaki ... kodlama değeridir. declare(encoding='...') {} sözdizimi isim alanları ile birlikte kullanıldığında bir çözümleme hatası ile sonuçlanacaktır.

Karakter kodlaması bildirim değeri, PHP, --enable-zend-multibyte yapılandırma seçeneği ile derlenmediği takdirde PHP 5.3'te yoksayılır. PHP 6.0'da encoding yönergesi, dosya oluşturulurken hangi kodlamanın kullanıldığını tarayıcıya bildirmek için kullanılır. Meşru değerler, UTF-8 gibi karakter kodlaması isimleridir.



return

Bir işlevin içinde kullanıldığında, return() deyimi çalışmakta olan işlevi hemen sonlandırıp değiştirgesini çağrılan işlevin değeri olarak döndürür. return() ayrıca, bir betiğin veya bir eval() deyiminin çalışmasını sonlandırmak için de kullanılabilir.

Betik genelinde çağrıldığında, betik dosyasının çalışmasını sonlandırılır. Eğer dosya include() ya da require() ile betik dosyasına dahil edilmiş bir dosya ise, return() deyimi akış denetiminin ana dosyaya aktarılmasını sağlar. Dahası, return() deyiminin çağrıldığı dosya include() ile dahil edilmişse return() değeri include() çağrısının değeri olarak dönecektir. return() ana betik dosyasının içinden çağrıldığı takdirde, betiğin çalışması sonlandırılacaktır. Eğer return() deyiminin çağrıldığı dosya, ismi php.ini içindeki auto_prepend_file veya auto_append_file yapılandırma seçenekleri ile atanan bir dosya ise bu betik dosyasının da çalışmasını sonlandıracaktır.

Daha fazla bilgi için, Dönüş değerleri bölümüne bakınız.

Bilginize: return() bir işlev değil bir dil oluşumu olduğundan, değiştirgesini içeren parantez yalnızca değiştirge bir ifade içeriyorsa zorunludur. Bir değişken döndürürken genellikle parantez kullanılmaz. Böyle bir durumda, PHP'nin daha az işlem yapması için bu yöntemi izlemeniz gerekir.

Bilginize: Değiştirgesiz kullanılacaksa yaylı ayraçlar konulmamalıdır bu durumda dönen değer NULL olur. Değiştirge içermeyen yaylı ayraçların kullanımı bir çözümleme hatası ile sonuçlanır.

Bilginize: Bir değişkeni gönderimli olarak döndürüyorsanız, asla parantez kullanmamalısınız, bu çalışmayacaktır. Bir deyimin sonucunu gönderimli olarak döndüremezsiniz, yalnızca değişkenler gönderimli olarak döndürülebilir. return ($a); kullanıyorsanız, bir değişken değil, bir ifadenin sonucunu ($a) döndürüyorsunuz demektir (bu da elbette, $a değişkeninin değeridir).



require()

require() deyimi bir başarısızlıkta E_ERROR seviyesinden ölümcül bir hata vermesi dışında include() deyimi ile aynıdır. Başka bir deyişle, include() deyiminin sadece bir uyarı (E_WARNING) vererek çalışmayı sürdürdüğü durumda require() deyimi betiğin hata vererek durmasına sebep olur.

Deyimin nasıl çalıştığını öğrenmek için include() belgesine bakınız.



include()

include() deyimi belirtilen dosyayı betiğe ekler ve içeriğini değerlendirir.

Betiğe dahil edilecek dosyalar önce belirtilen dizinde aranır, eğer bir dizin belirtilmemişse include_path yönergesinde belirtilen yollarda aranır. include() dosyayı bulamazsa bir uyarı çıktılar; require() için bu davranış bir ölümcül hata olarak kendini gösterir.

Bir dizin belirtilmişse (göreli veya mutlak) include_path yönergesine bakılmaz. Örneğin bir dosya ../ ili başlıyorsa PHP çözümleyicisi dosyayı betiğin bulunduğu dizinin üst dizininde arayacaktır.

PHP'nin dahil edilen dosyaları nasıl ele aldığı include_path yönergesinin açıklamasında ayrıntılı olarak anlatılmıştır.

Bir dosya bir betiğe dahil edildiğinde, bu dosyanın içerdiği kod, dosyanın dahil edildiği satır itibariyle ana betikte geçerli olan değişken uzayını miras alır. Yani, dosyanın dahil edildiği satıra kadar mevcut değişkenlerin hepsi dahil edilen dosyanın içinde kullanılabilir olacaktır. Bunun yanında, dahil edilen dosyada tanımlanmış işlevlerin ve sınıfların tamamı ana betiğin genelinde tanımlanmış sayılır.

Örnek 1 - Basit bir include() örneği

vars.php
<?php

$renk 
'yeşil';
$meyve 'elma';

?>

dnm.php
<?php

echo "Bir $renk $meyve"// -> Bir

include 'vars.php';

echo 
"Bir $renk $meyve"// -> Bir yeşil elma

?>

include deyimi, bir işlevin içinde kullanılırsa dahil edilmek istenen dosyanın içindeki tüm kodlar sanki o işlev içinde tanımlanmış gibi çalıştırılacaktır. Bu durumda dahil edilen dosyadaki kodlar, işlevin, dosyanın dahil edildiği noktadaki değişken uzayını miras alacaktır. Bu kuralın istisnası dosya dahil edilmeden önce çözümleyici tarafından işleme sokulan sihirli sabitlerdir.

Örnek 2 - İşlev içi include kullanımı

<?php

function foo()
{
    global 
$renk;

    include 
'vars.php';

    echo 
'Bir $renk $meyve';
}

/* vars.php, foo() işlevinin etki alanındadır
 * dolayısıyla $meyve bu alanın dışında
 * kullanılamamaktadır. $renk ise global olarak
 * tanımlandığından kullanılabilir
 */
foo();                      // Bir yeşil elma
echo 'Bir $renk $meyve';    // Bir yeşil

?>

Bir dosya bir betiğe dahil edildiğinde, çözümleme işlemi PHP kipinden çıkıp hedef dosyanın başlangıcında HTML kipine geçer ve dosyanın sonuna kadar HTML kipinde kalır. Bu sebeple, hedef dosyanın içindeki kodlardan PHP kodları olarak çalıştırılacaklar PHP başlangıç ve bitiş etiketleri arasına alınmalıdır.

"URL fopen sarmalayıcıları" PHP'de etkinleştirilmiş ise (öntanımlı yapılandırmada etkindirler), include deyiminde yerel dosya yolu belirtmek yerine (HTTP ya da desteklenen başka bir sarmalayıcı üzerinden - Desteklenen Protokollerin ve Sarmalayıcıların Listesi bölümününe bakınız) bir URL kullanabilirsiniz. Hedef sunucu, hedef dosyayı PHP kodu olarak çalıştırabiliyorsa, ana betikteki değişkenler dahil edilen dosyaya bir URL istek dizgesi olarak HTTP GET ile aktarılabilir. Bu durum dahil edilen dosyaya ana dosyanın değişken uzayını miras olarak bırakmaktan biraz farklı bir şeydir; betik aslında uzak sunucuda çalıştırılıp yerel betiğe sonuçlar dahil edilmektedir.

Uyarı

PHP'nin 4.3.0 öncesi Windows sürümü uzak dosyalara bu işlev üzerinden erişimi allow_url_fopen etkin olsa bile desteklemez.

Örnek 3 - HTTP üzerinden include

<?php

/* Bu örnekte  mesela.dom sitesinin .php uzantılı dosyaları
 * çalıştırabildiği ama .txt uzantılıları çalıştırmadığı
 * varsayılmıştır. Ayrıca, buradaki 'Çalışır'ın manası
 * $foo ve $bar değişkenlerinin dahil edilen dosyada kullanılabilir
 * olduğudur. */

// Çalışmaz; dosya.txt dosyası mesela.dom sitesinde çalıştırılmaz
include 'http://mesela.dom/dosya.txt?foo=1&bar=2';

// Çalışmaz; yerel dosya sisteminde 'dosya.php?foo=1&bar=2'
// adında bir dosya olarak aranır.
include 'dosya.php?foo=1&bar=2';

// Çalışır.
include 'http://mesela.dom/dosya.php?foo=1&bar=2';

$foo 1;
$bar 2;
include 
'dosya.txt';  // Çalışır.
include 'dosya.php';  // Çalışır.

?>

Uyarı

Güvenlik uyarısı

Uzaktaki dosya uzaktaki sunucu tarafından işlenebilir (dosyanın uzantısına ve uzaktaki sunucunun PHP çalıştırıp çalıştırmadığına bağlı olarak). Ancak, elde edilecek çıktı yerel sunucuda çalıştırılacağından bu işlemin sonucu mutlaka geçerli bir PHP betiği üretmek olmalıdır. Dosyanın uzaktaki sunucuda işlenip sadece sonucun çıktılanmasını istiyorsanız readfile() işlevi daha iyi bir seçim olacaktır. Aksi takdirde, uzakta çalıştırılan betiğin geçerli ve istenen kodu üretebilmesini güvence altına alabilmek için özel bir çaba harcamak gerekir.

Ayrıca, bu konuyla ilgili olarak Uzaktaki dosyaların kullanımı belgesiyle fopen() ve file() işlevlerine de bakınız.

return kullanımı: Dahil edilen dosyanın içersinde, bu dosyanın işlenmesi durdurmak ve dahil eden betiğe geri dönmek için return() kullanılabilir. Ayrıca, dahil edilen dosyalardan değer döndürmek de mümkündür. Normal bir işlevde olduğu gibi, include çağrısından elde edilen değeri bir değişkene atayabilirsiniz. Ancak bu durum, uzaktaki dosyalar için, sadece uzaktaki dosyanın çıktısı geçerli PHP başlangıç ve bitiş etiketlerine sahipse (herhangi yerel bir dosyada olduğu gibi), kullanılabilir. Gerekli değişkenler bu etiketlerin arasında tanımlandığında dosyanın dahil edildiği noktadan itibaren kullanılabilir olacaklardır.

include özel bir dil oluşumu olduğundan, değiştirgesinin parantez içine alınması gerekmez. Dönüş değerini karşılaştırırken buna dikkat edin.

Örnek 4 - include dönüş değerinin karşılaştırılması

<?php
// çalışmaz, include(('vars.php') == 'TAMAM') olarak değerlendirilir,
// sonuç include('') olur
if (include('vars.php') == 'TAMAM') {
    echo 
'TAMAM';
}

// çalışır
if ((include 'vars.php') == 'TAMAM') {
    echo 
'TAMAM';
}
?>

Örnek 5 - include ve return deyimleri

return.php
<?php

$var 
'PHP';

return 
$var;

?>

noreturn.php
<?php

$var 
'PHP';

?>

testreturns.php
<?php

$foo 
= include 'return.php';

echo 
$foo// 'PHP' basar

$bar = include 'noreturn.php';

echo 
$bar// 1 basar

?>

include işlemi başarılı olduğundan $bar, 1 değerine sahiptir. Yukarıdaki örnekler arasındaki farklara dikkat edin. Birincisi return() deyimini dahil edilen dosyada kullanırken ikincisi kullanmıyor. Dosya dahil edilemediği durumda, FALSE döndürülüyor ve bir E_WARNING üretiliyor.

Dahil edilen dosyanın içinde tanımlanmış işlevler varsa, return() deyiminden önce ya da sonra olduğundan bağımsız olarak ana betik içersinde kullanılabilirler. Dosya iki defa dahil edilmişse, PHP 5 ölümcül hata verir çünkü bildirilmiş işlevler tekrar bildirilmeye calışılmış olur. PHP 4 ise return()'den sonra tanımlanmış işlevler için şikayetçi olmayacaktır. Dosyanın halihazırda dahil edilip edilmediğini kendiniz tespit edip koşula bağlı return() çalıştırmak yerine, include_once() kullanmanız önerilir.

Bir PHP dosyasını bir değişkene "dahil" etmenin diğer bir yolu, çıktıyı Çıktı Denetim İşlevlerini include() ile birlikte kullanarak yakalamaktır. Örnek:

Örnek 6 - Bir PHP dosyasını bir dizgeye dahil etmek için tampon kullanımı

<?php
$string 
get_include_contents('somefile.php');

function 
get_include_contents($filename) {
    if (
is_file($filename)) {
        
ob_start();
        include 
$filename;
        
$contents ob_get_contents();
        
ob_end_clean();
        return 
$contents;
    }
    return 
false;
}

?>

Betiğinize dosyaları özdevinimli olarak dahil etmek için, php.ini içersindeki auto_prepend_file ve auto_append_file yapılandırma seçeneklerini inceleyebilirsiniz.

Bilginize: Bu bir işlev değil, dil oluşumu olduğundan değişken işlevler kullanılarak çağrılamaz.

Ayrıca, require(), require_once(), include_once(), readfile(), virtual() ve include_path'a da bakınız.



require_once()

require_once() deyimi, dosyayı evvelce dahil edilmişse tekrar dahil etmemesi dışında require() deyimiyle aynıdır.

_once eki olup olmamasının ne gibi farklara yol açtığı ve varlığının davranışı nasıl değiştirdiğini öğrenmek için include_once() belgesine bakınız.



include_once()

include_once() deyimi belirtilen dosyayı betiğin çalışması esnasında okur ve çalıştırır. Bu deyimin çalışma biçimi include() deyimi ile benzerdir, kendisiyle dahil edilmiş bir dosya betiğin başka bir yerinde tekrar dahil edilmek istenirse buna izin vermemesidir. Daha fazla bilgi için include() belgesine bakabilirsiniz.

include_once() deyimi, bir betiğin çalışması esnasında aynı dosyanın bir kereden fazla dahil edilme ihtimaline karşı, bu dosyanın yalnızca bir kere dahil edileceğinden emin olunmak istenirse kullanılmalıdır. Bu sayede işlev bildirimlerinin yinelenmesi, değişkenlere tekrar değer atanması gibi sorunlar ortaya çıkmaz.

Bu işlevin nasıl çalıştığı hakkında ayrıntılı bilgi edinmek için include() belgesine bakınız.

Bilginize: Büyük-küçük harf duyarlı olmayan işletim sistemlerinde (Windows gibi), require_once() ve include_once() deyimlerinin PHP 4'ten itibaren beklediğiniz sonucu üretmeyebileceğine dikkat edin.

Örnek 1 - Harf büyükyüğüne duyarsız işletim sistemlerinde include_once()

<?php
include_once("a.php"); // bu a.php dosyasını include edecektir
include_once("A.php"); // bu yine a.php dosyasını include edecektir! (yalnızca PHP 4)
?>


Bu davranış PHP 5'te değişmiştir - öncelikle yol normalleştirilir, böylece örneğin, C:\PROGRA~1\A.php ile C:\Program Files\a.php aynı kabul edilir ve dosya yalnızca bir defa işlenir.



goto

goto işleci betik içinde başka bir komuta atlamak için kullanılabilir. Hedefin yeri, bir yafta ve ikinokta imi ile belirtilebilir. goto bu yaftaya göre hedefi bulur. Bu, goto deyiminin tamamen sınırsız olduğu anlamına gelmez. Hedef yaftasının aynı dosya ve aynı bağlam içinde kalması gerekir, yani bir işlev veya yöntemin dışına atlayamayacağınız gibi bir başka işlev veya yöntemin içine de atlayamazsınız. Ayrıca bir switch veya döngünün içine de atlayamazsınız, fakat bunların dışına atlayabilirsiniz, yani çok seviyeli bir break yerine bir goto kullanabilirsiniz.

Örnek 1 - goto örneği

<?php
goto a;
echo 
'Foo';

a:
echo 
'Bar';
?>

Yukarıdaki örneğin çıktısı:

Bar

Örnek 2 - Döngüden goto ile çıkma örneği

<?php
for($i=0,$j=50$i<100$i++) {
  while(
$j--) {
    if(
$j==17) goto end;
  }
}
echo 
"i = $i";
end:
echo 
'j hit 17';
?>

Yukarıdaki örneğin çıktısı:

j hit 17

Örnek 3 - Bu çalışmaz

<?php
goto loop;
for(
$i=0,$j=50$i<100$i++) {
  while(
$j--) {
    
loop:
  }
}
echo 
"$i = $i";
?>

Yukarıdaki örneğin çıktısı:

Fatal error: 'goto' into loop or switch statement is disallowed in
script on line 2

Bilginize: goto işleci PHP 5.3'ten beri kullanılabilmektedir.




İşlevler

İçindekiler


Kullanıcı tanımlı işlevler

Bir işlev, şöyle bir söz dizimi kullanılarak tanımlanabilir:

Örnek 1 - İşlev kullanımını gösteren sözde kod

<?php
function foo($arg_1$arg_2/* ..., */ $arg_n)
{
    echo 
"Örnek işlev.\n";
    return 
$retval;
}
?>

Bir işlevin içerisinde geçerli her tür PHP kodu kullanılabilir, buna başka işlevler ve sınıf tanımları da dahildir.

İşlev isimleri, PHP'deki diğer isimlerle aynı kurallara tabidir. Geçerli bir işlev ismi bir harf ya da alt çizgi ile başlar, herhangi bir sayıda geçerli harf, sayı ya da alt çizgi ile devam eder. Düzenli ifade olarak, şu şekilde ifade edebiliriz: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

İşlevlerin çağrılmadan önce tanımlanmaları, aşağıdaki iki örnekte görüldüğü gibi koşullu olarak tanımlandıkları durumlar haricinde gerekmez.

Bir işlev aşağıdaki iki örnekte gösterildiği gibi koşullu olarak tanımlandıysa, bu işlev tanımının işlev çağrılmadan önce yapılması gerekmektedir.

Örnek 2 - Koşula bağlı işlevler

<?php

$makefoo 
true;

/* Henüz varolmadığı için foo() buradan çağrılamaz,
   ancak bar() çağrılabilir */

bar();

if (
$makefoo) {
  function 
foo()
  {
    echo 
"Uygulamanın çalışması bana erişene kadar ben yokum.\n";
  }
}

/* $makefoo doğru olduğundan
   artık foo() çağrılabilir */

if ($makefoofoo();

function 
bar()
{
  echo 
"Program başlatıldığı anda ben de varolurum.\n";
}

?>

Örnek 3 - İşlev içinde işlev

<?php
function foo()
{
  function 
bar()
  {
    echo 
"foo() çağrılana kadar yokum.\n";
  }
}

/* Henüz varolmadığı için
   bar() çağrılamaz. */

foo();

/* Artık bar() çağrılabilir,
   foo() çağrıldığında bar()
   erişilebilir hale gelir */

bar();

?>

PHP'de tüm işlevler ve sınıflar betik genelinde geçerlidir - bir işlevin içinden bile tanımlanmış olsalar işlevin dışından çağrılabilirler.

PHP işlevlerin farklı değiştirgeli yeni tanımlarının yapılmasını desteklemediği gibi, işlevler yeniden tanımlanamaz veya tanımsız kılınamaz.

Bilginize: İşlev isimleri büyük-küçük harf duyarsızdır, ancak işlev isimlerini tanımlandıkları halleriyle kullanmak daha iyidir.

Değiştirge sayısı değişken işlevler desteklendiği gibi işlevlerde öntanımlı değiştirge kullanımı da desteklenmektedir. Daha ayrıntılı bilgi edinmek için func_num_args(), func_get_arg() ve func_get_args() işlevlerine de bakınız.

PHP'de işlevlerin kendilerini çağırması da mümkündür. Ancak 100-200 iç içe çağrıdan kaçınmalısınız, bu tür kullanım yığıtın dolmasına ve betiğin sonlandırılmasına sebep olabilir.

Örnek 4 - Kendini çağıran işlev

<?php
function recursion($a)
{
    if (
$a 20) {
        echo 
"$a\n";
        
recursion($a 1);
    }
}
?>



İşlev değiştirgeleri

Bir işleve veri, virgül ayraçlı ifadelerden oluşan bir değiştirge listesi ile aktarılır.

PHP, değiştirgelerin değerleriyle aktarılmalarını (öntanımlı), gönderimli aktarımı ve öntanımlı değiştirge kullanımını destekler. Değiştirge sayısı değişken işlevler de desteklenmektedir; daha ayrıntılı bilgi edinmek için func_num_args(), func_get_arg() ve func_get_args() işlevlerini de inceleyiniz.

Örnek 1 - İşlevlere dizi aktarımı

<?php
function dizi_kabul_eder($girdi)
{
    echo 
"$girde[0] + $girdi[1] = "$girdi[0]+$girdi[1];
}
?>

Gönderimli değiştirge kullanımı

Öntanımlı olarak, işlev değiştirgeleri değerleriyle aktarılırlar (bu durumda bir değiştirgenin değeri işlev içinde değiştirildiğinde işlevin çağrıldığı yerdeki değeri bundan etkilenmez. İşlevin çağrıldığı yerdeki değerinin de değişmesini istiyorsanız gönderimli değiştirge kullanmalısınız.

Bir işleve bir değiştirgenin daima gönderimli olarak aktarılmasını istiyorsanız, işlev tanımladığınız yerde o değiştirgenin başına & karakterini koyarak bunu sağlayabilirsiniz:

Örnek 2 - Gönderimli işlev değiştirgelerinin aktarımı

<?php
function şunu_da_ekle(&$dizge)
{
    
$dizge .= 've bir kaç karakter eklenmiştir.';
}
$dzg 'Bu bir dizgedir ';
şunu_da_ekle($dzg);
echo 
$dzg;    // 'Bu bir dizgedir ve bir kaç karakter eklenmiştir.'
              //  çıktısını verir.
?>

Öntanımlı değiştirge değerleri

Bir işlevde, sayıl değiştirgeler için C++ tarzı öntanımlı değerler aşağıdaki biçimde tanımlanabilir:

Örnek 3 - İşlev içinde öntanımlı değiştirge kullanımı

<?php
function kahveyap($hangisi "orta şekerli")
{
    return 
"Bir fincan $hangisi kahve yapalım.\n";
}
echo 
kahveyap();
echo 
makecoffee(null);
echo 
kahveyap("az şekerli");
?>

Yukarıdaki koddan alınacak çıktı:


Bir fincan orta şekerli kahve yapalım.
Bir fincan kahve yapalım.
Bir fincan az şekerli kahve yapalım.

PHP ayrıca, öntanımlı değer olarak dizilerin ve özel NULL türünün kullanımına da izin verir, örneğin:

Örnek 4 - Sayıl olmayan türlerin öntanımlı değer olarak kullanımı

<?php
function kahveyap($hangi = array("orta şekerli"), $neyde NULL)
{
    
$neyde is_null($neyde) ? "ocakta" $neyde;
    return 
"Bir fincan ".join(", bir fincan "$hangi)." kahve $neyde yapıldı.\n";
}
echo 
kahveyap();
echo 
kahveyap(array("çok şekerli""az şekerli"), "mangalda");
?>

Öntanımlı değer bir değişken, bir sınıf üyesi ya da bir işlev çağrısı değil, bir sabit ifadesi olmalıdır.

Öntanımlı değiştirgeleri kullanırken, öntanımlama yapılmış tüm değiştirgelerin öntanımlama yapılmamış tüm değiştirgelerin sağında yer almasına gerektiğine dikkat edin. Aksi takdirde işler yolunda gitmeyebilir. Aşağıdaki kod parçasını inceleyin:

Örnek 5 - Öntanımlı değiştirgelerin hatalı kullanımı

<?php
function yoğurtyap($nekadar "az"$neli)
{
    return 
"Bir kase $nekadar $neli yoğurt yap.\n";
}

echo 
yoğurtyap("çilekli");   // beklendiği gibi çalışmayacaktır
?>

Yukarıdaki örnekten alınan çıktı:


Warning: Missing argument 2 for yoğurtyap(), called in
/home/nilgun/dnm/php-dnm on line 7 and defined in
/home/nilgun/dnm/php-dnm on line 2
Bir kase çilekli yoğurt yap.

Şimdi, yukarıdakini bununla karşılaştıralım:

Örnek 6 - Öntanımlı değiştirgelerin doğru kullanımı

<?php
function yoğurtyap($nekadar"az"$neli)
{
    return 
"Bir kase $nekadar $neli yoğurt yap.\n";
}

echo 
yoğurtyap("çilekli");   // beklendiği gibi çalışır
?>

Bu örnekten alınan çıktı:


Bir kase az çilekli yoğurt yap.

Bilginize: PHP 5'den itibaren, öntanımlı değerler gönderimli aktarılabilmektedir.

Değiştirge sayısı değişken işlevler

PHP 4 ve sonrasında, değiştirge sayısı değişken kullanıcı tanımlı işlevler desteklenmektedir. func_num_args(), func_get_arg() ve func_get_args() işlevleri sayesinde bu özelliği kolayca kullanabilirsiniz.

Özel bir sözdizimi gerekli değildir, değiştirge listesini işlev tanımında açıkça belirtirseniz normal davranışını gösterecektir.



Dönen değerler

Değerler, kullanımı seçime bağlı olan return deyimi kullanılarak döndürülür. Her türde değer döndürülebilir, buna diziler ve nesneler dahildir. return() kullanıldığında işlevin çalışması o noktada hemen durdurulur ve denetim işlevin çağrıldığı satıra aktarılır. Daha ayrıntılı bilgi için return() bölümüne bakınız.

Bilginize: return() belirtilmezse NULL değeri döner.

Örnek 1 - return kullanımı

<?php
function square($num)
{
    return 
$num $num;
}
echo 
square(4);   // '16' çıktılar.
?>

Bir işlevden birden fazla değer döndüremezsiniz, ancak böyle bir sonucu bir dizi döndürülerek elde edebilirsiniz.

Örnek 2 - Bir diziyle birden fazla değerin döndürülmesi

<?php
function küçük_sayılar()
{
    return array (
012);
}
list (
$sıfır$bir$iki) = küçük_sayılar();
?>

Bir işlevden gönderimli bir değer döndürmek için, & işlecini hem işlev bildiriminde hem de dönen değeri bir değişkene atarken kullanmalısınız:

Örnek 3 - Bir işlevden gönderimli değer döndürmek

<?php
function &gönderimli_döndür()
{
    return 
$gönderim;
}

$yenigönderim =& gönderimli_döndür();
?>

Gönderimler hakkında daha fazla bilgi edinmek için Gönderimler Hakkında bölümüne bakınız.



Değişken işlevler

PHP değişken işlev kavramını desteklemektedir. Yani, bir değişken isminin sonuna parantez eklenmişse, PHP aynı isimde bir işlev olup olmadığına bakar ve bulduğu takdirde bu işlevi çalıştırmaya çalışır. Başka olası işlemlerin yanında, bu özellik geri çağırımların, işlev tablolarının ve benzerlerinin gerçeklenmesinde kullanılabilir.

Değişken işlevler, echo(), print(), unset(), isset(), empty(), include(), require() ve benzeri dil yapılarında çalışmayacaktır. Bu yapıları değişken işlev olarak kullanmak istediğiniz takdirde, gerekli sarmalayıcı işlevleri kendiniz yazmalısınız.

Örnek 1 - Değişken işlev örneği

<?php
function foo() {
    echo 
"In foo()<br />\n";
}

function 
bar($arg '')
{
    echo 
"In bar(); argument was '$arg'.<br />\n";
}

// Bu echo için sarmalayıcı işlevdir
function echoit($string)
{
    echo 
$string;
}

$func 'foo';
$func();        // foo() çağrılır

$func 'bar';
$func('test');  // bar() çağrılır

$func 'echoit';
$func('test');  // echoit() çağrılır
?>

Değişken işlev özelliğini kullanarak bir nesnenin bir yöntemini de çağırabilmeniz mümkündür.

Örnek 2 - Değişken yöntem örneği

<?php
class Foo
{
    function 
Variable()
    {
        
$name 'Bar';
        
$this->$name(); // Bu Bar() yöntemini çağıracaktır
    
}

    function 
Bar()
    {
        echo 
"Bu bir Bar";
    }
}

$foo = new Foo();
$funcname "Variable";
$foo->$funcname();  // Bu $foo->Variable() işlevini çağıracaktır

?>

Ayrıca bakınız: call_user_func(), değişken değişkenleri ve function_exists().



Yerleşik işlevler

PHP standart olarak birçok işlev ve oluşum ile birlikte gelmektedir. Bunun yanında, özel PHP eklentilerinin derlenmesini gerektiren, aksi takdirde "tanımsız işlev" hatası üreten işlevler de mevcuttur. Örneğin, imagecreatetruecolor() gibi resim işlevlerini kullanabilmek için, PHP'yi GD desteğiyle derlemiş olmanız gerekir. Ya da, mysql_connect() işlevini kullanabilmek için, PHP'nin MySQL desteği ile derlenmiş olması gerekmektedir. Bunların yanında, bütün PHP sürümlerine eklenen dizge ve değişken işlevleri gibi birçok çekirdek işlev de mevcuttur. phpinfo() ya da get_loaded_extensions() işlevlerine yapılacak bir çağrı ile PHP'ye hangi eklentilerin yüklenmiş olduğunu görebilirsiniz. Birçok uzantı öntanımlı olarak etkinleştirilmiş olup PHP Kılavuzunda bu eklentilerle ilgili geniş bilgi verilmiştir. PHP'yi nasıl yapılandırmanız gerektiğiyle ilgili bilgiyi yapılandırma ve kurulum bölümleri ile eklerdeki özel bölümlerde bulabilirsiniz.

Kılavuzun işlev tanımı nasıl okunur bölümünde bir işlev tanımının nasıl okunup anlaşılabileceği ile ilgili bilgiler bulunmaktadır. Bir işlevin bir değer mi döndürdüğü yoksa aktarılan değerlerle sadece işlem mi yaptığını anlamak önemlidir. Örneğin, str_replace() değiştirilmiş dizgeyle dönerken, usort() sadece kendisine aktarılan değer üzerinde çalışır. Ayrıca, her kılavuz sayfasında her işlevin değiştirgeleri, davranış değişiklikleri, başarı ya da başarısızlık durumunda döndürülen değerler ve kullanılabilirlik bilgileri bulunmaktadır. Bu önemli (ve sıklıkla algılanması güç) farklılıkların bilinmesi, doğru PHP kodunun yazılabilmesi için büyük önem taşımaktadır.

Ayrıca bakınız: function_exists(), İşlev Başvuru Kılavuzu, get_extension_funcs() ve dl().



Anonim işlevler

Anonim işlevler isim belirtmeksizin oluşturulabilen işlevlerdir. Çoğunlukla geriçağırım işlevi olarak işlev değiştirgelerinde kullanılırsa da kullanımı bununla sınırlı değildir.

Örnek 1 - Anonim işlev örneği

<?php
echo preg_replace_callback('~-([a-z])~',
      function (
$match) {
       return 
strtoupper($match[1]);
      },
      
'hello-world');
// Çıktısı: helloWorld
?>

Anonim işlevler birer değişken değeri olarak da bildirilebilir. Bu durumda PHP, işlevi özdevinimli olarak sınıfının nesnel bir örneği haline getirir. Bir anonim işlev, bir değişkene sıradan bir deyim gibi, bir noktalı virgül ile biten bir işlev olarak atanabilir:

Örnek 2 - Değişkene anonim işlev atama örneği

<?php
$greet 
= function($isim)
{
    
printf("Merhaba %s\r\n"$isim);
};

$greet('Dünya');
$greet('PHP');
?>

Anonim işlevler değişkenleri üst etki alanındın miras alabilirler. Böyle değişkenler işlevin baş tarafında bildirilebilir. Üst etki alanından miras alınan değişkenler küresel değişkenler gibi ele alınmazlar. Küresel değişkenler, işlevin çalıştığı etki alanında tanımlı değişkenlerdir. Anonim işlevin üst etki alanı ise içinde bildirildiği işlevin etki alanıdır (Anonim işlevin bildirildiği ekti alanı ile çağrıldığı etki alanı aynı olmak zorunda değildir). Aşağıdaki örneğe bakalım:

Örnek 3 - Anonim işlevler ve etki alanı

<?php
// Ürünleri eklemek üzere bir Sepet oluşturalım.
// Eklenen ürünlerin toplam fiyatını döndürmek
// üzere bir geriçağırım işlevi kullanalım.
class Sepet
{
  const 
PRICE_BUTTER 1.00;
  const 
PRICE_MILK 3.00;
  const 
PRICE_EGGS 6.95;

  protected 
$ürünler = Array();


  public static function 
ekle($ürün$miktar)
  {
    
$this->ürünler[$ürün] = $miktar;
  }

 public static function 
miktarıGetir($ürün)
 {
    return isset(
$this->ürünler[$ürün]) ? $this->ürünler[$ürün] : FALSE;

  }

  public function 
Toplam($kdv)
  {
      
$toplam 0.00;

      
$işlev =
          function (
$miktar$ürün) use ($kdv, &$toplam)
          {
              
$birimFiyat constant(__CLASS__ "::FiYAT_" .
                  
strtoupper($ürün));
              
$toplam += ($birimFiyat $miktar) * ($kdv 1.0);
          };

      
array_walk($this->ürünler$işlev);
      return 
round($toplam2);;
  }
}

$sepetim = new Sepet;

// Sepete birşeyler ekleyelim
$sepetim->ekle('Peynir'1);
$sepetim->ekle('Süt'3);
$sepetim->ekle('Yumurta'6);

// %5 KDV ile toplamı döndürelim
print $sepetim->Toplam(0.05) . "\n";
// sonuç: is 54.29
?>

Anonim işlevler dahili olarak Closure sınıfı ile gerçeklenmektedir.

Bilginize: Anonim işlevler PHP 5.3.0'dan beri kullanılabilmektedir.

Bilginize: func_num_args(), func_get_args() ve func_get_args() işlevini bir anonim işlev içinde kullanmak mümkündür.




Sınıflar ve Nesneler

İçindekiler


Giriş

PHP 5 yeni bir Nesne Modeli'ne sahiptir. PHP'nin nesne yönetimi tamamen yeni baştan yazılarak daha iyi başarım elde edilmesi ve daha fazla özellik sunulması sağlanmıştır. Bu PHP4'te yapılan en büyük değişikliklerden biridir. PHP5 tam bir nesne modeline sahiptir.

PHP 5 özelliklerinden bazılar3: Görünürlük, Sınıf Soyutlama, final Anahtar Sözcüğü, Sihirli Yöntemler, Nesne Arayüzleri, Nesne Kopyalama ve Tür Dayatma.

PHP'deki her nesne değişkeni nesnenin tamamının bir kopyasını değil, nesne başvurusunu içerir. Ayrıntılar için Nesneler ve Gönderimler bölümüne bakınız.

İpucu

Ayrıca Kullanıcı Alanı İsimlendirme Kılavuzu belgesine de bakınız.



Temel Kavramlar

class Anahtar Sözcüğü

Her sınıf tanımı class anahtar sözcüğü ile başlar sınıf isminin ardından gelen bir çift kaşlı ayracın arasında sınıf özelliklerinin ve yöntemlerinin tanımları bulunur.

Sınıf ismi olarak herhangi bir geçerli yafta kullanılabilir ancak bu PHP için ayrılmış sözcüklerden biri olmamalıdır. Geçerli bir sınıf ısmı bir harf veya alt çizgi ile başlar, sayılar, harfler veya alt çizgiler içerebilir. Bir düzenli ifade olarak şöyle bir şablonla eşleşmelidir: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*.

Bir sınıfın kendi sabitleri, değişkenleri (bunlara "özellik" de denir) ve işlevleri (bunlara "yöntem" de denir) olabilir.

Örnek 1 - Basit bir sınıf tanımı

<?php
class BasitSınıf
{
    
// özellik bildirimi
    
public $öntanımlı 'öntanımlı bir değer';

    
// yöntem tanımı
    
public function ÖntanımlıyıGöster() {
        echo 
$this->öntanımlı;
    }
}
?>

Bir nesne bağlamı içinden bir yöntem çağırmak için $this diye bir sözde değişken kullanılır. $this çağrılan nesneye bir gönderimdir (normalde yöntemin ait olduğu nesnedir, ancak eğer nesne diğer nesnenin bağlamından duruk olarak çağrılıyorsa, bu başka bir nesne de olabilir).

Örnek 2 - $this sözde değişkeninin kullanımı

<?php
class A
{
    function 
foo()
    {
        if (isset(
$this)) {
            echo 
'$this tanımlı (';
            echo 
get_class($this);
            echo 
")\n";
        } else {
            echo 
"\$this tanımsız.\n";
        }
    }
}

class 
B
{
    function 
bar()
    {
        
// Dikkat: E_STRICT etkinse bu satır bir uyarı
        // çıktılanmasına sebep olur.
        
A::foo();
    }
}

$a = new A();
$a->foo();

// Dikkat: E_STRICT etkinse bu satır bir uyarı çıktılanmasına sebep olur.
A::foo();
$b = new B();
$b->bar();

// Dikkat: E_STRICT etkinse bu satır bir uyarı çıktılanmasına sebep olur.
B::bar();
?>

Yukarıdaki örneğin çıktısı:

$this tanımlı (A)
$this tanımsız.
$this tanımlı (B)
$this tanımsız.

new Anahtar Sözcüğü

Bir sınıfın örneğini oluşturmak için yeni bir nesne oluşturulup bir değişkene atanmalıdır. Nesnenin hata durumunda daima yeni bir değişkene atanarak oluşturulması için kurucusunun bir istisna oluşturmaması gerekir. Sınıflar, örnekleme öncesi tanımlanmış olmalıdır (ve bu, bazı durumlarda bir gereksinimdir).

Örnek 3 - Bir sınıf örneğinin oluşturulması

<?php
$örnek 
= new BasitSınıf();

// Bu bir değişkenle de yapılabilir:
$sınıf 'BasitSınıf';
$örnek = new $sınıf(); // BasitSınıf()
?>

Sınıf bağlamında yeni bir nesneyi new self veya new parent kullanarak oluşturmak mümkündür.

Oluşturulmuş bir sınıf örneğinin yeni bir değişkene atanması sırasında, yeni değişken, atanan nesneyle aynı örneğe erişecektir. Bu davranışın örneklerin bir işleve aktarılmasından bir farkı yoktur. Kopyalamak suretiyle oluşturulmuş bir nesnenin daima bir kopyası yapılabilir.

Örnek 4 - Nesne Atama

<?php
$atama     
=  $örnek;
$gönderim  =& $örnek;

$örnek->var '$atama bu değere sahip olacak';

$örnek null// $örnek ve $gönderim null olur

var_dump($örnek);
var_dump($gönderim);
var_dump($atama);
?>

Yukarıdaki örneğin çıktısı:

NULL
NULL
object(BasitSınıf)#1 (1) {
  ["var"]=>
  string(30) "$atama bu değere sahip olacak"
}

extends Anahtar Sözcüğü

Bir sınıfın bildiriminde extends anahtar sözcüğü kullanılarak başka bir sınıfın yöntemleri ve özellikleri miras alınabilir. Çok sayıda sınıfı miras alarak genişlemek mümkün değildir, bir sınıf sadece bir ana sınıfı miras alabilir.

Miras alınan yöntemler ve özelliklerler, ebeveyn sınıfta tanımlı isimleriyle yeniden bildirilerek geçersiz kılınabilir; bu sadece ebeveyn sınıfın final tanımlı yöntemleri için yapılamaz. Geçersiz kılınmış yöntemlere ve duruk özelliklere parent:: öneki ile atıfta bulunarak erişilebilir.

Örnek 5 - Basit bir sınıfın miras alınması

<?php
class EkSınıf extends BasitSınıf
{
    
// ebeveyn yöntemi yeniden bildirelim
    
function değerGöster()
    {
        echo 
"Sınıf genişletiliyor\n";
        
parent::değerGöster();
    }
}

$ek = new EkSınıf();
$ek->değerGöster();
?>

Yukarıdaki örneğin çıktısı:

Sınıf genişletiliyor
bir öntanımlı değer


Özellikler

Sınıf üyesi değişkenlere "özellik" denir. Bunlara bazan "öznitelik" veya "alan" dendiğini de görürsünüz, fakat bu kılavuzun amaçları doğrultusunda biz "özellik" terimini kullanacağız. Bunlar normal değişken bildiriminin önüne public, protected, veya private anahtar sözcükleri getirilerek bildirilir. Bildirim, bir ilklendirme olarak da yapılabilir; bu durumda bir sabit değerle ilklendirme yapılmalıdır. Yani, derleme sırasında değerlendirilebilmeli, çalışma anında değerlendirilebilecek bilgiler içermemelidir.

public, protected, ve private sözcüklerinin anlamları için Görünürlük belgesine bakınız.

Bilginize: PHP 4 ile geriye uyumluluğu sağlamak için, PHP 5 özellik bildiriminde public, protected, veya private yerine (veya ek olarak) hala var sözcüğü kabul edilmektedir. Ancak, var artık gerekli değildir. PHP'nin 5.0'dan 5.1.3'e kadar olan sürümlerinde, var kullanımı önerilmeyen kullanım olarak ele alınır ve bir E_STRICT uyarısı çıktılanırdı; PHP 5.1.3'ten beri önerilmeme durumu ortadan kalkmış olup bir uyarı çıktılanmamaktadır.
Bir özelliği public, protected, veya private yerine var kullanarak bildirirseniz PHP 5 özelliği public olarak bildirilmiş gibi ele alır.

Özelliklere, sabitlere ve yöntemlere sınıf yöntemleri içinden erişilirken yöntem duruk ise self::$özellik, değilse $this- >özellik sözdizimi kullanılabilir (burada "özellik" özelliğin ismidir). Daha ayrıntılı bilgi için static Anahtar Sözcüğü bölümüne bakınız.

Yöntem bir nesne bağlamından çağrılıyorsa $this sözde değişkeni sınıf yöntemleri içinde de kullanılabilir. $this, yöntemi çağıran nesneye (yöntemin ait olduğu nesneye) bir gönderimdir. Fakat yöntem, bir ikincil nesne bağlamından duruk olarak çağrılıyorsa, bu, birincil nesne de olabilir.

Örnek 1 - Özellik bildirimi

<?php
class SimpleClass
{
   
// geçersiz özellik bildirimleri:
   
public $var1 'hello ' 'world';
   public 
$var2 = <<<EOD
hello world
EOD;
   public 
$var3 1+2;
   public 
$var4 self::myStaticMethod();
   public 
$var5 $myVar;

   
// geçerli özellik bildirimleri:
   
public $var6 myConstant;
   public 
$var7 = array(truefalse);

   
// Buna sadece PHP 5.3.0 ve sonrasında izin verilir.
   
public $var8 = <<<'EOD'
hello world
EOD;
}
?>

Bilginize: Sınıflar ve nesnelerle çalışan bazı işlevler vardır. Bunlar için Sınıf ve Nesne İşlevleri bölümüne bakınız.

Yorumsuz metinler, yorumlu metinlerin tersine özellik bildirimleri dahil herhangi bir duruk veri bağlamında kullanılabilir.

Örnek 2 - Özellik ilklendirmede yorumsuz metin kullanımı

<?php
class foo {
   
// PHP 5.3.0'dan beri
   
public $bar = <<<'EOT'
bar
EOT;
}
?>

Bilginize: Yorumsuz metin desteği PHP 5.3.0'da eklenmiştir.



Sınıf Sabitleri

Sabitlerin her sınıf için ayrı ayrı tanımlanabilmesi mümkündür. Sabitler diğer değişkenlerden tanımlanmaları ve kullanılmaları sırasında başlarına getirilmeyen $ imi sayesinde ayrılırlar.

Değer, örneğin, bir değişken, bir sınıf özelliği, bir matematiksel işlemin sonucu veya bir işlev çağrısı değil, bir sabit ifade olmalıdır.

Ayrıca, sınıf arayüzlerinin de kendi sabitlerinin olması mümkündür. Örnekler için Nesne Arayüzleri belgesine bakınız.

PHP 5.3.0'dan itibaren, bir sınıfa bir değişken kullanarak atıfta bulunmak mümkündür. Değişkenin değeri, self, parent, static gibi bir anahtar sözcük olamaz.

Örnek 1 - Bir sabitin tanımlanması ve kullanımı

<?php
class MyClass
{
    const 
constant 'sabit değer';

    function 
showConstant() {
        echo  
self::constant "\n";
    }
}

echo 
MyClass::constant "\n";

$classname "MyClass";
echo 
$classname::constant "\n"// PHP 5.3.0'dan itibaren

$class = new MyClass();
$class->showConstant();

echo 
$class::constant."\n"// PHP 5.3.0'dan itibaren
?>

Örnek 2 - Duruk veri örneği

<?php
class foo {
    
// PHP 5.3.0'dan itibaren
    
const bar = <<<'EOT'
bar
EOT;
}
?>

Duruk veri bağlamında yorumlanan çok satırlı metinler değil (heredoc), yorumlanmayan çok satırlı metinler (nowdoc) kullanılabilir.

Bilginize: Yorumlanmayan çok satırlı metin (nowdoc) desteği 5.3.0'da eklenmiştir.



Özdevinimli Sınıf Yükleme

Nesne-yönelimli uygulama yazan birçok geliştirici, her bir sınıf tanımı için ayrı bir PHP kaynak dosyası oluşturmaktadır. Bu kullanımın en can sıkıcı noktalarından bir tanesi, betiklerin en tepesinde bir sürü dosyanın betiğe dahil edilmesini gerektirmesidir (her bir sınıf için ayrı bir dosya).

PHP 5 ile birlikte bu durum zorunluluk olmaktan çıkmıştır. Henüz tanımlanmamış bir sınıfı özdevinimli olarak çağırmak istediğinizde, bir __autoload işlevi tanımlayabilirsiniz. Bu işlevi çağırmakla PHP'nin çalışması hata ile sonuçlanmadan önce betik yorumlama motoruna sınıfı yüklemek için son bir şans verilmiş olur.

Bilginize: 5.3.0 öncesinde, __autoload işlevinde oluşan istisnalar catch bloğu ile yakalanamaz, dolayısıyla ölümcül hata ile sonuçlanır. 5.3.0 ve sonrasında ise, bir tane olması şartıyla yakalanabilir. Özel bir istisna yakalanacaksa özel istisna sınıfı mevcut olmalıdır. __autoload işlevi özel istisna sınıflarını ardışık (iç içe) olarak yüklemek için kullanılabilir.

Bilginize: PHP CLI'yi etkileşimli kipte kullanıyorsanız özdevinimli yükleme kullanılamayacaktır.

Bilginize: Sınıf ismini call_user_func() gibi bir işlevde kullanırsanız ../ gibi bazı tehlikeli karakterler içerebilir. Böyle işlevlerde kullanıcı girdilerini kullanmamanız ya da en azından girdiyi __autoload() ile doğrulamanızı öneririz.

Örnek 1 - Özdevinimli yükleme örneği

Bu örnek MyClass1 ve MyClass2 sınıflarını yüklemeye çalışmaktadır. Sınıflar aynı isimli MyClass1.php ve MyClass2.php dosyalarının içinde yer almaktadırlar.

<?php
function __autoload($class_name) {
    require_once 
$class_name '.php';
}

$obj  = new MyClass1();
$obj2 = new MyClass2();
?>

Örnek 2 - Başka bir özdevinimli yükleme örneği

Bu örnek DenemeA arayüzünü yüklemeye çalışır.

<?php

function __autoload($isim) {
    
var_dump($isim);
}

class 
Fan implements DenemeA {
}

/*
string(5) "DenemeA"

Fatal error: Interface 'DenemeA' not found in ...
*/
?>

Örnek 3 - 5.3.0 ve sonrasında istisnalı özdevinimli yükleme

Bu örnekte bir istisna yakalanmakta ve try/catch kullanımı gösterilmektedir.

<?php
function __autoload($name) {
    echo 
"$name yüklenmek isteniyor.\n";
    throw new 
Exception("$name yüklenemedi.");
}

try {
    
$obj = new YüklenemezSınıf();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

Yukarıdaki örneğin çıktısı:

YüklenemezSınıf yüklenmek isteniyor.
YüklenemezSınıf yüklenemedi.

Örnek 4 Autoloading with exception handling for 5.3.0+ - Missing custom exception

This example throws an exception for a non-loadable, custom exception.

<?php
function __autoload($name) {
    echo 
"Want to load $name.\n";
    throw new 
MissingException("Unable to load $name.");
}

try {
    
$obj = new NonLoadableClass();
} catch (
Exception $e) {
    echo 
$e->getMessage(), "\n";
}
?>

Yukarıdaki örneğin çıktısı:

Want to load NonLoadableClass.
Want to load MissingException.

Fatal error: Class 'MissingException' not found in testMissingException.php on line 4



Kurucular ve Yıkıcılar

Kurucular

void __construct ([ mixed $değiştirge [, $... ]] )

PHP 5 geliştiricilerin sınıflar için kurucu yöntemler bildirmesine imkan verir. Bir kurucu yöntemi olan sınıflar her yeni nesne oluşturuluşunda bu yöntemi çağırırlar, bu bakımdan nesne kullanılmadan önce yapılması gereken ilklendirmeler için kurucular çok uygundur.

Bilginize: Çocuk sınıflardan kurucusu olanlar için örtük olarak ebeveyn sınıfın kurucusu çağrılmaz. Ebeveyn sınıfın kurucusunu çocuk sınıftan çağırmak için, çocuk sınıf içinden parent::__construct() çağrısı yapılması gerekir.

Örnek 1 - Yeni tekilleşmiş kurucuların kullanımı

<?php
class AnaSınıf {
   function 
__construct() {
       print 
"AnaSınıf kurucusundayız\n";
   }
}

class 
AltSınıf extends AnaSınıf {
   function 
__construct() {
       
parent::__construct();
       print 
"AltSınıf kurucusundayız\n";
   }
}

$obj = new AnaSınıf();
$obj = new AltSınıf();
?>

Geriye dönük uyumluluk için, PHP 5 belirtilen sınıfa ait bir __construct() yöntemi bulamazsa, sınıfın ismine bakarak eski tarz bir kurucu arayacaktır. Dolayısıyla, uyumluluk sorunu yaşayacağınız tek durum sınıf dahilinde __construct() isimli bir yöntemin amacı dışında kullanılması olabilir.

Yıkıcılar

void __destruct ( void )

PHP 5, C++ gibi nesne yönelimli dillerdekine benzer bir yıkıcı tasarımına sahiptir. Yıkıcı yöntem, belli bir nesneye yönelik tüm gönderimler kaldırıldığı ya da nesne kapanma sırasında açıkça yok edildiği anda çalıştırılacaktır.

Örnek 2 - Yıkıcı Örneği

<?php
class YıkıcıSınıf {
   function 
__construct() {
       print 
"Kurucu çalıştı\n";
       
$this->name "YıkıcıSınıf";
   }

   function 
__destruct() {
       print 
"" $this->name " yok ediliyor\n";
   }
}

$obj = new YıkıcıSınıf();
?>

Kurucularda olduğu gibi ebeveyn yıkıcılar çocuk sınıflar için dolaylı olarak çağrılmayacaktır. Ebeveyn sınıfın yıkıcısının çalışması için çocuk sınıfın yıkıcısından parent::__destruct() çağrısının yapılması gerekir.

Bilginize: Yıkıcılar, HTTP başlıklarının gönderilmiş olmasını sağlamak için betik sonlanırken çağrılırlar. Betiğin kapanma aşamasındaki çalışma dizini bazı SAPI’lerde (Apache gibi) farklı olabilir.

Bilginize: Bir yıkıcı içinden bir istisna oluşturmaya çalışmak (betiğin sonlandırılması sırasında) ölümcül hata ile sonuçlanır.



Görünürlük

Bir özelliğin ya da bir yöntemin görünürlüğü, bildirim sırasında önüne şu anahtar sözcüklerden biri getirilerek belirlenebilir: public, protected ya da private. public olarak bildirilmiş özelliklere ve yöntemlere her yerden erişilebilir. protected bildirimli özelliklere ve yöntemlere sadece miras alınmış ve ebeveyn sınıflardan (ve özelliğin tanımlandığı nesneden), private bildirimli özelliklere ve yöntemlere ise sadece özelliğin tanımlandığı sınıfın içinden erişilebilir.

Özelliklerin Görünürlüğü

Sınıf özellikleri public, protected ya da private olarak tanımlanmalıdır. Bir özellik bunlardan biri olmadan sadece var kullanarak bildirilmişse public olarak bildirilmiş gibi ele alınır.

Örnek 1 - Özellik bildirimi

<?php
/**
 * Sınıfım tanımı
 */
class Sınıfım
{
    public 
$genel 'Genel';
    protected 
$korumalı 'Korumalı';
    private 
$özel 'Özel';

    function 
selamVer()
    {
        echo 
$this->genel;
        echo 
$this->korumalı;
        echo 
$this->özel;
    }
}

$nesne = new Sınıfım();
echo 
$nesne->genel;    // Çalışır
echo $nesne->korumalı// Ölümcül Hata
echo $nesne->özel;     // Ölümcül Hata
$nesne->selamVer();    // Genel, Korumalı ve Özel görüntüler


/**
 * ÖbürSınıfım tanımı
 */
class ÖbürSınıfım extends Sınıfım
{
    
// public ve protected yöntemleri yeniden tanımlayabiliriz,
    // ancak private olanlar tanımlanamaz
    
protected $korumalı 'Öbür korumalı';

    function 
selamVer()
    {
        echo 
$this->genel;
        echo 
$this->korumalı;
        echo 
$this->özel;
    }
}

$nesne2 = new ÖbürSınıfım();
echo 
$nesne2->genel;    // Çalışır
echo $nesne2->özel;     // Tanımsız
echo $nesne2->korumalı// Ölümcül Hata
$nesne2->selamVer();    // Genel, Öbür korumalı ve Undefined görüntülenir

?>

Bilginize: PHP 4'te bir değişken bildiriminde (public yerine) kullanılan var anahtar sözcüğü uyumluluk adına hala desteklenmektedir. PHP 5'in 5.1.3 sürümünden önceki sürümlerinde var kullanımı bir E_STRICT uyarısına sebep olurdu.

Yöntem Görünürlüğü

Sınıf yöntemleri public, protected ya da private olarak tanımlanmalıdır. Bunlardan herhangi biri kullanılmadan yapılmış yöntem tanımlarının public kullanılarak tanımlandığı varsayılır.

Örnek 2 - Yöntem bildirimi

<?php
/**
 * Sınıfım tanımı
 */
class Sınıfım
{
    
// public kurucu bildirimi
    
public function __construct() { }

    
// public yöntem bildirimi
    
public function Genel() { }

    
// protected yöntem bildirimi
    
protected function Korumalı() { }

    
// private yöntem bildirimi
    
private function Özel() { }

    
// Bu da public bir yöntem
    
function Falanca()
    {
        
$this->Genel();
        
$this->Korumalı();
        
$this->Özel();
    }
}

$sınıfım = new Sınıfım;
$sınıfım->Genel();    // Çalışır
$sınıfım->Korumalı(); // Ölümcül Hata
$sınıfım->Özel();     // Ölümcül Hata
$sınıfım->Falanca();  // Public, Protected ve Private çalisir


/**
 * ÖbürSınıfım tanımı
 */
class ÖbürSınıfım extends Sınıfım
{
    
// Bu public bir yöntemdir
    
function Filanca()
    {
        
$this->Genel();
        
$this->Korumalı();
        
$this->Özel();  // Ölümcül Hata
    
}
}

$öbürSınıfım = new Sınıfım;
$öbürSınıfım->Genel();   // Çalışır
$öbürSınıfım->Filanca(); // Genel ve Korumalı çalışır, Özel çalışmaz

class Bar
{
    public function 
dnm() {
        
$this->dnmÖzel();
        
$this->dnmGenel();
    }

    public function 
dnmGenel() {
        echo 
"Bar::dnmGenel\n";
    }

    private function 
dnmÖzel() {
        echo 
"Bar::dnmÖzel\n";
    }
}

class 
Foo extends Bar
{
    public function 
dnmGenel() {
        echo 
"Foo::dnmGenel\n";
    }

    private function 
dnmÖzel() {
        echo 
"Foo::dnmÖzel\n";
    }
}

$fo = new Foo();
$fo->dnm();  // Bar::dnmÖzel
             // Foo::dnmGenel

?>



Object Inheritance

Inheritance is a well-established programming principle, and PHP makes use of this principle in its object model. This principle will affect the way many classes and objects relate to one another.

For example, when you extend a class, the subclass inherits all of the public and protected methods from the parent class. Unless a class overrides those methods, they will retain their original functionality.

This is useful for defining and abstracting functionality, and permits the implementation of additional functionality in similar objects without the need to reimplement all of the shared functionality.

Örnek 1 Inheritance Example

<?php

class foo
{
    public function 
printItem($string)
    {
        echo 
'Foo: ' $string PHP_EOL;
    }
    
    public function 
printPHP()
    {
        echo 
'PHP is great.' PHP_EOL;
    }
}

class 
bar extends foo
{
    public function 
printItem($string)
    {
        echo 
'Bar: ' $string PHP_EOL;
    }
}

$foo = new foo();
$bar = new bar();
$foo->printItem('baz'); // Output: 'Foo: baz'
$foo->printPHP();       // Output: 'PHP is great' 
$bar->printItem('baz'); // Output: 'Bar: baz'
$bar->printPHP();       // Output: 'PHP is great'

?>


Etki Alanı Çözünürlük İşleci (::)

Etki Alanı Çözünürlük İşleci (Paamayim Nekudotayim de denirmiş), basitçe bir çift iki nokta iminden ibaret olup (biz "iki nokta çifti" diyebiliriz), bir sınıfın duruk, sabit ve geçersiz kılınmış özellik ve yöntemlerine erişilebilmesini sağlayan bir simgedir.

Bu öğelere sınıf tanımının dışından erişirken bu işlecin solunda sınıfın ismini kullanın.

PHP 5.3.0 ve sonrasında, bu işlecin solunda sınıf ismi yerine bir değişken kullanmak da mümkündür. Değişken ismi, (self, parent, static gibi) bir anahtar sözcük olmamalıdır.

"Paamayim Nekudotayim" ilk bakışta iki nokta üst üste için garip bir adlandırma gibi gözükebilir. Ancak, Zend Engine 0.5 (php 3'ün kalbidir) yazıldığı esnada Zend ekibinin kullanmak istediği terim bu oldu. Esasında bu iki sözcük de iki nokta çifti anlamına gelmektedir - İbranice'de!

Örnek 1 - Sınıf tanımı dışında ::

<?php
class Sınıfım {
    const 
SABİT_DEĞER 'Bir sabit değer';
}

echo 
Sınıfım::SABİT_DEĞER;
?>

Bir sınıfın özellik ve yöntemlerine bu işleç sayesinde sınıfın içinden erişilmek istendiğinde işlecin solunda self veya parent anahtar sözcüğü kullanılır.

Örnek 2 - Sınıf tanımı içinde ::

<?php
class BaşkaSınıf extends Sınıfım
{
    public static 
$duruk 'Bir duruk değişken';

    public static function 
ikiNoktaÇifti() {
        echo 
parent::SABİT_DEĞER "\n";
        echo 
self::$duruk "\n";
    }
}

$sınıfadı 'BaşkaSınıf';
echo 
$sınıfadı::ikiNoktaÇifti(); // PHP 5.3.0 ve sonrası

BaşkaSınıf::ikiNoktaÇifti();
?>

Çocuk sınıf ebeveyninin yöntem tanımlarından birini geçersiz kıldığı takdirde PHP ebeveyne ait yöntemi çağıramayacaktır. Ebeveynin yönteminin çağrılıp çağrılmayacağı çocuk sınıfın inisiyatifindedir. Bu durum aynı zamanda Kurucular ve Yıkıcılar, Aşırı Yükleme ve Sihirli yöntem tanımları için de geçerlidir.

Örnek 3 - Ebeveynin yöntemini çağırmak

<?php
class Sınıfım
{
    protected function 
işlevim() {
        echo 
"Sınıfım::işlevim()\n";
    }
}

class 
BaşkaSınıf extends Sınıfım
{
    
// Ebeveynin tanımını geçersiz kılalım
    
public function işlevim()
    {
        
// Ama hala ebeveynin işlevini çağırabiliriz
        
parent::işlevim();
        echo 
"BaşkaSınıf::işlevim()\n";
    }
}

$class = new BaşkaSınıf();
$class->işlevim();
?>


static Anahtar Sözcüğü

Sınıf özelliklerinin ya da yöntemlerinin static olarak tanımlanması, o özelliklerin ve yöntemlerin sınıf örneğinin oluşturulmasına gerek kalmadan erişilebilir olmalarını sağlar. Ancak, static olarak bildirilmiş bir özelliğe (duruk özellik) örneklenmiş sınıf nesnesinden erişilemez (ise de static olarak bildirilmiş bir yöntemle erişebilir).

PHP 4 ile uyumluluğun sağlanabilmesi için, eğer bir özellik veya yöntem için hiçbir görünürlük tanımı yapılmamışsa public olarak tanımlanmış varsayılır.

Duruk yöntemlerin, nesnenin bir örneği oluşturulmadan erişilebilir olmalarından dolayı, $this sözde değişkeni, static olarak bildirilmiş bir yöntemin içinde kullanılamaz.

Duruk özelliklere, nesne üzerinden ok işleci (->) kullanılarak erişilemez.

Duruk olmayan özellikler durukmuş gibi çağrılırsa E_STRICT seviyesinde bir uyarı üretilir.

PHP'nin diğer duruk değişkenlerinde olduğu gibi duruk özellikler de sadece bir sayıl veya sabit kullanılarak ilklendirilebilir; ifadelere izin verilmez. Yani, bir duruk özelliği örneğin, bir tamsayı veya bir dizi ile ilklendirebilirsiniz ama örneğin, bir işlevin dönen değeri, bir değişken veya bir nesne ile ilklendiremezsiniz.

PHP 5.3.0 ve sonrasında, bir sınıfa bir değişken kullanarak gönderim yapılabilmektedir. Böyle bir değişkenin değeri self, parent veya static gibi bir anahtar sözcük olamaz.

Örnek 1 - Duruk özellik örneği

<?php
class Falanca
{
    public static 
$duruk 'falanca';

    public function 
durukDeğer() {
        return 
self::$duruk;
    }
}

class 
Feşmekan extends Falanca
{
    public function 
falancaDuruk() {
        return 
parent::$duruk;
    }
}


print 
Falanca::$duruk "\n";

$falanca = new Falanca();
print 
$falanca->durukDeğer() . "\n";
print 
$falanca->duruk "\n";      // Tanımsız "Özellik" duruk

print $falanca::$duruk "\n";
$sınıfadı 'Falanca';
print 
$sınıfadı::$duruk "\n"// PHP 5.3.0 ve sonrası

print Feşmekan::$duruk "\n";
$feşmekan = new Feşmekan();
print 
$feşmekan->falancaDuruk() . "\n";
?>

Örnek 2 - Duruk yöntem örneği

<?php
class Falanca {
    public static function 
birDurukYöntem() {
        
// ...
    
}
}

Falanca::birDurukYöntem();
$sınıfadı 'Falanca';
$sınıfadı::birDurukYöntem(); // PHP 5.3.0 ve sonrası

?>


Sınıf Soyutlama

PHP 5, soyut sınıf ve yöntemlerin kullanımını mümkün kılmıştır. Soyut olarak tanımlanmış bir sınıftan örnek oluşturmaya izin verilmemektedir. Bir sınıf en az bir soyut yöntem içeriyorsa, o sınıf da soyut olarak tanımlanmalıdır. Soyut olarak tanımlanmış yöntemler o yöntemlerin imzasıdırlar, gerçeklemenin bütününü temsil edemezler.

Soyut bir sınıftan kalıtsal özellikler devralınırken, ebeveyn sınıf bildiriminde soyut olarak bildirilmiş tüm yöntemlerin çocuk sınıf tarafından da tanımlanması gerekir. Ek olarak, bu yöntemlerin aynı (ya da daha az sınırlı) görünürlükle tanımlanması gerekir. Örneğin, soyut yöntem protected olarak tanımlanmışsa, işlev gerçeklenimi private değil, protected ya da public olarak tanımlanmalıdır.

Örnek 1 - Soyut sınıf örneği

<?php
abstract class SoyutSınıf
{
    
// Genişletilen sınıfı bu yöntemi tanımlamaya zorla
    
abstract protected function değeriAl();
    abstract protected function 
önekDeğeri($önek);

    
// Ortak yöntem
    
public function yazdır() {
        print 
$this->değeriAl() . "\n";
    }
}

class 
SomutSınıf1 extends SoyutSınıf
{
    protected function 
değeriAl() {
        return 
"SomutSınıf1";
    }

    public function 
önekDeğeri($önek) {
        return 
"{$önek}SomutSınıf1";
    }
}

class 
SomutSınıf2 extends SoyutSınıf
{
    public function 
değeriAl() {
        return 
"SomutSınıf2";
    }

    public function 
önekDeğeri($önek) {
        return 
"{$önek}SomutSınıf2";
    }
}

$class1 = new SomutSınıf1;
$class1->yazdır();
echo 
$class1->önekDeğeri('FOO_') ."\n";

$class2 = new SomutSınıf2;
$class2->yazdır();
echo 
$class2->önekDeğeri('FOO_') ."\n";
?>

Yukarıdaki örneğin çıktısı:

SomutSınıf1
FOO_SomutSınıf1
SomutSınıf2
FOO_SomutSınıf2

Kullanıcı tanımlı sınıfları veya 'abstract' isimli işlevleri olmayan eski kodun bir değişikliğe gerek duyulmadan çalışabilmesi gerekir.



Nesne Arayüzleri

Nesne arayüzleri, bir sınıfın gerçeklemesi gereken yöntemlerin belirtildiği kodu, bu yöntemlerin nasıl yönetileceğini tanımlamaksızın oluşturmanıza imkan sağlar.

Arayüzler, standart sınıflardan farklı olarak hiçbir yöntemin içeriği tanımlanmaksızın interface anahtar sözcüğü kullanılarak tanımlanırlar.

Bir arayüzdeki tüm yöntemler, arayüzün doğası gereği public olarak bildirilmelidir.

implements işleci

Bir arayüzü gerçeklemek için, implements işleci kullanılır. Arayüzdeki tüm yöntemler bir sınıf içersinde gerçeklenmelidir; aksi takdirde bir ölümcül hata alırsınız. Bir sınıfın, birden fazla arayüz tanımlaması arayüzler virgülle ayrılarak sağlanabilir.

Bilginize: Belirsizliğe yol açacağından, bir sınıf aynı işlev isimlerine sahip iki arayüz gerçekleyemez.

Bilginize: Arayüzler, sınıflar gibi extends işleciyle genişletilebilir.

Bilginize: Bir arayüzü tanımlayan bir sınıf, bunu arayüzde tanımlı yöntemleri kullanarak yapmalıdır, yoksa işlem ölümcül hata ile sonuçlanır.

Sabitler

Arayüzlerin sabitlerinin olması mümkündür. Arayüz sabitleri tıpkı sınıf sabitleri gibi çalışırlar. Kendilerini miras alan sınıflar veya arayüzler tarafından geçersiz kılınamazlar.

Örnekler

Örnek 1 - Arayüz örneği

<?php
// 'iTemplate' arayüzünü tanımlayalım
interface iTemplate
{
    public function 
setVariable($name$var);
    public function 
getHtml($template);
}

// Arayüzü gerçekleyelim
// Bu çalışacaktır
class Template implements iTemplate
{
    private 
$vars = array();

    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }

    public function 
getHtml($template)
    {
        foreach(
$this->vars as $name => $value) {
            
$template str_replace('{' $name '}'$value$template);
        }

        return 
$template;
    }
}

// Bu çalışmayacaktır
// Ölümcül hata: BadTemplate sınıfı 1 soyut yöntem içermektedir
// dolayısıyla soyut olarak tanımlanması gerekir (iTemplate::getHtml)
class BadTemplate implements iTemplate
{
    private 
$vars = array();

    public function 
setVariable($name$var)
    {
        
$this->vars[$name] = $var;
    }
}

?>

Örnek 2 - Genişletilebilir Arayüzler

<?php
interface a
{
    public function 
foo();
}

interface 
extends a
{
    public function 
baz(Baz $baz);
}

// Bu çalışır
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Baz $baz)
    {
    }
}

// Bu çalışmaz, ölümcül hatayla sonuçlanır
class implements b
{
    public function 
foo()
    {
    }

    public function 
baz(Foo $foo)
    {
    }
}
?>

Örnek 3 - Çok sayıda anayüz oluşturma

<?php
interface a
{
    public function 
foo();
}

interface 
b
{
    public function 
bar();
}

interface 
extends ab
{
    public function 
baz();
}

class 
implements c
{
    public function 
foo()
    {
    }

    public function 
bar()
    {
    }

    public function 
baz()
    {
    }
}
?>

Örnek 4 - Arayüzler ve sabitleri

<?php
interface a
{
    const 
'Arayüz sabiti';
}

// Şunu basar: Arayüz sabiti
echo a::b;


// Sabitler geçersiz kılınamayacağından bu çalışmaz.
// Sınıf sabitleri için de bu böyledir.
class implements a
{
    const 
'Sınıf sabiti';
}
?>

Bir arayüz tür dayatarak belli bir nesnenin belli yöntemleri içermesini sağlayabilir. Ayrıca bakınız: instanceof işleci ve Tür Dayatma.



Aşırı Yükleme

PHP'deki aşırı yükleme, bir sınıfın özelliklerini ve yöntemlerini devingen olarak "oluşturmak" anlamına gelmektedir. Bu devingen öğeler, çeşitli eylem türleri için sınıf içinde oluşturulabilen sihirli yöntemler üzerinden işleme sokulurlar.

Aşırı yükleme yöntemleri, henüz bildirilmemiş veya geçerli etki alanında görünür olmayan özellik ve yöntemlerle etkileşilmek istendiğinde çağrılırlar. Bu bölümün kalanında bu bildirim ve görünürlükle ilgili durumdan bahsederken "erişilemeyen özellikler" ve "erişilemeyen yöntemler" terimlerini kullanacağız.

Tüm aşırı yükleme yöntemlerinin public olarak tanımlanması gerekir.

Bu sihirli yöntemlerin değiştirgelerinin hiçbiri gönderimli olarak aktarılamaz.

Bilginize: PHP'nin "aşırı yükleme" konusundaki yorumu çoğu nesne yönelimli dilden farklıdır. Aşırı yükleme geleneksel olarak, dile, farklı miktar ve türde değiştirgeye sahip aynı isimde çok sayıda yönteme sahip olabilme yeteneği sağlar.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 __callStatic()() eklendi. Genel etki alanında görünürlüğü ve devingen bildirimini zorunlu kılacak uyarı eklendi.
5.1.0 __isset()() ve __unset()() eklendi.

Özelliklerde aşırı yükleme

void __set ( string $isim , mixed $değer )
mixed __get ( string $isim )
bool __isset ( string $isim )
void __unset ( string $isim )

__set()() erişilemeyen özelliklere veri yazarken çalıştırılır.

__get()() erişilemeyen özelliklerden veri okurken devreye sokulur.

__isset()() erişilemeyen özellikler için isset() veya empty() çağrıldığında tetiklenir.

__unset()() erişilemeyen özellikler için unset() kullanıldığında çağrılır.

$isim değiştirgesi etkileşime girilecek özelliğin ismidir. __set()() yönteminin $değer değiştirgesi, $isim adlı özelliğe atanacak değeri belirler.

Özellikler üzerindeki aşırı yükleme sadece nesne bağlamında çalışır. Bu sihirli yöntemler duruk bağlamda tetiklenmeyecektir. Bu bakımdan, bu yöntemler static bildirilemez.

Bilginize: PHP'nin atama işlecini ele alış yöhteminden dolayı __set() işlevinin dönüş değeri yoksayılır. Benzer şekilde,

 $a = $obj->b = 8; 
örneğindeki gibi zincirleme atamalarda __get() get asla çağrılmaz.

Örnek 1 - __get(), __set(), __isset() ve __unset() ile aşırı yükleme örneği

<?php
class ÖzellikSınama {
    
/*  Aşırı yüklemeye konu veriler burada.  */
    
private $veri = array();

    
/*  Bildirilmiş özellikler için aşırı yükleme kullanılmaz.  */
    
public $bildirilmiş 1;

    
/*  Aşırı yükleme sadece sınıf dışından erişilemeyen özellikler içindir.
     */
    
private $gizli 2;

    public function 
__set($isim$değer) {
        echo 
"'$isim' adlı özelliğe '$değer' atanıyor.\n";
        
$this->veri[$isim] = $değer;
    }

    public function 
__get($isim) {
        echo 
"'$isim' adlı özelliğin değeri isteniyor\n";
        if (
array_key_exists($isim$this->veri)) {
            return 
$this->veri[$isim];
        }

        
$trace debug_backtrace();
        
trigger_error(
            
$trace[0]['file'] . ' dosyasının ' .
            
$trace[0]['line'] . '. satırında ' .
            
'__get() ile tanımsız özellik istendi: ' $isim,
            
E_USER_NOTICE);
        return 
null;
    }

    
/**  PHP 5.1.0'dan itibaren  */
    
public function __isset($isim) {
        echo 
"'$isim' atanmış mı?\n";
        return isset(
$this->veri[$isim]);
    }

    
/**  PHP 5.1.0'dan itibaren  */
    
public function __unset($isim) {
        echo 
"'$name' siliniyor\n";
        unset(
$this->veri[$isim]);
    }

    
/**  Sihirli bir yöntem değil; sadece örnek olsun diye.  */
    
public function gizliyiOku() {
        return 
$this->gizli;
    }
}


echo 
"<pre>\n";

$obj = new ÖzellikSınama;

$obj->1;
echo 
$obj->"\n\n";

var_dump(isset($obj->a));
unset(
$obj->a);
var_dump(isset($obj->a));
echo 
"\n";

echo 
$obj->bildirilmiş "\n\n";

echo 
"'gizli' isimli 'private' özellik ile bir deneme yapalım:\n";
echo 
"'private' özellikler sadece sınıf içinde görünürdürler,\n";
echo 
"bu yüzden __get() kullanılmaz...\n";
echo 
$obj->gizliyiOku() . "\n";
echo 
"'private' özellikler sınıf dışında görünür değildirler,\n";
echo 
"dolayısıyla __get() kullanılır...\n";
echo 
$obj->gizli "\n";
?>

Yukarıdaki örneğin çıktısı:

'a' adlı özelliğe '1' atanıyor.
'a' adlı özelliğin değeri isteniyor
1

'a' atanmış mı?
bool(true)
'' siliniyor
'a' atanmış mı?
bool(false)

1

'gizli' isimli 'private' özellik ile bir deneme yapalım:
'private' özellikler sadece sınıf içinde görünürdürler,
bu yüzden __get() kullanılmaz...
2
'private' özellikler sınıf dışında görünür değildirler,
dolayısıyla __get() kullanılır...
'gizli' adlı özelliğin değeri isteniyor

Notice: <dosya> dosyasının 71. satırında __get() ile tanımsız özellik istendi: gizli

Yöntemlerde aşırı yükleme

mixed __call ( string $isim , array $değiştirgeler )
mixed __callStatic ( string $isim , array $değiştirgeler )

__call()(), erişilemeyen yöntemler bir nesne bağlamından çağrıldığında tetiklenir.

__callStatic()(), erişilemeyen yöntemler duruk bir bağlamdan çağrıldığında tetiklenir.

$isim değiştirgesi çağrılan yöntemin ismidir. $değiştirgeler değiştirgesi ise $isim adlı yönteme aktarılan değiştirgeleri içeren numararalı bir dizidir.

Örnek 2 - __call() ve __callStatic() ile aşırı yüklü örneklenmiş yöntemler

<?php
class YöntemSınama {
    public function 
__call($isim$değiştirgeler) {
        
// Bilgi: $isim değeri büyük-küçük harfe duyarlıdır.
        
echo "Nesnenin '$isim' yöntemi çağrılıyor: "
             
implode(', '$değiştirgeler). "\n";
    }

    
/**  PHP 5.3.0 ve sonrası  */
    
public static function __callStatic($isim$değiştirgeler) {
        
// Bilgi: $isim değeri büyük-küçük harfe duyarlıdır.
        
echo "Duruk yöntem '$isim' çağrılıyor: "
             
implode(', '$değiştirgeler). "\n";
    }
}

$obj = new YöntemSınama;
$obj->deneBakalım('nesne bağlamında');

YöntemSınama::deneBakalım('duruk bağlamda');  // PHP 5.3.0 ve sonrası
?>

Yukarıdaki örneğin çıktısı:

Nesnenin 'deneBakalım' yöntemi çağrılıyor: nesne bağlamında
Duruk yöntem 'deneBakalım' çağrılıyor: duruk bağlamda


Nesne Yineleme

PHP 5 ile tanımlanan nesneler, foreach gibi bir deyim kullanılarak bir öğe listesi üzerinden yinelenebilirler. Öntanımlı olarak, tüm görünür özellikler yineleme için kullanılacaktır.

Örnek 1 - Basit Nesne Yineleme

<?php
class MyClass
{
    public 
$var1 'değer 1';
    public 
$var2 'değer 2';
    public 
$var3 'değer 3';

    protected 
$protected 'protected var';
    private   
$private   'private var';

    function 
iterateVisible() {
       echo 
"MyClass::iterateVisible:\n";
       foreach(
$this as $key => $value) {
           print 
"$key => $value\n";
       }
    }
}

$class = new MyClass();

foreach(
$class as $key => $value) {
    print 
"$key => $value\n";
}
echo 
"\n";


$class->iterateVisible();

?>

Yukarıdaki örneğin çıktısı:

var1 => değer 1
var2 => değer 2
var3 => değer 3

MyClass::iterateVisible:
var1 => değer 1
var2 => değer 2
var3 => değer 3
protected => protected var
private => private var

Çıktıdan görüleceği gibi, foreach erişilebilir olan tüm görünür değişkenleri yineledi. Bir adım öteye giderek, PHP'nin yerleşik arayüzlerinden biri olan Iterator'ü gerçekleyebilirsiniz. Iterator kullanılarak, hangi nesnenin nasıl yineleneceğine bir nesnenin karar verebilmesi mümkündür.

Örnek 2 - Iterator kullanılarak Nesne Yineleme

<?php
class MyIterator implements Iterator
{
    private 
$var = array();

    public function 
__construct($array)
    {
        if (
is_array($array)) {
            
$this->var $array;
        }
    }

    public function 
rewind() {
        echo 
"başa al\n";
        
reset($this->var);
    }

    public function 
current() {
        
$var current($this->var);
        echo 
"mevcut: $var\n";
        return 
$var;
    }

    public function 
key() {
        
$var key($this->var);
        echo 
"anahtar: $var\n";
        return 
$var;
    }

    public function 
next() {
        
$var next($this->var);
        echo 
"sonraki: $var\n";
        return 
$var;
    }

    public function 
valid() {
        
$var $this->current() !== false;
        echo 
"geçerli: {$var}\n";
        return 
$var;
    }
}

$values = array(1,2,3);
$it = new MyIterator($values);

foreach (
$it as $a => $b) {
    print 
"$a$b\n";
}
?>

Yukarıdaki örneğin çıktısı:

başa al
mevcut: 1
geçerli: 1
mevcut: 1
anahtar: 0
0: 1
sonraki: 2
mevcut: 2
geçerli: 1
mevcut: 2
anahtar: 1
1: 2
sonraki: 3
mevcut: 3
geçerli: 1
mevcut: 3
anahtar: 2
2: 3
sonraki:
mevcut:
geçerli:

Ayrıca, kendi sınıfınızı, Iterator işlevlerinin tümünü her defasında yeniden tanımlamadan, PHP 5 ile birlikte gelen IteratorAggregate arayüzünü gerçekleyerek tanımlayabilirsiniz.

Örnek 3 - IteratorAggregate ile Nesne Yineleme

<?php
class MyCollection implements IteratorAggregate
{
    private 
$items = array();
    private 
$count 0;

    
// IteratorAggregate için gerekli arayüz tanımı
    
public function getIterator() {
        return new 
MyIterator($this->items);
    }

    public function 
add($value) {
        
$this->items[$this->count++] = $value;
    }
}

$coll = new MyCollection();
$coll->add('değer 1');
$coll->add('değer 2');
$coll->add('değer 3');

foreach (
$coll as $key => $val) {
    echo 
"key/value: [$key -> $val]\n\n";
}
?>

Yukarıdaki örneğin çıktısı:

başa al
mevcut: değer 1
geçerli: 1
mevcut: değer 1
anahtar: 0
anahtar/değer: [0 -> değer 1]

sonraki: değer 2
mevcut: değer 2
geçerli: 1
mevcut: değer 2
anahtar: 1
anahtar/değer: [1 -> değer 2]

sonraki: değer 3
mevcut: değer 3
geçerli: 1
mevcut: değer 3
anahtar: 2
anahtar/değer: [2 -> değer 3]

sonraki:
mevcut:
geçerli:

Bilginize: Yineleyiciler ile ilgili daha fazla örnek için, Iterators bölümüne bakınız.



Hazır Yöntemler

Hazır yöntemler, en iyi uygulamaları ve doğru tasarımları açıklamanın bir yoludur. Hazır yöntemler genel programlama sorunlarına esnek bir çözüm getirir.

Üreteç Yöntemi

Üreteç yöntemi, nesnelerin çalışma anında örneklenmesini sağlar. Böyle adlandırılmasının sebebi, nesnenin "üretiminden" sorumlu olmasıdır. Üreteç yöntemi değiştirge olarak sınıf ismini alır ve onunla nesneyi oluşturur.

Örnek 1 Değiştirgeli Üreteç Yöntemi

<?php
class Örnek
{
    
// Değiştirgeli üreteç yöntemi
    
public static function üret($tür)
    {
        if (include_once 
'Drivers/' $tür '.php') {
            
$sınıfadı 'Driver_' $tür;
            return new 
$sınıfadı;
        } else {
            throw new 
Exception ('Sürücü bulunamadı');
        }
    }
}
?>

Bu yöntemi bir sınıf içinde tanımlarsanız sürücülerin çalışma anında yüklenmesini sağlayabilirsiniz. Örnek sınıfı bir veritabanı soyutlama sınıfı olsaydı, MySQL ve SQLite sürücülerinin yüklenmesi işlemi aşağıdaki gibi yapılabilirdi:

<?php
// MySQL sürücüsünü yükle
$mysql Örnek::üret('MySQL');

// SQLite sürücüsünü yükle
$sqlite Örnek::üret('SQLite');
?>

Tek Örnek Yöntemi

Tek örnek yöntemi, bir sınıfın tek bir örneğine ihtiyaç duyuldugu durumlarda tanımlanır. Bu duruma en genel örnek, veritabanı bağlantısıdır. Tek örnek yöntemi gerçeklenerek, tek bir nesne örneğinin başka birçok nesne tarafından erişilebilir olması sağlanabilir.

Örnek 2 - Tek Örnek İşlevi

<?php
class Örnek
{
    
// Sınıf örneğini bu değişkende saklayacağız
    
private static $nesneÖrneği;

    
// Private tanımlı bir kurucu,
    // nesnenin doğrudan oluşturulmasını engeller
    
private function __construct()
    {
        echo 
'Ben hazırım, ';
    }

    
// Tek örnek yöntemi
    
public static function tekÖrnek()
    {
        if (!isset(
self::$nesneÖrneği)) {
            
$c __CLASS__;
            
self::$nesneÖrneği = new $c;
        }

        return 
self::$nesneÖrneği;
    }

    
// Başka bir yöntem
    
public function bak()
    {
        echo 
'bak!';
    }

    
// Kullanıcıların örneği kopyalamasını engelle
    
public function __clone()
    {
        
trigger_error('Nesnenin kopyalanmasına izin verilmez.'E_USER_ERROR);
    }

}

?>

Yukarıdaki örnek Örnek sınıfının sadece tek bir örneğinin alınmasına izin verir.

<?php
// Bu işlem başarısız olur çünkü kurucu private tanımlı
$deneme = new Örnek;

// Bununla sınıfın daima tek örneği alınabilir
$deneme Örnek::tekÖrnek();
$deneme->bak();

// Bu bir E_USER_ERROR iletisi oluşturur.
$deneme_kopyası = clone($deneme);

?>


Sihirli Yöntemler

__construct, __destruct, (bak: Kurucular ve Yıkıcılar), __call, __callStatic, __get, __set, __isset, __unset, (bak: Aşırı yükleme), __sleep, __wakeup, __toString, __invoke, __set_state ve __clone işlev isimleri PHP sınıflarında sihirli işlemler yaparlar. İşlevlerinize sihirli bir işlevsellik kazandırmak istemedikçe bu isimleri sınıfınızın içinde işlev ismi olarak kullanamazsınız.

Dikkat

PHP, __ ile baslayan tüm işlev isimlerini sihirli işlevlere ayırmıştır. Belgelenmiş bir kaç sihirli işlevsellik dışında __ ile başlayan işlev isimleri kullanmamanızı öneririz.

__sleep ve __wakeup

serialize() işlevi, sınıfınızın __sleep adında sihirli bir işleve sahip olup olmadığına bakar. Böyle bir işlev varsa herhangi bir serileştirme işleminden önce bu işlev çalıştırılır. Bu işlev ile nesne üzerinde temizlik yapabilir ve serileştirilmesi gereken nesnenin tüm değişken isimlerinin bir dizi halinde döndürülmesini sağlayabilirsiniz. Eğer işlev hiçbir şey döndürmemişse NULL serileştirilir ve bir E_NOTICE çıktılanır.

__sleep işlevinin asıl kullanım amacı askıdaki veriyi göndermek gibi temizliğe benzer işlemler yapmaktır. Ayrıca, tümüyle kaydedilmesi gerekmeyen büyük veri parçaları sözkonusu olduğunda da bu işlevden yararlanabilirsiniz.

unserialize() işlevi tersine bir işlem yaparak __wakeup adında bir sihirli işlevin varlığını araştırır. Böyle bir işlev varsa, bu işlev nesnenin sahip olduğu tüm özkaynakları yeniden oluşturabilir.

__wakeup işlevinin asıl kullanım amacı, serileştirme sırasında kaybedilebilen veritabanı bağlantılarını yeniden oluşturmak ve diğer ilklendirme işlemlerini yeniden yapmaktır.

Örnek 1 - Uyutma ve uyandırma

<?php
class Bağlantı {
    protected 
$hat;
    private 
$sunucu$kullanıcı$parola$db;

    public function 
__construct($sunucu$kullanıcı$parola$db)
    {
        
$this->sunucu $sunucu;
        
$this->kullanıcı $kullanıcı;
        
$this->parola $parola;
        
$this->db $db;
        
$this->connect();
    }

    private function 
bağlan()
    {
        
$this->hat mysql_connect($this->sunucu$this->kullanıcı$this->parola);
        
mysql_select_db($this->db$this->hat);
    }

    public function 
__sleep()
    {
        
mysql_close($this->hat);
    }

    public function 
__wakeup()
    {
        
$this->bağlan();
    }
}
?>

__toString

__toString yöntemi, sınıf bir dizgeye dönüştürüldüğünde sınıfın nasıl tepki vereceğine karar vermeyi sağlar.

Örnek 2 - Basit bir örnek

<?php
// Basit bir sınıf tanımlayalım
class TestClass
{
    public 
$foo;

    public function 
__construct($foo) {
        
$this->foo $foo;
    }

    public function 
__toString() {
        return 
$this->foo;
    }
}

$class = new TestClass('Merhaba');
echo 
$class;
?>

Yukarıdaki örneğin çıktısı:

Merhaba

PHP 5.2.0'dan önce __toString yönteminin, doğrudan echo() ya da print() işlevleri ile birlikte çağrılmadıkça bir önemi yoktu. PHP 5.2.0'dan beri sadece dizge bağlamlarında (%s değiştiricili printf() gibi) çağrılabilmekte, diğer bağlamlarda (%d değiştiricili printf() gibi) çağrılamamaktadır. PHP 5.2.0'dan beri nesneleri __toString yöntemi olmaksızın dizgeye dönüştürme işlemi E_RECOVERABLE_ERROR hatasına yol açmaktadır.

__invoke

__invoke yöntemi, bir betik bir nesneyi bir işlev olarak çağırmaya çalışırsa çağrılır.

Bilginize: Bu özellik PHP 5.3.0'dan beri mevcuttur.

Örnek 3 - __invoke kullanımı

<?php
class CallableClass {
  function 
__invoke($x) {
    
var_dump($x);
  }
}
$obj = new CallableClass;
$obj(5);
var_dump(is_callable($obj));
?>

Yukarıdaki örneğin çıktısı:

int(5)
bool(true)

__set_state

Bu duruk yöntem, PHP 5.1.0 sürümünden beri var_export() tarafından ihraç edilen sınıflar için çağrılmaktadır.

Bu yöntemin tek değiştirgesi array('özellik' => değer, ...) biçeminde ihraç edilen özellikleri içeren bir dizidir.

Örnek 4 - __set_state kullanımı (PHP 5.1.0 ve sonrası)

<?php

class A
{
    public 
$var1;
    public 
$var2;

    public static function 
__set_state($bir_dizi// PHP 5.1.0'dan beri
    
{
        
$obj = new A;
        
$obj->var1 $bir_dizi['var1'];
        
$obj->var2 $bir_dizi['var2'];
        return 
$obj;
    }
}

$a = new A;
$a->var1 5;
$a->var2 'foo';

eval(
'$b = ' var_export($atrue) . ';'); // $b = A::__set_state(array(
                                            //    'var1' => 5,
                                            //    'var2' => 'foo',
                                            // ));
var_dump($b);

?>

Yukarıdaki örneğin çıktısı:

object(A)#2 (2) {
  ["var1"]=>
  int(5)
  ["var2"]=>
  string(3) "foo"
}


final Anahtar Sözcüğü

PHP 5 ile birlikte gelen diğer bir yenilik final anahtar sözcüğüdür. Bu anahtar sözcükle tanımlanmış bir yöntemi çocuk sınıflar geçersiz kılamazlar. Eğer bir sınıf kendini final sözcüğüyle tanımlamışsa o sınıf genişletilemez.

Örnek 1 - final yöntem örneği

<?php
class AnaSınıf {
   public function 
deneme() {
       echo 
"AnaSınıf::deneme() çağrıldı\n";
   }

   final public function 
başkaDeneme() {
       echo 
"AnaSınıf::başkaDeneme() çağrıldı\n";
   }
}

class 
ÇocukSınıf extends AnaSınıf {
   public function 
başkaDeneme() {
       echo 
"ÇocukSınıf::başkaDeneme() çağrıldı\n";
   }
}
// Ölümcül hata ile sonuçlanır: AnaSınıf:başkaDeneme() final yöntemi
// ÇocukSınıf::başkaDeneme() yöntemiyle geçersiz kılınamaz
?>

Örnek 2 - final sınıf örneği

<?php
final class AnaSınıf {
   public function 
deneme() {
       echo 
"AnaSınıf::deneme() çağrıldı\n";
   }

   
// Burada işlevi final olarak belirtmenin bir önemi yoktur
   
final public function başkaDeneme() {
       echo 
"AnaSınıf::başkaDeneme() çağrıldı\n";
   }
}

class 
ÇocukSınıf extends AnaSınıf {
}
// Ölümcül hata ile sonuçlanır: ÇocukSınıf final bir sınıf
// olan AnaSınıf'ın çocuğu olarak oluşturulamaz
?>

Bilginize: Özellikler final olarak bildirilemez, sadece sınıflar ve yöntemler final olarak bildirilebilir.



Nesne Kopyalama

Bir nesnenin tüm özelliklerinin aynen kopyalanarak çoğaltılması her zaman istenilen durum değildir. Kurucuların kopyalanması iyi bir örnektir, bir GTK penceresini temsil eden bir nesneniz varsa ve bu nesne GTK penceresine ait özkaynağı tutuyorsa, bu nesnenin kopyasını oluşturduğunuzda, yeni nesnenin önceki pencere ile aynı özelliklere sahip yeni bir pencereye sahip olmasını ve önceki nesne ile aynı şekilde pencereye ait özkaynağı tutuyor olmasını isteyebilirsiniz. Bir diğer örnek, nesneniz kullandığı başka bir nesneye ait bir gönderim tutuyorsa, ebeveyn nesne kopyalandığında diğer nesnenin de yeni bir örneğinin oluşturulmasını isteyebilirsiniz, yani ebeveynin kopyasının kendine ait ayrı bir kopyası olur.

Bir nesnenin kopyası (mümkünse nesnenin __clone() yöntemini çağıran) clone anahtar sözcüğü kullanılarak oluşturulur. Bir nesnenin __clone() yöntemi doğrudan doğruya çağrılamaz.

$nesnenin_kopyası = clone $object;

Bir nesne kopyalandığında, PHP 5 nesnenin tüm özelliklerinin yüzeysel bir kopyasını çıkartacaktır. Diğer değişkenlere birer gönderim olan tüm özellikler gönderim olarak kalacaktır.

Kopyalama tamamlanır tamamlanmaz, bir __clone() yöntemi tanımlanmışsa, değişmesi gereken lüzumlu tüm özelliklere izin vermek için yeni oluşturulan nesnenin __clone() yöntemi çağrılacaktır.

Örnek 1 - Bir nesnenin kopyalanması

<?php
class AltNesne
{
    static 
$örnek_sayısı 0;
    public 
$örnek;

    public function 
__construct() {
        
$this->örnek = ++self::$örnek_sayısı;
    }

    public function 
__clone() {
        
$this->örnek = ++self::$örnek_sayısı;
    }
}

class 
KopyalanabilirNesnem
{
    public 
$nesne1;
    public 
$nesne2;

    function 
__clone()
    {
        
// this->nesne1'in bir kopyasını oluşturmak için
        // zorlayalım, yoksa aynı nesneyi gösterecek.
        
$this->nesne1 = clone $this->nesne1;
    }
}

$nes = new KopyalanabilirNesnem();

$nes->nesne1 = new AltNesne();
$nes->nesne2 = new AltNesne();

$nes2 = clone $nes;


print(
"Özgün Nesne:\n");
print_r($nes);

print(
"Kopya Nesne:\n");
print_r($nes2);
?>

Yukarıdaki örneğin çıktısı:

Özgün Nesne:
KopyalanabilirNesnem Object
(
    [nesne1] => AltNesne Object
        (
            [örnek] => 1
        )

    [nesne2] => AltNesne Object
        (
            [örnek] => 2
        )

)
Kopya Nesne:
KopyalanabilirNesnem Object
(
    [nesne1] => AltNesne Object
        (
            [örnek] => 3
        )

    [nesne2] => AltNesne Object
        (
            [örnek] => 2
        )

)


Nesnelerin Karşılaştırılması

Nesne karşılaştırma, PHP 5'te PHP 4'e nazaran daha karmaşıktır. PHP 5, bir Nesne Yönelimli Dil'den beklenenleri daha iyi karşılar (ancak, PHP 5 böyle bir dildir, demiyoruz).

Eşitlik işleci (==) kullanıldığında, nesne değişkenleri basit bir mantıkla karşılaştırılır: İki nesne örneği aynı özniteliklere ve aynı değerlere sahipse ve ikisi de aynı sınıf tarafından oluşturulmuşsa bu iki nesne örneği birbirine eşittir.

Öte yandan, aynılık işleci (===) kullanıldığında, iki nesne değişkeni yalnız ve yalnız aynı sınıfın aynı örneği iseler birbirlerinin aynısıdırlar.

Bu kuralları bir örnek ile pekiştirelim.

Örnek 1 - PHP 5'te nesne karşılaştırma örneği

<?php
function bool2str($bool)
{
    if (
$bool === false) {
        return 
'YANLIŞ';
    } else {
        return 
'DOĞRU';
    }
}

function 
compareObjects(&$o1, &$o2)
{
    echo 
'o1 == o2 : ' bool2str($o1 == $o2) . "\n";
    echo 
'o1 != o2 : ' bool2str($o1 != $o2) . "\n";
    echo 
'o1 === o2 : ' bool2str($o1 === $o2) . "\n";
    echo 
'o1 !== o2 : ' bool2str($o1 !== $o2) . "\n";
}

class 
Flag
{
    public 
$flag;

    function 
Flag($flag true) {
        
$this->flag $flag;
    }
}

class 
OtherFlag
{
    public 
$flag;

    function 
OtherFlag($flag true) {
        
$this->flag $flag;
    }
}

$o = new Flag();
$p = new Flag();
$q $o;
$r = new OtherFlag();

echo 
"Aynı sınıfın iki örneği\n";
compareObjects($o$p);

echo 
"\nAynı örneğe iki gönderim\n";
compareObjects($o$q);

echo 
"\nİki farklı sınıfın örnekleri\n";
compareObjects($o$r);
?>

Yukarıdaki örneğin çıktısı:

Aynı sınıfın iki örneği
o1 == o2 : DOĞRU
o1 != o2 : YANLIŞ
o1 === o2 : FALSE
o1 !== o2 : DOĞRU

Aynı örneğe iki gönderim
o1 == o2 : DOĞRU
o1 != o2 : YANLIŞ
o1 === o2 : DOĞRU
o1 !== o2 : YANLIŞ

İki farklı sınıfın örnekleri
o1 == o2 : YANLIŞ
o1 != o2 : DOĞRU
o1 === o2 : YANLIŞ
o1 !== o2 : DOĞRU

Bilginize: Eklentiler, kendi nesne karşılaştırmaları için kendi kurallarını tanımlayabilirler.



Tür Dayatma

PHP 5, Tür Dayatma özelliğine sahiptir. İşlevler artık değiştirgelerinde belli bir nesne veya (PHP 5.1 ve sonrasında) bir dizi belirtilmesi için zorlayıcı olabilmektedir.

Örnek 1 - Tür dayatma örnekleri

<?php
// Şöyle bir sınıfımız olsun
class Sınıfım
{
    
/**
     * Bir nesne sınama işlevi
     *
     * İlk değiştirge ÖbürSınıf türünde bir nesne olmalı
     */
    
public function nesne_dnm(ÖbürSınıf $diğersınıf) {
        echo 
$diğersınıf->değişken;
    }


    
/**
     * Bir dizi sınama işlevi
     *
     * İlk değiştirge bir dizi olmalı
     */
    
public function dizi_dnm(array $dizi_girdisi) {
        
print_r($dizi_girdisi);
    }
}

// Bu da öbür sınıfımız olsun
class ÖbürSınıf {
    public 
$değişken 'Merhaba Dünya';
}
?>

Dayatılan türe uymamanın sonucu yakalanabilir bir ölümcül hatadır.

<?php
// Her iki sınıftan birer örnek oluşturalım
$sınıfım = new Sınıfım;
$diğersınıf = new ÖbürSınıf;

// Ölümcül Hata: 1. değiştirge ÖbürSınıf türünde bir nesne olmalıdır
$sınıfım->nesne_dnm('hello');

// Ölümcül Hata: 1. değiştirge ÖbürSınıf türünde bir nesne örneği olmalıdır
$foo = new stdSınıf;
$sınıfım->nesne_dnm($foo);

// Ölümcül Hata: 1. değiştirge null olmamalıdır
$sınıfım->nesne_dnm(null);

// Bu çalışır: Merhaba Dünya yazdırır
$sınıfım->nesne_dnm($otherclass);

// Ölümcül Hata: 1. değiştirge bir dizi olmalıdır
$sınıfım->dizi_dnm('bir metin');

// Bu çalışır: Diziyi yazdırır
$sınıfım->dizi_dnm(array('a''b''c'));
?>

Tür dayatma işlevlerle de çalışır:

<?php
// Şöyle bir sınıfımız olsun
class Sınıfım {
    public 
$değişken 'Merhaba Dünya';
}

/**
 * Bir işlev sınama işlevi
 *
 * İlk değiştirge Sınıfım türünde bir nesne olmalı
 */
function İşlevim (Sınıfım $birsınıf) {
    echo 
$birsınıf->değişken;
}

// Bu çalışır
$sınıfım = new Sınıfım;
İşlevim($sınıfım);
?>

Tür dayatırken NULL değere izin verilir:

<?php

/* NULL değerin kabul edilmesi */
function deneme(stdSınıf $obj NULL) {

}

deneme(NULL);
deneme(new stdSınıf);

?>

Tür dayatma (PHP 5.1 itibariyle) sadece object veya array türünde olabilir. int ve string ile yapılan geleneksel tür dayatma desteklenmemektedir.



Duruk İçselleştirim

PHP 5.3.0'dan itibaren, miras alınan duruk bağlamın çağrıldığı nesne bağlamında değerlendirilmesini sağlayan ve duruk içselleştirim (İng.: late static bindings) adı verilen bir özellik eklenmiştir.

"Duruk içselleştirme", static:: yöntemin çalışma anında, tanımlandığı nesnenin bağlamında değil, çağrıldığı nesnenin bağlamında değerlendirilmesi olgusunu betimler.

self:: ile ilgili sınırlamalar

self:: veya __CLASS__ gibi bulunduğu sınıfa duruk gönderim yapan öğeler, örnekten de görüleceği üzere, yöntemi miras alan sınıf bağlamında değil, yöntemin ait olduğu sınıf bağlamında değerlendirilirler:

Örnek 1 - self:: kullanımı

<?php
class {
    public static function 
kimsin() {
        echo 
__CLASS__;
    }
    public static function 
dene() {
        
self::kimsin();
    }
}

class 
extends {
    public static function 
kimsin() {
        echo 
__CLASS__;
    }
}

B::dene();
?>

Yukarıdaki örneğin çıktısı:

A

Duruk İçselleştirimin uygulanması

Duruk içselleştirimde çözümlemenin, gönderimin çalışma anında ilk çağrıldığı sınıfla sınırlandırılması, gönderim için özel bir anahtar sözcük kullanılarak sağlanır. Temel olarak, böyle bir anahtar sözcük, yukarıdaki örnekteki dene() yönteminin aşağıdaki gibi B döndürmesini sağlar. Bunun için yeni bir anahtar sözcük atamaktansa, zaten bir anahtar sözcük olan static sözcüğü kullanılmıştır.

Örnek 2 - static:: kullanımı

<?php
class {
    public static function 
kimsin() {
        echo 
__CLASS__;
    }
    public static function 
dene() {
        static::
kimsin(); // Burada duruk içselleştirim yapılıyor
    
}
}

class 
extends {
    public static function 
kimsin() {
         echo 
__CLASS__;
    }
}

B::dene();
?>

Yukarıdaki örneğin çıktısı:

B

Bilginize: Duruk yöntemler için static::, $this gibi çalışmaz! $this-> kalıtım kurallarına bağlıdır, static:: değildir.

Örnek 3 - Duruk olmayan bağlamda static:: kullanımı

<?php
class Çocuk extends Ebeveyn {
    public function 
__construct() {
        static::
kimsin();
    }

    public function 
dene() {
        
$o = new Ebeveyn();
    }

    public static function 
kimsin() {
        echo 
__CLASS__."\n";
    }
}

class 
Ebeveyn {
    public function 
__construct() {
        static::
kimsin();
    }

    public static function 
kimsin() {
        echo 
__CLASS__."\n";
    }
}
$o = new Çocuk;
$o->dene();

?>

Yukarıdaki örneğin çıktısı:

Çocuk
Ebeveyn

Bilginize: Duruk içselleştirimin çözümlemesi duruk çağrının tamamen çözümlendiği noktada durdurulur, daha öteye gidilmez. Diğer taraftan, parent:: veya self:: gibi anahtar sözcükler kullanılarak yapılan duruk çağrılar çağrı bilgisini ötelerler.

Örnek 4 Ötelenen ve ötelenmeyen çağrılar

<?php
class {
    public static function 
nesin() {
        static::
kimsin();
    }

    public static function 
kimsin() {
        echo 
__CLASS__."\n";
    }
}

class 
extends {
    public static function 
dene() {
        
A::nesin();
        
parent::nesin();
        
self::nesin();
    }

    public static function 
kimsin() {
        echo 
__CLASS__."\n";
    }
}
class 
extends {
    public static function 
kimsin() {
        echo 
__CLASS__."\n";
    }
}

C::dene();
?>

Yukarıdaki örneğin çıktısı:

A
C
C

Yan etkiler

PHP'de bir yöntem çağrısını tetiklemenin çok çeşitli yolları vardır; geri çağırımlar ve sihirli yöntemler gibi. Bunlar duruk içselleştirime tabi tutulduklarında, çalışma anında beklenmeyen sonuçlara sebep olurlar.

Örnek 5 - Sihirli yöntemlerin içinde duruk içselleştirim

<?php
class {

   protected static function 
kimsin() {
        echo 
__CLASS__."\n";
   }

   public function 
__get($var) {
       return static::
kimsin();
   }
}

class 
extends {

   protected static function 
kimsin() {
        echo 
__CLASS__."\n";
   }
}

$b = new B;
$b->nesin;
?>

Yukarıdaki örneğin çıktısı:

B


Nesneler ve Gönderimler

PHP 5 için nesne yönelimli programlama ile ilgili olarak "öntanımlı olarak nesneler gönderimli aktarılır" diye bir kanı oluşmuştur, fakat bu tamamen doğru değildir. Bu bölümde bir örnek üzerinden bu genel kanı düzeltilmeye çalışılmıştır.

Bir PHP gönderimi, aynı değeri iki farklı değişkene yazmayı mümkün kılan bir takma addır. PHP 5'ten itibaren bir nesne değişkeni artık değer olarak nesnenin kendisini içermemektedir. Bunun yerine, nesne erişimcilerin asıl nesneyi bulmasını sağlayacak bir nesne tanıtıcısı içerir. Bir nesne değiştirgesi ile aktarılırken, döndürülürken veya başka bir değişkene atanırken bunlar takma ad değil, farklı değişkenlerdir: Aynı nesneyi gösteren tanıtıcının birer kopyasını içerirler.

Örnek 1 - Gönderimler ve Nesneler

<?php
class {
    public 
$foo 1;
}

$a = new A;
$b $a;     // $a ve $b aynı nesne tanıtıcısının kopyalarını içerir
             // ($a) = ($b) = <tanıtıcı>
$b->foo 2;
echo 
$a->foo."\n";


$c = new A;
$d = &$c;    // $c ve $d gönderimdir
             // ($c,$d) = <tanıtıcı>

$d->foo 2;
echo 
$c->foo."\n";


$e = new A;

function 
foo($obj) {
    
// ($obj) = ($e) = <tanıtıcı>
    
$obj->foo 2;
}

foo($e);
echo 
$e->foo."\n";

?>

Yukarıdaki örneğin çıktısı:

2
2
2


Object Serialization

Serializing objects - objects in sessions

serialize() returns a string containing a byte-stream representation of any value that can be stored in PHP. unserialize() can use this string to recreate the original variable values. Using serialize to save an object will save all variables in an object. The methods in an object will not be saved, only the name of the class.

In order to be able to unserialize() an object, the class of that object needs to be defined. That is, if you have an object of class A and serialize this, you'll get a string that refers to class A and contains all values of variabled contained it. If you want to be able to unserialize this in another file, an object of class A, the definition of class A must be prest ent in in that file first. This can be done for example by storing the class definition of class A in an include file and including this file or making use of the spl_autoload_register() function.

<?php
// classa.inc:
  
  
class {
      public 
$one 1;
    
      public function 
show_one() {
          echo 
$this->one;
      }
  }
  
// page1.php:

  
include("classa.inc");
  
  
$a = new A;
  
$s serialize($a);
  
// store $s somewhere where page2.php can find it.
  
file_put_contents('store'$s);

// page2.php:
  
  // this is needed for the unserialize to work properly.
  
include("classa.inc");

  
$s file_get_contents('store');
  
$a unserialize($s);

  
// now use the function show_one() of the $a object.  
  
$a->show_one();
?>

If an application is using sessions and uses session_register() to register objects, these objects are serialized automatically at the end of each PHP page, and are unserialized automatically on each of the following pages. This means that these objects can show up on any of the application's pages once they become part of the session. However, session_register() is deprecated as of PHP 5.3.0, and removed as of PHP 6.0.0. Reliance on this function is not recommended.

It is strongly recommended that if an application serializes objects, for use later in the application, that the application include the class definition for that object throughout the application. Not doing so might result in an object being unserialized without a class definition, which will result in PHP giving the object a class of __PHP_Incomplete_Class_Name, which has no methods and would render the object useless.

So if in the example above $a became part of a session by running session_register("a"), you should include the file classa.inc on all of your pages, not only page1.php and page2.php.




İsim Alanları

İçindekiler


Giriş

İsim alanı nedir? En dar tanımıyla, öğeleri sarmalamanın bir yoludur. Çoğu bakımdan bu soyut bir kavram gibi görünebilir. Örneğin, bir işletim sisteminin dizinleri bir birleriyle ilgili dosyaları gruplamaya yarar ve içerdiği dosyalar için bir isim alanı görevi yapar. Daha belirgin bir örnek olarak, /home/ali ve /home/veli dizinlerinde mesela.txt adında birer dosya bulunduğunu varsayalım. /home/ali dizinindeki dosyaya dizin dışından erişmek istersek dosyanın önüne dizin ayracı ile dizin adını yerleştiririz. Programcılık dünyasındaki isim alanlarına da aynı kurallar uygulanır.

PHP dünyasında isim alanları, kütüphane ve uygulama yazarlarının aşağıdaki gibi sınıflar ve işlevler gibi yeniden kullanılabilir elemanları oluşturken karşılaştıkları iki soruna çözüm getirmek amacıyla tasarlanmıştır:

  1. Yazdığınız kod ile yerleşik PHP sınıfları/işlevleri/sabitleri veya üçüncü şahısların sınıfları/işlevleri/sabitleri arasındaki isim çakışmaları.
  2. İlk sorunu hafifletmek ve kaynak kodun okunabilirliğini arttırmak için epeyce_uzun_isimlere takma ad tanımlama (veya kısaltma) yeteneği.

PHP isim alanları birbirleriyle ilişkili sınıflar, sabitler ve işlevleri gruplamak için bir yol sunar. PHP'deki isim alanı söz dizimi için bir örnek:

Örnek 1 - İsim alanı söz dizimi örneği

<?php
namespace isim\alanım// "İsim Alanlarının Tanımlanması" bölümüne bakınız

class Sınıfım {}
function 
işlevim() {}
const 
SABİTİM 1;

$a = new Sınıfım;
$c = new \isim\alanım\Sınıfım// "Küresel Etki Alanı" bölümüne bakınız

$a strlen('selam'); // "İsim alanlarının kullanımı: Son çare olarak
                      // küresel işlev ve sabitler" bölümüne bakınız

$d = \isim\alanım\SABİTİM;        // isim alanı işleci ve __NAMESPACE__
$d __NAMESPACE__ '\SABİTİM';  // sabiti" bölümüne bakınız
echo constant($d); // "İsim alanları ve devingen dil özellikleri"
                   // bölümüne bakınız
?>

İsim alanları PHP 5.3.0 sürümünden beri mevcuttur.



İsim Alanlarının Tanımlanması

İsim alanları içinde her çeşit PHP kodu bulunabilirse de sadece üç tür kod isim alanlarından etkilenir: Sınıflar, işlevler ve sabitler.

İsim alanları, namespace anahtar sözcüğü ile bildirilirler. Bir isim alanını içeren bir dosyada isim alanı bütün diğer kodlardan önce (ama bir declare satırından önce değil) dosyanın başlarında bildirilmelidir.

Örnek 1 - Tek bir isim alanı bildirimi

<?php
namespace Projem;

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }

?>

Bir isim alanı bildiriminden önce bulunmasına izin verilen tek oluşum, kaynak dosyanın kodlamasının tanımlandığı declare deyimidir. Bunun dışında, baştaki fazladan boşluklar da dahil hiçbir PHP-dışı kod, bir isim alanı bildiriminden önce yer alamaz. Örnek:

Örnek 2 - Tek bir isim alanı bildirimi

<html>
<?php
namespace Sınıfım// ölümcül hata - namespace, betikteki ilk deyim olmalıdır
?>

Diğer tüm PHP oluşumlarının tersine, isim alanının dosya sistemi içinde parçalara bölünebilmesi için aynı isim alanı birden fazla dosyada tanımlanabilir.



Alt İsim Alanlarının Bildirilmesi

Dizinler ve dosyalardaki gibi PHP isim alanı isimleri arasında da bir hiyeraraşi belirtmek mümkündür. Bu bakımdan, bir isim alanı başka isim alanlarının altında tanımlanabilir:

Örnek 1 - Tek bir isim alanının hiyerarşik bildirimi

<?php
namespace Projem\Alt\Seviye;

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }

?>

Yukarıdaki örnekte, Projem\Alt\Seviye\BAĞLANTI_TAMAM sabiti, Projem\Alt\Seviye\Bağlantı sınıfı ve Projem\Alt\Seviye\bağlan işlevi oluşturulmaktadır.



Birden Fazla İsim Alanının Aynı Dosyada Tanımlanması

Birden fazla isim alanı aynı dosya içinde bildirilebilir. İki çeşit söz dizimine izin verilir.

Örnek 1 - Birden fazla isim alanın ayrımsız ardarda bildirilmesi

<?php
namespace Projem;

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }

namespace 
DiğerProjem;

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }
?>

Bu söz dizimi aynı dosya içinde birden fazla isim alanı bildirimi için önerilmez. Bunun yerine ayraçlı söz dizimi önerilir.

Örnek 2 - Birden fazla isim alanın ayraçlı olarak bildirilmesi

<?php
namespace Projem {

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }
}

namespace 
DiğerProjem {

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }
}
?>

Aynı dosya içinde birden fazla isim alanını birleştirmek iyi bir kodlama uygulaması olarak teşvik edilmektedir. Çoğunlukla çok sayıda PHP betiğini aynı dosyada birleştirmek amacıyla kullanılır.

İsim alansız küresel kodu isim alanlı kodla bir arada kullanmanın tek yolu ayraçlı söz dizimini kullanmaktır (diğerine izin verilmemektedir). Küresel kod isimsiz bir isim alanı bildirimi ile aynı dosyada şöyle bildirilebilir:

Örnek 3 - Birden fazla isim alanın isim alansız kodla birlikte bildirilmesi

<?php
namespace Projem {

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }
}

namespace { 
// küresel kod
session_start();
$a Projem\bağlan();
echo 
Projem\Bağlantı::başlat();
}
?>

İsim alanı ayraçlarının dışında, kodlama belirten declare deyimi dışında hiçbir PHP kodu bulunamaz.

Örnek 4 - Birden fazla isim alanın isim alansız kodla birlikte bildirilmesi

<?php
declare(encoding='UTF-8');
namespace 
Projem {

const 
BAĞLANTI_TAMAM 1;
class 
Bağlantı /* ... */ }
function 
bağlan() { /* ... */  }
}

namespace { 
// küresel kod
session_start();
$a Projem\bağlan();
echo 
Projem\Bağlantı::başlat();
?>



İsim alanlarının kullanımı: Temeller

İsim alanlarının kullanımından önce PHP'nin kodunuzdaki hangi isim alanlı kodu isteğinizi nasıl anlayabildiğinden bahsetmek gerekir. Bunu daha kolay anlayabilmek için PHP isim alanları ile dosya sistemleri arasındaki benzerlikten yola çıkılabilir. Bir dosya sistemindeki bir dosyaya üç yolla erişilebilir:

  1. fan.txt şeklinde göreli dosya ismiyle. Bu isim dosya sisteminde içinde bulunulan dizin geçerlidizin/ olmak üzere geçerlidizin/fan.txt olarak çözümlenir. Dolayısıyla geçerli dizin /home/veli ise dosya ismi /home/veli/fan.txt olarak çözümlenecektir.
  2. altdizin/fan.txt şeklinde göreli dosya yolu. Bu isim dosya sisteminde içinde bulunulan dizin geçerlidizin/ olmak üzere geçerlidizin/altdizin/fan.txt olarak çözümlenir.
  3. /home/veli/fan.txt şeklinde mutlak dosya yolu. Bu, /home/veli/fan.txt olarak çözümlenir.

Aynı kurallar PHP'deki isim alanlı elemanlara da uygulanabilir. Örneğin bir sınıf ismine üç şekilde başvurulabilir:

  1. $a = new fan(); veya fan::durukyöntem(); gibi bir nitelenmemiş isim veya öneksiz bir sınıf ismi. Eğer geçerli isim alanı ismi geçerlisimalanı ise bu isim, geçerlisimalanı\fan olarak çözümlenir. Eğer kod küresel ve isim alansız ise, isim fan olarak çözümlenecektir. Bir ayrıntı: Eğer isim alanlı işlev ve sabitler tanımlı ise nitelenmemiş isimli işlevler ve sabitler küresel işlevler ve sabitler olarak çözümlenir. Ayrıntılar için İsim alanlarının kullanımı: Son çare olarak küresel işlev ve sabitler bölümüne bakınız.
  2. $a = new altisimalanı\fan(); veya altisimalanı\fan::durukyöntem(); gibi bir nitelenmemiş isim veya öneksiz bir sınıf ismi. Eğer geçerli isim alanı ismi geçerlisimalanı ise bu isim, geçerlisimalanı\altisimalanı\fan olarak çözümlenir. Eğer kod küresel ve isim alansız ise, isim altisimalanı\fan olarak çözümlenecektir.
  3. $a = new \geçerlisimalanı\fan(); veya \geçerlisimalanı\fan::durukyöntem(); gibi tamamen nitelenmiş isim veya küresel önekli bir isim. Bu isim daima kodda belirtildiği gibi geçerlisimalanı\fan olarak çözümlenir.

Üç söz dizimi aşağıda örneklenmiştir:

dosya1.php

<?php
namespace Fan\Fin\altisimalanı;

const 
FAN 1;
function 
fan() {}
class 
fan
{
    static function 
durukyöntem() {}
}
?>

dosya2.php

<?php
namespace Fan\Fin;
include 
'dosya1.php';

const 
FAN 2;
function 
fan() {}
class 
fan
{
    static function 
durukyöntem() {}
}

/* Nitelenmemiş isim */
fan();              // Fan\Fin\fan işlevine çözümlenir
fan::durukyöntem(); // Fan\Fin\fan sınıfının durukyöntem yöntemine çözümlenir
echo FAN;           // Fan\Fin\FAN sabitine çözümlenir

/* Nitelenmiş isim */
altisimalanı\fan(); // Fan\Fin\altisimalanı\fan işlevine çözümlenir
altisimalanı\fan::durukyöntem(); // Fan\Fin\altisimalanı\fan sınıfının
                                 // durukyöntem yöntemine çözümlenir
echo altisimalanı\FAN// Fan\Fin\altisimalanı\FAN sabitine çözümlenir

/* Tamamen nitelenmiş isim */
\Fan\Fin\fan();              // Fan\Fin\fan işlevine,
\Fan\Fin\fan::durukyöntem(); // Fan\Fin\fan sınıfının durukyöntem yöntemine,
echo \Fan\Fin\FAN;           // Fan\Fin\FAN sabitine çözümlenir
?>

Herhangi bir küresel sınıf, işlev veya sabite \strlen(), \Exception veya \INI_ALL gibi tamamen nitelenmiş isimleriyle erişilebileceğine dikkat ediniz.

Örnek 1 - Küresel sınıf, işlev ve sabitlere bir isim alanı içinden erişim

<?php
namespace Fan;

function 
strlen() {}
const 
INI_ALL 3;
class 
Exception {}

$a = \strlen('merhaba');      // strlen küresel işlevini çağırır
$b = \INI_ALL;                // INI_ALL küresel sabitini çağırır
$c = new \Exception('error'); // Exception küresel sınıfını örnekler
?>



İsim alanları ve devingen dil özellikleri

PHP'nin isim alanları gerçeklenimi bir programlama dili olarak PHP'nin kendi devingen doğasından etkilenir. Örnek olarak aşağıdaki kodu isim alanlı koda dönüştürmek istersek:

Örnek 1 - Devingen olarak erişilen elemanlar

örnek1.php:

<?php
class sınıfadı
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
işlevadı()
{
    echo 
__FUNCTION__,"\n";
}
const 
sabitadı "küresel";

$a 'sınıfadı';
$obj = new $a;                   // sınıfadı::__construct basar
$b 'işlevadı';
$b();                            // işlevadı basar
echo constant('sabitadı'), "\n"// küresel basar
?>

Tamamen nitelenmiş isim kullanmak gerekir (isim alanı önekli sınıf adı). Bir devingen sınıf, işlev veya sabit ismi içinde bir nitelenmiş isim ile tamamen nitelenmiş isim arasında bir fark olmadığından baştaki ters bölünün gereksiz oluşuna dikkat edin.

Örnek 2 - Devingen olarak erişilen isim alanlı elemanlar

<?php
namespace isimalanıadı;
class 
sınıfadı
{
    function 
__construct()
    {
        echo 
__METHOD__,"\n";
    }
}
function 
işlevadı()
{
    echo 
__FUNCTION__,"\n";
}
const 
sabitadı "isimalanlı";

include 
'örnek1.php';

$a 'sınıfadı';
$obj = new $a;                    // sınıfadı::__construct basar
$b 'işlevadı';
$b(); // prints funcname
echo constant('sabitadı'), "\n"// küresel basar

/* çift tırnakları kullanacaksanız, "\\isimalanıadı\\sınıfadı"
   biçiminde olmalıdır */
$a '\isimalanıadı\sınıfadı';
$obj = new $a// isimalanıadı\sınıfadı::__construct basar
$a 'isimalanıadı\sınıfadı';
$obj = new $a// bu da isimalanıadı\sınıfadı::__construct basar
$b 'isimalanıadı\işlevadı';
$b(); // isimalanıadı\işlevadı basar
$b '\isimalanıadı\işlevadı';
$b(); //bu da isimalanıadı\işlevadı basan
echo constant('\isimalanıadı\sabitadı'), "\n"// isimalanlı basar
echo constant('isimalanıadı\sabitadı'), "\n"// bu da isimalanlı basar
?>

SSS arasındaki Dizgelerdeki isim alanı adlarının öncelenmesi konusuna da bakmayı unutmayın.



namespace sözcüğü ve __NAMESPACE__ sabiti

PHP, geçerli isim alanı içindeki elemanlara mutlak olarak iki yolla erişimi destekler: sihirli __NAMESPACE__ sabiti ve namespace anahtar sözcüğü.

__NAMESPACE__ sabitinin değeri içinde bulunulan isim alanının adını içeren bir dizgedir. Küresel alandaki isim alansız kod için sabitin değeri boş dizgedir.

Örnek 1 - İsim alanlı kod, __NAMESPACE__ örneği

<?php
namespace Projem;

echo 
'"'__NAMESPACE__'"'// "Projem" basar
?>

Örnek 2 - Küresel kod, __NAMESPACE__ örneği

<?php

echo '"'__NAMESPACE__'"'// "" basar
?>

__NAMESPACE__ sabiti devingen olarak oluşturulan isimler için kullanışlıdır.

Örnek 3 - Devingen isim oluşturmak için __NAMESPACE__ kullanımı

<?php
namespace Projem;

function 
get($sınıfadı)
{
    
$a __NAMESPACE__ '\\' $sınıfadı;
    return new 
$a;
}
?>

namespace sözcüğü, geçerli isim alanından veya bir alt isim alanından doğrudan doğruya bir eleman isteği yaparken kullanılabilir. Sınıflardaki self işlecinin isim alanlarındaki karşılığıdır.

Örnek 4 - Bir isim alanı içinde namespace işleci

<?php
namespace Projem;

use 
fan\fin as fon;  // "İsim alanlarının kullanımı: ithal/rumuz"

fin\fon();           // Projem\fin\fon() işlevini çağırır
namespace\fin\fon(); // Projem\fin\fon() işlevini çağırır

namespace\işlev();   // Projem\işlev() işlevini çağırır
namespace\alt\işlev();    // Projem\alt\işlev() işlevini çağırır
namespace\isim::yöntem(); // Projem\isim sınıfının duruk "yöntem"
                          // yöntemini çağırır
$a = new namespace\alt\isim(); // Projem\alt\isim sınıfını örnekler
$b = namespace\SABİT;     // Projem\SABİT sabitinin değerini $b'ye atar
?>

Örnek 5 - Küresel kod içinde namespace işleci

<?php

namespace\işlev();        // işlev() işlevini çağırır
namespace\alt\işlev();    // alt\işlev() işlevini çağırır
namespace\isim::yöntem(); // isim sınıfının duruk "yöntem" yöntemini çağırır
$a = new namespace\alt\isim(); // alt\isim sınıfını örnekler
$b = namespace\SABİT;     // SABİT sabitinin değerini $b'ye atar
?>



İsim alanlarının kullanımı: İthal/Rumuz

Dış kaynaklı tamamen nitelenmiş bir isme bir takma adla veya ithal ederek başvurma yeteneği isim alanlarının önemli bir özelliğidir. Bu özellik, Unix dosya sistemlerinin bir dizin veya dosyaya bir sembolik bağ oluşturma yeteneğine benzer.

PHP isim alanları iki çeşit takma ad kullanımını veya ithalini destekler: bir sınıf adına takma ad ve bir isim alanı adına takma ad. Bir işlevin veya sabitin ithalinin desteklenmediğine dikkat ediniz.

PHP'da takma ad kullanımı use işleci üzerinden sağlanır. Aşağıda 3 çeşit ithal örneğine yer verilmiştir:

Örnek 1 - use işleci ile ithal/rumuz kullanımı

<?php
namespace fan;
use 
Bir\Tam\Sınıfadı as BirBaşkası;

// use Bir\Tam\iAadı as iAadı ile aynıdır
use Bir\Tam\iAadı;

// küresel bir sınıfın ithali
use \DiziNesnesi;

$nesne = new namespace\BirBaşkası// fan\BirBaşkası sınıfını örnekler
$nesne = new BirBaşkası// Bir\Tam\Sınıfadı  sınıfını örnekler
iAadı\altia\işlev(); // Bir\Tam\iAadı\altia\işlev işlevini çağırır
$a = new DiziNesnesi(array(1)); // DiziNesnesi sınıfını örnekler
// "use \DiziNesnesi" olmasaydı fan\DiziNesnesi sınıfını örneklerdik
?>

İsim alanlı adlar için baştaki terbölü gereksiz olup izin verilmediği gibi bunlar geçerli isim alanına göre işlenmezler. İthal edilen isimler ise tamamen nitelenmiş olmalıdır. (Tamamen nitelenmiş isimler Fan\Fin şeklinde isim alanı ayracı içermelerine karşın küresel isimler FanFin şeklinde isim alanı ayracı içermezler.)

PHP bunlara ek olarak çok sayıda use deyiminin aynı satırda kullanılmasına imkan veren bir kısayola da sahiptir.

Örnek 2 - use işleci ile rumuz/ithal, çoklu use kullanımı

<?php
use Bir\Tam\Sınıfadı as BirBaşkasıBir\Tam\iAadı;

$nesne = new BirBaşkası// Bir\Tam\Sınıfadı sınıfını örnekler
iAadı\altia\işlev();     // Bir\Tam\iAadı\altia\işlev işlevini çağırır
?>

İthal işlemi derleme sırasında yerine getirilir ve dolayısıyla devingen sınıf, işlev ve sabit isimlerini etkilemez.

Örnek 3 - İthal işlemi ve devingen isimler

<?php
use Bir\Tam\Sınıfadı as BirBaşkasıBir\Tam\iAadı;

$nesne = new BirBaşkası// Bir\Tam\Sınıfadı sınıfını örnekler
$a 'BirBaşkası';
$nesne = new $a;         // BirBaşkası sınıfını örnekler
?>

Bunlara ek olarak, ithal işlemi sadece nitelenmemiş ve nitelenmiş isimleri etkiler. Tamamen nitelenmiş isimler mutlak olup ithal işleminden etkilenmez.

Örnek 4 - İthal işlemi ve tamamen nitelenmiş isimler

<?php
use Bir\Tam\Sınıfadı as BirBaşkasıBir\Tam\iAadı;

$nesne = new BirBaşkası;       // Bir\Tam\Sınıfadı sınıfını örnekler
$nesne = new \BirBaşkası;        // BirBaşkası sınıfını örnekler
$nesne = new BirBaşkası\birşey;  // Bir\Tam\Sınıfadı\birşey sınıfını örnekler
$nesne = new \BirBaşkası\birşey// BirBaşkası\birşey sınıfını örnekler
?>



Küresel Alan

Herhangi bir isim alanı tanımı olmaksızın, tüm sınıf ve işlev tanımları PHP'de isim alanlarının desteklenmediği zamanlardaki gibi küresel alana yerleştirilir. Bir ismin önüne doğrudan doğruya \ konulması, bu ismin bir isim alanı bağlamında bile küresel alandan bir isim olarak işlem görmesini sağlar.

Örnek 1 - Küresel alan belirtiminin kullanımı

<?php
namespace A\B\C;

/* A\B\C\fopen işlevidir */
function fopen() {
     
/* ... */
     
$f = \fopen(...); // küresel fopen çağrılır
     
return $f;
}
?>



İsim alanlarının kullanımı: son çare olarak küresel işlev ve sabitler

Bir isim alanı içinde PHP, bir sınıf ismi, işlev veya sabitin bağlamında nitelenmemiş isimlere rastlarsa bunları farklı önceliklerle ele alır. Sınıf isimleri daima geçerli isim alanı ismine çözümlenir. Dolayısıyla yerleşik veya isim alansız kullanıcı sınıflarına erişmek için, bunların aşağıdaki gibi tamamen nitelenmiş isimlerinin kullanılması gerekir:

Örnek 1 - Küresel sınıflara bir isim alanı içinde erişim

<?php
namespace A\B\C;
class 
Exception extends \Exception {}

$a = new Exception('hi'); // $a, A\B\C\Exception sınıfının bir nesnesidir
$b = new \Exception('hi'); // $b, Exception sınıfının bir nesnesidir

$c = new ArrayObject// ölümcül hata, A\B\C\ArrayObject yoktur
?>

İşlevler ve sabitler açısından PHP, bir isim alanlı işlev veya sabit mevcut değilse son çare olarak küresel işlevlere ve sabitlere başvurur.

Örnek 2 - Bir isim alanı içinde son çare olarak küresel işlev ve sabitlerin kullanımı

<?php
namespace A\B\C;

const 
E_ERROR 45;
function 
strlen($str)
{
    return \
strlen($str) - 1;
}

echo 
E_ERROR"\n"// "45" basar
echo INI_ALL"\n"// "7" basar - son çare olarak küresel INI_ALL

echo strlen('hi'), "\n"// "1" basar
if (is_array('hi')) { // "dizi değil" basar
    
echo "dizi\n";
} else {
    echo 
"dizi değil\n";
}
?>



İsim çözünürlük kuralları

İsim çözünürlük kurallarının amaçları gereği bazı önemli tanımlar:

İsim alanı adı tanımları
Nitelenmemiş isim

Fan gibi bir isim alanı ayracı içermeyen bir betimleyici.

Nitelenmiş isim

Fan\Fin gibi bir isim alanı ayracı içeren bir betimleyici.

Tamamen nitelenmiş isim

\Fan\Fin gibi bir isim alanı ayracı ile başlayan isim alanı ayraçlı bir betimleyici. namespace\Fan da tamamen nitelenmiş bir isimdir.

İsimler şu kurallara göre çözümlenir:

  1. Tamamen nitelenmiş işlev, sınıf ve sabit isimleri derleme sırasında çözümlenir. Örneğin, new \A\B deyimi A\B sınıfı olarak çözümlenir.
  2. Tamamen nitelenmemiş (nitelenmemiş ve nitelenmiş) isimlerin tamamı derleme sırasında geçerli ithal kurallarına göre dönüştürülür. Örneğin, A\B\C isim alanı C olarak ithal edilmişse bir C\D\e() çağrısı A\B\C\D\e() çağrısına dönüştürülür.
  3. Bir isim alanı içinde ithal kurallarına göre dönüştürülmeyen tüm nitelenmiş isimlerin önüne geçerli isim alanı ismi getirilir. Örneğin, A\B isim alanında yapılmış bir C\D\e() çağrısı A\B\C\D\e() çağrısına dönüştürülecektir.
  4. Nitelenmemiş sınıf isimleri derleme sırasında geçerli ithal kurallarına göre dönüştürülür (kısa ithal ismi için tam isim kullanılır). Örneğin, A\B\C isim alanı C olarak ithal edilmişse new C() deyimi new A\B\C() deyimine dönüştürülür.
  5. İsim alanı içindeki (A\B olsun), nitelenmemiş işlev çağrıları çalışma anında çözümlenir. fan() diye bir işlev şöyle çözümlenir:
    1. Geçerli isim alanında A\B\fan() işlevi aranır.
    2. Küresel fan() işlevi bulunmaya ve çağrılmaya çalışılır.
  6. İsim alanı içindeki (A\B olsun), nitelenmemiş (tamamen nitelenmemiş) veya nitelenmiş sınıf ismi çağrıları çalışma anında çözümlenir. new C() ve new D\E() deyimlerinin çözümlenişi aşağıda verilmiştir. new C() için:
    1. Geçerli isim alanında A\B\C sınıfı aranır.
    2. A\B\C özdevinimli olarak yüklenmeye çalışılır.
    new D\E() için:
    1. Geçerli isim alanı ile öncelenmiş olarak A\B\D\E sınıfı aranır.
    2. A\B\D\E özdevinimli olarak yüklenmeye çalışılır.
    Küresel isim alanındaki bir küresel sınıfa başvururken new \C() şeklinde tamamen nitelenmiş isim kullanılmalıdır.

Örnek 1 - Örneklerle İsim Çözünürlüğü

<?php
namespace A;
use 
B\DC\as F;

// işlev çağrıları

fan();      // Varsa "A" isim alanında tanımlı "fan", yoksa küresel "fan"

\fan();     // Küresel alanda tanımlı "fan" çağrılır

my\fan();   // "A\my" isim alanında tanımlı "fan" çağrılır

F();        // Varsa "A" isim alanında tanımlı "F", yoksa küresel "F"

//sınıf adı çağrıları

new B();    // Varsa "A" isim alanında tanımlı "B" örneklenir
            // Yoksa "A\B" sınıfı özdevinimli olarak yüklenmeye çalışılır

new D();    // ithal kuralları ile, "B" isim alanında tanımlı "D" örneklenir
            // yoksa "B\D" sınıfı özdevinimli olarak yüklenmeye çalışılır

new F();    // ithal kuralları ile, "C" isim alanında tanımlı "E" örneklenir
            // yoksa "C\E" sınıfı özdevinimli olarak yüklenmeye çalışılır

new \B();   // Varsa küresel alanda tanımlı "B" örneklenir
            // yoksa "B" sınıfı özdevinimli olarak yüklenmeye çalışılır

new \D();   // Varsa küresel alanda tanımlı "D" örneklenir
            // yoksa "D" sınıfı özdevinimli olarak yüklenmeye çalışılır

new \F();   // Varsa küresel alanda tanımlı "F" örneklenir
            // yoksa "F" sınıfı özdevinimli olarak yüklenmeye çalışılır

// başka bir isim alanından duruk yöntem/isim alanı işlevleri

B\fan();    // "A\B" isim alanında tanımlı "fan" çağrılır

B::fan();   // "A" isim alanında tanımlı "B" sınıfının "fan" yöntemi çağrılır
            // "A\B" sınıfı yoksa, "A\B" özdevinimli yüklenmeye çalışılır

D::fan();   // ithal kuralları ile, "B" isim alanında tanımlı "D" sınıfının
            // "fan" yöntemi çağrılır; "B\D"  sınıfı yoksa, "B\D"
            // özdevinimli yüklenmeye çalışılır

\B\fan();   // "B" isim alanında tanımlı "fan" çağrılır

\B::fan();  // Küresel alandaki "B" sınıfının "fan" yöntemi çağrılır
            // "B" sınıfı yoksa, "B" özdevinimli yüklenmeye çalışılır

// geçerli isim alanının duruk yöntemleri ve isim alanı işlevleri

A\B::fan();   // "A\A" isim alanında tanımlı "B" sınıfının "fan" yöntemi
              // çağrılır; "A\A\B" sınıfı yoksa, "A\A\B" özdevinimli
              // yüklenmeye çalışılır

\A\B::fan();  // "A\B" isim alanında tanımlı "B" sınıfının "fan" yöntemi
              // çağrılır; "A\B" sınıfı yoksa, "A\B" özdevinimli yüklenmeye
              // çalışılır
?>


SSS: İsim alanları hakkında bilinmesi gerekenler

Bu SSS iki bölüme ayrılır: genel sorular ve isim alanlarını tamamen anlamaya yardımcı olacak gerçeklenime özgü ayrıntılar.

Önce genel sorularla başlıyoruz.

  1. İsim alanlarını kullanmayacak olsam bile bu konuyla yine de ilgilenmeli miyim?
  2. Yerleşik ve küresel sınıfları bir isim alanı içinde nasıl kullanabilirim?
  3. İsim alanlarının sınıflarını, işlevlerini ve sabitlerini kendi isim alanlarında nasıl kullanabilirim?
  4. \bir\isim veya \isim gibi bir isim nasıl çözümlenir?
  5. bir\isim gibi bir isim nasıl çözümlenir?
  6. isim gibi bir nitelenmemiş sınıf ismi nasıl çözümlenir?
  7. isim gibi bir nitelenmemiş işlev veya sabit ismi nasıl çözümlenir?

İsim alanları gerçeklenimini tamamen anlamaya yardımcı olacak gerçeklenime özgü bir kaç ayrıntı vardır.

  1. İthal edilen isimler aynı dosyada tanımlı sınıf isimleriyle çakışmamalıdır.
  2. İç içe isim alanlarına izin verilmez.
  3. use deyimi üzerinden ne işlevler ne de sabitler ithal edilebilir.
  4. Devingen isim alanları isimlerinin (tırnak içine alınmış betimleyiciler) içindeki tersbölülerin öncelenmesi gerekir.
  5. Tersbölü kullanılarak atıf yapılan tanımsız sabitler ölümcül hataya sebep olur.
  6. Özel NULL, TRUE, FALSE, ZEND_THREAD_SAFE ve ZEND_DEBUG_BUILD sabitleri geçersiz kılınamaz.

İsim alanlarını kullanmayacak olsam bile bu konuyla yine de ilgilenmeli miyim?

Hayır. Ne isim alanları mevcut koddan etkilenir ne de isim alanlarını içermeyen kodlar isim alanlarından etkilenir. İsterseniz kodu böyle yazabilirsiniz:

Örnek 1 - Küresel sınıflara bir isim alanı dışından erişim

<?php
$a 
= new \stdClass;

Bu kod şuna eşdeğerdir:

Örnek 2 - Küresel sınıflara bir isim alanı dışından erişim

<?php
$a 
= new stdClass;

Yerleşik ve küresel sınıfları bir isim alanı içinde nasıl kullanabilirim?

Örnek 3 - İsim alanı içinden yerleşik sınıflara erişim

<?php
namespace fan;
$a = new \stdClass;

function 
test(\ArrayObject $typehintexample null) {}

$a = \DirectoryIterator::CURRENT_AS_FILEINFO;

// Bir yerleşik veya küresel sınıfın genişletilmesi
class MyException extends \Exception {}
?>

İsim alanlarının sınıflarını, işlevlerini ve sabitlerini kendi isim alanlarında nasıl kullanabilirim?

Örnek 4 - İsim alanındaki dahili sınıf, işlev ve sabitlere erişim

<?php
namespace fan;

class 
Sınıfım {}

// bir ipucu yazdırmak için geçerli isim alanındaki bir sınıfın kullanımı
function dnm(Sınıfım $biripucuörneği null) {}
// ipucu yazdırmak için geçerli isim alanındaki bir sınıfın başka
// bir yolla kullanımı
function dnm(\fan\Sınıfım $biripucuörneği null) {}

// geçerli isim alanındaki bir sınıfın genişletilmesi
class AltSınıfım extends Sınıfım {}

// bir küresel işleve erişim
$a = \küreselişlev();

// bir küresel sabite erişim
$b = \INI_ALL;
?>

\bir\isim veya \isim gibi bir isim nasıl çözümlenir?

\ ile başlayan isimler daima yazıldıkları gibi çözümlenirler, bu bakımdan \bir\isim aslında bir\isim'dir; \Exception da aslında Exception'dır.

Örnek 5 - Tamamen nitelenmiş isimler

<?php
namespace fan;
$a = new \bir\isim(); // "bir\isim" sınıfını örnekler
echo \strlen('hi');   // "strlen" işlevini çağırır
$a = \INI_ALL;        // $a değişkenine "INI_ALL" sabitinin değeri atanır
?>

bir\isim gibi bir isim nasıl çözümlenir?

Bir tersbölü içeren, ancak tersbölü ile başlamayan bir\isim gibi isimler iki farklı yolla çözümlenebilir.

bir ismini başka bir isimle ithal eden bir deyim varsa bu takma isim bir\isim içindeki bir'e uygulanır.

Aksi takdirde, bir\isim isminin önüne geçerli isim alanı adı getirilir.

Örnek 6 - Nitelenmiş isimler

<?php
namespace fon;
use 
fan\fin as fon;

$a = new bir\isim(); // "fon\bir\isim" sınıfını örnekler
fon\bar::isim(); // "fan\fin\bar" sınıfının "isim" duruk yöntemi çağrılır
bir\bar();        // "fon\bir\bar" işlevi çağrılır
$a bir\BAR;    // $a değişkenine "fon\bir\BAR" sabitinin değeri atanır
?>

isim gibi bir nitelenmemiş sınıf ismi nasıl çözümlenir?

isim gibi tersbölü içermeyen sınıf isimleri 2 farklı yolla çözümlenebilir.

isim ismini başka bir isimle ithal eden bir deyim varsa bu takma isim isim'e uygulanır.

Aksi takdirde, isim ismininin önüne geçerli isim alanı getirilir.

Örnek 7 - Nitelenmemiş sınıf isimleri

<?php
namespace fon;
use 
fan\fin as fon;

$a = new isim(); // "fon\isim" sınıfı örneklenir
fon::isim();     // "fan\fin" sınıfının "isim" duruk yöntemi çağrılır
?>

isim gibi bir nitelenmemiş işlev veya sabit ismi nasıl çözümlenir?

isim gibi tersbölü içermeyen işlev ve sabit isimleri 2 farklı yolla çözümlenebilir.

Önce isim isminin önüne geçerli isim alanı ismi getirilir.

Son olarak, eğer isim alanında isim diye bir işlev veya sabit yoksa ve isim diye bir küresel işlev veya sabit varsa küresel alandaki kullanılır.

Örnek 8 - Nitelenmemiş işlev veya sabit isimleri

<?php
namespace fon;
use 
fan\fin as fon;

const 
FON 1;

function 
bir() {}
function 
fon() {}
function 
sort(&$a)
{
    
sort($a);
    
$a array_flip($a);
    return 
$a;
}

bir(); // "fon\bir" çarılır
$a strlen('hi');  // "fon\strlen" mevcut olmadığından küresel
                    // "strlen" işlevi çağrılır
$arr = array(1,3,2);
$b sort($arr);    // "fon\sort" işlevi çağrılır
$c fon(); // "fon\fon" işlevi çağrılır - ithal işlemi uygulanmaz

$a FON;     // $a değişkenine "fon\FON" sabitinin değeri
              // atanır - ithal işlemi uygulanmaz
$b INI_ALL// $b değişkenine "INI_ALL" küresel sabitinin değeri atanır
?>

İthal edilen isimler aynı dosyada tanımlı sınıf isimleriyle çakışmamalıdır.

Aşağıdaki iki betik birlikte kurallara uygundur:

dosya1.php

<?php
namespace bir\isim;
class 
Sınıfım {}
?>

dosya2.php

<?php
namespace diğer;
class 
BirŞey {}
?>

dosya.php

<?php
namespace bir\isim;
include 
'dosya1.php';
include 
'dosya2.php';

use 
diğer\BirŞey as Sınıfım;
$a = new Sınıfım// "diğer" isim alanındaki "BirŞey" sınıfını örnekler
?>

Sınıfım sınıfı bir\isim isim alanında mevcut olduğu halde Sınıfım ayrı bir dosyada tanımlandığından herhangi bir isim çakışması olmaz. Ancak, sonraki örnekte, Sınıfım sınıfı use deyimi ile aynı dosyada tanımlandığından isim çakışmasından dolayı ölümcül hata oluşur.

<?php
namespace bir\isim;
use 
diğer\BirŞey as Sınıfım;
class 
Sınıfım {} // ölümcül hata: Sınıfım ithal edilen sınıfla çakışır
$a = new Sınıfım;
?>

İç içe isim alanlarına izin verilmez.

PHP isim alanlarının böyle iç içe tanımlanmasına izin vermez:

<?php
namespace bir\isim {
    namespace 
içiçe {
        class 
fan {}
    }
}
?>

Bununla birlikte, isim alanlarını birbirinin içinde şöyle tanımlamak mümkündür:

<?php
namespace bir\isim\içiçe {
    class 
fan {}
}
?>

use deyimi üzerinden ne işlevler ne de sabitler ithal edilebilir.

use deyimlerinden sadece isim alanları ve sınıf isimleri etkilenir. Uzunca bir işlev veya sabit ismini kısaltmak için kendilerini içeren isim alanını ithal etmeniz yeterlidir.

<?php
namespace benimki;
use 
epeyce\fazla\uzun\isim;

$a isim\SABİT;
isim\işlev();
?>

Devingen isim alanları isimlerinin (tırnak içine alınmış betimleyiciler) içindeki tersbölülerin öncelenmesi gerekir.

Tersbölü imi dizgelerin içinde bir önceleme karakteri olarak kullanıldığından çift tırnaklar arasına alınmış bir dizge içindeki bir tersbölü karakterinin tersbölü ile öncelenmesi gerekir. Aksi takdirde, istenmeyen durumlar ortaya çıkabilir:

Örnek 9 - İsim alanlı isimleri çift tırnaklar arasında kullanmak tehlikelidir

<?php
$a 
= new "tehlikeli\nesne"// \n, çift tırnaklı dizge içinde
                            // satırsonu karakteridir!
$obj = new $a;

$a = new 'bu\tamamen\tehlikesiz\nesne'// burada sorun yok.
$obj = new $a;
?>

Tersbölüleri tek tırnakları arasına alınmış bir dizge içinde kullanmak daha güvenli olsa da her iki dizge türünde de tersbölüleri öncelemek en güvenlisidir.

Tersbölü kullanılarak atıf yapılan tanımsız sabitler ölümcül hataya sebep olur.

FAN gibi nitelenmemiş olarak tanımsız sabitlere rastlandığında PHP, bunun FAN değerli bir sabit varsayıldığını belirten bir uyarı üretecektir. İster nitelenmiş olsun ister tamamen nitelenmiş olsun tanımsız bir sabit daima ölümcül hataya sebep olur.

Örnek 10 - Tanımsız sabitler

<?php
namespace bar;
$a FAN;  // uyarı üretir - "FAN" sabit olarak tanımsız olduğundan
           // bir sabit ismi değil, bir sabit değer olarak ele alınır.
$a = \FAN;     // ölümcül hata, isim alanlı tanımsız sabit: FAN
$a Fin\FAN;  // ölümcül hata, isim alanlı tanımsız sabit: bar\Fin\FAN
$a = \Fin\FAN// ölümcül hata, isim alanlı tanımsız sabit: Fin\FAN
?>

Özel NULL, TRUE, FALSE, ZEND_THREAD_SAFE ve ZEND_DEBUG_BUILD sabitleri geçersiz kılınamaz.

Bir özel, yerleşik sabiti bir isim alanlı sabit olarak tanımlamaya kalkışmak ölümcül hatayla sonuçlanır.

Örnek 11 - Tanımsız sabitler

<?php
namespace bar;
const 
NULL 0;       // ölümcül hata;
const true 'ahmak'// bu da ölümcül hata;
// etc.
?>




İstisnalar

İçindekiler

PHP 5 diğer programlama dillerindekine benzer bir istisna modeline sahiptir. Bir istisna oluşturulabilir (throw) ve yakalanabilir (catch). Olası istisnaların yakalanabilmesi için, kod bir try bloğu içine alınabilir. Her try bloğuna karşılık en az bir tane catch bloğu olması gerekir. Farklı sınıflara ait istisnaları yakalamak için birden fazla catch bloğu kullanılabilir. Normal çalışma sıradaki son catch bloğundan sonra devam eder. Buradaki normal çalışma, try bloğu içinde hiçbir istisna oluşmadığı veya bir catch bloğu ile eşleşen bir oluşmuş istisnalar sınıfının mevcut olmadığı duruma karşılıktır. İstisnalar bir catch bloğu içerisinde oluşmuş olabileceği gibi yeniden de oluşabilir.

Bir istisna oluştuğunda, istisnanın oluştuğu yerden sonraki kodlar çalıştırılmaz ve PHP oluşan istisna ile uyuşan ilk catch bloğunu bulmaya çalışır. Bir istisnanın yakalanmaması durumunda, set_exception_handler() işlevi ile evvelce bir istisna eylemcisi tanımlanmamışsa, PHP bir ölümcül hata durumu oluşturur ve bir "Uncaught Exception ..." ("Yakalanmamış istisna ...") iletisi çıktılar.

Bilginize: Yerleşik PHP işlevleri aslında hata raporlama yapmakta, istisnaları sadece nesne yönelimli güncel eklentiler kullanmaktadır. Bununla birlikte hatalar ErrorException ile kolayca istisnalara dönüştürülebilir.

İpucu

Standard PHP Kütüphanesi (SPL) bol bol yerleşik istisna içerir.

Örnek 1 - Bir İstisna Oluşturmak

<?php
function inverse($x) {
    if (!
$x) {
        throw new 
Exception('Sıfıra bölme.');
    }
    else return 
1/$x;
}

try {
    echo 
inverse(5) . "\n";
    echo 
inverse(0) . "\n";
} catch (
Exception $e) {
    echo 
'Yakalanan olağandışılık: ',  $e->getMessage(), "\n";
}

// Çalışma sürer
echo 'Merhaba Dünya';
?>

Yukarıdaki örneğin çıktısı:

0.2
Yakalanan olağandışılık: Sıfıra bölme.
Merhaba Dünya

Örnek 2 - İç içe istisnalar

<?php

class MyException extends Exception { }

class 
Test {
    public function 
testing() {
        try {
            try {
                throw new 
MyException('foo!');
            } catch (
MyException $e) {
                
/* yeniden yakala */
                
throw $e;
            }
        } catch (
Exception $e) {
            
var_dump($e->getMessage());
        }
    }
}

$foo = new Test;
$foo->testing();

?>

Yukarıdaki örneğin çıktısı:

string(4) "foo!"

İstisnaları Genişletmek

Yerleşik Exception sınıfını genişleten kullanıcı tanımlı bir istisna sınıfı tanımlanabilir. Aşağıdaki üyeler ve özellikler, yerleşik Exception sınıfından türetilen alt sınıf içerisinde nelerin erişilebilir olduğunu göstermektedir.

Örnek 1 - Yerleşik Exception sınıfı

<?php
class Exception
{
    protected 
$message 'Bilinmeyen istisna';  // istisna iletisi
    
private   $string;                          // __toString önbelleği
    
protected $code 0;                     // kullanıcı tanımlı istisna kodu
    
protected $file;                         // istisnanın kaynak dosyası
    
protected $line;                  // istisnanın kaynak dosyasındaki satırı
    
private   $trace;                           // geriye doğru hata izleme
    
private   $previous;              // istisnalar iç içe ise önceki istisna



    
public function __construct($message null$code 0,
                                  
Exception $previous null);


    final private function 
__clone();           // İstisna kopyalamayı engeller
    
final public function getMessage();         // istisna iletisi
    
final public function getCode();            // istisnanın kodu
    
final public function getFile();            // kaynak dosya
    
final public function getLine();            // kaynak dosya satırı
    
final public function getTrace();           // backtrace() dizisi
    
final public function getTraceAsString();   // biçemli hata izleme dizgesi
    
final public  function getPrevious();       // önceki istisna

    /* Geçersiz kılınabilir */
    
public function __toString();  // görüntüleme için biçemlenmiş dizge
}
?>

Bir sınıf yerleşik Exception sınıfını genişletiyor ve nesne kurucuyu yeniden tanımlıyorsa, mevcut tüm verinin düzgün biçimde atandığından emin olmak için parent::__construct() işlevinin de çağrılması hararetle önerilir. Nesne bir karakter dizisi olarak sunulduğunda özelleştirilmiş bir çıktı sağlayabilmek için __toString() yöntemi geçersiz kılınabilir.

Bilginize: İstisnaların kopyaları yapılamaz. Bir istisnanın kopyasını yapmaya çalışmak ölümcül hatayla (E_FATAL seviyesinden bir hata) ile sonuçlanır.

Örnek 2 - Exception sınıfının genişletilmesi

<?php
/**
 * Özelleştirilmiş bir istisna sınıfı tanımlayalım
 */
class MyException extends Exception
{
    
// İstisnayı yeniden tanımlayalım, böylece ileti seçimlik olmaktan çıkar
    
public function __construct($message$code 0,
                                
Exception $previous null) {
        
// biraz kod

        // her şeyin düzgün atandığından emin olalım
        
parent::__construct($message$code$previous);
    }

    
// nesnenin özelleştirilmiş karakter dizisi gösterimi
    
public function __toString() {
        return 
__CLASS__ ": [{$this->code}]: {$this->message}\n";
    }

    public function 
customFunction() {
        echo 
"Bu türdeki istisnalar için özelleştirilmiş işlev\n";
    }
}


/**
 * İstisnayı denemek için bir sınıf oluşturalım
 */
class TestException
{
    public 
$var;

    const 
THROW_NONE    0;
    const 
THROW_CUSTOM  1;
    const 
THROW_DEFAULT 2;

    function 
__construct($avalue self::THROW_NONE) {

        switch (
$avalue) {
            case 
self::THROW_CUSTOM:
                
// özelleştirilmiş istisna oluştur
                
throw new MyException('1 geçersiz bir değiştirgedir'5);
                break;

            case 
self::THROW_DEFAULT:
                
// öntanımlı olarak bir oluşturulur.
                
throw new Exception('2 geçerli bir değiştirge değildir'6);
                break;

            default:
                
// İstisna yok; nesne oluşturulacak.
                
$this->var $avalue;
                break;
        }
    }
}


// Örnek 1
try {
    
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
MyException $e) {      // Yakalanacaktır
    
echo "Benim istisnam yakalandı\n"$e;
    
$e->customFunction();
} catch (
Exception $e) {        // Bu atlanır
    
echo "Öntanımlı istisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o);  // Null
echo "\n\n";


// Örnek 2
try {
    
$o = new TestException(TestException::THROW_DEFAULT);
} catch (
MyException $e) {      // Bu tür ile uyuşmuyor
    
echo "Benim istisnam yakalandı\n"$e;
    
$e->customFunction();
} catch (
Exception $e) {        // Bu yakalanacaktır
    
echo "Öntanımlı istisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o);  // Null
echo "\n\n";


// Örnek 3
try {
    
$o = new TestException(TestException::THROW_CUSTOM);
} catch (
Exception $e) {        // Yakalanacaktır
    
echo "Öntanımlı İstisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o);  // Null
echo "\n\n";


// Örnek 4
try {
    
$o = new TestException();
} catch (
Exception $e) {        // Bu atlandır; istisna yok
    
echo "Öntanımlı İstisna yakalandı\n"$e;
}

// Çalışmaya devam et
var_dump($o); // TestException
echo "\n\n";
?>



Gönderimlerle İlgili Herşey

İçindekiler


Gönderim Nedir?

PHP'de gönderimler aynı değişken içeriğine farklı isimlerle erişmek demektir. C'deki göstericilere benzemezler; örneğin, üzerlerinde gösterici aritmetiği kullanamazsınız, çünkü gerçekte bellek adresleri değillerdir.Ayrıntılar için Gönderimler Ne Değildir? bölümüne bakınız. daha çok simge tablosu PHP'de şuna dikkat edin: Değişken içeriği ve değişken ismi farklı şeylerdir. Bu bakımdan, aynı içeriğin farklı isimleri olabilir. En yakın benzerlik, Unix dosya isimleri ve dosyaları ile kurulabilir; değişken isimleri dizinlerse, değişken içeriği de dizinin içindeki dosyadır. Gönderimler ise Unix dosya sistemindeki sabit bağlar olarak düşünülebilir.



Gönderim Ne Yapar?

Gönderimleri kullanıldığı üç temel işlem vardır: gönderimli atama, gönderimli aktarma, ve gönderimli döndürme. Bu bölümde bu işlemlerle ilgili bağlantılar verilerek bir başlangıç yapılmıştır.

Gönderimli atama

Bu ilk temel işlemde, iki değişkenin aynı içeriğe atıf yapmasına izin verilir. Örnek:

<?php
$a 
=& $b;
?>

Bunun anlamı, $a ve $b değişkenlerinin aynı içeriği gösterdiğidir.

Bilginize: Burada $a ve $b tamamen eşittir; ne $a, $b'yi göstermekte ne de $b, $a'yı göstermektedir; $a ve $b aynı yeri göstermektedir.

Bilginize: Eğer bir dizi gönderimle kopyalanmışsa gösterilen şey değerler değildir. Bu ayrıca işlevlere değerleriyle aktarılan diziler için de geçerlidir.

Bilginize: Eğer tanımlanmamış bir değişken gönderimle atanır, aktarılır veya döndürülürse oluşturulmuş olur.

Örnek 1 - Gönderimlerin tanımlanmamış değişkenlerle kullanımı

<?php
function foo(&$var) { }

foo($a); // $a "oluşturulur" ve değer olarak null atanır

$b = array();
foo($b['b']);
var_dump(array_key_exists('b'$b)); // bool(true)

$c = new StdClass;
foo($c->d);
var_dump(property_exists($c'd')); // bool(true)
?>


Aynı sözdizimi, gönderim döndüren işlevler ve new işleci (PHP 4.0.4 ve sonrası, PHP 5.0.0'a kadar) ile kullanılabilir:

<?php
$foo 
=& dğşkn_bul($bar);
?>

PHP 5'ten beri, new özdevinimli olarak gönderim döndürmekte, bu bakımdan böyle bir bağlamda =& kullanımı önerilmemekte ve kullanıldığında E_STRICT seviyesinde ileti üretmektedir.

Uyarı

Bir işlevin içinde global olarak bildirilmiş bir değişkeni gönderimli olarak atarsanız gönderim sadece işlevin içinde görünür olur. $GLOBALS dizisini kullanarak bundan kaçınabilirsiniz.

Örnek 2 - İşlev içinde küresel değişkenlere gönderim

<?php
$var1 
"Örnek değişken";
$var2 "";

function 
küresel_gönderimler($küreselleri_kullan)
{
    global 
$var1$var2;
    if (!
$küreselleri_kullan) {
        
$var2 =& $var1// sadece işlev içinde görünürdür
    
} else {
        
$GLOBALS["var2"] =& $var1// küresel alanda da görünürdür
    
}
}

küresel_gönderimler(false);
echo 
"var2'ye '$var2' atanır\n"// var2'ye '' atanır
küresel_gönderimler(true);
echo 
"var2'ye '$var2' atanır\n"// var2'ye 'Örnek değişken' atanır
?>

global $var; deyimi $var =& $GLOBALS['var']; deyimine bir kısayol olarak düşünülür. Bu bakımdan $var'a başka bir gönderim atamak sadece yerel değişkenin gönderimini değiştirir.

Bilginize: Eğer bir değişkene foreach döngüsü içinde gönderimle bir değer atarsanız gönderimde de değişiklik yapılmış olur.

Örnek 3 - foreach döngüsü içinde gönderim

<?php
$ref 
0;
$row =& $ref;
foreach (array(
123) as $row) {
    
// işlemler
}
echo 
$ref// 3 - yinelenen dizinin son elemanı
?>


Gönderimli aktarım

Gönderimlerle yapılan ikinci şey değişkenleri gönderimle aktarmaktır. Bir işlev içinde bir yerel değişken oluşturup çağrı etki alanında bir değişkenle aynı içeriğe gönderim yaparak bu gerçeklenebilir. Örnek:

<?php
function foo(&$var)
{
    
$var++;
}

$a=5;
foo($a);
echo 
$a// 6 çıktılar
?>

$a'nın 6 olmasının sebebi foo işlevinde $var değişkeninin $a'nın içeriğine gönderimli olmasıdır. Daha ayrıntılı açıklamayı gönderimle aktarım bölümünde bulabilirsiniz.

Gönderimli değer döndürme

Gönderimlerle yapılan üçüncü şey gönderimli değer döndürmedir.



Gönderimler Ne Değildir?

Evvelce de değinildiği gibi bir gönderim bir gösterici değildir. Yani, aşağıdaki oluşum bekleneni yapmayacaktır:

<?php
function foo(&$var)
{
    
$var =& $GLOBALS["baz"];
}
foo($bar);
?>

Burada foo işlevindeki $var değişkeni çağrı yapılan yerde $bar değişkenine bağlanmakla kalmayıp bir de işlevin içinde $GLOBALS["baz"] değişkenine bağlanmaktadır. $bar'ın işlev etki alanı içinde gönderim mekanizması ile başka bir değişkene bağlanması mümkün değildir, çünkü $bar değişkeni foo işlevinin etki alanında mevcut değildir (işlev etki alanında $var tarafından temsil edilmekteyse de $var sadece değişkenin içeriğine sahiptir ve çağrı simgeleri tablosunda ismi değere bağlayan şey değildir). İşlev tarafından seçilen değişkenlere gönderim yapabilmek için değeri gönderimle döndürmelisiniz.



Gönderimle Aktarım

Bir değişkeni bir işleve gönderimle aktarabilirsiniz, böylece işlevin değiştirgelerini değiştirebilirsiniz. Sözdizimi şöyledir:

<?php
function işlev(&$değişken)
{
    
$değişken++;
}

$a=5;
foo($a);
// Burada $a artık 6'dır
?>

Bilginize: İşlevin çağrıldığı yerde gönderim yapıldığına dair bir belirtinin olmadığına dikkat ediniz; gönderim sadece işlevin üzerindedir. İşlev tanımı değiştirgeyi gönderimle gerektiği gibi aktarmak için tek başına yeterlidir. PHP'nin son sürümlerinde & imini işlev(&$a); biçeminde kullandığınız takdirde "Çağrı sırasında gönderimle aktarım" anlamına gelen bir uyarı alırsınız.

Aşağıdakiler bir işleve gönderimle aktarılabilir:

  • işlev($a) şeklinde bir değişken.
  • işlev(new sınıf()) şeklinde new deyimi.
  • Bir işlevden döndürerek bir gönderim. Örnek:

    <?php
    function &bar()
    {
        
    $a 5;
        return 
    $a;
    }
    foo(bar());
    ?>

    Ayrıca, gönderimle değer döndürme konusuna da bakınız.

Sonuç tanımsız olacağından, başka hiçbir ifade gönderimle aktarılamaz. Örneğin, aşağıdaki gönderimle aktarım örneği geçersizdir:

<?php
function bar() // Dikkat, & yok
{
    
$a 5;
    return 
$a;
}
foo(bar()); // PHP 5.0.5'ten beri ölümcül hata üretmekte

foo($a 5); // Bir ifade, değişken değil
foo(5);      // Ölümcül hata üretir
?>

Bunlar PHP 4.0.4 ve sonrası için gereklidir.



Gönderimle Döndürme

Gönderimle döndürme, gönderimin bağlayacağı değişkeni hedefleyen bir işlev kullanmak istediğiniz takdirde yararlıdır. Gönderimle döndürmeyi başarımı arttırmak amacıyla kullanmayın. Motor, bunu kendine göre en iyileyecek yeteneğe sahiptir. Sadece geçerli bir teknik sebebiniz olduğunda gönderimle döndürme yapın! Gönderimle döndürmek için şu söz dizimi kullanılır:

<?php
class sınıf {
    public 
$değer 42;

    public function &
değeriBağla() {
        return 
$this->değer;
    }
}

$obj = new sınıf;
$değerim = &$obj->değeriBağla(); // $değerim, $obj->değer için bir gönderimdir
echo $değerim;                   // 42 basar
$obj->değer 2;
echo 
$değerim;                   // 2 basar
?>

Bu örnekte, değeriBağla işlevi ile döndürülen nesne özelliği değişkene atanmaktadır, eğer gönderim söz dizimi kullanılmamış olsaydı özelliğin kendisi değil bir kopyası atanmış olacaktı.

Bilginize: Değiştirge aktarmanın tersine, burada her iki taraftada (çağıran ve çağrılan) & kullanımı zorunludur. Çağıran tarafta $değerim değişkenine yapılanın bir atama değil gönderim bağlantısı olduğunu, çağrılan tarafta ise yapılanın sıradan bir değer kopyalama değil bir gönderimle döndürme olduğunu belirtmektedir.

Bilginize: return ($this->değer); söz dizimi ile bir işlevden bir gönderim döndürmek isterseniz bir değişkeni değil de bir ifadenin sonucunu döndürmeye çalışmış olacağınızdan bu istediğinizi yapmayacaktır. Bir işlevden gönderimle sadece değişkenleri döndürebilirsiniz, başka bir şey döndüremezsiniz. PHP 4.4.0 ve PHP 5.1.0'dan beri gönderimle döndürme söz dizimini kullanan bir işlevden bir devingen ifadenin veya bir new işlecinin sonucunu döndürmeye çalışmak E_NOTICE seviyesinden bir hata oluşturmaktadır.



Gönderimi Tanımsız Yapmak

Bir gönderimi unset() ile tanımsız yapmakla aslında değişken ismiyle değeri arasındaki bağlantıyı bozmuş olursunuz, değişkeni içeriksiz bırakmış olmazsınız (aynı değeri gösteren iki değişkenden sadece birini ortadan kaldırmış olursunuz). Örnek:

<?php
$a 
1;
$b =& $a;
unset(
$a);
?>

Burada $b değil $a tanımsız olur.

Bu işlem, Unix unlink komutunun yaptığı işlemden pek de farklı değildir.



Gönderimleri kullanan diğer oluşumlar

PHP'deki çoğu söz dizimi oluşumu, gönderim mekanizması üzerinden gerçeklenir, bu bakımdan yukarıda gönderimle ilgili bahsedilenlerin tümü bu oluşumlara da uygulanır. Gönderimle aktarma veya döndürme gibi bazı oluşumlardan yukarıda söz edilmiştir. Gönderimleri kullanan diğer oluşumlar şunlardır:

Küresel Gönderimler

Bir değişkeni global $değişken deyimi ile bildirdiğiniz zaman aslında küresel bir değişkene bir gönderim oluşturmuş olursunuz. Aşağıdaki örnekte de aynı işlem yapılmaktadır:

<?php
$değişken 
=& $GLOBALS["değişken"];
?>

Yani, küresel olarak bildirildikten sonra unset($değişken) ile küresel değişkeni tanımsız yapamazsınız, sadece yerel değişken tanımsız olur.

$this

Bir nesne yönteminde, $this daima çağrılan nesneye bir gönderimdir.




Öntanımlı Değişkenler

PHP çalıştırdığı her betiğe çok sayıda evvelce tanımlanmış değişken sağlar. Değişkenler dış kaynaklı değişkenlerden yerleşik ortam değişkenlerine, son hata iletisinden son elde edilen başlıklara kadar geniş bir sahada kendilerini gösterirler.

Ayrıca " register_globals beni nasıl etkiler?" başlıklı SSS kısmına da bakınız.


Süper küreseller

Süper küresellerSüper küreseller bütün etki alanlarında daima mevcut olan yerleşik değişkenlerdir

Açıklama

PHP'de öntanımlı değişkenlerin çoğu "süper küresel"dir. Bu, betik boyunca bütün etki alanlarında kullanılabilir oldukları anlamına gelir. İşlevler veya yöntemler içinde bu değişkenlere erişmek için global $değişken; yapmak gerekmez.

Süper küresel değişkenler şunlardır:

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 PHP'ye süper küreseller getirildi.

Notlar

Bilginize: Değişken kullanılabilirliği
Öntanımlı olarak, bütün süper küreseller mevcuttur, fakat bunların kullanılabilirliğini etkileyen yönergeler vardır. Daha fazla bilgi için variables_order yönergesine bakınız.

Bilginize: register_globals ile ilgilenmek
Eğer kullanımdan kaldırılmış olan register_globals yönergesi on olarak belirtilirse değişkenler betiğin küresel etki alanında da kullanılabilir olacaklardır. Örneğin, $_POST['foo'] aynı zamanda $foo olarak da mevcut olacaktır.
İlgili bilgi için, "register_globals beni nasıl etkiler?" başlıklı SSS kısmına bakınız.

Bilginize: Değişken değişkenler
Süper küreseller, işlevler veya sınıf yöntemleri içinde değişken değişkenler olarak kullanılamazlar.



$GLOBALS

$GLOBALSKüresel alanda bulunan bütün değişkenleri içerir

Açıklama

Geçerli betiğin küresel alanında tanımlı bütün değişkenleri içeren bütünleşik bir dizidir. Değişken isimleri dizinin anahtarlarıdır.

Örnekler

Örnek 1 - $GLOBALS örneği

<?php
function test() {
    
$foo "yerel değişken";

    echo 
'$foo küresel alanda: ' $GLOBALS["foo"] . "\n";
    echo 
'$foo yerel alanda: ' $foo "\n";
}

$foo "Örnek içerik";
test();
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

$foo küresel alanda: Örnek içerik
$foo yerel alanda: yerel değişken

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.

Bilginize: Değişken kullanılabilirliği
Diğer süper küresellerden farklı olarak, $GLOBALS PHP'de her zaman var olmuştur.



$_SERVER

$HTTP_SERVER_VARS [kullanımdan kalktı]

$_SERVER -- $HTTP_SERVER_VARS [kullanımdan kalktı]Sunucu ve işletme ortamı bilgisi

Açıklama

$_SERVER başlıklar, yollar ve betiklerin yerleri gibi bilgileri içeren bir dizidir. Bu dizideki girdiler HTTP sunucusu tarafından oluşturulur. Her HTTP sunucusu bunları sunacak diye bir garanti yoktur; sunucular bazıları ile işlem yapmayabilir veya burada listelenmeyen başkalarını sağlayabilirler. Bu değişkenlerden çoğu » CGI 1.1 Belirtimi içinde ele alınırlar; yani bunlar genellikle her HTTP sunucusunda desteklenirler.

$HTTP_SERVER_VARS aynı başlangıç bilgisini içerir, fakat bir süper küresel değildir ($HTTP_SERVER_VARS ve $_SERVER farklı değişkenlerdir ve PHP de bu şekilde ele alır).

İndisler

Aşağıdaki elemanlardan bazılarını $_SERVER içinde belki bulursunuz belki de bulamazsınız. PHP komut satırında çalıştırıldığında bu değişkenlerden bazılarının herhangi bir anlamı varsa komut satırında da kullanılabileceğine dikkat ediniz.

'PHP_SELF'
Çalıştırılmakta olan betiğin, belge kök dizinine göreli dosya adıdır. Örneğin, http://mesela.dom/dnm.php/foo.bar adresindeki bir betik için $_SERVER['PHP_SELF'] değeri /dnm.php/foo.bar olacaktır. __FILE__ sabiti geçerli dosyanın tam yolunu ve dosya adını içerir. PHP 4.3.0 dan beri, eğer PHP komut satırı işlemcisi olarak çalışıyorsa bu değişken betik adını içerir. Önceki sürümlerde bu mevcut değildi.
'argv'
Betiğe aktarılan değiştirge dizisidir. Betik komut satırında çalıştığında, komut satırı değiştirgelerine C gibi erişim imkanı verir. Betik GET yöntemi üzerinden çağrıldığında, bu değişken sorgu dizgesini içerir.
'argc'
Betiğe aktarılan komut satırı değiştirgelerinin sayısını içerir (betik eğer komut satırından çalıştırılıyorsa).
'GATEWAY_INTERFACE'
Sunucunun desteklediği CGI belirtiminin sürümünü içerir; 'CGI/1.1' gibi.
'SERVER_ADDR'
Geçerli betiğin altında çalıştığı sunucunun IP adresidir.
'SERVER_NAME'
Geçerli betiğin altında çalıştığı sunucunun adıdır. Eğer betik bir sanal konak üzerinde çalışıyorsa, o sanal konağın adını içerir.
'SERVER_SOFTWARE'
Sunucu kimlik dizgesi, isteklere verilen cevap başlıklarının içinde verilir.
'SERVER_PROTOCOL'
Sayfa isteğinin yapıldığı protokolün ismi ve sürümüdür; 'HTTP/1.1' gibi;
'REQUEST_METHOD'
Sayfaya erişim için kullanılan istek yöntemi; 'GET', 'HEAD', 'POST', 'PUT' gibi.

Bilginize: Eğer istek yöntemi HEAD ise PHP betiği başlıklar gönderildikten sonra (çıktının çıktı tamponu olmadan üretilmesinden sonra anlamında) sonlandırılır.

'REQUEST_TIME'
İsteğin başlangıç zaman etiketidir. PHP 5.1.0'dan beri mevcuttur.
'QUERY_STRING'
Sorgu dizgesi, sayfaya erişirken kullanılabilir.
'DOCUMENT_ROOT'
Sunucunun ayar dosyasında da tanımlandığı gibi, geçerli betiğin altında çalıştığı belge kök dizinidir.
'HTTP_ACCEPT'
Geçerli isteğin Accept: başlığının içeriğidir.
'HTTP_ACCEPT_CHARSET'
Geçerli isteğin Accept-Charset: başlığının içeriğidir. Örnek: 'iso-8859-9,*,utf-8'.
'HTTP_ACCEPT_ENCODING'
Geçerli isteğin Accept-Encoding: başlığının içeriğidir. Örnek: 'gzip'.
'HTTP_ACCEPT_LANGUAGE'
Geçerli isteğin Accept-Language: başlığının içeriğidir. Örnek: 'tr'.
'HTTP_CONNECTION'
Geçerli isteğin Connection: başlığının içeriğidir. Örnek: 'Keep-Alive'.
'HTTP_HOST'
Geçerli isteğin Host: başlığının içeriğidir.
'HTTP_REFERER'
Kullanıcı tarayıcısını geçerli sayfaya gönderen sayfanın (varsa) adresidir. Bu kullanıcı tarayıcısı tarafından belirtilir. Her kullanıcı tarayıcısı bunu belirtmez ve bazıları HTTP_REFERER değiştirmeyi bir özellik olarak sunar. Kısaca, buna güvenilemez.
'HTTP_USER_AGENT'
Geçerli isteğin User-Agent: başlığının içeriğidir. Bu sayfaya erişen kullanıcı tarayıcısını ifade eden bir dizgedir. Örneğin: Mozilla/4.5 [en] (X11; U; Linux 2.2.9 i586) get_browser() işlevi ile elde edebileceğiniz bu değeri sayfanın çıktısını kullanıcının tarayıcısına göre şekillendirmek için kullanabilirsiniz.
'HTTPS'
Eğer betik HTTPS protokolü ile sorgulanmışsa boş olmayan bir değer atanır.

Bilginize: IIS ile ISAPI kullanırken, eğer istek HTTPS protokolü ile yapılmamışsa, bu değerin off olacağına dikkat ediniz.

'REMOTE_ADDR'
Geçerli sayfayı görüntüleyen kullanıcının IP adresidir.
'REMOTE_HOST'
Geçerli sayfayı görüntüleyen kullanıcının sunucu adıdır. Kullanıcının REMOTE_ADDR değerinden ters dns sorgusuyla elde edilir.

Bilginize: HTTP sunucunuz bu değişkeni oluşturmak için ayarlanmak zorundadır. Örneğin Apache'de httpd.conf içinde HostnameLookups On olmalıdır. Ayrıca gethostbyaddr() işlevine de bakınız.

'REMOTE_PORT'
Kullanıcının makinesinin HTTP sunucusu ile haberleşmek için kullandığı porttur.
'SCRIPT_FILENAME'

Geçerli betiğin mutlak yoludur.

Bilginize: Eğer betik file.php veya ../file.php gibi göreli bir yolla komut satırından çalıştırılırsa, $_SERVER['SCRIPT_FILENAME'] kullanıcı tarafından belirtilen göreli yolu içerir.

'SERVER_ADMIN'
HTTP sunucusu ayar dosyasındaki SERVER_ADMIN (Apache için) yönergesine verilen değerdir. Eğer betik bir sanal konak üzerinde çalışıyorsa, o sanal konak için için tanımlanmış değer olur.
'SERVER_PORT'
Haberleşme için HTTP sunucusu tarafından kullanılan porttur. Öntanımlı kurulumlar için değeri '80'dir; örneğin SSL kullanımında bunu güvenli HTTP portu olarak ne tanımladıysanız ona değiştirebilirsiniz.
'SERVER_SIGNATURE'
Eğer etkinse, sunucu tarafından üretilen sayfalara eklenen, sunucu sürümünü ve sanal konak adını içeren dizgidir.
'PATH_TRANSLATED'
Sunucu gerekli sanaldan gerçeğe dönüşümleri yaptıktan sonra geçerli betiğin dosya sistemini (belge kökü değil) temel alan yoludur.

Bilginize: PHP 4.3.2'den itibaren PATH_TRANSLATED değeri Apache 2'de Apache 1'in tersine SAPI altında örtük olarak belirtilmez. Apache 1'de bu değer Apache tarafından yerleştirilmediğinde bu değer SCRIPT_FILENAME sunucu değişkeni ile aynı olurdu. Bu değişiklik, PATH_TRANSLATED değişkeninin sadece PATH_INFO değişkeninin tanımlı olması durumunda var olmasını gerektiren CGI belirtimi ile uyum sağlamak için yapılmıştır. Apache 2 kullanıcıları PATH_INFO tanımlatmak için httpd.conf içinde AcceptPathInfo = On yapılandırmasını kullanabilirler.

'SCRIPT_NAME'
Geçerli betiğin yolunu içerir. Kendi kendilerini göstermesi gereken sayfalar için kullanışlıdırlar. __FILE__ sabiti geçerli (örn. içerilen) dosyanın tam yolunu vedosya adını içerir.
'REQUEST_URI'
Sayfaya erişim için belirtilen URI; örneğin, '/index.html'.
'PHP_AUTH_DIGEST'
Apache altında bir modül olarak Özetli HTTP kimlik doğrulaması yapılırken bu değişken istemci tarafından gönderilen 'Authorization' başlığında belirtilir (böylece siz de uygun geçerlilik denetimini yapmak için bunu kullanabilirsiniz).
'PHP_AUTH_USER'
Apache veya IIS (PHP 5 üzerinde ISAPI) altında modül olarak HTTP kimlik doğrulaması yapılırken bu değişkene kullanıcı tarafından sağlanan kullanıcı adı atanır.
'PHP_AUTH_PW'
Apache veya IIS (PHP 5 üzerinde ISAPI) altında modül olarak HTTP kimlik doğrulaması yapılırken bu değişkene kullanıcı tarafından sağlanan parola atanır.
'AUTH_TYPE'
Apache altında modül olarak HTTP kimlik doğrulaması yapılırken bu değişkene kullanılan kimlik doğrulama türü atanır.
'PATH_INFO'
İstemci tarafından sağlanan dosya yolunu içerir; dosya isminin ardında bir sorgu dizgesi olsa bile bu gösterilmez. Örneğin, betiğe şu URL ile erişiliyor olsun: http://www.example.com/php/path_info.php/some/stuff?foo=bar. Bu durumda $_SERVER['PATH_INFO'], /some/stuff değerini içerecektir.
'ORIG_PATH_INFO'
PHP tarafından işlenmeden önceki özgün 'PATH_INFO'.

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 $_SERVER ortaya çıkmış ve $HTTP_SERVER_VARS kullanımdan kaldırılmıştır.

Örnekler

Örnek 1 - $_SERVER örneği

<?php
echo $_SERVER['SERVER_NAME'];
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

www.example.com

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.

Ayrıca Bakınız



$_GET

$HTTP_GET_VARS [kullanımdan kalktı]

$_GET -- $HTTP_GET_VARS [kullanımdan kalktı]HTTP GET değişkenleri

Açıklama

URL değiştirgeleri üzerinden geçerli betiğe aktarılan değişkenlerden oluşan bir ilişkisel dizi.

$HTTP_GET_VARS aynı başlangıç bilgisini içerir, fakat bir süper küresel değildir. ($HTTP_GET_VARS ve $_GET farklı değişkenlerdir ve PHP de bu şekilde ele alır.)

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 $_GET ortaya çıkmış ve $HTTP_GET_VARS kullanımdan kaldırılmıştır.

Örnekler

Örnek 1 - $_GET örneği

<?php
echo 'Merhaba ' htmlspecialchars($_GET["isim"]) . '!';
?>

Kullanıcının http://mesela.dom/?isim=Elif adresini çağırdığı varsayılarak

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Merhaba Elif!

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.



$_POST

$HTTP_POST_VARS [kullanımdan kalktı]

$_POST -- $HTTP_POST_VARS [kullanımdan kalktı]HTTP POST değişkenleri

Açıklama

HTTP POST yöntemi kullanılarak geçerli betiğe aktarılan bütünleşik değişkenler dizisi.

$HTTP_POST_VARS aynı başlangıç bilgisini içerir, fakat bir süper küresel değildir. ($HTTP_POST_VARS ve $_POST farklı değişkenlerdir ve PHP de bu şekilde ele alır.)

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 $_POST ortaya çıkmış ve $HTTP_POST_VARS kullanımdan kaldırılmıştır.

Örnekler

Örnek 1 - $_POST örneği

<?php
echo 'Merhaba ' htmlspecialchars($_POST["isim"]) . '!';
?>

Kullanıcının POST ile isim=Gizem gönderdiği varsayılarak

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Merhaba Gizem!

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.



$_FILES

$HTTP_POST_FILES [kullanımdan kalktı]

$_FILES -- $HTTP_POST_FILES [kullanımdan kalktı]HTTP Dosya Yükleme değişkenleri

Açıklama

HTTP POST yönetimi kullanılarak geçerli betiğe yüklenen bütünleşik öğe dizisi.

$HTTP_POST_FILES aynı başlangıç bilgisini içerir, fakat bir süper küresel değildir. ($HTTP_POST_FILES ve $_FILES farklı değişkenlerdir ve PHP de bu şekilde ele alır.)

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 $_FILES ortaya çıkmış ve $HTTP_POST_FILES kullanımdan kaldırılmıştır.

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.

Ayrıca Bakınız



$_REQUEST

$_REQUESTHTTP İstek değişkenleri

Açıklama

Öntanımlı olarak $_GET, $_POST ve $_COOKIE değişkenlerini içeren ilişkisel bir dizidir.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 request_order yönergesi ilk olarak bu sürümde kullanılmıştır. Bu yönerge $_REQUEST içeriğini etkiler.
4.3.0 $_FILES bilgisi $_REQUEST'ten çıkarılmıştır.
4.1.0 $_REQUEST ortaya çıkmıştır.

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.

Bilginize: Komut satırından çalışmada, bu dizi argv ve argc girdilerinde içerilmez; bunlar $_SERVER dizisinde bulunur.

Bilginize: $_REQUEST içindeki değişkenler betiğe GET, POST, ve COOKIE girdi mekanizmaları ile sağlanır ve bu nedenle uzak kullanıcı tarafından değiştirilebilir ve bunlara güvenilemez. Bu dizide listelenen değişkenlerin varlıkları ve sıraları PHP variables_order yapılandırma yönergesine göre tanımlanır.

Ayrıca Bakınız



$_SESSION

$HTTP_SESSION_VARS [kullanımdan kalktı]

$_SESSION -- $HTTP_SESSION_VARS [kullanımdan kalktı]Oturum değişkenleri

Açıklama

Geçerli betikte kullanılabilecek oturum değişkenlerini içeren bir ilişkisel dizidir. Nasıl kullanıldığıyla ilgili daha fazla bilgi için Oturum İşlevleri belgesine bakınız.

$HTTP_SESSION_VARS aynı başlangıç bilgisini içerir, fakat bir süper küresel değildir ($HTTP_SESSION_VARS ve $_SESSION farklı değişkenlerdir ve PHP de bu şekilde ele alır).

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 $_SESSION ortaya çıkmış ve $HTTP_SESSION_VARS kullanımdan kaldırılmıştır.

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.

Ayrıca Bakınız



$_ENV

$HTTP_ENV_VARS [kullanımdan kalktı]

$_ENV -- $HTTP_ENV_VARS [kullanımdan kalktı]Ortam değişkenleri

Açıklama

Ortam yönetimi kullanılarak geçerli betiğe aktarılan bütünleşik ortam değişkenleri dizisi.

Bu değişkenler PHP yazım denetleyicisinin çalıştığı ortamdan PHP'nin küresel isim alanına ithal edilir. Çoğu PHP'nin altında çalıştığı kabuk (shell) tarafından sağlanır. Farklı sistemler farklı türde kabuklar çalıştırırlar, bu bakımdan tam bir tanımlı ortam değişkenleri listesi verilemez. Lütfen tanımlı ortam değişkenleri listesi için kullandığınız kabuğun belgelerine bakınız.

Diğer ortam değişkenleri, CGI değişkenlerini içerir ve PHP'nin bir sunucu hizmeti olarak mı yoksa CGI işlemcisi olarak mı çalıştığına bakmaksızın yerleştirilirler.

$HTTP_ENV_VARS aynı başlangıç bilgisini içerir, fakat bir süper küresel değildir. ($HTTP_ENV_VARS ve $_ENV farklı değişkenlerdir ve PHP de bu şekilde ele alır.)

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 $_ENV ortaya çıkmış ve $HTTP_ENV_VARS kullanımdan kaldırılmıştır.

Örnekler

Örnek 1 - $_ENV örneği

<?php
echo 'Benim adım ' .$_ENV["USER"] . '!';
?>

Bu betiği "yasar" isimli kullanıcının çalıştırdığı varsayılarak

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Benim adım yasar!

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.

Ayrıca Bakınız



$_COOKIE

$HTTP_COOKIE_VARS [kullanımdan kalktı]

$_COOKIE -- $HTTP_COOKIE_VARS [kullanımdan kalktı]HTTP Çerezleri

Açıklama

Geçerli betiğe HTTP Çerezleri üzerinden aktarılan bütünleşik bir değişken dizisi

$HTTP_COOKIE_VARS aynı başlangıç bilgisini içerir, fakat süper küresel değildir. ($HTTP_COOKIE_VARS ve $_COOKIE farklı değişkenlerdir ve PHP de bu şekilde ele alır.)

Sürüm Bilgisi

Sürüm: Açıklama
4.1.0 $_COOKIE ortaya çıkmış ve $HTTP_COOKIE_VARS kullanımdan kaldırılmıştır.

Örnekler

Örnek 1 $_COOKIE örneği

<?php
echo 'Merhaba ' htmlspecialchars($_COOKIE["isim"]) . '!';
?>

"isim" çerezinin önceden atandığı varsayılmıştır.

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Merhaba Yaşar!

Notlar

Bilginize: Bu bir süper küreseldir. Yani bir betiğin her yerinde geçerlidir. Değişkene işlevler ve yöntemlerin içinden erişmek için global $değişken; deyimine gerek yoktur.



$php_errormsg

$php_errormsgÖnceki hata iletisi

Açıklama

$php_errormsg PHP tarafından üretilen son hata iletisinin metnini içeren bir değişkendir. Bu değişken sadece hatanın oluştuğu alan içinde ve sadece track_errors ayar seçeneği açıldıysa (öntanımlı değeri kapalıdır) geçerlidir.

Bilginize: Bu değişken sadece php.ini içindeki track_errors yönergesi etkin olduğunda kullanılabilir.

Uyarı

Eğer bir kullanıcı tanımlı hata eylemcisi (set_error_handler()) atanmışsa $php_errormsg değişkenine sadece hata eylemcisi FALSE döndürürse bir değer atanır.

Örnekler

Örnek 1 - $php_errormsg örneği

<?php
@strpos();
echo 
$php_errormsg;
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Wrong parameter count for strpos()



$HTTP_RAW_POST_DATA

$HTTP_RAW_POST_DATAHam POST verisi

Açıklama

$HTTP_RAW_POST_DATA ham POST verisi içerir. Bakınız, always_populate_raw_post_data



$http_response_header

$http_response_headerHTTP yanıt başlıkları

Açıklama

$http_response_header dizisi get_headers() işlevi gibidir. HTTP sarmalayıcı kullanılırken, $http_response_header HTTP yanıt başlıklarından oluşturulur.

Örnekler

Örnek 1 - $http_response_header örneği

<?php
file_get_contents
("http://mesela.dom");
var_dump($http_response_header);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

array(9) {
  [0]=>
  string(15) "HTTP/1.1 200 OK"
  [1]=>
  string(35) "Date: Sat, 12 Apr 2008 17:30:38 GMT"
  [2]=>
  string(29) "Server: Apache/2.2.3 (CentOS)"
  [3]=>
  string(44) "Last-Modified: Tue, 15 Nov 2005 13:24:10 GMT"
  [4]=>
  string(27) "ETag: "280100-1b6-80bfd280""
  [5]=>
  string(20) "Accept-Ranges: bytes"
  [6]=>
  string(19) "Content-Length: 438"
  [7]=>
  string(17) "Connection: close"
  [8]=>
  string(38) "Content-Type: text/html; charset=UTF-8"
}



$argc

$argcBetiğe geçirilen ifade sayısı

Açıklama

Komut satırından çalıştığında geçerli betiğe aktarılan ifade sayısını içerir.

Bilginize: Betiğin dosya adı her zaman ilk ifade olarak betiğe geçirilir, bu nedenle $argc'nin asgari değeri 1'dir.

Bilginize: Bu değişken sadece register_argc_argv etkin olduğunda kullanılabilir.

Örnekler

Örnek 1 - $argc örneği

<?php
var_dump
($argc);
?>

Örneği şu şekilde çalıştırınca: php betik.php arg1 arg2 arg3

Yukarıdaki örnek şuna benzer bir çıktı üretir:

int(4)



$argv

$argvBetiğe geçirilen ifade dizisi

Açıklama

komut satırından çalıştığında betiğe aktarılan ifade dizi'sini içerir.

Bilginize: İlk ifade her zaman geçerli betiğin adıdır, bu nedenle $argv[0] betiğin adıdır.

Bilginize: Bu değişken sadece register_argc_argv etkin olduğunda kullanılabilir.

Örnekler

Örnek 1 - $argv örneği

<?php
var_dump
($argv);
?>

Örneği şu şekilde çalıştırınca: php betik.php arg1 arg2 arg3

Yukarıdaki örnek şuna benzer bir çıktı üretir:

array(4) {
  [0]=>
  string(10) "betik.php"
  [1]=>
  string(4) "arg1"
  [2]=>
  string(4) "arg2"
  [3]=>
  string(4) "arg3"
}


İçindekiler



Öntanımlı İstisnalar

İçindekiler

Ayrıca bakınız: SPL İstisnaları


Exception Sınıfı

Giriş

Exception tüm istisnalar için temel sınıftır.

Sınıf Sözdizimi

Exception
Exception {
/* Özellikler */
protected string $message ;
private string $string ;
protected int $code ;
protected string $file ;
protected int $line ;
private array $trace ;
/* Yöntemler */
public __construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )
final public string getMessage ( void )
final public Exception getPrevious ( void )
final public int getCode ( void )
final public string getFile ( void )
final public int getLine ( void )
final public array getTrace ( void )
final public string getTraceAsString ( void )
public string __toString ( void )
final private void __clone ( void )
}

Özellikler

message

İstisna iletisi.

string

İstisnanın yerleşik ismi.

code

İstisna kodu.

file

İstisnanın oluştuğu dosyanın ismi.

line

İstisnanın oluştuğu satırın numarası.

trace

İstisnanın yığıt izi.


Exception::__construct

(PHP 5 >= 5.1.0)

Exception::__constructİstisna oluşturur

Açıklama

public Exception::__construct ([ string $message = "" [, int $code = 0 [, Exception $previous = NULL ]]] )

İstisna oluşturur.

Değiştirgeler

message

Oluşturulan istisna iletisi.

code

İstisna kodu.

previous

İstisna zincirindeki önceki istisna.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 previous değiştirgesi eklendi.



Exception::getMessage

(PHP 5 >= 5.1.0)

Exception::getMessageİstisna iletisi ile döner

Açıklama

final public string Exception::getMessage ( void )

İstisna iletisi ile döner.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisna iletisi bir dizge olarak döner.

Örnekler

Örnek 1 - Exception::getMessage() örneği

<?php
try {
    throw new 
Exception("Bir hata iletisi");
} catch(
Exception $e) {
    echo 
$e->getMessage();
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Bir hata iletisi



Exception::getPrevious

(PHP 5 >= 5.3.0)

Exception::getPreviousÖnceki istisnayı döndürür

Açıklama

final public Exception Exception::getPrevious ( void )

Önceki istisnayı döndürür ( Exception::__construct kurucusunun üçüncü değiştirgesi).

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Mümkünse önceki Exception nesnesi, yoksa NULL döner.

Örnekler

Örnek 1 - Exception::getPrevious örneği

Döngüsel olarak ve çıktılıyarak istisna izleme.

<?php
class MyCustomException extends Exception {}

function 
doStuff() {
    try {
        throw new 
InvalidArgumentException("Yanlış yapıyorsunuz!"112);
    } catch(
Exception $e) {
        throw new 
MyCustomException("Bir şeyler oldu"911$e);
    }
}


try {
    
doStuff();
} catch(
Exception $e) {
    do {
        
printf("%s:%d %s (%d) [%s]\n"$e->getFile(), $e->getLine(),
                
$e->getMessage(), $e->getCode(), get_class($e));
    } while(
$e $e->getPrevious());
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

/home/bjori/ex.php:8 Bir şeyler oldu (911) [MyCustomException]
/home/bjori/ex.php:6 Yanlış yapıyorsunuz! (112) [InvalidArgumentException]



Exception::getCode

(PHP 5 >= 5.1.0)

Exception::getCodeİstisnanın numarası ile döner

Açıklama

final public int Exception::getCode ( void )

İstisna numarasıyla döner.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisna numarası bir integer olarak döner.

Örnekler

Örnek 1 - Exception::getCode() örneği

<?php
try {
    throw new 
Exception("Bir hata iletisi"30);
} catch(
Exception $e) {
    echo 
"İstisna numarası: " $e->getCode();
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

İstisna numarası: 30



Exception::getFile

(PHP 5 >= 5.1.0)

Exception::getFileİstisnanın oluştuğu dosyanın adı ile döner

Açıklama

final public string Exception::getFile ( void )

İstisnanın oluştuğu dosyanın adı ile döner.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisnanın oluştuğu dosyanın adı ile döner.

Örnekler

Örnek 1 - Exception::getFile() örneği

<?php
try {
    throw new 
Exception;
} catch(
Exception $e) {
    echo 
$e->getFile();
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

/home/bjori/tmp/ex.php



Exception::getLine

(PHP 5 >= 5.1.0)

Exception::getLineİstisnanın oluştuğu satırın numarası ile döner

Açıklama

final public int Exception::getLine ( void )

İstisnanın oluştuğu satırın numarası ile döner.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisnanın oluştuğu satırın numarası ile döner.

Örnekler

Örnek 1 - Exception::getLine() örneği

<?php
try {
    throw new 
Exception("Bir hata iletisi");
} catch(
Exception $e) {
    echo 
"İstisnanın oluştuğu satırın numarası: " $e->getLine();
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

İstisnanın oluştuğu satırın numarası: 3



Exception::getTrace

(PHP 5 >= 5.1.0)

Exception::getTraceYığıt iziyle döner

Açıklama

final public array Exception::getTrace ( void )

İstisna yığıtının iziyle döner.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisna yığıtının izini bir dizi olarak döndürür.

Örnekler

Örnek 1 - Exception::getTrace() örneği

<?php
function test() {
 throw new 
Exception;
}

try {
 
test();
} catch(
Exception $e) {
 
var_dump($e->getTrace());
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

array(1) {
  [0]=>
  array(4) {
    ["file"]=>
    string(22) "/home/bjori/tmp/ex.php"
    ["line"]=>
    int(7)
    ["function"]=>
    string(4) "test"
    ["args"]=>
    array(0) {
    }
  }
}



Exception::getTraceAsString

(PHP 5 >= 5.1.0)

Exception::getTraceAsStringYığıt izini bir dizge olarak döndürür

Açıklama

final public string Exception::getTraceAsString ( void )

İstisna yığıtının izini bir dizge olarak döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisna yığıtının izini bir dizge olarak döndürür.

Örnekler

Örnek 1 - Exception::getTraceAsString() örneği

<?php
function test() {
    throw new 
Exception;
}

try {
    
test();
} catch(
Exception $e) {
    echo 
$e->getTraceAsString();
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

#0 /home/bjori/tmp/ex.php(7): test()
#1 {main}



Exception::__toString

(PHP 5 >= 5.1.0)

Exception::__toStringİstisnanın dizgesel gösterimiyle döner

Açıklama

public string Exception::__toString ( void )

İstisnanın string türündeki gösterimiyle döner.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisnanın string türündeki gösterimiyle döner.

Örnekler

Örnek 1 - Exception::__toString() örneği

<?php
try {
    throw new 
Exception("Bir hata iletisi");
} catch(
Exception $e) {
    echo 
$e;
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

exception 'Exception' with message 'Bir hata iletisi' in /home/nilgun/tmp/ex.php:3
Stack trace:
#0 {main}



Exception::__clone

(PHP 5 >= 5.1.0)

Exception::__cloneİstisna kopyası

Açıklama

final private void Exception::__clone ( void )

Ölümcül hatayla sonuçlanan istisnayı kopyalamaya çalışır.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Hiçbir değer dönmez.

Hatalar/İstisnalar

İstisnalar kopyalanabilir değildir.


İçindekiler



ErrorException Sınıfı

Giriş

Bir hata istisnası.

Sınıf Sözdizimi

ErrorException
ErrorException extends Exception {
/* Özellikler */
protected int $severity ;
/* Yöntemler */
public __construct ([ string $ileti [, int $num [, int $önem [, string $dosyaismi [, int $satırnum ]]]]] )
final public int getSeverity ( void )
/* Miras Alınmış Yöntemler */
final public string Exception::getMessage ( void )
final public Exception Exception::getPrevious ( void )
final public int Exception::getCode ( void )
final public string Exception::getFile ( void )
final public int Exception::getLine ( void )
final public array Exception::getTrace ( void )
final public string Exception::getTraceAsString ( void )
public string Exception::__toString ( void )
final private void Exception::__clone ( void )
}

Özellikler

severity

İstisnanın önem derecesi

Örnekler

Örnek 1 - Hata iletilerinin set_error_handler() ile ErrorException içinde döndürülmesi

<?php
function exception_error_handler($errno$errstr$errfile$errline ) {
    throw new 
ErrorException($errstr0$errno$errfile$errline);
}
set_error_handler("exception_error_handler");

/* İstisnayı oluşturalım */
strpos();
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Fatal error: Uncaught exception 'ErrorException' with message 'Wrong parameter count for strpos()' in /home/bjori/tmp/ex.php:8
Stack trace:
#0 [internal function]: exception_error_handler(2, 'Wrong parameter...', '/home/bjori/php...', 8, Array)
#1 /home/bjori/php/cleandocs/test.php(8): strpos()
#2 {main}
  thrown in /home/bjori/tmp/ex.php on line 8


ErrorException::__construct

(PHP 5 >= 5.1.0)

ErrorException::__constructİstisna oluşturur

Açıklama

public ErrorException::__construct ([ string $ileti [, int $num [, int $önem [, string $dosyaismi [, int $satırnum ]]]]] )

İstisna oluşturur.

Değiştirgeler

ileti

Oluşturulan istisna iletisi.

num

İstisnanın numarası.

önem

İstisnanın önem derecesi.

dosyaismi

İstisnanın oluştuğu dosyanın adı.

satırnum

İstisnanın oluştuğu satırın numarası.



ErrorException::getSeverity

(PHP 5 >= 5.1.0)

ErrorException::getSeverityİstisnanın önem derecesi ile döner

Açıklama

final public int ErrorException::getSeverity ( void )

İstisnanın önem derecesini döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

İstisnanın önem derecesini döndürür.

Örnekler

Örnek 1 - ErrorException::getSeverity() örneği

<?php
try {
    throw new 
ErrorException("İstisna iletisi"075);
} catch(
ErrorException $e) {
    echo 
"Bu istisnanın önem derecesi: " $e->getSeverity();
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Bu istisnanın önem derecesi: 75


İçindekiler




Öntanımlı Arayüzler

İçindekiler

Ayrıca bakınız: SPL Arayüzleri


Traversable arayüzü

Giriş

Bir sınıf foreach kullanarak çaprazlanabiliyorsa bunu saptayan arayüz.

Tek başına gerçeklenemeyen bir soyut temel arayüz olup ya IteratorAggregate ya da Iterator olarak gerçeklenmelidir.

Bilginize: Bu arayüzü gerçekleyen yerleşik sınıflar bir foreach oluşumunda kullanılabilir ve IteratorAggregate ya da Iterator olarak gerçeklenmeleri gerekmez.

Bilginize: Bu dahili bir motor arayüz olup PHP betiklerinde gerçeklenemez. Yerine IteratorAggregate veya Iterator kullanılmalıdır.

Arayüz Sözdizimi

Traversable
Traversable {
}

Bu arayüzün yöntemleri yoktur. Tek amacı çaprazlanabilir tüm sınıflar için temel arayüz olmaktır.



Iterator Arayüzü

Giriş

Kendilerini dahili olarak yineleyebilen nesneler ve harici yineleyiciler için arayüz.

Arayüz Sözdizimi

Iterator
Iterator extends Traversable {
/* Yöntemler */
abstract public mixed current ( void )
abstract public scalar key ( void )
abstract public void next ( void )
abstract public void rewind ( void )
abstract public boolean valid ( void )
}

Örnek 1 Temel Kullanımı

Bu örnekte, bir yineleyici üzerinde foreach yaparken hangi yöntemlerin çağrıldığı gösterilmiştir.

<?php
class Yineleyicim implements Iterator {
    private 
$position 0;
    private 
$array = array(
        
"ilkeleman",
        
"ikincieleman",
        
"soneleman",
    );

    public function 
__construct() {
        
$this->position 0;
    }

    function 
rewind() {
        
var_dump(__METHOD__);
        
$this->position 0;
    }

    function 
current() {
        
var_dump(__METHOD__);
        return 
$this->array[$this->position];
    }

    function 
key() {
        
var_dump(__METHOD__);
        return 
$this->position;
    }

    function 
next() {
        
var_dump(__METHOD__);
        ++
$this->position;
    }

    function 
valid() {
        
var_dump(__METHOD__);
        return isset(
$this->array[$this->position]);
    }
}

$it = new Yineleyicim;

foreach(
$it as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

string(19) "Yineleyicim::rewind"
string(18) "Yineleyicim::valid"
string(20) "Yineleyicim::current"
string(16) "Yineleyicim::key"
int(0)
string(9) "ilkeleman"

string(17) "Yineleyicim::next"
string(18) "Yineleyicim::valid"
string(20) "Yineleyicim::current"
string(16) "Yineleyicim::key"
int(1)
string(12) "ikincieleman"

string(17) "Yineleyicim::next"
string(18) "Yineleyicim::valid"
string(20) "Yineleyicim::current"
string(16) "Yineleyicim::key"
int(2)
string(9) "soneleman"

string(17) "Yineleyicim::next"
string(18) "Yineleyicim::valid"

Iterator::current

(PHP 5 >= 5.1.0)

Iterator::currentO anki elemanı döndürür

Açıklama

abstract public mixed Iterator::current ( void )

O anki elemanı döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Her türde değer dönebilir.



Iterator::key

(PHP 5 >= 5.1.0)

Iterator::keyO anki elemanın anahtarını döndürür

Açıklama

abstract public scalar Iterator::key ( void )

O anki elemanın anahtarını döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Başarı durumunda sayıl değer, aksi takdirde integer 0 döner.

Hatalar/İstisnalar

Başarısızlık durumunda bir E_WARNING çıktılanır.



Iterator::next

(PHP 5 >= 5.1.0)

Iterator::nextKonumu sonraki elemana ilerletir

Açıklama

abstract public void Iterator::next ( void )

O anki konumu sonraki elemana ilerletir.

Bilginize: Bu işlev her foreach döngüsünün ardından çağrılır.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Dönen değer olursa yok sayılır.



Iterator::rewind

(PHP 5 >= 5.1.0)

Iterator::rewindYineleyiciyi ilk elemana konumlandırır

Açıklama

abstract public void Iterator::rewind ( void )

Yineleyiciyi başa ilk elemana döndürür.

Bilginize: Bir foreach döngüsü başlatılırkan çağrılan ilk yöntemdir. foreach döngüsünden sonra çalıştırılmaz.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Dönen değer olursa yok sayılır.



Iterator::valid

(PHP 5 >= 5.1.0)

Iterator::validO anki konum geçerli mi diye bakar

Açıklama

abstract public boolean Iterator::valid ( void )

Bu yöntem o anki konumun geçerli olup olmadığını sınamak için Iterator::rewind ve Iterator::next yöntemlerinden sonra çağrılır.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Dönüş değeri boolean türüne dönüştürüldükten sonra döndürülür. Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.


İçindekiler



IteratorAggregate Arayüzü

Giriş

Harici bir yineleyici oluşturmak için arayüz.

Arayüz Sözdizimi

IteratorAggregate
IteratorAggregate extends Traversable {
/* Yöntemler */
abstract public Traversable getIterator ( void )
}

Örnek 1 - Temel kullanımı

<?php
class Verilerim implements IteratorAggregate {
    public 
$özellik1 "Birinci genel özellik";
    public 
$özellik2 "İkinci genel özellik";
    public 
$özellik3 "Üçüncü genel özellik";

    public function 
__construct() {
        
$this->özellik4 "son özellik";
    }

/* PHP, tr_TR yerelinde bu yöntemi de arıyor, yoksa
 * "Fatal error: Couldn't find implementation for method
 * Verilerim::getiterator in Unknown on line 0"
 * hatasını veriyor.
 */
    
public function getiterator() {
        return new 
ArrayIterator($this);
    }

    public function 
getIterator() {
        return new 
ArrayIterator($this);
    }
}

$obj = new Verilerim;

foreach(
$obj as $key => $value) {
    
var_dump($key$value);
    echo 
"\n";
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

string(9) "özellik1"
string(22) "Birinci genel özellik"

string(9) "özellik2"
string(22) "İkinci genel özellik"

string(9) "özellik3"
string(25) "Üçüncü genel özellik"

string(9) "özellik4"
string(12) "son özellik"

IteratorAggregate::getIterator

(PHP 5 >= 5.1.0)

IteratorAggregate::getIteratorHarici bir yineleyici ile döner

Açıklama

abstract public Traversable IteratorAggregate::getIterator ( void )

Harici bir yineleyici ile döner.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Traversable veya Iterator arayüzünü gerçekleyen nesnenin bir örneğiyle döner.

Hatalar/İstisnalar

Başarısızlık durumunda bir istisna (Exception) oluşur.


İçindekiler



ArrayAccess arayüzü

Giriş

Nesnelere birer dizi olarak erişmeyi sağlayan arayüz.

Arayüz Sözdizimi

ArrayAccess
ArrayAccess {
/* Yöntemler */
abstract public boolean offsetExists ( mixed $konum )
abstract public mixed offsetGet ( mixed $konum )
abstract public void offsetSet ( mixed $konum , mixed $değer )
abstract public void offsetUnset ( mixed $konum )
}

Örnek 1 Temel kullanım

<?php
class obj implements arrayaccess {
    private 
$container = array();
    public function 
__construct() {
        
$this->container = array(
            
"bir"   => 1,
            
"iki"   => 2,
            
"üç"    => 3,
        );
    }
    public function 
offsetSet($offset$value) {
        
$this->container[$offset] = $value;
    }
    public function 
offsetExists($offset) {
        return isset(
$this->container[$offset]);
    }
    public function 
offsetUnset($offset) {
        unset(
$this->container[$offset]);
    }
    public function 
offsetGet($offset) {
        return isset(
$this->container[$offset]) ? $this->container[$offset] : null;
    }
}

$obj = new obj;

var_dump(isset($obj["iki"]));
var_dump($obj["iki"]);
unset(
$obj["iki"]);
var_dump(isset($obj["iki"]));
$obj["iki"] = "Bir değer";
var_dump($obj["iki"]);

?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

bool(true)
int(2)
bool(false)
string(7) "Bir değer"

ArrayAccess::offsetExists

(PHP 5 >= 5.1.0)

ArrayAccess::offsetExistsBir konumun mevcut olup olmadığına bakar

Açıklama

abstract public boolean ArrayAccess::offsetExists ( mixed $konum )

Bir konumun mevcut olup olmadığına bakar.

ArrayAccess arayüzünü gerçekleyen nesneler üzerinde isset() veya empty() kullanıldığında bu yöntem çalıştırılır.

Bilginize: empty() işlevi kullanıldığında ArrayAccess::offsetGet() çağrılır ve sadece dönen değer TRUE olduğu takdirde konumun boş olup olmadığına bakılır.

Değiştirgeler

konum

Varlığı sınanacak konum.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Bilginize: Dönüş değeri boolean türünde değilse tür dönüşümü yapıldıktan sonra döndürülür.

Örnekler

Örnek 1 - ArrayAccess::offsetExists() örneği

<?php
class Sınıf implements arrayaccess {
    public function 
offsetSet($konum$değer) {
        
var_dump(__METHOD__);
    }
    public function 
offsetExists($var) {
        
var_dump(__METHOD__);
        if (
$var == "filanca") {
            return 
true;
        }
        return 
false;
    }
    public function 
offsetUnset($var) {
        
var_dump(__METHOD__);
    }
    public function 
offsetGet($var) {
        
var_dump(__METHOD__);
        return 
"değer";
    }
}

$nesne = new Sınıf;

echo 
"Sınıf::offsetExists() çalışır\n";
var_dump(isset($nesne["filanca"]));

echo 
"\nSınıf::offsetExists() ve Sınıf::offsetGet() çalışır\n";
var_dump(empty($nesne["filanca"]));

echo 
"\nSınıf::offsetExists() çalışır, alınacak bir şey olmadığından Sınıf::offsetGet() çalışmaz\n";
var_dump(empty($nesne["falanca"]));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Sınıf::offsetExists() çalışır
string(21) "Sınıf::offsetExists"
bool(true)

Sınıf::offsetExists() ve Sınıf::offsetGet() çalışır
string(21) "Sınıf::offsetExists"
string(18) "Sınıf::offsetGet"
bool(false)

Sınıf::offsetExists() çalışır, alınacak bir şey olmadığından Sınıf::offsetGet() çalışmaz
string(21) "Sınıf::offsetExists"
bool(true)



ArrayAccess::offsetGet

(PHP 5 >= 5.1.0)

ArrayAccess::offsetGetKonumdaki değeri döndürür

Açıklama

abstract public mixed ArrayAccess::offsetGet ( mixed $konum )

Belirtilen konumdaki değeri döndürür.

Bu yöntem, empty() işlevi ile konumun boş olup olmadığına bakılırken çalıştırılır.

Değiştirgeler

konum

Değerin döndürüleceği konum.

Dönen Değerler

Her türde değer dönebilir.

Ayrıca Bakınız



ArrayAccess::offsetSet

(PHP 5 >= 5.1.0)

ArrayAccess::offsetSetKonuma değer atanır

Açıklama

abstract public void ArrayAccess::offsetSet ( mixed $konum , mixed $değer )

Belirtilen konuma belirtilen değer atanır.

Değiştirgeler

konum

Değerin atanacağı konum.

değer

Atanacak değer.

Dönen Değerler

Hiçbir değer dönmez.

Notlar

Bilginize: Aşağıdaki örnekte olduğu gibi, başka bir değer mümkün değilse konum değiştirgesine NULL atanır.

<?php
$arrayaccess
[] = "value";
?>




ArrayAccess::offsetUnset

(PHP 5 >= 5.1.0)

ArrayAccess::offsetUnsetKonum boşaltılır

Açıklama

abstract public void ArrayAccess::offsetUnset ( mixed $konum )

Bir konumu boşaltır.

Bilginize: (unset)'e tür çarpıtması yapıldığında bu yöntem çağrılmaz.

Değiştirgeler

konum

Boşaltılacak konum.

Dönen Değerler

Hiçbir değer dönmez.


İçindekiler



Serializable arayüzü

Giriş

Dizgeleştirmeyi özelleştirme arayüzü.

Bu arayüzü gerçekleyen sınıflar __sleep() ve __wakeup() işlevlerini desteklemezler. Bir örneğin dizgeleştirilmesi gerektiğinde serialize yöntemi çağrılır. Bunun __destruct() çağırmak veya yöntem içinde tanımlanmamış bir işlemi yapmak gibi bir yan etkisi yoktur. Dizgeleştirilmiş nesne yeniden oluşturulmak istendiğinde sınıf bilinmekte olur ve kurucu olarak __construct() yerine ilgili unserialize() yöntemi çağrılır. Eğer standart kurucuyu çalıştırmak isterseniz bunu yöntemin içinde yapmanız gerekir.

Arayüz Sözdizimi

Serializable
Serializable {
/* Yöntemler */
abstract public string serialize ( void )
abstract public mixed unserialize ( string $dizgeleşmiş )
}

Örnek 1 Temel kullanım

<?php
class obj implements Serializable {
    private 
$data;
    public function 
__construct() {
        
$this->data "Özel verim";
    }
    public function 
serialize() {
        return 
serialize($this->data);
    }
    public function 
unserialize($data) {
        
$this->data unserialize($data);
    }
    public function 
getData() {
        return 
$this->data;
    }
}

$obj = new obj;
$ser serialize($obj);

$newobj unserialize($ser);

var_dump($newobj->getData());
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

string(11) "Özel verim"

Serializable::serialize

(PHP 5 >= 5.1.0)

Serializable::serializeNesnenin dizgesel gösterimiyle döner

Açıklama

abstract public string Serializable::serialize ( void )

Nesnenin dizgesel gösterimi ile döner.

Bilginize: Bu yöntem nesnenin bir yıkıcısı olarak işlem görür. Bu yöntemden sonra __destruct() yöntemi çağrılmaz.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Bir hata oluşmamışsa nesnenin dizgesel gösterimi ile, aksi takdirde NULL ile döner.

Hatalar/İstisnalar

Dönüş türü string veya NULL değilse bir istisna (Exception) oluşur.

Ayrıca Bakınız



Serializable::unserialize

(PHP 5 >= 5.1.0)

Serializable::unserializeDizgeleştirilmiş nesneyi yeniden oluşturur

Açıklama

abstract public mixed Serializable::unserialize ( string $dizgeleşmiş )

Dizgeleştirilmiş nesne yeniden oluşturulmak istendiğinde çağrılır.

Bilginize: Bu yöntem nesnenin kurucusu olarak işlem görür. Bu yöntemin ardından __construct() yöntemi çağrılmaz.

Değiştirgeler

dizgeleşmiş

Nesnenin dizgesel gösterimi.

Dönen Değerler

Dizgeleşmiş nesnenin yeniden oluşturulan özgün halini döndürür.

Ayrıca Bakınız


İçindekiler




Bağlam seçenekleri ve değiştirgeleri

PHP, tüm dosya sistemi ve akım sarmalayıcılarla kullanılabilen çeşitli bağlam seçenekleri ve değiştirgelerine sahiptir. Bağlam stream_context_create() ile oluşturulur. Seçenekler stream_context_set_option() ile değiştirgeleri ise stream_context_set_params() ile atanır.


Soket bağlamı seçenekleri

Soket bağlamı seçenekleriSoket bağlamı seçeneklerinin listesi

Açıklama

Soket bağlamı seçenekleri, tcp, http ve ftp gibi soketler üzerinde çalışan tüm sarmalayıcılar için kullanılabilir.

Seçenekler

bindto

PHP'nin ağa erişmek için kullanacağı IP adresini (IPv4 veya IPv6) ve port numarasını belirtmek için kullanılır. Söz dizimi: ip:port. IP veya porta 0 belirtilirse IP veya portu sistem seçer.

Bilginize: FTP'de normal işlem sırasında iki soket bağlantısı oluşturulur, port numarası bu seçenek kullanılarak belirtilemez.

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0 bindto eklendi.

Örnekler

Örnek 1 - Temel bindto kullanım örneği

<?php
// internete '192.168.0.100' IP'yi kullanarak bağlanalım
$seçenekler = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:0',
    ),
);


// internete '192.168.0.100' IP ve port '7000' üzerinden bağlanalım
$seçenekler = array(
    
'socket' => array(
        
'bindto' => '192.168.0.100:7000',
    ),
);


// internete port '7000' üzerinden bağlanalım
$seçenekler = array(
    
'socket' => array(
        
'bindto' => '0:7000',
    ),
);


// bağlamı oluşturalım...
$bağlam stream_context_create($seçenekler);

// ...ve veri çekmek için kullanalım
echo file_get_contents('http://misal.dom'false$bağlam);

?>



HTTP bağlamı seçenekleri

HTTP bağlamı seçenekleriHTTP bağlamı seçeneklerinin listesi

Açıklama

http:// ve https:// aktarımları için bağlam seçenekleri.

Seçenekler

method string

Uzak sunucu tarafından desteklenen GET, POST veya başka bir HTTP yöntemi.

GET öntanımlıdır.

header string

İstek sırasında gönderilecek ek başlıklar. Bu seçenekte belirtilen değerler diğer değerleri geçersiz kılar (User-agent:, Host:, Authentication: gibi).

user_agent string

User-Agent: başlığı ile gönderilecek değer. Bu değer sadece, tarayıcı header seçeneği ile belirtilmemişse kullanılır.

Öntanımlı olarak, php.ini dosyasındaki user_agent değeri kullanılır.

content string

Başlıklardan sonra gönderilecek ek veri. Normalde POST veya PUT istekleriyle kullanılır.

proxy string

Vekil sunucunun adresini belirten URI (tcp://vekil.mesela.dom:5100 gibi).

request_fulluri boolean

TRUE atanırsa, istek oluşturulurken URI'nin tamamı kullanılır (GET http://mesela.dom/dizin/yolu/dosya.html HTTP/1.0 gibi). Bu standart dışı bir istek biçimi olsa da bazı vekil sunucular bunun böyle olmasını gerektirirler.

FALSE öntanımlıdır.

max_redirects integer

İzlenecek yönlendirmelerin azami sayısı. 1 veya daha az bir değer belirtilmesi hiçbir yönlendirmenin izlenmeyeceği anlamına gelir.

20 öntanımlıdır.

protocol_version float

HTTP protokolünün sürümü.

1.0 öntanımlıdır.

Bilginize: PHP'nin 5.3.0 sürümünden önce parçalı aktarım gerçeklenmemişti. Dolayısıyla bu değeri 1.1 olarak belirtirseniz, 1.1 uyumluluğundan kendiniz sorumlu olursunuz.

timeout float

Bir float değer olarak saniye cinsinden okuma zaman aşımı. (10.5 gibi).

Öntanımlı olarak, php.ini dosyasındaki default_socket_timeout yönergesinin değeri kullanılır.

ignore_errors boolean

Başarısızlık durumu kodlarında bile içerik alınır.

FALSE öntanımlıdır.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 protocol_version yönergesine 1.1 atandığında parçalı aktarım kodlaması artık desteklenmektedir.
5.2.10 ignore_errors eklendi.
5.2.10 Artık header sayısal indisli bir dizi olabilmektedir.
5.2.1 timeout eklendi.
5.1.0 HTTP vekilleri üzerinden HTTPS vekaleti eklendi.
5.1.0 max_redirects eklendi.
5.1.0 protocol_version eklendi.

Örnekler

Örnek 1 - Bir sayfayı çekip veriyi POST ile göndermek

<?php

$postverisi 
http_build_query(
    array(
        
'var1' => 'biraz içerik',
        
'var2' => 'eh işte'
    
)
);

$seçenekler = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postverisi
    
)
);

$bağlam  stream_context_create($seçenekler);

$sonuç file_get_contents('http://mesela.dom/submit.php'false$bağlam);

?>

Notlar

Bilginize: Temel soket akımı bağlamı seçenekleri
Ek bağlamsal seçenekler temel aktarım tarafından desteklenebilir. http:// akımları için tcp:// aktarımının bağlamsal seçeneklerine atıf yapılır. https:// akımları için ise ssl:// aktarımının bağlamsal seçeneklerine atıf yapılır.



FTP bağlamı seçenekleri

FTP bağlamı seçenekleriFTP bağlamı seçeneklerinin listesi

Açıklama

ftp:// ve ftps:// aktarımları için bağlamsal seçenekler.

Seçenekler

overwrite boolean

Uzak sunucuda mevcut dosyaların üzerine yazılmasına izin verir. Sadece yazma kipine (dosya gönderme) uygulanır.

FALSE öntanımlıdır.

resume_pos integer

Aktarımın başlatılacağı dosya konumu. Sadece okuma kipine (indirme) uygulanır.

0 (dosyanın başlangıcı) öntanımlıdır.

proxy string

HTTP vekil sunucu üzerinden vekil FTP isteği. Sadece dosya okuma işlemlerine uygulanır. Örnek: tcp://vekil.mesela.dom:8000.

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0 proxy eklendi.
5.0.0 overwrite ve resume_pos eklendi.

Notlar

Bilginize: Temel soket akımı bağlamı seçenekleri
Ek bağlamsal seçenekler temel aktarım tarafından desteklenebilir. ftp://akımları için tcp:// aktarımının bağlamsal seçeneklerine atıf yapılır. ftps:// akımları için ise ssl:// aktarımının bağlamsal seçeneklerine atıf yapılır.



SSL bağlamı seçenekleri

SSL bağlamı seçenekleriSSL bağlamı seçeneklerinin listesi

Açıklama

ssl:// ve tls:// aktarımları için bağlamsal seçenekler.

Seçenekler

verify_peer boolean

SSL sertifikası kullanımının doğrulanmasını gerektirir.

FALSE öntanımlıdır.

allow_self_signed boolean

Öz imzalı sertifikalara izin verilir.

FALSE öntanımlıdır.

cafile string

Uzak görevdeşin kimliğini doğrulamak için verify_peer bağlam seçeneği ile kullanmak üzere yerel dosya sistemindeki Sertifika Yetkilisi dosyasının yeri.

capath string

cafile belirtilmemişse veya sertifika yerinde yoksa uygun sertifikayı bulmak için capath tarafından işaret edilen dizin araştırılır. capath doğru olarak betimlenmiş sertifika dizini olmalıdır.

local_cert string

Yerel sertifikanın dosya sistemindeki yeri. Sertifikanızı ve özel anahtarınızı içeren PEM kodlamalı bir dosya olmalıdır. Seçimlik olarak sertifika sağlayıcıların sertifika zincirini içerebilir.

passphrase string

local_cert dosyanızı kodlayan anahtar parolası.

CN_match string

Beklenen bilinen isim (Common Name). PHP sınırlı bir dosya kalıbı eşletirmesi yapmaya çalışır. Eğer bu bilinen isim bununla eşleşmiyorsa bağlantı gerçekleşmeyecektir.

verify_depth integer

Sertifika zinciri çok derinse çıkılır.

Doğrulama yapılmaması öntanımlıdır.

ciphers string

Kullanılabilir şifrelerin listesi belirtilir. Dizge biçemi » ciphers(1) kılavuz sayfasında açıklanmıştır.

DEFAULT öntanımlıdır.

capture_peer_cert boolean

TRUE belirtilirse peer_certificate bağlam seçeneği görevdeşin sertifikasını içererek oluşturulur.

capture_peer_chain boolean

TRUE belirtilirse peer_certificate_chain bağlam seçeneği sertifika zincirini içererek oluşturulur.

Sürüm Bilgisi

Sürüm: Açıklama
5.0.0 capture_peer_cert , capture_peer_chain ve ciphers eklendi.

Notlar

Bilginize: https:// ve ftps:// sarmalayıcıları için ssl:// temel aktarım olduğundan, ssl://'e uygulanan bağlamsal seçenekler ayrıca https:// ve ftps://'e de uygulanır.

Ayrıca Bakınız



CURL bağlamı seçenekleri

CURL bağlamı seçenekleriCURL bağlamı seçeneklerinin listesi

Açıklama

CURL bağlam seçenekleri, CURL eklentisi --with-curlwrappers yapılandırma seçeneği kullanılarak derlenmişse kullanılabilir.

Seçenekler

method string

Uzak sunucu tarafından desteklenen GET, POST veya başka bir HTTP yöntemi.

GET öntanımlıdır.

header string

İstek sırasında gönderilecek ek başlıklar. Bu seçenekte belirtilen değerler diğer değerleri geçersiz kılar (User-agent:, Host:, Authentication: gibi).

user_agent string

User-Agent: başlığı ile gönderilecek değer.

Öntanımlı olarak, php.ini dosyasındaki user_agent değeri kullanılır.

content string

Başlıklardan sonra gönderilecek ek veri.Bu seçenek GET veya HEAD istekleri için kullanılmaz.

proxy string

Vekil sunucunun adresini belirten URI (tcp://vekil.mesela.dom:5100 gibi).

max_redirects integer

İzlenecek yönlendirmelerin azami sayısı. 1 veya daha az bir değer belirtilmesi hiçbir yönlendirmenin izlenmeyeceği anlamına gelir.

20 öntanımlıdır.

curl_verify_ssl_host boolean

Konak doğrulanır.

FALSE öntanımlıdır.

Bilginize: Bu seçenek hem http hem de ftp sarmalayıcıları tarafından kullanılabilir.

curl_verify_ssl_peer boolean

SSL sertifikası kullanımının doğrulanmasını gerektirir.

FALSE öntanımlıdır.

Bilginize: Bu seçenek hem http hem de ftp sarmalayıcıları tarafından kullanılabilir.

Örnekler

Örnek 1 - Bir sayfayı çekip veriyi POST ile göndermek

<?php

$postverisi 
http_build_query(
    array(
        
'var1' => 'biraz içerik',
        
'var2' => 'eh işte'
    
)
);

$seçenekler = array('http' =>
    array(
        
'method'  => 'POST',
        
'header'  => 'Content-type: application/x-www-form-urlencoded',
        
'content' => $postverisi
    
)
);

$bağlam  stream_context_create($seçenekler);

$sonuç file_get_contents('http://mesela.dom/submit.php'false$bağlam);

?>

Ayrıca Bakınız



Phar bağlam seçenekleri

Phar bağlam seçenekleriPhar bağlamı seçeneklerinin listesi

Açıklama

phar:// sarmalayıcısı için bağlam seçenekleri.

Seçenekler

compress int

Phar sıkıştırma sabitlerinden biri.

metadata mixed

Phar meta verisi. Bakınız: Phar::setMetadata().



Bağlam değiştirgeleri

Bağlam değiştirgeleriBağlam değiştirgesi listeleme

Açıklama

Bu değiştirgeler bir bağlama stream_context_set_params() işlevi kullanılarak atanabilir.

Seçenekler

notification callback

Bir akımda bir olayın sonucunda tetiklenecek geri çağırım işlevi.

Daha fazla bilgi için stream_notification_callback() işlevine bakınız.


İçindekiler




Güvenlik


Giriş

PHP güçlü bir dil ve yorumlayıcıdır. İster bir HTTP sunucusunun modülü olarak ister ayrı bir CGI çalıştırılabiliri olarak çalışıyor olsun, sunucu üzerinde ağ bağlantıları açabilir, dosyalara erişebilir ve onları çalıştırabilir. Herşeyi çalıştırılabilir yapan bu özellikler öntanımlı haliyle bir HTTP sunucusunu güvensiz duruma getirir. PHP, CGI programları yazmak için özellikle Perl ve C'den daha güvenli bir dil olması için tasarlanmıştır. Doğru derleme seçenekleri ile derlenir, doğru çalışma anı seçenekleriyle yapılandırılır ve uygun bir kodlama deneyimiyle kullanılırsa arzuladığınız güvenlik ve özgürlüğü size sunar.

PHP ile birçok şey yapmak mümkün olduğu gibi, ayarları da oldukça fazladır. Bu ayarların çokluğu size istediğiniz şekilde bir sunucu ortamını kurmanızı sağlarsa da bu seçeneklerle sunucunun yapılandırması bir araya geldiğinde güvensiz bir ortam oluşma riski anlamına da gelebilir.

PHP yapılandırmasındaki bu esneklik, kod esnekliğiyle rekabet halinde gelişir. PHP ile bir kabuk kullanıcısının tüm gücüne sahip eksiksiz sunucu uygulamaları geliştirlebileceği gibi sıkı bir şekilde denetlenen bir ortamda küçük bir güvenlik riskiyle sunucu taraflı sayfalar oluşturmakta da kullanılabilir. Bu ortamın nasıl kurulacağı ve güvenliğinin nasıl sağlanacağı büyük oranda PHP geliştiricisine bırakılmıştır.

Bu kısıma genel güvenlik tavsiyeleri vererek başlayacağız. Ardından değişik ayarların nasıl yapıldığına dair bilgiler verecek ve hangi güvenlik seviyesinde hangi güvenlik ayarlarının kullanılması gerektiğinden bahsedeceğiz.



Genel değerlendirmeler

Tamamen güvenli ve korunaklı bir sistem oluşturduk diyebilmek neredeyse imkansızdır. Bu sebepten dolayı en uygun davranış riskleri ve kullanılabilirliği uygun şekilde dengelemek olmalıdır. Eğer kullanıcıların bilgi göndermeden önce parmak izi ve gözbebeği taraması gibi ileri güvenlikli bir sistemden geçmesi gerekirse, çok güvenli bir sistem oluşturulduğundan söz edebiliriz. Ancak bu şekilde kullanımı çok zor bir sistem halini alacaktır. Aynı şekilde basit bir amaç için hazırlanmış bir formu doldurmak çok zorsa ve vakit alıyorsa, bunu dolduran kullanıcı güvenliği atlatıp bazı kestirme yolları deneyerek formu göndermek isteyebilir.

En iyi güvenlik sisteminin yolu istenen güvenlik denetimlerinin kullanıcı çok uğraştırılıp bıktırılmadan, yapmak istediği şeye engel olunmadan kurulan bir sistemden geçer. Güvenliği etkileyen bazı saldırıların asıl amacı bazen güvenlik amaçlı kurulan bazı sistemlerin kullanıcıları bıktırması ve bunların kullanıcıyı farklı birşeyler yapmaya itmesidir.

Unutmayın ki, bir zincir ancak en zayıf halkası kadar güçlü olabilir. Tüm hareketleri, zaman, mekan, hareket türü gibi en ince ayrıntısına kadar günlüklere kaydetseniz bile kullanıcı sadece basit bir çerez ile doğrulanıyorsa, kullanıcılarla hareket günlükleri arasındaki ilişki zayıf olacaktır.

Yaptıklarınızı denerken, en basit sayfada bile tüm olasılıkları denemenin imkansız olduğunu unutmayınız. Uygulamanıza ulaşan bilgi şirketinizde çalışan bir tanıdıktan gelebileceği gibi, klavyenin üzerinde dolaşan bir kediden veya dünyanın öteki ucundan sistemlerde açıklar arayan sistem kırıcı birinden de gelebilir. Bu yüzden beklenmeyen bir bilgi geldiğinde nasıl davranılacağını önceden tespit edip, bu durumda kullanıcının uygulamayı kullanarak sisteme erişmesini engellemelisiniz.

Günümüz Genel Ağ'ı, kodunuzu kırarak, sitenizi çökerterek, uygunsuz içerik göndererek veya gününüzü bir şekilde ziyan ederek kendilerine isim yapmaya çalışan kişilerle doludur. Sitenizin küçük ya da büyük olmasının bir önemi yoktur, siz basitçe hatta kalmayı, bağlanacağınız bir sunucu olmasını hedeflersiniz fakat, çoğu kırıcı program için büyüklüğün önemi yoktur, basitçe devasa IP bloklarını tarayarak kendilerine kurban ararlar. Onların kurbanlarından biri olmamaya çalışın.



Installed as CGI binary

İçindekiler


Possible attacks

Using PHP as a CGI binary is an option for setups that for some reason do not wish to integrate PHP as a module into server software (like Apache), or will use PHP with different kinds of CGI wrappers to create safe chroot and setuid environments for scripts. This setup usually involves installing executable PHP binary to the web server cgi-bin directory. CERT advisory » CA-96.11 recommends against placing any interpreters into cgi-bin. Even if the PHP binary can be used as a standalone interpreter, PHP is designed to prevent the attacks this setup makes possible:

  • Accessing system files: http://my.host/cgi-bin/php?/etc/passwd The query information in a URL after the question mark (?) is passed as command line arguments to the interpreter by the CGI interface. Usually interpreters open and execute the file specified as the first argument on the command line. When invoked as a CGI binary, PHP refuses to interpret the command line arguments.
  • Accessing any web document on server: http://my.host/cgi-bin/php/secret/doc.html The path information part of the URL after the PHP binary name, /secret/doc.html is conventionally used to specify the name of the file to be opened and interpreted by the CGI program. Usually some web server configuration directives (Apache: Action) are used to redirect requests to documents like http://my.host/secret/script.php to the PHP interpreter. With this setup, the web server first checks the access permissions to the directory /secret, and after that creates the redirected request http://my.host/cgi-bin/php/secret/script.php. Unfortunately, if the request is originally given in this form, no access checks are made by web server for file /secret/script.php, but only for the /cgi-bin/php file. This way any user able to access /cgi-bin/php is able to access any protected document on the web server. In PHP, runtime configuration directives cgi.force_redirect, doc_root and user_dir can be used to prevent this attack, if the server document tree has any directories with access restrictions. See below for full the explanation of the different combinations.


Case 1: only public files served

If your server does not have any content that is not restricted by password or ip based access control, there is no need for these configuration options. If your web server does not allow you to do redirects, or the server does not have a way to communicate to the PHP binary that the request is a safely redirected request, you can specify the option --enable-force-cgi-redirect to the configure script. You still have to make sure your PHP scripts do not rely on one or another way of calling the script, neither by directly http://my.host/cgi-bin/php/dir/script.php nor by redirection http://my.host/dir/script.php.

Redirection can be configured in Apache by using AddHandler and Action directives (see below).



Case 2: using cgi.force_redirect

The configuration directive cgi.force_redirect prevents anyone from calling PHP directly with a URL like http://my.host/cgi-bin/php/secretdir/script.php. Instead, PHP will only parse in this mode if it has gone through a web server redirect rule. PHP older than 4.2.0 used --enable-force-cgi-redirect compile time option for this.

Usually the redirection in the Apache configuration is done with the following directives:

Action php-script /cgi-bin/php
AddHandler php-script .php

This option has only been tested with the Apache web server, and relies on Apache to set the non-standard CGI environment variable REDIRECT_STATUS on redirected requests. If your web server does not support any way of telling if the request is direct or redirected, you cannot use this option and you must use one of the other ways of running the CGI version documented here.



Case 3: setting doc_root or user_dir

To include active content, like scripts and executables, in the web server document directories is sometimes considered an insecure practice. If, because of some configuration mistake, the scripts are not executed but displayed as regular HTML documents, this may result in leakage of intellectual property or security information like passwords. Therefore many sysadmins will prefer setting up another directory structure for scripts that are accessible only through the PHP CGI, and therefore always interpreted and not displayed as such.

Also if the method for making sure the requests are not redirected, as described in the previous section, is not available, it is necessary to set up a script doc_root that is different from web document root.

You can set the PHP script document root by the configuration directive doc_root in the configuration file, or you can set the environment variable PHP_DOCUMENT_ROOT. If it is set, the CGI version of PHP will always construct the file name to open with this doc_root and the path information in the request, so you can be sure no script is executed outside this directory (except for user_dir below).

Another option usable here is user_dir. When user_dir is unset, only thing controlling the opened file name is doc_root . Opening a URL like http://my.host/~user/doc.php does not result in opening a file under users home directory, but a file called ~user/doc.php under doc_root (yes, a directory name starting with a tilde [~]).

If user_dir is set to for example public_php, a request like http://my.host/~user/doc.php will open a file called doc.php under the directory named public_php under the home directory of the user. If the home of the user is /home/user, the file executed is /home/user/public_php/doc.php.

user_dir expansion happens regardless of the doc_root setting, so you can control the document root and user directory access separately.



Case 4: PHP parser outside of web tree

A very secure option is to put the PHP parser binary somewhere outside of the web tree of files. In /usr/local/bin, for example. The only real downside to this option is that you will now have to put a line similar to:

#!/usr/local/bin/php

as the first line of any file containing PHP tags. You will also need to make the file executable. That is, treat it exactly as you would treat any other CGI script written in Perl or sh or any other common scripting language which uses the #! shell-escape mechanism for launching itself.

To get PHP to handle PATH_INFO and PATH_TRANSLATED information correctly with this setup, the PHP parser should be compiled with the --enable-discard-path configure option.




Apache'ye modül olarak kurulum

PHP bir Apache modülü olarak kullanıldığında Apache kullanıcısının (Apache yapılandırma dosyasında user yönergesine bakın) yetkilerini miras alır. Bu kullanıcı genellikle 'nobody' kullanıcısı olur fakat bunun güvenlikle ve kimlik doğrulama ile ilgili olumsuz etkileri olabilir. Örneğin PHP'yi bir veritabanına erişmek için kullanıyorsanız ve bu veritabanına yerleşik olarak erişim izniniz yoksa "nobody" kullanıcısına bu veritabanına erişim izni vermek zorunda kalırsınız. Bu, kötücül bir betiğin bir kullanıcı ismi ve parola belirtmeksizin veritabanına erişebilmesi ve değişiklik yapabilmesi anlamına gelir. Bir ağ örümceğinin veritabanı yönetici sayfasına rast gelmesi ve tüm veritabanınızı yok etmesi çok mümkündür. Bu gibi durumlardan Apache kimlik doğrulaması ile korunabileceğiniz gibi LDAP, .htaccess dosyaları, vs. kullanarak kendi erişim modelinizi tasarlayabilir ve bu kodu PHP betiklerinize dahil edebilirsiniz.

Güvenliğin sağlanması, PHP'nin tamamen etkisiz hale getirilmesi, dosya yazma, veritabanı erişiminin kısıtlanması demek değildir. Bunlar sağlanırsa güvenli bir işlem ortamı oluşmuş olabilir ancak PHP özellikleri kaybolmuş olur.

Sık yapılan bir güvenlik hatası Apache'yi root kullanıcısının aidiyetinde çalıştırmak veya Apache'nin yeteneklerini başka yollarla arttırmaktır.

Apache kullanıcısının yetkilerini root seviyesine yükseltmek, oldukça tehlikeli olup sistemin tamamını tehlikeye atmak demektir. Dolayısıyla, güvenlik profesyoneli olmayanların sudo veya chroot yapmayı ya da Apache'yi root olarak başka bir şekilde çalıştırmayı düşünmemesi gerekir.

PHP bazı basit çözümler içermektedir. Örneğin, open_basedir kullanarak PHP tarafından kullanımına izin verilen dizinlere erişimi denetleyebilir ve kısıtlayabilirsiniz. Ayrıca, sadece Apache'nin erişimine açık bölgeler tanımlayabilir, kullanıcılara ve sisteme ait dosyalara erişimi kısıtlayabilirsiniz.



Dosya Sistemi Güvenliği

İçindekiler

PHP, çoğu sunucu sisteminde bulunan dizin ve dosya erişim izinleri ile ilgili yerleşik güvenlik önlemlerinden etkilenir. Bu izinlerle dosya sisteminden kimin hangi dosyaları okuyabileceğini denetleyebilirsiniz. Dosya sistemine erişimi olan tüm kullanıcıların sadece herkesçe okunabilen dosyaları okuyabilmesini sağlamalısınız.

PHP, dosya sistemine kullanıcı seviyesinde düşük seviyeli erişime izin verecek şekilde tasarlandığından, /etc/passwd gibi sistem dosyalarını okumak, eternet bağlantılarını değiştirmek, yazıcılara iş göndermek ve benzerleri tamamen mümkündür. Bu durum sizin bazı önlemler almanızı gerektirir; dosyaları kimlerin okuyabileceğine ve kimlerin yazabileceğine karar vermeniz gerekir.

Örneğin, aşağıdaki betiği ele alalım. Kullanıcı, ev dizinindeki bazı dosyaları silmek istiyor olsun. Bir sayfanın, kullanıcının ev dizinindeki bazı dosyaları Apache kullanıcısına sildirmek için bir arayüz olarak kullanıldığını varsayalım.

Örnek 1 - Değişkenler başınıza iş açabilir...

<?php
// Kullanıcının ev dizininden bir dosya silelim
$kullanıcı $_POST['kullanıcının_belirttiği_isim'];
$kullanıcı_dosyası $_POST['kullanıcının_belirttiği_dosyaismi'];
$evdizini  "/home/$kullanıcı";

unlink("$evdizini/$kullanıcı_dosyası");

echo 
"Dosya silindi!";
?>

Birine ait bir kullanıcı ve dosya ismi bir formdan gönderilebileceğinden bunu yapmaya izni olmayan biri bile bu betikle dosya silebilir. Bu durumda kimlik doğrulaması yapabilen bir betik kullanmak daha iyi olabilir. Birinin formu kullanarak "../etc/" ve "passwd" girdiğini varsayalım ve betikte neler oluyor bakalım:

Örnek 2 ... Bir dosya sistemi saldırısı

<?php
// PHP kullanıcısının erişebildiği bir yerden bir dosyayı silelim.
// PHP root yetkilerine sahip olsun.
$kullanıcı $_POST['kullanıcının_belirttiği_isim']; // "../etc"
$kullanıcı_dosyası $_POST['kullanıcının_belirttiği_dosyaismi']; // "passwd"
$evdizini  "/home/$kullanıcı"// "/home/../etc"

unlink("$evdizini/$kullanıcı_dosyası"); // "/home/../etc/passwd"

echo "Dosya silindi!";
?>

Bu saldırıyı önlemek için dikkate alacağınız iki ölçüt vardır.

  • PHP çalıştırılabilirini çalıştıran kullanıcının izinlerini sınırlamak.
  • Form ile gönderilen tüm değişkenleri denetlemek.

Düzeltilmiş betik:

Örnek 3 - Daha güvenilir bir dosya silme betiği

<?php
// PHP kullanıcısının erişebildiği bir dosyayı silelim.
$kullanıcı $_SERVER['REMOTE_USER']; // kimlik doğrulaması yapıyoruz
$dosya basename($_POST['kullanıcının_belirttiği_dosyaismi']);
$evdizini  "/home/$kullanıcı";

$dosyayolu "$evdizini/$dosya";

if (
file_exists($dosyayolu) && unlink($dosyayolu)) {
    
$günce "$dosyayolu silindi\n";
} else {
    
$günce "$dosyayolu silinemedi\n";
}
$dt fopen("/home/logging/filedelete.log""a");
fwrite($dt$günce);
fclose($dt);

echo 
htmlentities($logstringENT_QUOTES);

?>

Ancak, bu bile kusurları örtmeye yetmez. Eğer kimlik doğrulama sisteminiz kullanıcıya kendi ev dizinini belirtmesine izin veriyorsa ve kullanıcı "../etc/" dizinine oturum açmayı istiyorsa sistem hala tehdit altında demektir. Bu nedenle, sınanacak noktaları genişletmelisiniz:

Örnek 4 - Daha da güvenilir bir dosya silme betiği

<?php
$kullanıcı 
$_SERVER['REMOTE_USER']; // kimlik doğrulaması yapıyoruz
$dosya $_POST['kullanıcının_belirttiği_dosyaismi'];
$evdizini  "/home/$kullanıcı";

$dosyayolu "$evdizini/$dosya";

if (!
ctype_alnum($kullanıcı) ||
    !
preg_match('/^(?:[a-z0-9_-]|\.(?!\.))+$/iD'$dosyayolu)) {
        die(
"Kullanıcı veya dosya ismi hatalı");
}

//vs...
?>

Kullandığınız işletim sistemine bağlı olarak, dikkate alacağınız geniş bir dosya isimleri yelpazesi vardır: aygıt dosyaları (/dev/ veya COM1 gibi), yapılandırma dosyaları (/etc/ ve .ini dosyaları), bildik saklama alanları (/home/, My Documents), vb. Bu nedenle, açıkça izin verilenler dışında kalan herşeyi yasaklamak en kolayıdır.


Boş baytlı girdiler

PHP, dosya sistemi ile ilgili işlemler için kod seviyesinde C işlevlerini kullandığından boş baytlı (\0) dizgeler beklenmedik davranışlara yol açabilir. Boş bayt, C'de dizgeleri sonlandırmak için kullanıldığından boş bayt içeren dizgelerin tamamı değil, boş bayta kadar olan bölüm işleme sokulur. Aşağıdaki örnekte bunun sebep olduğu bir sorun ele alınmıştır:

Örnek 1 - Boş baytlardan olumsuz etkilenen bir betik

<?php
$dosya 
$_GET['dosya']; // "../../etc/passwd\0"
if (file_exists('/home/siteler/'.$dosya.'.php')) {
    
/* /home/siteler/../../etc/passwd mevcut olduğundan
       file_exists işlevi TRUE döndürür */
    
include '/home/siteler/'.$dosya.'.php';
    
// /etc/passwd dosyası betiğe dahil edildi
}
?>

Bu bakımdan, bir dosya sistemi işleminde kullanılan her dizge daima denetlenmelidir. Aşağıda, önceki örneğin iyileştirilmişi verilmiştir:

Örnek 2 - Girdiyi doğru şekilde ele almak

<?php
$dosya 
$_GET['dosya'];

// Kabul edilebilir değerlerin listesi
switch ($file) {
    case 
'main':
    case 
'foo':
    case 
'bar':
        include 
'/home/siteler/include/'.$dosya.'.php';
        break;
    default:
        include 
'/home/siteler/include/main.php';
}
?>



Database Security

İçindekiler

Nowadays, databases are cardinal components of any web based application by enabling websites to provide varying dynamic content. Since very sensitive or secret information can be stored in a database, you should strongly consider protecting your databases.

To retrieve or to store any information you need to connect to the database, send a legitimate query, fetch the result, and close the connection. Nowadays, the commonly used query language in this interaction is the Structured Query Language (SQL). See how an attacker can tamper with an SQL query.

As you can surmise, PHP cannot protect your database by itself. The following sections aim to be an introduction into the very basics of how to access and manipulate databases within PHP scripts.

Keep in mind this simple rule: defense in depth. The more places you take action to increase the protection of your database, the less probability of an attacker succeeding in exposing or abusing any stored information. Good design of the database schema and the application deals with your greatest fears.


Designing Databases

The first step is always to create the database, unless you want to use one from a third party. When a database is created, it is assigned to an owner, who executed the creation statement. Usually, only the owner (or a superuser) can do anything with the objects in that database, and in order to allow other users to use it, privileges must be granted.

Applications should never connect to the database as its owner or a superuser, because these users can execute any query at will, for example, modifying the schema (e.g. dropping tables) or deleting its entire content.

You may create different database users for every aspect of your application with very limited rights to database objects. The most required privileges should be granted only, and avoid that the same user can interact with the database in different use cases. This means that if intruders gain access to your database using your applications credentials, they can only effect as many changes as your application can.

You are encouraged not to implement all the business logic in the web application (i.e. your script), instead do it in the database schema using views, triggers or rules. If the system evolves, new ports will be intended to open to the database, and you have to re-implement the logic in each separate database client. Over and above, triggers can be used to transparently and automatically handle fields, which often provides insight when debugging problems with your application or tracing back transactions.



Connecting to Database

You may want to establish the connections over SSL to encrypt client/server communications for increased security, or you can use ssh to encrypt the network connection between clients and the database server. If either of these is used, then monitoring your traffic and gaining information about your database will be difficult for a would-be attacker.



Encrypted Storage Model

SSL/SSH protects data travelling from the client to the server, SSL/SSH does not protect the persistent data stored in a database. SSL is an on-the-wire protocol.

Once an attacker gains access to your database directly (bypassing the webserver), the stored sensitive data may be exposed or misused, unless the information is protected by the database itself. Encrypting the data is a good way to mitigate this threat, but very few databases offer this type of data encryption.

The easiest way to work around this problem is to first create your own encryption package, and then use it from within your PHP scripts. PHP can assist you in this with several extensions, such as Mcrypt and Mhash, covering a wide variety of encryption algorithms. The script encrypts the data before inserting it into the database, and decrypts it when retrieving. See the references for further examples of how encryption works.

In case of truly hidden data, if its raw representation is not needed (i.e. not be displayed), hashing may also be taken into consideration. The well-known example for the hashing is storing the MD5 hash of a password in a database, instead of the password itself. See also crypt() and md5().

Örnek 1 Using hashed password field

<?php

// storing password hash
$query  sprintf("INSERT INTO users(name,pwd) VALUES('%s','%s');",
            
pg_escape_string($username), md5($password));
$result pg_query($connection$query);

// querying if user submitted the right password
$query sprintf("SELECT 1 FROM users WHERE name='%s' AND pwd='%s';",
            
pg_escape_string($username), md5($password));
$result pg_query($connection$query);

if (
pg_num_rows($result) > 0) {
    echo 
'Welcome, $username!';
} else {
    echo 
'Authentication failed for $username.';
}

?>


SQL Injection

Many web developers are unaware of how SQL queries can be tampered with, and assume that an SQL query is a trusted command. It means that SQL queries are able to circumvent access controls, thereby bypassing standard authentication and authorization checks, and sometimes SQL queries even may allow access to host operating system level commands.

Direct SQL Command Injection is a technique where an attacker creates or alters existing SQL commands to expose hidden data, or to override valuable ones, or even to execute dangerous system level commands on the database host. This is accomplished by the application taking user input and combining it with static parameters to build a SQL query. The following examples are based on true stories, unfortunately.

Owing to the lack of input validation and connecting to the database on behalf of a superuser or the one who can create users, the attacker may create a superuser in your database.

Örnek 1 Splitting the result set into pages ... and making superusers (PostgreSQL)

<?php

$offset 
$argv[0]; // beware, no input validation!
$query  "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";
$result pg_query($conn$query);

?>

Normal users click on the 'next', 'prev' links where the $offset is encoded into the URL. The script expects that the incoming $offset is a decimal number. However, what if someone tries to break in by appending a urlencode()'d form of the following to the URL

0;
insert into pg_shadow(usename,usesysid,usesuper,usecatupd,passwd)
    select 'crack', usesysid, 't','t','crack'
    from pg_shadow where usename='postgres';
--

If it happened, then the script would present a superuser access to him. Note that 0; is to supply a valid offset to the original query and to terminate it.

Bilginize: It is common technique to force the SQL parser to ignore the rest of the query written by the developer with -- which is the comment sign in SQL.

A feasible way to gain passwords is to circumvent your search result pages. The only thing the attacker needs to do is to see if there are any submitted variables used in SQL statements which are not handled properly. These filters can be set commonly in a preceding form to customize WHERE, ORDER BY, LIMIT and OFFSET clauses in SELECT statements. If your database supports the UNION construct, the attacker may try to append an entire query to the original one to list passwords from an arbitrary table. Using encrypted password fields is strongly encouraged.

Örnek 2 Listing out articles ... and some passwords (any database server)

<?php

$query  
"SELECT id, name, inserted, size FROM products
                  WHERE size = '
$size'
                  ORDER BY 
$order LIMIT $limit$offset;";
$result odbc_exec($conn$query);

?>

The static part of the query can be combined with another SELECT statement which reveals all passwords:

'
union select '1', concat(uname||'-'||passwd) as name, '1971-01-01', '0' from usertable;
--

If this query (playing with the ' and --) were assigned to one of the variables used in $query, the query beast awakened.

SQL UPDATE's are also susceptible to attack. These queries are also threatened by chopping and appending an entirely new query to it. But the attacker might fiddle with the SET clause. In this case some schema information must be possessed to manipulate the query successfully. This can be acquired by examining the form variable names, or just simply brute forcing. There are not so many naming conventions for fields storing passwords or usernames.

Örnek 3 From resetting a password ... to gaining more privileges (any database server)

<?php
$query 
"UPDATE usertable SET pwd='$pwd' WHERE uid='$uid';";
?>

But a malicious user sumbits the value ' or uid like'%admin%'; -- to $uid to change the admin's password, or simply sets $pwd to "hehehe', admin='yes', trusted=100 " (with a trailing space) to gain more privileges. Then, the query will be twisted:

<?php

// $uid == ' or uid like'%admin%'; --
$query "UPDATE usertable SET pwd='...' WHERE uid='' or uid like '%admin%'; --";

// $pwd == "hehehe', admin='yes', trusted=100 "
$query "UPDATE usertable SET pwd='hehehe', admin='yes', trusted=100 WHERE
...;"
;

?>

A frightening example how operating system level commands can be accessed on some database hosts.

Örnek 4 Attacking the database hosts operating system (MSSQL Server)

<?php

$query  
"SELECT * FROM products WHERE id LIKE '%$prod%'";
$result mssql_query($query);

?>

If attacker submits the value a%' exec master..xp_cmdshell 'net user test testpass /ADD' -- to $prod, then the $query will be:

<?php

$query  
"SELECT * FROM products
                    WHERE id LIKE '%a%'
                    exec master..xp_cmdshell 'net user test testpass /ADD'--"
;
$result mssql_query($query);

?>

MSSQL Server executes the SQL statements in the batch including a command to add a new user to the local accounts database. If this application were running as sa and the MSSQLSERVER service is running with sufficient privileges, the attacker would now have an account with which to access this machine.

Bilginize: Some of the examples above is tied to a specific database server. This does not mean that a similar attack is impossible against other products. Your database server may be similarly vulnerable in another manner.

Avoiding techniques

You may plead that the attacker must possess a piece of information about the database schema in most examples. You are right, but you never know when and how it can be taken out, and if it happens, your database may be exposed. If you are using an open source, or publicly available database handling package, which may belong to a content management system or forum, the intruders easily produce a copy of a piece of your code. It may be also a security risk if it is a poorly designed one.

These attacks are mainly based on exploiting the code not being written with security in mind. Never trust any kind of input, especially that which comes from the client side, even though it comes from a select box, a hidden input field or a cookie. The first example shows that such a blameless query can cause disasters.

  • Never connect to the database as a superuser or as the database owner. Use always customized users with very limited privileges.
  • Check if the given input has the expected data type. PHP has a wide range of input validating functions, from the simplest ones found in Variable Functions and in Character Type Functions (e.g. is_numeric(), ctype_digit() respectively) and onwards to the Perl compatible Regular Expressions support.
  • If the application waits for numerical input, consider verifying data with is_numeric(), or silently change its type using settype(), or use its numeric representation by sprintf().

    Örnek 5 A more secure way to compose a query for paging

    <?php

    settype
    ($offset'integer');
    $query "SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET $offset;";

    // please note %d in the format string, using %s would be meaningless
    $query sprintf("SELECT id, name FROM products ORDER BY name LIMIT 20 OFFSET %d;",
                     
    $offset);

    ?>

  • Quote each non numeric user supplied value that is passed to the database with the database-specific string escape function (e.g. mysql_real_escape_string(), sqlite_escape_string(), etc.). If a database-specific string escape mechanism is not available, the addslashes() and str_replace() functions may be useful (depending on database type). See the first example. As the example shows, adding quotes to the static part of the query is not enough, making this query easily crackable.
  • Do not print out any database specific information, especially about the schema, by fair means or foul. See also Error Reporting and Error Handling and Logging Functions.
  • You may use stored procedures and previously defined cursors to abstract data access so that users do not directly access tables or views, but this solution has another impacts.

Besides these, you benefit from logging queries either within your script or by the database itself, if it supports logging. Obviously, the logging is unable to prevent any harmful attempt, but it can be helpful to trace back which application has been circumvented. The log is not useful by itself, but through the information it contains. More detail is generally better than less.




Error Reporting

With PHP security, there are two sides to error reporting. One is beneficial to increasing security, the other is detrimental.

A standard attack tactic involves profiling a system by feeding it improper data, and checking for the kinds, and contexts, of the errors which are returned. This allows the system cracker to probe for information about the server, to determine possible weaknesses. For example, if an attacker had gleaned information about a page based on a prior form submission, they may attempt to override variables, or modify them:

Örnek 1 Attacking Variables with a custom HTML page

<form method="post" action="attacktarget?username=badfoo&amp;password=badfoo">
<input type="hidden" name="username" value="badfoo" />
<input type="hidden" name="password" value="badfoo" />
</form>

The PHP errors which are normally returned can be quite helpful to a developer who is trying to debug a script, indicating such things as the function or file that failed, the PHP file it failed in, and the line number which the failure occurred in. This is all information that can be exploited. It is not uncommon for a php developer to use show_source(), highlight_string(), or highlight_file() as a debugging measure, but in a live site, this can expose hidden variables, unchecked syntax, and other dangerous information. Especially dangerous is running code from known sources with built-in debugging handlers, or using common debugging techniques. If the attacker can determine what general technique you are using, they may try to brute-force a page, by sending various common debugging strings:

Örnek 2 Exploiting common debugging variables

<form method="post" action="attacktarget?errors=Y&amp;showerrors=1&amp;debug=1">
<input type="hidden" name="errors" value="Y" />
<input type="hidden" name="showerrors" value="1" />
<input type="hidden" name="debug" value="1" />
</form>

Regardless of the method of error handling, the ability to probe a system for errors leads to providing an attacker with more information.

For example, the very style of a generic PHP error indicates a system is running PHP. If the attacker was looking at an .html page, and wanted to probe for the back-end (to look for known weaknesses in the system), by feeding it the wrong data they may be able to determine that a system was built with PHP.

A function error can indicate whether a system may be running a specific database engine, or give clues as to how a web page or programmed or designed. This allows for deeper investigation into open database ports, or to look for specific bugs or weaknesses in a web page. By feeding different pieces of bad data, for example, an attacker can determine the order of authentication in a script, (from the line number errors) as well as probe for exploits that may be exploited in different locations in the script.

A filesystem or general PHP error can indicate what permissions the web server has, as well as the structure and organization of files on the web server. Developer written error code can aggravate this problem, leading to easy exploitation of formerly "hidden" information.

There are three major solutions to this issue. The first is to scrutinize all functions, and attempt to compensate for the bulk of the errors. The second is to disable error reporting entirely on the running code. The third is to use PHP's custom error handling functions to create your own error handler. Depending on your security policy, you may find all three to be applicable to your situation.

One way of catching this issue ahead of time is to make use of PHP's own error_reporting(), to help you secure your code and find variable usage that may be dangerous. By testing your code, prior to deployment, with E_ALL, you can quickly find areas where your variables may be open to poisoning or modification in other ways. Once you are ready for deployment, you should either disable error reporting completely by setting error_reporting() to 0, or turn off the error display using the php.ini option display_errors, to insulate your code from probing. If you choose to do the latter, you should also define the path to your log file using the error_log ini directive, and turn log_errors on.

Örnek 3 Finding dangerous variables with E_ALL

<?php
if ($username) {  // Not initialized or checked before usage
    
$good_login 1;
}
if (
$good_login == 1) { // If above test fails, not initialized or checked before usage
    
readfile ("/highly/sensitive/data/index.html");
}
?>



register_globals Kullanımı

Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

PHP'deki belki de en tartışmalı değişiklik, register_globals PHP yönergesinin öntanımlı değerinin PHP » 4.2.0'da On iken Off yapılmasıdır. Bu yönerge üzerindeki geçmiş deneyimlere dayanmak oldukça yaygındı ve çoğu kişi yönergenin varlığını bile bilmediği gibi PHP'nin böyle çalıştığını varsayardı. Bu sayfada, bu yönerge ile yazılan kodun nasıl güvensiz olabileceği gösterilecek, fakat güvensizliğin yönergenin kendisinden ziyade nasıl yanlış kullanımından kaynaklandığı açıklanacaktır.

register_globals On iken, HTML formlarındaki istek değişkenleri gibi bir takım değişkenler betiğinize dahil edilir. PHP'nin değişken ilklendirme gerektirmeme olgusu güvensiz kod yazımını daha da kolaylaştırır. Zor bir karar olmasına rağmen PHP topluluğu bu yönergeyi öntanımlı olarak iptal etmeyi uygun gördü. Yönergenin değeri On iken, kullanıcılar, değişkenleri, aslında ne olup bittiğini bilmeden sadece varsayımla kullanırdı. Betiğin kendisi tarafından tanımlanmış dahili değişkenler kullanıcı tarafından gönderilen istek verileri ile karışırdı. register_globals Off yapılınca bu değişti. Yönergenin yanlış kullanımını bir örnekle açıklamaya çalışalım:

Örnek 1 - register_globals = on ile yanlış kullanım örneği

<?php
// Sadece kullanıcı kimliği doğrulanıyorsa $yetkili = true olmalı
if (authenticated_user()) {
    
$yetkili true;
}

// $yetkili değişkenini başta false ile ilklendirmediğimizden
// bu atama GET auth.php?yetkili=1 şeklinde register_globals
// üzerinden yapılmış olabilir. Dolayısıyla, kullanıcı kendini
// yetkiliymiş gibi gösterebilir!
if ($yetkili) {
    include 
"/gayet/hassas/veriler.php";
}
?>

register_globals = on iken yukarıda yürüttüğümüz mantık zarar görebilir. register_globals = off olduğunda, $yetkili değişkenine istek üzerinden değer atanamayacağından bir açık söz konunu olmayacaktır. Aslında değişkenleri baştan ilklendirmek iyi bir programcılık alışkanlığıdır. Yukarıdaki örnekte baştan $yetkili = false yapabilirdik. Bu ilklendirme yapılmış olsaydı, kullanıcı öntanımlı olarak yetkisiz olacağından register_globals yönergesinin değerinin ne olduğunun bir önemi olmayacaktı.

Diğer bir örnek oturumlarla ilgilidir. register_globals = on iken, aşağıdaki örnekte $kullanici değişkenini de kullanabilirdik, fakat tekrar hatırlatmakta yarar var: $kullanici, GET gibi başka bir kaynaktan da (örn, URL üzerinden) gelebilirdi.

Örnek 2 - register_globals On veya Off iken oturum örneği

<?php
// $kullanici'nin nereden geleceğini bilemezdik
// Fakat oturum verisi için $_SESSION kullanınca biliriz
if (isset($_SESSION['kullanici'])) {

    echo 
"Merhaba <b>{$_SESSION['kullanici']}</b>";

} else {

    echo 
"Merhaba <b>Ziyaretçi</b><br />";
    echo 
"Oturum açmak ister misiniz?";

}
?>

Sahtecilik yapılmaya çalışıldığında uyaracak önleyici tedbirler almak da mümkündür. Bir değişken vaktinden önce geliyorsa, gönderilen verinin ilgisiz bir teslimat çeşidinden gelip gelmediğini sınayabilirsiniz. Verinin sahte olmadığını garanti etmese de saldırganın yaptığı sahtecilik türünün tahmin edilmesi gerekir. İstek verisinin geldiği yeri önemsemiyorsanız, GET, POST ve COOKIE verilerinin bir karışımını içeren $_REQUEST dizisini kullanabilirsiniz. Ayrıca, Dış Kaynaklı Değişkenler bölümüne de bakınız.

Örnek 3 - Basit değişken sahteciliğinin saptanması

<?php
if (isset($_COOKIE['MAGIC_COOKIE'])) {

    
// MAGIC_COOKIE bir çerezden gelir.
    // Çerez verisini doğrulamayı unutmayın!

} elseif (isset($_GET['MAGIC_COOKIE']) || isset($_POST['MAGIC_COOKIE'])) {

   
mail("admin@example.com""Olası kırma çabası"$_SERVER['REMOTE_ADDR']);
   echo 
"Güvenlik ihlali; yönetici uyarıldı.";
   exit;

} else {

   
// MAGIC_COOKIE bu istek (REQUEST) üzerinden atanmamış.

}
?>

Şüphesiz, tek başına register_globals = off, kodunuzun güvenli olduğu anlamına gelmez. Gönderilen her veri parçası başka yollarla da ayrıca sınanmalıdır. Kullanıcı verinizi daima doğrulayın ve değişkenlerinizi daima ilklendirin! İlklendirilmemiş değişkenleri görmek için error_reporting() işlevi ile E_NOTICE seviyesinden hataların gösterilmesini sağlamalısınız.

register_globals'in On veya Off olmasının taklit edilmesi hakkında bilgi edinmek için SSS'deki register_globals ile nasıl çalışacağım? sorusuna bakınız.

Bilginize: Süper Küreseller Kullanılabilirlik Bilgisi
$_GET, $_POST, $_SERVER, vs. gibi süper küreseller PHP 4.1.0 sürümünden beri kullanılabilmektedir. Bu konuda daha ayrıntılı bilgi edinmek için süper küreseller bölümüne bakınız.



Kullanıcıdan Gelen Bilgi

PHP de yazılmış bir uygulamanın en zayıf noktası, dilin kendisinde olan bir sorun değil, yazılan uygulamanın bazı varsayımlara dayanarak güvenliği göz önünde bulundurmamasıdır. Bundan dolayı bir uygulama yazarken güvenliğe önem vermeli ve kullanıcıdan gelen bilginin varsayıma dayanmadan denetlenmesini sağlamasınız.

Örnek 1 - Tehlikeli Değişken Kullanımı

<?php
// kullanıcının ev dizininden bir dosyayı silelim...
// acaba başka birininkini mi silecek?
unlink ($fena_veri);

// Girişle ilgili kayıt tutalım...
// acaba /etc/passwd dosyasına mı yazacak?
fwrite ($fp$fena_veri);

// Denemek için birşeyler çalıştıralım...
// acaba tüm dosyaları silecek bir 'rm -rf' komutu mu?
exec ($fena_veri);

?>

Kod yazarken her zaman yazdıklarınızı dikkatlice inceleyip, kullanıcıdan gelen bilgilerin doğru ve tam şekilde denetlenip onaylandığına emin olmanız gerekir. Kullanıcıdan gelen bilgiyi alıp işleme koyduğunuz her durumda kendinize şu soruları sorabilirsiniz:

  • Bu betik benim istemediğim dosyalara erişim, değişiklik veya silme imkanı veriyor mu?
  • Beklenmeyen bir bilgi geldiğinde de istenilen işlem yapılacak mı?
  • Bu betik başka bir amaç için kullanılabilir mi?
  • Bu betik sistemde varolan başka betiklerle birlikte kötü amaçlı kullanılabilir mi?
  • Yapılan işlemler daha sonra inceleme amacıyla kayda alınacak mı?

Yaptığınız projenin uygunluğuna göre kod yazmadan önce ve yazarken bu soruları sık sık kendinize sormanız, proje bittiğinde değerlendirme yapıp değişiklikler yapmanızdan çok daha faydalı olacaktır. Bu sayede proje tasarımını güvenlik düşünülerek yapmış olacak ve daha sonra güvenlik dolayısıyla ciddi değişiklikler yapma zorunluluğunuz ortadan kalkacaktır. Güvenliğe vereceğiniz öncelikli önem, daha sonra yapacağınız ve güvenliği riske atacak değişikliklerden çok daha faydalıdır.

Belirtilen bir değişkenin değerini, kaynağı veya geçerliliği bozacağını düşündüğünüz register_globals, magic_quotes ve benzeri ayarlarları kapatmanız iyi olabilir. Hata bildirim kipi 'error_reporting(E_ALL)' kullanımı, aynı zamanda uyarıları da göstereceği için kodunuzda sorun olup olmadığı hakkında daha iyi bilgi verebilir.



Sihirli Tırnak

İçindekiler

Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

Sihirli Tırnaklar, PHP betiklerine gelen veriyi sihirli bir şekilde önceleyen bir işlemdir. Kodlamayı sihirli tırnakları kullanmadan yapıp bu işlemi çalışma anına bırakmak gerektiğinde de tercih edilebilir.


Sihirli Tırnaklar nedir?

Etkin olduğunda, ' (tek tırnak), " (çift tırnak), \ (tersbölü) ve NULL karakterlerinin önüne özdevinimli olarak bir tersbölü imi getirilir. Bu işlem addslashes() işlevinin yaptığı işle aynıdır.

Toplam üç adet sihirli tırnak yönergesi vardır:

  • magic_quotes_gpc HTTP istek verisini (GET, POST ve COOKIE) etkiler. Çalışma anında ayarlanamaz ve öntanımlı değeri on'dur. Ayrıca bakınız: get_magic_quotes_gpc().
  • magic_quotes_runtime Etkin olduğunda, veritabanları ve metin dosyaları dahil, bir dış kaynaktan veri döndüren çoğu işlev veriyi tersbölü imiyle önceleyecektir. Çalışma anında ayarlanabilir ve öntanımlı değeri off yani kapalıdır. Ayrıca bakınız: set_magic_quotes_runtime() ve get_magic_quotes_runtime().
  • magic_quotes_sybase Etkin olduğunda tek tırnak karakterini öncelerken tersbölü değil yine bir tek tırnak kullanılır. Değeri on olduğunda, magic_quotes_gpc ayarını geçersiz kılar. Yani her iki yönerge de etkin olduğunda tek tırnaklar '' biçeminde öncelenir. Çift tırnaklar, tersbölüler ve NULL'lar öncelenmeden bırakılır. Ayrıca bir yönergenin değerinin alınması ile ilgili olarak ini_get() işlevine de bakınız.


Sihirli Tırnaklar Neden Kullanılır?

Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

  • Sihirli tırnaklar, PHP'nin artık desteklenmeyen bir parçası olduğundan artık kullanmamak gerekir. Bununla birlikte, yeni kod yazmaya başlayanlardan kaynaklanan tehlikeleri bertaraf etmeye yardımcı olması için hala tutulmaktadır. Fakat böyle kodları olduğu gibi kullanmak ve sihirli tırnakları etkin kılmak yerine bu kodları sihirli tırnaklardan arındırmak daha yararlıdır.
  • O halde bu özellik niye hala var? Yanıt basit, SQL Enjeksiyon riskini ortadan kaldırmak için. Günümüz geliştiricileri, güvenlik konusunda daha bilgilidirler ve sihirli tırnaklara ödün vermek yerine hazır deyimleri ve/veya veritabanlarına özgü önceleme mekanizmalarını kullanmaktadırlar.


Sihirli Tırnaklar Neden Kullanılmamalıdır?

Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

  • Taşınabilirlik. Bu özelliğin açık veya kapalı olmasının taşınabilirliği etkilediği varsayılır. Böyle bir durumun varlığını get_magic_quotes_gpc() ile denetledikten sonra kodlamayı buna uygun yapın.
  • Başarım. Bir veritabanına yerleştirilen her veri parçası öncelenmediğinden, tüm bu verinin öncelenmeye çalışılması başarım kaybına sebep olur. Bu bakımdan (addslashes() gibi) önceleme işlevlerinin çalışma anında çağrılması daha verimli olur. php.ini-development bu yönergeleri öntanımlı olarak etkin kılsa da php.ini-production bunu etkisiz kılar. İkincisinin sebebi tamamen başarım ile ilgilidir.
  • Elverişsizlik. Tüm verinin öncelenmesi gerekmediğinden, gerekmediği halde verinin öncelenmiş olduğunu görmek çoğunlukla can sıkıcıdır. Örneğin bir formdan gönderilen epostada bir sürü \' görmek. Bu durumu düzeltmek için aşırı miktarda stripslashes() işlevi kullanmak gerekebilir.


Sihirli Tırnakların İptali

Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

magic_quotes_gpc yönergesi sadece sistem seviyesinde etkisiz kılınabilir, çalışma anında yapılamaz. Başka bir deyişle, ini_set() işlevi bir seçenek değildir.

Örnek 1 - Sihirli tırnakların sunucu taraflı iptali

Aşağıdaki örnekte php.ini içinde bu yönergelere değer olarak Off atanmaktadır. Bu konuda daha ayrıntılı bilgi edinmek için Yapılandırma ayarlarının değiştirilmesi bölümüne bakınız.

; Sihirli tırnakların iptali
;

; Gelen GET/POST/Cookie verisi için sihirli tırnaklar
magic_quotes_gpc = Off

; Çalışma anında üretilen (SQL veya exec() kaynaklı) veri için
magic_quotes_runtime = Off

; Sybase-tarzı sihirli tırnak kullanımı (' yerine \' değil '').
magic_quotes_sybase = Off

Eğer sunucuda yapılandırma dosyasına erişim ve değişiklik mümkün değilse, .htaccess kullanmak da bir seçenektir. Örnek:

php_flag magic_quotes_gpc Off

Taşınabilir kod (her ortamda çalışan kod) yazmaya yönelik olarak, ayarların sunucu seviyesinde değiştirilmesi mümkün değilse magic_quotes_gpc yönergesi örnekteki gibi çalışma anında etkisiz kılınabilir. Bu yol fevkalade verimsizdir ancak uygun yönergeleri başka bir yerden atamaya tercih edilir.

Örnek 2 - Sihirli tırnakların çalışma anında iptali

<?php
if (get_magic_quotes_gpc()) {
    
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
    while (list(
$key$val) = each($process)) {
        foreach (
$val as $k => $v) {
            unset(
$process[$key][$k]);
            if (
is_array($v)) {
                
$process[$key][stripslashes($k)] = $v;
                
$process[] = &$process[$key][stripslashes($k)];
            } else {
                
$process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
}
    unset(
$process);
?>




PHP'yi gizlemek

Bazı şeyleri gizleyerek güvenlik sağlama girişimleri en alt düzeydeki çabalardır. Ancak bazı durumlarda en küçük güvenlik arttırıcı önlem bile yararlı olabilir.

Bir kaç basit teknikle PHP'yi gizleyebilir, sisteminizin zayıflıklarını keşfetmeye çalışan bir saldırganı belki de yavaşlatabilirsiniz. php.ini dosyanızda expose_php = off yaparak bir saldırganın erişebileceği bilgiyi en aza indirebilirsiniz.

Başka bir yol da HTTP sunucusuna PHP kodu olarak başka dosya uzantıları belirtmektir. Bu işlem Apache yapılandırma dosyasında veya .htaccess dosyalarında yapılabilir. Yanıltıcı dosya uzantılarını şöyle kullanabilirsiniz:

Örnek 1 - PHP'yi başka bir dil olarak göstermek

# PHP kodlarını başka bir dilin kodları gibi gösterelim
AddType application/x-httpd-php .asp .py .pl

Veya tamamen gizleyelim:

Örnek 2 - PHP uzantısı olarak bilinmeyen bir uzantı kullanmak

# PHP kodunu türü bilinmeyen bir dosya gibi gösterelim
AddType application/x-httpd-php .hop .yep

Ya da HTML kodu gibi gösterek gizleyelim. Ancak tüm HTML dosyalarını PHP işleyeceği için bu bir miktar başarım kaybına sebep olur:

Örnek 3 - PHP uzantısı olarak HTML uzantılarını kullanmak

# Tüm PHP kodu HTML kodu gibi görünsün
AddType application/x-httpd-php .htm .html

Bunun verimli çalışması için tüm PHP dosyalarınızın uzantılarını yukardaki uzantılarla değiştirmeniz gerekir. Dosya adı değiştirme zorunluluğu için bu alt düzey güvenlik önleminin size çıkardığı bir zorluktur diyebiliriz.



Güncel Tutmak

PHP, diğer büyük sistemler gibi devamlı ilerlemeler ve yenilikler içermektedir. Her yeni sürümde sistemin güvenliğini ve kararlılığını etkileyen yapılandırma kazalarını ve diğer açıkları kapatmak veya güvenliği arttırmak amacıyla mutlaka büyük ya da küçük değişiklikler ortaya çıkmaktadır.

Yapılması gereken en akılcı yaklaşım, benzeri diğer sistem secviyesinde betik dilleri ve programlarında olduğu gibi, sık sık güncellemeleri takip etmek ve kullanılan sürüme göre daha yeni bir sürüme geçiş yapmak olmalıdır.




Özellikler


PHP ile HTTP Kimlik Doğrulaması

PHP'deki HTTP Kimlik Doğrulaması kancaları sadece PHP bir Apache modülü olarak çalıştığında mevcuttur ve CGI sürümünde yoktur. Bir Apache modülü PHP betiğinde, header() işlevini kullanarak istemci tarayıcısına "Kimlik Doğrulaması Gerekli" iletisini gönderebilir ve bunun sonucunda Kullanıcı Adı/Parola giriş penceresi açılır. Kullanıcı kullanıcı adı ve parolasını girdiğinde, PHP betiğini içeren URL, kullanıcı adı, parola ve kimlik doğrulama türünü atayan PHP_AUTH_USER, PHP_AUTH_PW ve AUTH_TYPE öntanımlı değişkenleri ile tekrar çağrılır. Bu öntanımlı değişkenler $_SERVER ve $HTTP_SERVER_VARS dizileri içinde bulunur. "Temel" ve "Özet" (PHP 5.1.0'dan itibaren) kimlik doğrulama yöntemlerinin ikisi de desteklenir. Daha fazla bilgi için header() işlevine bakınız.

Bilginize: PHP Sürüm Bilgisi
$_SERVER gibi süper küreseller, PHP » 4.1.0'dan itibaren kullanılabilmektedir.

İstemci sayfasını kimlik doğrulamaya zorlayacak örnek betik aşağıdaki gibidir:

Örnek 1 - Temel HTTP Kimlik Doğrulaması örneği

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header('WWW-Authenticate: Basic realm="Benim bölgem"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
'Kullanıcı İptal düğmesine basınca çıkacak metin';
    exit;
} else {
    echo 
"<p>Merhaba {$_SERVER['PHP_AUTH_USER']}.</p>";
    echo 
"<p>Parola olarak {$_SERVER['PHP_AUTH_PW']} verdiniz.</p>";
}
?>

Örnek 2 - Özet HTTP Kimlik Doğrulaması örneği

Bu örnek basit bir Özet HTTP kimlik doğrulama betiğinin nasıl uygulanacağını gösterir. Daha fazla bilgi için » RFC 2617 belgesini okuyunuz.

<?php
$saha 
'Kısıtlanmış alan';

// kullanici => parola
$kullanicilar = array('yonetici' => 'gizlisifre''misafir' => 'misafir');


if (empty(
$_SERVER['PHP_AUTH_DIGEST'])) {
    
header('HTTP/1.1 401 Unauthorized');
    
header('WWW-Authenticate: Digest realm="'.$saha.
           
'",qop="auth",nonce="'.uniqid().'",opaque="'.md5($saha).'"');

    die(
'Kullanıcı İptal düğmesine basınca çıkacak metin');
}


// PHP_AUTH_DIGEST değişkenini inceleyelim
if (!($veri http_ozet_cozumle($_SERVER['PHP_AUTH_DIGEST'])) ||
    !isset(
$kullanicilar[$veri['username']]))
    die(
'Kimlik Doğrulama Hatası!');


// geçerli yanıt üretimi
$A1 md5($veri['username'] . ':' $saha ':' .
      
$kullanicilar[$veri['username']]);
$A2 md5($_SERVER['REQUEST_METHOD'].':'.$veri['uri']);
$gecerli_yanit md5($A1.':'.$veri['nonce'].':'.$veri['nc'].':'.
      
$veri['cnonce'].':'.$veri['qop'].':'.$A2);

if (
$veri['response'] != $gecerli_yanit)
    die(
'Kimlik Doğrulama Hatası!');

// tamam, geçerli kullanıcı adı & parolası
echo 'Hoşgeldiniz : ' $veri['username'];


// http kimlik doğrulama başlığını çözümleyecek işlev
function http_ozet_cozumle($metin)
{
    
// eksik veriye karşı koruma
    
$gerekli_kisimlar = array('nonce'=>1'nc'=>1'cnonce'=>1'qop'=>1,
                              
'username'=>1'uri'=>1'response'=>1);
    
$veri = array();
    
$keys implode('|'array_keys($gerekli_kisimlar));


    
preg_match_all('@(' $keys ')=(?:([\'"])([^\2]+?)\2|([^\s,]+))@',
                    
$metin$eslesenPREG_SET_ORDER);

    foreach (
$eslesen as $m) {
        
$veri[$m[1]] = $m[3] ? $m[3] : $m[4];
        unset(
$gerekli_kisimlar[$m[1]]);
    }

    return 
$gerekli_kisimlar false $veri;
}
?>

Bilginize: Uyumluluk Bilgisi
Lütfen HTTP başlık satırlarını kodlarken dikkatli olun. Bütün istemcilerle uyumluluğu garantilemek için, "Basic" anahtar sözcüğünün "B" harfi büyük yazılmalı, realm metni çift tırnak (tek tırnak değil) ile yazılmalı, ve HTTP/1.0 401 başlık satırındaki 401 kodundan önce tam olarak bir adet boşluk olmalıdır. Yukarıdaki özet örneğinde olduğu gibi kimlik doğrulama değiştirgeleri virgülle ayrılmış olmalıdır.

Yukarıdaki örnekte yapıldığı gibi sadece PHP_AUTH_USER ve PHP_AUTH_PW yazdırmak yerine, kullanıcı adı ve parolasının doğruluğunu denetlemek isteyebilirsiniz. Bunun için belki bir veritabanı sorgusu gönderebilir veya kullanıcıyı bir dbm dosyası içinde arayabilirsiniz.

Burada hatalı Internet Explorer tarayıcılarına dikkat ediniz. Başlıkların sırası konusunda çok seçici görünürler. WWW-Authenticate başlığını HTTP/1.0 401 başlığından önce göndermek hileye neden olabilir.

PHP 4.3.0'dan itibaren geleneksel harici kimlik doğrulama yönteminden geçmiş bir sayfa için girilmiş parolayı gösteren bir betik yazılmasını engellemek için, harici kimlik doğrulaması yapılan sayfa için güvenli kip (safe_mode) etkinleştirilir, böylece PHP_AUTH değişkenlerine değer atanmaz. Harici kimlik doğrulaması yapılan kullanıcıyı kimliklendirmek için REMOTE_USER değişkeni $_SERVER['REMOTE_USER'] olarak kullanılabilir.

Bilginize: Yapılandırma Bilgisi
PHP harici kimlik doğrulamasının etkin olup olmadığnı tespit etmek için AuthType yönergesininin varlığını bakar.

Yukarıdaki örnek, aynı sunucudaki kimlik doğrulamalı URL'lerden girilen parolaları çalmak için kimlik doğrulamasız bir URL'yi kullanmak isteyenleri önlemez.

Hem Netscape Navigator hem de Internet Explorer, 401 sunucu yanıtını almak için yerel tarayıcı penceresinin kimlik doğrulama önbelleğini temizler. Bu işlem, kullanıcıları tekrar kullanıcı adı ve parolasını girmeye zorlayacak şekilde "oturumu kapatır". Bazıları bunu "zaman aşımlı" kullanıcı girişi için kullanırlar veya bir "Çıkış" düğmesi sunarlar.

Örnek 3 - Yeni kullanıcı adı va parolası girmeye zorlayan bir HTTP kimlik doğrulama örneği

<?php
function authenticate() {
    
header('WWW-Authenticate: Basic realm="Kimlik Doğrulaması Deneme Sistemi"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
"Bu kaynağa erişmek için geçerli bir kullanıcı adı ve " .
         
"parolası girmelisiniz.\n";
    exit;
}

if (!isset(
$_SERVER['PHP_AUTH_USER']) ||
    (
$_POST['SeenBefore'] == && $_POST['OldAuth'] == $_SERVER['PHP_AUTH_USER'])) {
    
authenticate();
} else {
    echo 
"<p>Merhaba: {$_SERVER['PHP_AUTH_USER']}<br />";
    echo 
"Eski: {$_REQUEST['OldAuth']}";
    echo 
"<form action='{$_SERVER['PHP_SELF']}' METHOD='post'>\n";
    echo 
"<input type='hidden' name='SeenBefore' value='1' />\n";
    echo 
"<input type='hidden' name='OldAuth' value='{$_SERVER['PHP_AUTH_USER']}' />\n";
    echo 
"<input type='submit' value='Kimliği Yeniden Doğrula />\n";
    echo 
"</form></p>\n";
}
?>

Bu davranış şekli HTTP Temel kimlik doğrulama standardı için gerekli değildir, bu nedenle buna güvenmemelisiniz. Lynx ile denendiğinde Lynx'in kimlik doğrulama kartlarını 401 sunucu yanıtı ile temizlemediğini göstermiştir, bu nedenle kimlik bilgisi değişmediği sürece geri ve ileri düğmesine basmak aynı kaynağı açacaktır. Kullanıcı '_' tuşu ile kimlik doğrulama bilgisini temizleyebilir.

Ayrıca PHP 4.3.3'e kadar, PHP'nin CGI sürümünü kullanan Microsoft'un IIS sunucularında IIS kısıtlaması nedeniyle HTTP kimlik doğrulaması çalışmaz. PHP 4.3.3 ve sonrasında bunun çalışması için IIS yapılandırmasındaki "Dizin Güvenliği"ni değiştirmelisiniz. "Düzenle"ye basınız ve sadece "Anonim Erişim"leri seçiniz, diğer bütün sahalar seçimsiz olmalıdır.

Diğer kısıtlama IIS modülü (ISAPI) ve PHP 4 kullanımında yaşanır. PHP_AUTH_* değişkenlerini kullanamazsınız, bunun yerine HTTP_AUTHORIZATION değişkeni kullanılabilir. Örnek: list($user, $pw) = explode(':', base64_decode(substr($_SERVER['HTTP_AUTHORIZATION'], 6)));

Bilginize: IIS Bilgisi:
HTTP kimlik doğrulamasının IIS ile çalışması için, PHP yönergesi cgi.rfc2616_headers değeri 0 olmaldır (öntanımlı değer).

Bilginize: Eğer güvenli kip etkinse, betiğin kullanıcı kimliği değeri WWW-Authenticate başlığının realm kısmına eklenir.



Çerezler

PHP HTTP çerezlerini şeffaf olarak destekler. Çerezler, uzak tarayıcıda veri saklamayı ve böylece geri dönen kullanıcılar hakkında veri takibi yapmayı sağlar. Çerezleri, setcookie() ya da setrawcookie() işlevleri ile atayabilirsiniz. Çerezler, HTTP başlığının birer parçasıdır, bu yüzden tarayıcıya bir veri göndermeden önce setcookie() işlevini çağırmalısınız. Aynı kısıtlama header() işlevi için de vardır. çıktı tamponlama işlevlerini kullanarak betik çıktısını, herhangi bir başlık ya da çerez atayıp atamayacağınıza karar verene kadar geciktirebilirsiniz.

İstemci tarafından size gönderilen herhangi bir çerez, variables_order yönergesi "C" değerini içeriyorsa $_COOKIE süper küresel dizisine atanır. Eğer tek bir çereze, birden fazla değer atamak isterseniz, çerez ismine [] eklemeniz yeterli olacaktır.

register_globals yönergesinin değerine bağlı olarak, normal PHP değişkenleri çerezler tarafından oluşturulabilir. Ancak, çoğu zaman güvenlik dolayısıyla bu özellik kapalı olduğundan bunların kullanımı önerilmemektedir. PHP'nin önceki sürümlerinde track_vars yapılandırma değişkeni atanmışsa (PHP 4.0.3'ten beri daima etkindir), $HTTP_COOKIE_VARS da daima atanır.

Tarayıcı hataları dahil, daha fazla bilgi edinmek için setcookie() ve setrawcookie() işlevlerine bakınız.



Oturumlar

PHP'de oturum desteği belirli bir veriyi birbirini izleyen erişimler arasında korumak üzere bulunur. Bu size daha özelleştirilmiş uygulamalar yapma ve sitenizin cazibesini artırma imkanı verir. Bu konuyla ilgili bütün bilgi Oturum kılavuzu bölümündedir.



XForms ile çalışmak

» XForms geleneksel HTML formları üzerinde bir çeşitleme tanımlayarak, formların daha çeşitli platformlarda, tarayıcılarda ve hatta PDF belgeleri gibi geleneksel olmayan ortamlarda kullanılmasına imkan verir.

XForms'daki ilk önemli fark formun istemciye nasıl gönderildiğidir. » HTML Yazarları için XForms XForms yaratılışıyla ilgili ayrıntılı açıklama içerir, bu öğreticinin amacı için aşağıdaki basit örneğe bakınız:

Örnek 1 - Basit bir XForms arama formu

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Arama</h:title>
 <model>
  <submission action="http://ornek.dom/arama"
              method="post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Bul</label></input>
  <submit submission="s"><label>Gönder</label></submit>
 </h:p>
</h:body>
</h:html>

Yukarıdaki form (q isimli) bir metin kutusu ve gönder düğmesi gösterir. Gönder düğmesine tıklandığında, form action ile gösterilen sayfaya gönderilir.

Normal bir HTML formunda, veri application/x-www-form-urlencoded olarak gönderilir, XForms'da ise bu bilgi XML biçimli veri olarak gönderilir.

Eğer XForms ile çalışmayı seçerseniz muhtemelen bu verinin XML olmasını istiyorsunuz demektir, bu durumda, $HTTP_RAW_POST_DATA içine bakınız, orada tarayıcı tarafından üretilen XML belgesini bulacaksınız; bunu istediğiniz XSLT motoruna veya belge çözümleyiciye aktarabilirsiniz.

Eğer biçimlendirmeyle ilgilenmiyorsanız ve sadece verinizin geleneksel $_POST değişkenine yüklenmesini istiyorsanız, method özelliğini urlencoded-post olarak değiştirebilir ve istemci tarayacıya veriyi application/x-www-form-urlencoded olarak gönderme talimatı verebilirsiniz.

Örnek 2 - $_POST elde etmek için bir XFrom kullanımı

<h:html xmlns:h="http://www.w3.org/1999/xhtml"
        xmlns="http://www.w3.org/2002/xforms">
<h:head>
 <h:title>Ara</h:title>
 <model>
  <submission action="http://ornek.dom/arama"
              method="urlencoded-post" id="s"/>
 </model>
</h:head>
<h:body>
 <h:p>
  <input ref="q"><label>Bul</label></input>
  <submit submission="s"><label>Gönder</label></submit>
 </h:p>
</h:body>
</h:html>

Bilginize: Bu belge yazılırken birçok tarayıcı XForms'u destemiyordu. Eğer yukarıdaki örnek çalışmıyorsa tarayıcınızın sürümüne bakınız.



Karşıya dosya yükleme

İçindekiler


POST yöntemi ile karşıya dosya yükleme

Bu özellik metin ve ikil dosyaları yükleme imkanı verir. PHP'nin kimlik doğrulama ve dosya işletim işlevleri ile kimin karşıya dosya yükleme yetkisi olacağına ve yüklenen dosya ile ne yapılacağı hakkında tam denetime sahip olursunuz.

PHP, herhangi bir RFC 1867 uyumlu tarayıcıdan (Netscape Navigator 3 veya sonrası, yamalı bir Microsoft Internet Explorer 3 veya sonrası) gelen dosya yüklemelerini alabilir.

Bilginize: İlgili Yapılandırmalar
Ayrıca php.ini içindeki file_uploads, upload_max_filesize, upload_tmp_dir, post_max_size ve max_input_time yönergelerine bakınız.

PHP ayrıca Netscape Composer ve W3C'nin Amaya istemcileri tarafından kullanılan PUT yöntemiyle dosya yüklemeleri de destekler. Ayrıntılı bilgi için PUT Yöntemi Desteği'ne bakınız.

Örnek 1 - Karşıya Dosya Yükleme Formu

Bir dosya yükleme ekranı aşağıdaki gibi özel bir form ile oluşturulabilir:

<!-- Veri kodlama türü, enctype, aşağıdaki gibi belirtilmek ZORUNDADIR -->
<form enctype="multipart/form-data" action="__URL__" method="POST">
    <!-- MAX_FILE_SIZE dosya giriş alanından önce bulunmak zorundadır -->
    <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
    <!-- input elemanının adı $_FILES dizisinin içindeki ismi belirler -->
    Bu dosyayı gönder: <input name="kullanici_dosyasi" type="file" />
    <input type="submit" value="Dosyayı Gönder" />
</form>

Yukarıdaki örnekteki __URL__ bir PHP dosyası ile değiştirilmelidir.

MAX_FILE_SIZE gizli alanı (bayt cinsinden) dosya giriş alanından önce bulunmak zorundadır ve değeri PHP tarafından kabul edilecek azami dosya boyutudur. Bu form elemanı azami-büyüklüğü aşan bir dosyanın gönderilmesini baştan engelleyeceği için büyük dosyaları boşuna beklememek açısından kullanıcılara zaman kazandırır; bu nedenle her zaman kullanılmalıdır. Ancak unutmayın: Bu ayarı tarayıcı tarafında devre dışı bırakmak oldukça kolaydır, bu nedenle daha büyük boyuttaki dosyaların bu özellik tarafından engelleneceğine güvenmeyiniz. Bunula birlikte, PHP'nin azami-büyüklük ayarı devre dışı bırakılamaz.

Bilginize: Dosya yükleme formunuzun enctype="multipart/form-data" özniteliğine sahip olduğundan emin olun, aksi takdirde dosya yükleme çalışmaz.

$_FILES küreseli PHP 4.1.0'dan itibaren vardır (Daha eski sürümünü kullanıyorsanız yerine $HTTP_POST_FILES kullanın). Bu diziler bütün yüklenen dosya bilgilerini içerir.

Örnek formdaki $_FILES içeriği aşağıda verilmiştir. Yukarıdaki örneğe göre yüklenen dosya adı kullanici_dosyasi'dır. Bu herhangi bir isim olabilir.

$_FILES['kullanici_dosyasi']['name']

İstemci makinasındaki asıl dosya adıdır.

$_FILES['kullanici_dosyasi']['type']

Eğer tarayıcı bu bilgiyi sağladıysa dosyanın MIME türüdür. Örneğin, "image/gif". Bu MIME türü PHP tarafında denetlenmez; bu bakımdan bu değeri dikkate almayın.

$_FILES['kullanici_dosyasi']['size']

Yüklenen dosyanın bayt cinsinden boyutudur.

$_FILES['kullanici_dosyasi']['tmp_name']

Yüklenen dosyanın sunucuda saklandığı sıradaki geçici dosya adıdır.

$_FILES['kullanici_dosyasi']['error']

Bu dosya yüklemesiyle ilişkili hata kodudur. Bu eleman PHP 4.2.0'da eklenmiştir

php.ini içindeki upload_tmp_dir yönergesi ile başka bir yer belirtilmediyse, dosyalar, öntanımlı olarak sunucunun öntanımlı geçici dizininde saklanır. Sunucunun öntanımlı geçici dizini PHP'nin içinde çalıştığı ortamdaki TMPDIR ortam değişkenine başka bir değer vererek değiştirilebilir. Buna PHP betiği içinden putenv() işlevi ile değer verirseniz çalışmaz. Bu ortam değişkeni diğer işlemlerin yüklenen dosyalar üzerinde çalıştığından emin olmak için de kullanılabilir.

Örnek 2 - Dosya yüklemelerinin doğrulanması

Daha fazla bilgi için is_uploaded_file() ve move_uploaded_file() işlev girdilerine de bakınız. Aşağıdaki örnek bir formdan gelen dosya yükleme isteğini işleyecektir.

<?php
// 4.1.0'dan önceki PHP sürümlerinde, $_FILES yerine
// $HTTP_POST_FILES kullanılmalıdır.

$dizin '/var/siteler/uploads/';
$yuklenecek_dosya $dizin basename($_FILES['kulldosyasi']['name']);

echo 
'<pre>';
if (
move_uploaded_file($_FILES['kulldosyasi']['tmp_name'], $yuklenecek_dosya))
{
    echo 
"Dosya geçerli ve başarıyla yüklendi.\n";
} else {
    echo 
"Olası dosya yükleme saldırısı!\n";
}

echo 
'Diğer hata ayıklama bilgileri:';
print_r($_FILES);

print 
"</pre>";

?>

Yüklenen dosyayı alan PHP betiği yüklenen dosya ile ne yapılacağını belirlemek için gerekli mantığı uygulamalıdır. Örneğin, $_FILES['kullanici_dosyasi']['size'] değişkenini çok küçük ve büyük dosyaları engellemek için kullanabilirsiniz. $_FILES['kullanici_dosyasi']['type'] değişkenini belirli türlere uymayan dosyaları engellemek için kullanabilirsiniz, fakat bunu sadece birincil denetimlerde kullanın, çünkü bu değer tamamen istemci kontrolündedir ve PHP tarafında denetlenmez. PHP 4.2.0'dan itibaren $_FILES['kullanici_dosyasi']['error'] kullanabilir ve mantığınızı hata kodlarına göre planlayabilirsiniz. Her şartta dosyayı ya geçici dizinden silmeli ya da başka bir yere taşımalısınız.

Eğer formunuzda yüklemek için bir dosya seçilmediyse, PHP $_FILES['kullanici_dosyasi']['size'] değerini 0 ve $_FILES['kullanici_dosyasi']['tmp_name'] değerini boş döndürür.

İstemin sonunda dosya başka bir yere taşınmadı veya adı değiştirilmediyse geçici dizinden silinir.

Örnek 3 - Dosya dizisi yükleme

PHP HTML dizisi özelliğini dosyalar için de destekler.

<form action="" method="post" enctype="multipart/form-data">
<p>Resimler:
<input type="file" name="resimler[]" />
<input type="file" name="resimler[]" />
<input type="file" name="resimler[]" />
<input type="submit" value="Gönder" />
</p>
</form>
<?php
foreach ($_FILES["resimler"]["error"] as $anahtar => $hata) {
    if (
$hata == UPLOAD_ERR_OK) {
        
$tmp_name $_FILES["resimler"]["tmp_name"][$anahtar];
        
$name $_FILES["resimler"]["name"][$anahtar];
        
move_uploaded_file($tmp_name"data/$name");
    }
}
?>

Dosya yükleme ilerleme çubuğu apc.rfc1867'ye göre gerçeklenebilir.



Hata İletilerinin Açıklamaları

PHP 4.2.0'dan beri, PHP, dosya dizisi ile birlikte uygun bir hata kodu döndürür. Hata kodu PHP tarafından dosya yüklenirken oluşturulan dosya dizisinin error bölümünde bulunur. Diğer bir deyişle, hata $_FILES['kullanici_dosyasi']['error'] içinde olabilir.

UPLOAD_ERR_OK

Değeri: 0; Hata yoktur, dosya yükleme başarılıdır.

UPLOAD_ERR_INI_SIZE

Değeri: 1; Yüklenen dosya php.ini içindeki upload_max_filesize yönergesindeki değeri aşmaktadır.

UPLOAD_ERR_FORM_SIZE

Değeri: 2; Yüklenen dosya HTML form içinde belirtilen MAX_FILE_SIZE değerini aşmaktadır.

UPLOAD_ERR_PARTIAL

Değeri: 3; Dosya kısmen yüklenmiştir.

UPLOAD_ERR_NO_FILE

Değeri: 4; Dosya yüklenmemiştir.

UPLOAD_ERR_NO_TMP_DIR

Değeri: 6; Geçici dizin yoktur. PHP 4.3.10 ve PHP 5.0.3'de gelmiştir .

UPLOAD_ERR_CANT_WRITE

Değeri: 7; Dosya diske yazılamamıştır. PHP 5.1.0'da gelmiştir.

UPLOAD_ERR_EXTENSION

Değeri: 8; Dosya yükleme uzantı nedeniyle durmuştur. PHP 5.2.0'da gelmiştir.

Bilginize: Bunlar PHP 4.3.0'da PHP sabitleri haline gelmişlerdir.



Bilinen zorluklar

MAX_FILE_SIZE dosya boyutu php.ini dosyasında upload_max_filesize yönergesinde belirtilenden büyük olamaz. Öntanımlı değeri 2 Megabayt'tır.

Eğer bir bellek sınırı etkinleştirildiyse, daha büyük bir memory_limit gerekebilir. memory_limit değerinin yeterli olduğundan emin olun.

Eğer max_execution_time çok küçük verildiyse, betiğin çalışma süresi bu süreyi aşabilir. max_execution_time değerinin yeterli olduğundan emin olun.

Bilginize: max_execution_time sadece betiğin kendi çalışma süresini etkiler. Sistem çağrıları system(), sleep() işlevleri, veritabanı sorguları, dosya yükleme işlemi gibi betiğin işletimi dışında yaşanan etkinliklerde harcanan zaman betiğin azami çalışma süresinin belirlenmesinde hesaba katılmaz.

Uyarı

max_input_time betiğin girdi almak için harcayacağı azami süreyi saniye cinsinden belirler, buna dosya yüklemeleri de dahildir. Büyük veya çoklu dosyalar için veya yavaş bağlantılı kullanıcılar için 60 saniyelik öntanımlı değer aşılabilir.

Eğer post_max_size çok küçük verildiyse, büyük dosyalar yüklenemez. post_max_size değerinin yeterli olduğundan emin olun.

Üzerinde çalıştığınız dosyanın doğrulanmaması kullanıcıların diğer dizinlerde bulunan hassas bilgilere erişebileceği anlamına gelebilir.

CERN httpd istemciden aldığı content-type mime başlığındaki ilk boşluktan itibaren herşeyi soyar. Bu durumda CERN httpd dosya yükleme özelliğini desteklemez.

Bir çok dizin listeleme şeklinin olmasından dolayı özgün isimlerin (örneğin boşluk içerenler) uygun şekilde işlenebileceğinin garantisi yoktur.

Normal girdi alanlarıyla dosya yükleme alanları karıştırılıp aynı form değişkeninde (örneğin foo[] gibi) kullanılamaz.



Çoklu dosya yükleme

inputlar için farklı name değerleri kullanarak çoklu dosya gönderilebilir.

Ayrıca bilgilerin özdevinimli olarak dizilerde düzenlendiği bir eşzamanlı dosya gönderimi de mümkündür. Bunun için, HTML formunda birden fazla input için aynı dizi söz dizimini kullanmalısınız:

Örnek 1 - Çoklu dosya yükleme

<form action="dosya-yukle.php" method="post" enctype="multipart/form-data">
  Bu dosyaları gönder:<br />
  <input name="kullanici_dosyasi[]" type="file" /><br />
  <input name="kullanici_dosyasi[]" type="file" /><br />
  <input type="submit" value="Dosyaları gönder" />
</form>

Yukarıdaki form gönderildiğinde, $_FILES['kullanici_dosyasi'], $_FILES['kullanici_dosyasi']['name'] ve $_FILES['kullanici_dosyasi']['size'] dizileri ilklendirilir (4.1.0'dan önceki PHP sürümleri için $HTTP_POST_FILES). register_globals değeri "on" olduğunda, yüklenen dosyalar içinde küreseller ilklendirilir. Bunlardan her biri gönderilen dosyanın değerine uygun olarak sayısal indisli bir dizi olurlar.

Örneğin, gönderilen dosya isimleri /home/test/review.html ve /home/test/xwp.out olsun. Bu durumda, $_FILES['kullanici_dosyasi']['name'][0] review.html değerini içerir ve $_FILES['kullanici_dosyasi']['name'][1] xwp.out değerini içerir. Benzer şekilde, $_FILES['kullanici_dosyasi']['size'][0] review.html'in dosya boyutunu içerir ve böyle devam eder.

$_FILES['kullanici_dosyasi']['name'][0], $_FILES['kullanici_dosyasi']['tmp_name'][0], $_FILES['kullanici_dosyasi']['size'][0] ve $_FILES['kullanici_dosyasi']['type'][0]'a da ayrıca değerleri atanır.



PUT yöntemi desteği

PHP bazı istemciler tarafından sunucuda dosya saklamak için kullanılan HTTP PUT yöntemini de destekler. PUT istemleri POST istemleri ile dosya yüklemesinden daha basittir ve şu şekildedir:

PUT /dizin_adi/dosyaismi.html HTTP/1.1

Bu normalde uzak istemci /dizin_adi/dosyaismi.html içeriğini site ağacında saklamak istiyor anlamına gelir. Bu Apache veya PHP'nin herkese site ağacındaki herhangi bir dosya üzerine yazma yetkisi verme anlamına geleceği için iyi bir fikir değildir. Bu nedenle böyle bir istem geldiğinde öncelikle HTTP sunucunuza bu istemin belirli bir PHP betiği tarafından karşılanacağını söylemelisiniz. Apache'de bunu Script yönergesi ile yapabilirsiniz. Bu Apache yapılandırma dosyasının herhangi bir yerine konulabilir. Genellikle <Directory> bloğu içine veya <VirtualHost> bloğu içine konulur. Bu, aşağıdaki gibi bir satır olabilir:

Script PUT /put.php

Bu Apache'ye URI'ler için bütün PUT istemlerinin put.php betiğine gönderilmesini söyler. Tabii ki bu durumda .php uzantısının ve PHP'nin etkin olduğu varsayılmaktadır. Bu betiğe gelen bütün PUT istemleri için hedef kaynağı betiğin kendisi olmalıdır.

PHP ile put.php içinde şunu yapabilirsiniz. Bu yüklenen dosyanın içeriğini sunucudaki myputfile.ext dosyasına kopyalar. Bu dosya kopyalamayı gerçekleştirmeden önce bazı denetimlerin yanında kimlik doğrulaması da yapmak isteyebilirsiniz.

Örnek 1 - HTTP PUT dosyalarının kaydedilmesi

<?php
/* PUT verisi stdin akımına gelir */
$putdata fopen("php://input""r");

/* Yazmak için bir dosya aç */
$fp fopen("put_dosyam.ekl""w");

/* Bir kerede 1 KB veri oku ve dosyaya yaz  */
while ($veri fread($putdata1024))
  
fwrite($fp$veri);

/* Akımları kapat */
fclose($fp);
fclose($putdata);
?>




Uzak dosyaların kullanımı

php.ini içinde allow_url_fopen seçeneği etkin olduğu sürece, dosya adını değiştirge olarak alan birçok işlevde HTTP ve FTP URL'lerini kullanabilirsiniz. Ek olarak, URL'ler include(), include_once(), require() ve require_once() deyimleri ile kullanılabilir (PHP 5.2.0'dan beri bunun için allow_url_include seçeneğini etkinleştirmek gerekmektedir). PHP tarafından desteklenen protokoller hakkında daha fazla bilgi için bakınız: Desteklenen Protokollerin ve Sarmalayıcıların Listesi

Bilginize: PHP 4.0.3 ve öncesinde, URL sarmalayıcıları kullanmak için, --enable-url-fopen-wrapper PHP yapılandırma seçeneğini kullanmanız gerekirdi.

Bilginize: PHP 4.3'den önceki PHP'nin Windows sürümleri aşağıdaki işlevler için uzak dosya erişimini desteklemezdi: include(), include_once(), require(), require_once(), ve GD ve Resim İşlevleri eklentisi içindeki imagecreatefromXXX işlevleri.

Örneğin, bunu uzak web sunucusunda bir dosya açmak, istediğiniz veri için çıktıyı çözümlemek ve bu veriyi bir veritabanı sorgusunda kullanmak veya sadece çıktılamak için kullanabilirsiniz.

Örnek 1 - Uzak sayfanın başlığını elde etmek

<?php
$dosya 
fopen ("http://www.ornek_bir_site.com/""r");
if (!
$dosya) {
    echo 
"<p>Uzak dosya açılamıyor.\n";
    exit;
}
while (!
feof ($dosya)) {
    
$satir fgets ($dosya1024);
    
/* Bu sadece başlığın title etiketleri aynı satır üzerindeyse çalışır */
    
if (preg_match ("@\<title\>(.*)\</title\>@i"$satir$cikti)) {
        
$baslik $cikti[1];
        break;
    }
}
fclose($dosya);
?>

Aynı zamanda bir FTP sunucusundaki dosyalara da yazabilirsiniz (doğru erişim haklarına sahip bir kullanıcı olarak bağlandığınızda). Bu yöntemi kullanarak sadece yeni dosyalar oluşturabilirsiniz; eğer varolan bir dosyanın üzerine yazmayı denerseniz, fopen() çağrısı başarısız olur.

'anonymous' haricinde bir kullanıcı olarak bağlanmak için, 'ftp://kullanici:parola@ftp.ornek_bir_site.com/ornek/bir/dosya' örneğindeki gibi kullanıcı adı (ve parola) URL içinde belirtilmelidir. (Basit kimlik doğrulaması gerektiren HTTP dosya erişimleri içinde aynı söz dizimini kullanabilirsiniz.)

Örnek 2 - Veriyi uzak sunucuda saklamak

<?php
$dosya 
fopen ("ftp://ftp.ornek_bir_site.com/gelen/yazilan_dosya""w");
if (!
$dosya) {
    echo 
"<p>Uzak dosya yazmak için açılamıyor.\n";
    exit;
}
/* Veriyi burada yaz. */
fwrite ($dosya$_SERVER['HTTP_USER_AGENT'] . "\n");
fclose ($dosya);
?>

Bilginize: Yukarıdaki örnek, bu tekniğin uzak günlük dosyası yazmak için kullanılabileceği fikrini vermiş olabilir. Ne yazık ki bu çalışmaz çünkü eğer uzak dosya zaten varsa fopen() çağrısı başarısız olur. Böyle bir dağıtık günlüklerle için syslog() işlevine göz atmalısınız.



Bağlantı yönetimi

PHP içinde yerleşik olarak bağlantı durumu saklanır. Olası 3 durum vardır:

  • 0 - NORMAL
  • 1 - ABORTED
  • 2 - TIMEOUT

PHP betiği normal olarak çalıştığında, NORMAL durumu etkindir. Eğer uzak istemci bağlantıyı keserse ABORTED durumu etkin olur. Uzak istemci bağlantı kesilmesi genellikle kullanıcının DUR düğmesine basmasından kaynaklanır. Eğer PHP tarafından bir zaman sınırı (set_time_limit() işlevine bakınız) tetiklendiyse, TIMEOUT durumu etkin olur.

Kullanıcının bağlantı kesmesiyle betiğinizin iptal edilip edilmeyeceğine karar verebilirsiniz. Bazen uzak tarayıcı çıktıyı almasa da betiğinizin işini bitirinceye kadar çalışmasını gerektiren durumlar olabilir. Öntanımlı davranış uzak istemci bağlantıyı kestiğinde betik çalışmasının iptal edilmesidir. Bu davranış şekli ignore_user_abort php.ini yönergesi veya ona ilişkin php_value ignore_user_abort Apache httpd.conf yapılandırma yönergesi veya ignore_user_abort() işlevi ile belirlenebilir. Eğer PHP'ye kullanıcı iptallerini gözardı etmesini söylemezseniz ve kullanıcı iptal ederse betiğiniz sonlanır. Tek istisnası register_shutdown_function() işleviyle kapatma işlevinin kayıtlanmasıdır. Bir kapatma işlevi ile, uzak kullanıcı DUR düğmesine bastığında, betiğinizin sonraki çıktılama denemesinde PHP bağlantının iptal edildiğini tespit eder ve kapatma işlevi çağrılır. Bu kapatma işlevi ayrıca normal olarak sonlandırmada betiğinizin sonunda çağrılacaktır, istemci tarafından bağlantı iptalinde farklı birşey yapmak için connection_aborted() işlevini kullanabilirsiniz. Eğer bağlantı iptal edilirse bu işlev TRUE döndürecektir.

Betiğinizi yerleşik betik zamanlayıcı ile de sonlandırabilirsiniz. Öntanımlı zaman aşımı 30 saniyedir. Bu max_execution_time php.ini yönergesi veya ilişkili php_value max_execution_time Apache httpd.conf yapılandırma yönergesi veya set_time_limit() işlevi ile değiştirilebilir. Zaman aşımında betik iptal edilir ve yukarıdaki istemci bağlantı kesilmesindeki gibi, eğer kayıtlı bir kapatma işlevi varsa çağrılır. Bu kapatma işlevi içinde connection_status() işlevi ile kapatma işlevinin zaman aşımı nedeniyle mi çağrıldığını denetleyebilirsiniz. Kapatma işlevinin çağrılmasına zaman aşımı neden olduysa bu işlev 2 döndürür.

ABORTED ve TIMEOUT durumlarının aynı zamanda etkin olabileceğine dikkat edilmesi gerekir. Eğer PHP'ye kullanıcı iptallerini gözardı etmesini söylediyseniz bu mümkündür. PHP kullanıcının bağlantıyı koparmış olabileceğini bilir, fakat betik çalışmaya devam eder. Eğer zaman sınırına ulaşırsa çalışması iptal edilir ve kapatma işleviniz varsa çağrılır. Bu noktada connection_status() işlevinin 3 döndürdüğünü göreceksiniz.



Kalıcı Bağlantılı Veritabanı Bağlantıları

Kalıcı bağlantılar betiğinizin çalışması bittiğinde kapanmayan bağlantılardır. Bir kalıcı bağlantı istendiğinde PHP evvelce açılmış eşdeğer bir kalıcı bağlantı var mı diye bakar ve varsa onu kullanır. Yoksa yeni bir bağlantı oluşturur. Bir 'eşdeğer' bağlantı, aynı konağa (uygulanabildiği takdirde) aynı kullanıcı adı ve parola kullanılarak açılmış bağlantıdır.

HTTP sunucuları hakkında tam bilgi sahibi olmayan kişiler ne yaptıklarını bilmeden yükü yanlış kalıcı bağlantılara dağıtabilir ve bu yanlış bağlantılarla çalışabilirler. Özellikle, size aynı bağlantı üzerinde 'kullanıcı oturumları' açma olanağını, verimli hareket işlemleri kurulmasını ve başka birçok şeyi bir bütün halinde sağlamazlar. Aslında, son derece net olarak, kalıcı bağlantılar, kalıcı olmayan bağlantılarla mümkün olmayan işlevselliği size sağlayamazlar.

Neden?

Bu HTTP sunucusunun işi nasıl yaptığı ile ilgilidir. PHP'nin HTML sayfalarını üretmek için HTTP sunucusunu üç şekilde kullanabilir.

İlk yöntem, PHP'yi bir CGI "sarmalayıcı" olarak kullanmaktır. Bu yolla, HTTP sunucusundan her PHP sayfası isteğinde PHP yorumlayıcısının yeni bir örneği oluşturulup yok edilir. Yorumlayıcı her istekten sonra yok edildiğinden kazanılan özkaynaklar da (bir SQL veritabanı bağlantısı gibi) kaybedilir. Bu durumda, kalıcı bağlantılar kullanarak da hiç bir şey kazanamazsınız; çünkü özkaynaklar kalıcı olmayacaktır.

İkinci ve en çok kullanılan yöntem, PHP'yi çok süreçli bir sunucuda bir modül olarak çalıştırmaktır. Bu olanak şimdilik sadece Apache HTTP sunucusu ile mümkündür. Çok süreçli bir sunucu, işleri sayfaları sunmak olan bir çok (alt) süreci denetimi altında tutan bir ana sürece sahiptir. Bir istemciden bir istek geldiğinde, başka istemcilere hizmet sunmayan alt süreçlerden birini bu isteğe tahsis eder. Eğer aynı istemci ikinci bir istek yaparsa bu isteğe başka bir alt süreç yanıt verebilir. Kalıcı bir bağlantı açıldığında SQL hizmeti isteği yapılan her sayfa isteği SQL sunucuya tahsis edilen aynı bağlantıdan sunulur.

Son yöntem, PHP'yi çok evreli bir sunucuda bir eklenti olarak kullanmaktır. PHP4 şimdilik, PHP'nin bir eklenti olarak kullanımına izin veren Netscape FastTrack (iPlanet), Microsoft's Internet Information Server (IIS) ve O'Reilly's WebSite Pro gibi çok evreli HTTP sunucularında ISAPI, WSAPI ve (Windows üzerinde) NSAPI için destek vermektedir. Davranış esas olarak ikinci yöntemde açıklanan çok süreçli yöntemle aynıdır.

Kalıcı bağlantılar ek bir işlevselliğe sahip değilseler bunlar neden tercih ediliyorlar?

Yanıtı oldukça basittir: Verimlilik. SQL sunucunuza bağlantı açmak çok masraflıysa kalıcı bağlantılar kurmak daha iyidir. Bu bedel gerçekte birçok sebebe bağlı olabileceği gibi olmayabilir de. Bu, veritabanının, HTTP sunucunun bulunduğu makinede olup olmamasından SQL sunucusunun makineye ne kadar yük bindirdiğine kadar geniş bir yelpazede değerlendirilebilir. Son değerlendirmede, eğer bu bedel yüksekse kalıcı bağlantıların büyük ölçüde yardımı olacaktır. SQL sunucuya yapılan her bağlantı isteğinde alt süreç sadece o sayfayı işleyeceği yerde, kalıcı bağlantı durumunda her alt sürecin ömrü boyunca bir bağlantı krmasına olanak tanınır. Yani, bir kalıcı bağlantı açmış her alt sürecin kendine ait bir kalıcı bağlantısı vardır. Örneğin, SQl sunucunuza kalıcı bağlantı açan betiğiniz 20 ayrı alt süreç çalıştırıyorsa alt süreç başına bir tane olmak 20 ayrı bağlantı var demektir.

Ancak şuna dikkat edin, bağlantı sayısı sınırlı bir veritabanını bu sınırın üstünde kalıcı bağlantılarla kullanıyorsanız bunun bazı götürüleri olabilir. Eğer veritabanınız aynı anda 16 bağlantılık bir sınıra sahipse ve çok meşgul bir sunucu oturumunda 17 alt evre bağlantı açmaya çalışıyorsa biri bunu başaramayacaktır. Eğer betiğinizde (sonsuz döngü gibi durumlarda) bağlantıların kapatılmasına izin vermeyen hatalar varsa, veritabanı sadece 16 bağlantı ile hızla batağa saplanacaktır. Terkedilmiş ve boştaki bağlantıların devreye sokulması hakkında bilgi edinmek için veritabanınızın belgelerine bakınız.

Uyarı

Kalıcı bağlantıları kullanırken hesaba katmanız gereken bir çok yetersizlik vardır. Bunlardan biri, bir kalıcı bağlantı üzerinden tablo kilitlemesi yapıyorsanız ve betiğiniz herhangi bir şekilde kilidi serbest bırakamazsa aynı bağlantıyı kullanan sonraki betikler sonsuza kadar engellenebilir ve bunun sonucu olarak HTTP sunucunuzu veya veritabanı sunucunuzu yeniden başlatmak zorunda kalabilirsiniz. Bir diğer durumda, hareketleri (transaction) kullanırken, bir hareket bloğu tamamlanmadan betiğiniz çalışmasını bitirirse aynı bağlantıyı kullanan sonraki betiklerin işleri başlarından aşacaktır. Her durumda, tablolarınızın kilitlerini açmak ve hareketleri başa sarmak için register_shutdown_function() işlevini kullanarak bir temizlik işlevi tanımlayabilirsiniz. Daha da iyisi, tablo kilitleri veya hareket blokları kullanan betiklerde kalıcı bağlantıları kullanmayarak bu sorunlardan tamamiyle kurtulabilirsiniz.

Özetle, kalıcı bağlantılar normal bağlantılarla bire bir eşleşecek şekilde tasarlanmışlardır. Yani, betiğinizin davranışını değiştirmeden kalıcı bağlantılar yerine her zaman kalıcı olmayan bağlantılar kullanabilirsiniz. Bu, muhtemelen betiğinizin verimliliğini etkileyecektir ama davranışında bir değişikliğe yol açmayacaktır!

Ayrıca bakınız: fbsql_pconnect(), ibase_pconnect(), ifx_pconnect(), ingres_pconnect(), msql_pconnect(), mssql_pconnect(), mysql_pconnect(), ociplogon(), odbc_pconnect(), oci_pconnect(), pfsockopen(), pg_pconnect() ve sybase_pconnect().



Güvenli Kip

İçindekiler

PHP güvenli kipi, paylaşımlı sunucu güvenliği sorunlarını çözümlemeye çalışır. Bu tür sorunları PHP seviyesinde çözümlemeye çalışmak mimari olarak doğru değildir, fakat HTTP sunucusu ve işletim sistemi seviyesindeki çözümler pek gerçekçi olmadığından çoğu kişi, özellikle de ISP'ler güvenli kipi halen kullanmaktadırlar.

Uyarı

Güvenli Kipin kullanımı PHP 5.3.0'dan beri önerilmemekte olup PHP 6.0.0'da tamamen kaldırılmıştır.


Güvenlik ve Güvenli Kip

Güvenlik ve Güvenli Kip Yapılandırma Yönergeleri
İsim Öntanımlı Değişklik Yeri Sürüm Bilgisi
safe_mode "0" PHP_INI_SYSTEM PHP 6.0.0'da kaldırılmıştır.
safe_mode_gid "0" PHP_INI_SYSTEM PHP 4.1.0'dan beri kullanılabilmektedir. PHP 6.0.0'da kaldırılmıştır.
safe_mode_include_dir NULL PHP_INI_SYSTEM PHP 4.1.0'dan beri kullanılabilmektedir. PHP 6.0.0'da kaldırılmıştır.
safe_mode_exec_dir "" PHP_INI_SYSTEM PHP 6.0.0'da kaldırılmıştır.
safe_mode_allowed_env_vars "PHP_" PHP_INI_SYSTEM PHP 6.0.0'da kaldırılmıştır.
safe_mode_protected_env_vars "LD_LIBRARY_PATH" PHP_INI_SYSTEM PHP 6.0.0'da kaldırılmıştır.
open_basedir NULL PHP_INI_ALL PHP < 5.3.0'da PHP_INI_SYSTEM
disable_functions "" Sadece php.ini PHP 4.0.1'den beri kullanılabilmektedir.
disable_classes "" Sadece php.ini HP 4.3.2'den beri kullanılabilmektedir.

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

safe_mode boolean

PHP'nin güvenli kipinin etkin olup olmayacağı. PHP --enable-safe-mode seçeneği ile derlenmişse öntanımlı olarak On (etkin), aksi takdirde Off'tur (etkisiz).

Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

safe_mode_gid boolean

Dosya erişiminde UID (FALSE) veya GID (TRUE) denetimi yapılıp yapılmayacağı. Öntanımlı olarak güvenli kipte, dosyalar açılırken bir kullanıcı kimliği (UID) karşılaştırması yapılır. Bunu grup kimliğini (GID) denetleterek esnetmek isterseniz safe_mode_gid yönergesine On değerini atayabilirisiniz.

safe_mode_include_dir string

UID/GID denetimleri bu dizinde ve alt dizinlerinde es geçilir. (Dizinin ya tam yolu belirtilmeli ya da include_path yönergesinde de belirtilmelidir).

PHP 4.2.0'dan beri, bu yönergede include_path yönergesinde olduğu gibi, tek bir dizin belirtmek yerine aralarına ikinokta imi (Windows'da noktalı virgül imi) koymak suretiyle birden fazla dizin belirtilebilmektedir. Belirtilen dizinin sonuna bir bölü çizgisi konmadıkça dizin ismi bir önek olarak değerlerdirilir. Örneğin, "safe_mode_include_dir = /dir/incl" ile (varsa) hem "/dir/include" hem de "/dir/incls" dizini belirtilmiş olur. "safe_mode_include_dir = /dir/incl/" durumunda ise sadece /dir/incl dizini belirtilmiş olur. Bu yönergede boş değer belirtilirse PHP 4.2.3 ve PHP 4.3.3'ten itibaren farklı UID/GID'e sahip hiçbir dosya dahil edilmez. Önceki sürümlerde tüm dosyalar dahil edilirdi.
safe_mode_exec_dir string

PHP güvenli kipte kullanılıyorsa system() ve sistem programlarını çalıştırılan diğer işlevlerin bu dizinde olmayan programları çalıştırmasına izin verilmez. Windows dahil tüm ortamlarda dizin ayracı olarak / kullanmanız gerekir.

safe_mode_allowed_env_vars string

Bazı ortam değişkenlerinin kullanımı güvenlik açığı riski içerir. Bu yönergede virgül ayraçlı bir liste olarak önekler belirtilir. Güvenli kipte, kullanıcıların sadece bu yönergede önekleri belirtilen ortam değişkenlerini değiştirmelerine izin verilir. Kullanıcılar öntanımlı olarak sadece PHP_ ile başlayan ortam değişkenlerinde değişiklik yapabilirler (PHP_FOO=BAR gibi).

Bilginize: Bu yönergede boş değer belirtilmişse kullanıcıların tüm ortam değişkenlerinde değişiklik yapmalarına izin verilir!

safe_mode_protected_env_vars string

Bu yönergede, son kullanıcının putenv() kullanarak değiştiremeyeceği ortam değişkenleri virgül ayraçlı bir liste olarak belirtilir. Bu değişkenlerin önekleri safe_mode_allowed_env_vars yönergesinde belirtilmiş olsalar dahi, değiştirilmelerine izin verilmez.

Ayrıca bakınız: open_basedir, disable_functions, disable_classes, register_globals, display_errors ve log_errors.

safe_mode yönergesinin değeri On olduğu takdirde, PHP, betik sahibinin üzerinde çalışılan dosya veya dizin sahibiyle eşleşip eşleşmediğini denetler. Örneğin,

<?php
 readfile
('/etc/passwd');
?>

kodunu içeren betik.php betiği,

-rw-rw-r--    1 rasmus   rasmus       33 Jul  1 19:20 betik.php
-rw-r--r--    1 root     root       1116 May 26 18:01 /etc/passwd

ortamında çalıştırılırsa, güvenli kip etkin olduğu takdirde işlem şöyle bir hatayla sonuçlanır:

Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /docroot/betik.php on line 2

Bununla birlikte, kesin UID sınamasının uygun olmadığı, esnek GID sınamasının yeterli olduğu sistemler olabilir. Bu durum, safe_mode_gid yönergesi ile sağlanabilir. Bu yönergeye On değeri vererek esnek GID sınaması, Off değeri (öntanımlıdır) vererek UID sınaması yaptırmak mümkündür.

safe_mode yönergesini etkin kılmak yerine, tüm dosya işlemlerini belli bir dizin altındaki dosyalarla sınırlamak için open_basedir yönergesini kullanabilirsiniz. Örneğin, bunu Apache httpd.conf dosyasında şöyle yapabilirsiniz:

<Directory /docroot>
  php_admin_value open_basedir /docroot
</Directory>

Önceki örnekteki betik.php dosyanızı bu open_basedir ayarı ile kullanırsanız şöyle bir sonuç alırsınız:

Warning: open_basedir restriction in effect. File is in wrong directory in
/docroot/betik.php on line 2

Ayrıca, işlevleri tek tek de iptal etmek mümkündür. Ancak, disable_functions yönergesi php.ini dosyası dışında kullanılamaz. Yani, bazı işlevlere erişimi, httpd.conf dosyanızda sanal konak veya dizin temelinde yasaklayamazsınız. php.ini dosyanızda şöyle bir satır varsa:

disable_functions = readfile,system

betik.php dosyanızdan şöyle bir sonuç alırsınız:

Warning: readfile() has been disabled for security reasons in
/docroot/betik.php on line 2

Uyarı

Şüphesiz, bu PHP kısıtlamaları çalıştırılabilir dosyalar için geçerli değildir.



Güvenli kipte yasaklı/kısıtlı işlevler

Güvenli kip ile sınırlanmış işlev listesi hala yanlış veya eksik olabilir.

Güvenli kiple sınırlı işlevler
İşlev Kısıtlama
dbmopen() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
dbase_open() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
filepro() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
filepro_rowcount() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
filepro_retrieve() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
ifx_* sql_safe_mode kısıtlamaları, (!= safe mode)
ingres_* sql_safe_mode kısıtlamaları, (!= safe mode)
mysql_* sql_safe_mode kısıtlamaları, (!= safe mode)
pg_lo_import() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
posix_mkfifo() Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
putenv() safe_mode_protected_env_vars ve safe_mode_allowed_env_vars yönergelerine tabidir. Ayrıca, putenv() işlevine de bakınız.
move_uploaded_file() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
chdir() Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
dl() Bu işlev, PHP güvenli kipte çalışırken iptal edilir.
ter tırnak işleci Bu işlev, PHP güvenli kipte çalışırken iptal edilir.
shell_exec() (ters tırnakların işlevsel eşdeğeri) Bu işlev, PHP güvenli kipte çalışırken iptal edilir.
exec() Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır.
system() Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır.
passthru() Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır.
popen() Sadece safe_mode_exec_dir altındaki çalıştırılabilirleri bu işlevle çalıştırabilirsiniz. Uygulamaya bağlı sebeplerle çalıştırılabilirlerin dosya yolunda .. bileşenlerine izin verilmez. Bu işlevin değiştirgeleri üzerinde escapeshellcmd()işlevi çalıştırılır.
fopen() Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
mkdir() Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
rmdir() Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
rename() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
unlink() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
copy() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (kaynak ve hedef üzerinde)
chgrp() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
chown() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
chmod() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Ek olarak, SUID, SGID ve yapışkan bitleri tanımlayamazsınız.
touch() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır.
symlink() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece hedef sınanır)
link() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece hedef sınanır)
apache_request_headers() Güvenli kipte, authorization ile başlayan başlıklar (harf büyüklüğüne duyarsız) döndürülmeyecektir.
header() Güvenli kipte, betiğin kullanıcı kimliği WWW-Authenticate başlığının realm kısmına eklenir (HTTP Kimlik doğrulamasında bu başlık etkinse).
PHP_AUTH değişkenleri Güvenli kipte, PHP_AUTH_USER, PHP_AUTH_PW ve AUTH_TYPE değişkenleri $_SERVER içinde bulunmaz. Yine de, bundan bağımsız olarak, USER yerine REMOTE_USER kullanabilirsiniz (bilgi: sadece PHP 4.3.0'dan beri etkindir).
highlight_file(), show_source() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece PHP 4.2.1'den beri etkindir)
parse_ini_file() Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (bilgi: sadece PHP 4.2.1'den beri etkindir)
set_time_limit() safe_mode etkinse etkisizdir.
max_execution_time safe_mode etkinse etkisizdir.
mail() Güvenli kipte, 5. değiştirge iptal edilir. (bilgi: sadece PHP 4.2.3'ten beri etkindir)
session_start() session.save_handler yönergesinde files öntanımlı ise betiğin sahibi session.save_path dizininin sahibi ile aynı olmak zorundadır.
Tüm dosya sistemi ve akım işlevleri. Üzerinde işlem yapılan dosya ve dizinlerin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. Betiğin çalıştığı dizinin sahibinin betiği çalıştıran kullanıcı ile aynı olup olmadığı sınanır. (safe_mode_include_dir php.ini yönergesine bakınız.)




PHP'nin komut satırından kullanımı

PHP 4.3.0 sürümünden beri, Komut Satırı Arayüzü anlamına gelen CLI isimli yeni bir SAPI türünü (Sunucu Uygulaması Yazılım Arayüzü) desteklemektedir. Adından da anlaşıldığı gibi, bu SAPI türünün ana odağı PHP ile kabuk (veya masaüstü) uygulamaları geliştirmektir. CLI SAPI'nin bu bölümde anlatılan diğer SAPI'lerden az bir farkı vardır. Söylemek gerekir ki, her ne kadar CLI ve CGI birçok aynı davranışı paylaşsa da farklı SAPI'lerdir.

CLI SAPI ilk kez PHP 4.2.0 ile dağıtıldı, fakat hala deneyseldi ve ./configure çalıştırılırken açıkça --enable-cli ile etkinleştirilmesi gerekiyordu. PHP 4.3.0'dan beri CLI SAPI deneysel değil ve --enable-cli öntanımlı olarak bulunmaktadır. Etkinliğini kaldırmak için --disable-cli kullanabilirsiniz.

PHP 4.3.0'dan beri, CLI/CGI çalıştırılabilirinin adı, yeri ve mevcudiyeti PHP'nin sisteminize nasıl kurulduğuna bağlı olarak değişecektir. make çalıştırıldığında öntanımlı olarak, hem CGI hem de CLI derlenir ve PHP kaynak ağacında sapi/cgi/php-cgi ve sapi/cli/php dizinlerine ayrı yerleştirilirler. Her ikisinin de adının php olduğunu farkedeceksiniz. make install çalıştırıldığında ne yaşanacağı yapılandırma satırınıza bağlıdır. Eğer yapılandırma sırasında apxs gibi bir SAPI modülü seçildiyse, veya --disable-cgi seçeneği kullanıldıysa, make install sırasında CLI {PREFIX}/bin/php dizinine kopyalanır, aksi takdirde buraya CGI yerleştirilir. Örneğin, --with--apxs yapılandırma satırınızda ise make install sırasında CLI {PREFIX}/bin/php dizinine kopyalanır. Eğer CGI kurulumunu etkisiz kılmak isterseniz, make install'dan sonra make install-cli kullanın. Ya da yapılandırma satırınızda --disable-cgi belirtebilirsiniz.

Bilginize: --enable-cli ve --enable-cgi öntanımlı olarak etkinleştirildiği için, yapılandırma satırınızda sadece --enable-cli olması CLI'nin make install sırasında {PREFIX}/bin/php dizinine kopyalanacağı anlamına gelmez.

PHP 4.2.0 ve PHP 4.2.3 arasındaki Windows paketlerinde CLI php-cli.exe olarak, CGI da aynı dizinde php.exe olarak dağıtılmıştır. PHP 4.3.0'la başlayarak Windows paketlerinde CLI, cli adlı farklı bir dizinde php.exe olarak dağıtılmıştır, böylece cli/php.exe olmuştur. PHP 5'le başlayarak, CLI ana dizinde php.exe adıyla dağıtılmıştır. CGI sürümü php-cgi.exe olarak dağıtılmaktadır.

PHP 5'den beri, php-win.exe isimli yeni bir dosya dağıtılmaktadır. Bu CLI sürümü ile aynıdır, fakat php-win herhangi çıktı vermez, bu nedenle konsol desteklemez (ekranda "dos penceresi" görünmez). Bu yaklaşım php-gtk ile benzerlik gösterir. --enable-cli-win32 ile yapılandırılması gerekir.

Bilginize: Bende hangi SAPI var?
Kabuktan, php -v yazımı php CGI mı CLI mi olduğunu söyler. Ayrıca php_sapi_name() işlevine ve PHP_SAPI sabitine bakınız.

Bilginize: PHP 4.3.2'de bir Unix kılavuz (man) sayfası eklendi. Bunu kabuk ortamınıza man php yazarak görüntüleyebilirsiniz.

CLI SAPI'nin diğer SAPI'lerden dikkate değer farklılıkları:

  • CGI SAPI'den farklı olarak, çıktıya hiçbir başlık yazılmaz.

    CGI SAPI HTTP başlıklarını önlemek için bir yol sunsa da, CLI SAPI'de onları etkinleştirecek eşdeğer bir seçenek yoktur.

    CLI öntanımlı olarak sessiz kipte başlar, -q ve --no-header seçenekleri eski CGI betiklerinin kullanımına uyumluluk için tutulmaktadır.

    Çalışma dizinini betiğinki ile aynı yapmaz. (-C ve --no-chdir seçenekleri uyumluluk için tutulmaktadır)

    Düz metin hata iletileri (HTML biçimlendirmesi yok).

  • Kabuk ortamında birşey ifade etmedikleri için CLI SAPI tarafından geçersiz kılınan bazı php.ini yönergeleri vardır:

    Geçersiz kılınan php.ini yönergeleri
    Yönerge CLI SAPI öntanımlı değeri Yorum
    html_errors FALSE Hata iletileri HTML etiketleri ile karıştırılmışken, kabukta bunları okumak oldukça zor olacağı için bu yönerge öntanımlı olarak FALSE değerlidir.
    implicit_flush TRUE print(), echo() ve arkadaşlarından gelen çıktıların önbellekte tutulmadan hemen çıktıya yazılması istenir. Eğer standart çıktıyı ertelemek veya işlemek isterseniz çıktı önbellekleme kullanabilirsiniz.
    max_execution_time 0 (sınırsız) Kabuk ortamlarında PHP kullanımının sonsuz olasılığı olduğu için, azami işletim süresi sınırsız olarak belirtilmiştir. HTML üretmek için yazılan uygulamalar genellikle çok çabuk işletilse de, kabuk uygulamaları daha fazla işletim zamanı harcama eğilimindedirler.
    register_argc_argv TRUE

    Bu ayar TRUE olduğu için CLI SAPIdeki argc (uygulamaya aktarılan değiştirge sayısı) ve argv (gerçek değiştirgeler dizisi) değerlerine her zaman erişebilirsiniz.

    PHP 4.3.0'dan beri, CLI SAPI kullanırken $argc ve $argv PHP değişkenleri uygun değerlerle doldurulur ve kaydedilir. Bu sürümden önce, bu değişkenlerin yaratılışı register_globals PHP yönergesi değerinin on olmasını gerektiren CGI ve modül sürümlerindeki gibi davranırdı. Sürüme ve register_globals ayarına bakmaksızın $_SERVER veya $HTTP_SERVER_VARS üzerinden kullanabilirsiniz. Örnek: $_SERVER['argv']

    Bilginize: Bu yönergeler php.ini yapılandırma dosyasından başka bir değerle ilklendirilemezler. Bu bir sınırlamadır çünkü bu öntanımlı değerler bütün yapılandırma dosyaları çözümlendikten sonra uygulanırlar. Fakat, çalışma anında bunların değerleri değişirilebilir (bu yönergeler için birşey ifade etmez, örn. register_argc_argv).

  • Kabuk ortamında kolay çalışmak için aşağıdaki sabitler tanımlanmıştır:

    CLI'ye özel Sabitler
    Sabit Açıklama
    STDIN

    stdin'e açılmış bir akımdır. Aşağıdaki örnek akımı açıp geleni kaydeder:

    <?php

    $stdin 
    fopen('php://stdin''r');

    ?>

    Eğer stdin'den tek satır okumak istenirse şu kullanılabilir:

    <?php
    $line 
    trim(fgets(STDIN));     //  STDIN'den bir satır okur
    fscanf(STDIN"%d\n"$number); // STDIN'den sayı okur
    ?>

    STDOUT

    stdout'a açılmış bir akımdır. Aşağıdaki örnek akımı açıp gideni kaydeder:

    <?php

    $stdout 
    fopen('php://stdout''w');

    ?>

    STDERR

    stderr'e açılmış bir akımdır. Aşağıdaki örnek akımı açıp çıktıyı kaydeder:

    <?php

    $stderr 
    fopen('php://stderr''w');

    ?>

    Yukarıda verilene göre, örneğin stderr için bir akım açmanız gerekmez, ancak akım kaynağı yerine sabit kullanabilirsiniz:

    php -r 'fwrite(STDERR, "stderr\n");'

    Betik sonlandığında PHP özdevinimli olarak akımları kapattığı için sizin ayrıca kapatmanız gerekmez.

    Bilginize: Bu sabitler, PHP betiğinin stdin'den okunması halinde mevcut değildir.

  • CLI SAPI geçerli dizini betiğin işletildiği dizine değiştirmez!

    CGI SAPI farkını gösteren örnek:

    <?php
    // deneme.php isimli basit deneme uygulamamız
    echo getcwd(), "\n";
    ?>

    CGI sürümününü kullanınca, çıktı şöyle olur:

    $ pwd
    /tmp
    
    $ php -q bir_dizin/deneme.php
    /tmp/bir_dizin
    

    Bu açıkça gösteriyor ki PHP geçerli dizinini betiğin çalıştığı dizine değiştiriyor.

    CLI SAPI kullanımı sonucu:

    $ pwd
    /tmp
    
    $ php -f bir_dizin/deneme.php
    /tmp
    

    Bu, PHP'de kabuk araçları yazarken daha fazla esneklik imkanı verir.

    Bilginize: CGI SAPI bu CLI SAPI davranışını komut satırından çalışırken -C seçeneği ile destekler.

PHP çalıştırılabiliri tarafından desteklenen komut satırı seçenekleri listesi istenirse PHP -h seçeneği ile çalıştırılarak sorgulanabilir:

Kullanım: php [seçenekler] [-f] <dosya> [--] [değiştirgeler...]
  php [seçenekler] -r <kod> [--] [değiştirgeler...]
  php [seçenekler] [-B <başlangıç_kodu>] -R <kod> [-E <bitiş_kodu>] [--] [değiştirgeler...]
  php [seçenekler] [-B <başlangıç_kodu>] -F <dosya> [-E <bitiş_kodu>] [--] [değiştirgeler...]
  php [seçenekler] -- [değiştirgeler...]
  php [seçenekler] -a

  -a               Etkileşimli çalışır
  -c <yol>|<dosya> php.ini dosyası bu dizinde aranır
  -n               Hiçbir php.ini dosyası kullanılmayacak
  -d foo[=bar]     'bar' değerli bir foo INI girdisi tanımlar
  -e               Hata ayıklayıcı/profilci için genişletilmiş bilgi üretir
  -f <dosya>       <dosya>'yı çözümler ve çalıştırır
  -h               Bu yardım iletisini gösterir
  -i               PHP bilgisi
  -l               Sadece söz dizimi denetimi (lint)
  -m               Modül olarak derlenenleri gösterir
  -r <kod>         PHP <kod>unu <?..?> betik etiketleri olmadan çalıştırır
  -B <başlangıç_kodu>  PHP <başlangıç_kodu>nu girdi satırlarından önce
                   çalıştırır
  -R <kod>         PHP <kod>unu her girdi satırı için çalıştırır
  -F <dosya>       Her girdi satırı için <dosya>yı çözümler ve çalıştırır
  -E <bitiş_kodu>  PHP <bitiş_kodu>nu bütün girdi satırlarını işledikten
                   sonra çalıştırır
  -H               Harici araçlardan aktarılan bütün değiştirgeleri gizler
  -s               Kaynağı renklendirilmiş söz dizimi ile gösterir
  -v               Sürüm bilgilerini gösterir
  -w               Kaynağı boşluklar ve yorumlardan arındırılmış olarak
                   gösterir
  -z <dosya>       <dosya> Zend eklentisini yükler

  değiştirgeler... Betiğe aktarılan değiştirgeler. Eğer betik stdin'den
                   okunuyorsa veya ilk değiştirge - ile başlıyorsa
                   -- değiştirgeler kullanın

  --ini            Yapılandırma dosyası isimlerini gösterir

  --rf <isim>      <isim> işlevi hakkında bilgi gösterir
  --rc <isim>      <isim> sınıfı hakkında bilgi gösterir
  --re <isim>      <isim> eklentisi hakkında bilgi gösterir
  --ri <isim>      <isim> eklentisi için yapılandırmayı gösterir

CLI SAPI çalıştırmak istediğiniz PHP kodunu getirmek için üç farklı yola sahiptir:

  1. PHP'ye belli bir dosyayı çalıştırmasını söyleyerek.

    php ornek_betik.php
    
    php -f ornek_betik.php
    

    Her iki yolla da (-f seçeneğini olsun olmasın) ornek_betik.php dosyası çalıştırılır. Çalıştırmak için herhangi bir dosyayı seçebilirsiniz - PHP betikleriniz .php uzantısı ile bitmek zorunda değildir, istediğiniz herhangi bir isim ve uzantıya sahip olabilirler.

    Bilginize: Eğer betiklerinize değiştirgeler aktarmanız gerekirse -f seçeneğini kullandığınızda ilk değiştirge olarak -- aktarmanız gerekir.

  2. Doğrudan komut satırında işletmek üzere PHP kodunu aktararak.

    php -r 'print_r(get_defined_constants());'
    

    Kabuk değişken değişimi ve tırnak kullanımı için özel bir çaba sarfetmek gerekir.

    Bilginize: Örneği dikkatle okuyunuz, hiçbir başlangıç veya bitiş etiketi yok! -r seçeneği bunlara ihtiyaç duymaz. Bunların kullanımı çözümleme hatasına yol açar.

  3. Çalıştırılacak PHP kodunu standart girdiden (stdin) yollamak suretiyle.

    Bu, PHP kodunu devingen olarak oluşturma ve bunu çalıştırma yeteneği sağlar. Örneğin:

    $ bir_uygulama | bir_suzgec | php | sort -u > nihai_sonuc.txt
    

Kodu çalıştırmak için bu üç yol birlikte kullanılamaz.

Her kabuk uygulamasındaki gibi, PHP çalıştırılabiliri bir takım değiştirgeler alabildiği gibi PHP betiğiniz de değiştirgeler alabilir. Betiğinize aktarabileceğiniz değiştirge sayısı PHP tarafından sınırlandırılmamıştır (kabukta aktarılabilecek karakter sayısı sınırlıdır; genellikle bu sınıra ulaşmazsınız). Betiğinize aktarılan değiştirgeler $argv küresel dizisinde bulunur. Sıfır indisi her zaman betik adını içerir (PHP kodu standart girdiden veya -r komut satırı seçeneğiyle çalıştıysa betik adı - olur). İkinci kayıtlı küresel değişken $argc'dir ve $argv dizisindeki eleman sayısını içerir (betiğe aktarılan değiştirge sayısını değil).

Betiğinize aktarmak istediğiniz değiştirgeler - karakteriyle başlamadığı sürece, özel bir şeye dikkat etmeniz gerekmez. Betiğinize - ile başlayan bir değiştirge aktarımı sorun yaratır çünkü PHP bunu kendisinin işlemesi gerektiğini düşünecektir. Bunu önlemek için, değiştirge listesi ayracı olan -- kullanın, bunu izleyen her değiştirge ellenmeden betiğinize aktarılır.

# Bu verilen kodu çalıştırmaz fakat PHP kullanımını gösterir
$ php -r 'var_dump($argv);' -h
Usage: php [options] [-f] <file> [args...]
[...]

# Bu '-h' değiştirgesini betiğinize aktarır ve
# PHP'nin değiştirgeyi görmesini önler
$ php -r 'var_dump($argv);' -- -h
array(2) {
  [0]=>
  string(1) "-"
  [1]=>
  string(2) "-h"
}

Kabuk betikleri için PHP farklı bir yoldan kullanılabilir. İlk satırı #!/usr/bin/php ile başlayan bir betik yazabilirsiniz. Bunu takip eden satırlara başlangıç ve bitiş etiketlerine sahip normal PHP kodunuzu yerleştirebilirsiniz. Dosyanın çalıştırma izinlerini ayarladığınızda (örn. chmod +x deneme) betiğiniz normal bir kabuk veya perl betiği gibi işletilir.

Örnek 1 - PHP betiğini kabuk betiği olarak çalıştırmak

#!/usr/bin/php
<?php
var_dump
($argv);
?>

Geçerli dizindeki bu dosyanın isminin deneme olduğunu varsayarsak, aşağıdakini yapabiliriz:

$ chmod +x deneme
$ ./deneme -h -- foo
array(4) {
  [0]=>
  string(6) "./deneme"
  [1]=>
  string(2) "-h"
  [2]=>
  string(2) "--"
  [3]=>
  string(3) "foo"
}

Gördüğünüz gibi, bu durumda betiğinize - ile başlayan değiştirge aktarırken hiçbir şeye dikkat etmeniz gerekmez.

Uzun seçenekler PHP 4.3.3'den beri mevcuttur.

Komut satırı seçenekleri
Seçenek Uzun Seçenek Açıklama
-a --interactive

PHP'yi etkileşimli çalıştırır. Eğer PHP'yi Readline eklentisi ile derlerseniz (Windows'ta yoktur), tamamlama özelliği olan (örneğin bir değişken adını yazmaya başlayıp TAB tuşuna basınca PHP adı tamamlar), ok tuşlarıyla erişebileceğiniz bir komut satırı geçmişi olan güzel bir kabuğunuz olur. Komut satırı geçmişi ~/.php_history dosyasında saklanır.

Bilginize: auto_prepend_file ve auto_append_file yoluyla içerilen dosyalar bu kipte çözümlenir fakat bazı sınırlamalarla - örneğin işlevler çağrılmadan önce tanımlanmak zorundadır.

Bilginize: Eğer PHP CLI etkileşimli kipte kullanılıyorsa Özdevinimli Nesne Yükleme bulunmaz.

-b --bindpath

Harici FASTCGI Sunucusu kipi için dizin yolu (sadece CGI için).

-C --no-chdir

Betiğin bulunduğu dizine chdir yapılmaz (sadece CGI için).

-q --no-header

Sessiz kip. HTTP başlığının çıktılanmasını engeller (sadece CGI için).

-T --timing

Betiğin çalışma süresini sayı kere ölçer (sadece CGI için).

-c --php-ini

Bu seçenek php.ini dosyasının aranacağı dizini veya özel bir INI dosyasını (adı php.ini olmak zorunda değildir) belirtebilir. Örneğin:

$ php -c /ozel/dizin/ ornek_betik.php

$ php -c /ozel/dizin/ozel-dosya.ini ornek_betik.php

Eğer bu seçeneği belirtmezseniz, dosya öntanımlı dizinlerde aranır.

-n --no-php-ini

php.iniyi görmezden gel. Bu seçenek PHP 4.3.0'dan beri vardır.

-d --define

Bu seçenek php.inide izin verilen yapılandırma yönergelerinden herhangi birine özel değer atamanıza imkan verir. Söz dizimi:

-d ayar_yönergesi[=değer]

Örnekler (satırlar okunabilirlik açısından kaydırılmıştır):

# Değer kısmını atlamak yapılandırma yönergesini "1" yapar
$ php -d max_execution_time
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(1) "1"

# Boş değer aktarınca yapılandırma yönergesinine "" atanır
php -d max_execution_time=
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(0) ""

# Yapılandırma yönergesine '=' karakterinden sonra aktarılan değer atanır
$  php -d max_execution_time=20
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(2) "20"
$  php
        -d max_execution_time=herhangi_bir_sey
        -r '$foo = ini_get("max_execution_time"); var_dump($foo);'
string(15) "herhangi_bir_sey"

-e --profile-info

Hata ayıklayıcı/profilci için kullanılmak üzere genişletilmiş bilgi kipini etkinleştirir.

-f --file

-f seçeneğiyle verilen dosya adını çözümler ve çalıştırır. Bu seçenek isteğe bağlıdır; verilmese de olur. Sadece çalıştırılacak dosya adını belirtmek yeterlidir.

Bilginize: Betiklere değiştirge aktarmak için ilk değiştirge -- olmalıdır, aksi halde PHP bunları PHP seçeneği olarak yorumlar.

-h ve -? --help ve --usage Bu seçenekle, komut satırı seçenekleri tek satırlık açıklamalarıyla listelenir.
-i --info Bu komut satırı seçeneği phpinfo() işlevini çağırır ve sonuçları yazdırır. Eğer PHP doğru çalışmıyorsa, php -i komutunu kullanmanız ve bilgi tablolarından önce herhangi bir hata iletisi yazdırılmış mı bakmanız tavsiye edilir. CGI kipini kullanırken çıktının HTML biçiminde olacağına ve bu nedenle çok büyük olacağına dikkat ediniz.
-l --syntax-check

Bu seçenek verilen PHP kodunun sadece söz dizimini denetlemek için uygun bir yol sağlar. Başarı halinde, No syntax errors detected in <filename> metni standart çıktıya yazılır ve kabuk dönüş kodu 0 olur. Başarısızlık halinde, iç çözümleyici hatasına ilaveten Errors parsing <filename> metni standart çıktıya yazılır ve kabuk dönüş kodu -1 olur.

Bu seçenek ölümcül hataları bulamaz (tanımlanmamış işlevler gibi). Eğer ölümcül hataları da denetlemek isterseniz -f seçeneğini kullanın.

Bilginize: Bu seçenek -r seçeneği ile birlikte kullanılamaz.

-m --modules

Bu seçeneğin kullanımı ile PHP yerleşik (ve yüklü) PHP ve Zend modüllerini listeler:

$ php -m
[PHP Modules]
xml
tokenizer
standard
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

-r --run

Bu seçenek PHP'nin komut satırından çalıştırılmasına izin verir. PHP başlangıç ve bitiş etiketleri (<?php ve ?>) gerekmez ve eğer bulunurlarsa çözümleme hatasına neden olurlar.

Bilginize: PHP'nin bu şekilde kullanımı halinde kabuk tarafından yapılan komut satırı değişken değişimleri ile çakışmamak için özen göstermek gerekir.

Çözümleme hatasını gösteren örnek

$ php -r "$foo = get_defined_constants();"
Command line code(1) : Parse error - parse error, unexpected '='

Buradaki sorun sh/bash kabuklarının çift tırnak " kullanıldığında bile değişken değişimi yapmalarından kaynaklanır. $foo değişkeni kabukta tanımlanmış olmayacağı için, PHP'ye çalıştırılmak üzere aktarılan kodda hiçbir şey olarak yorumlanacaktır:

$ php -r " = get_defined_constants();"

Doğru yol tek tırnak ' kullanımıdır. Tek tırnak içindeki değişkenler sh/bash tarafından dönüştürülmezler.

$ php -r '$foo = get_defined_constants(); var_dump($foo);'
array(370) {
  ["E_ERROR"]=>
  int(1)
  ["E_WARNING"]=>
  int(2)
  ["E_PARSE"]=>
  int(4)
  ["E_NOTICE"]=>
  int(8)
  ["E_CORE_ERROR"]=>
  [...]

Eğer sh/bash haricinde bir kabuk kullanıyorsanız, daha farklı sorunlarla karşılaşabilirsiniz. Bu gibi durumlarda » http://bugs.php.net/ adresinde hata raporu açmaktan çekinmeyiniz. Kabuk değişkenlerini kodunuza almaya çalıştığınızda veya önceleme için ters bölü kullanımında sıkıntılar yaşayabilirsiniz.

Bilginize: -r seçeneği CLI SAPI'de bulunur, CGI SAPI'de bulunmaz.

Bilginize: Bazı yapılandırma yönergeleri (örn. auto_prepend_file ve auto_append_file) bu kipte görmezden gelinir.

-B --process-begin

Standart girdi işlenmeden çalıştırılacak PHP kodudur. PHP 5'de eklenmiştir.

-R --process-code

Her girdi satırı için işletilecek PHP kodudur. PHP 5'de eklenmiştir.

Bu kipte iki özel değişken bulunur: $argn ve $argi. $argn PHP'nin o anda işlediği satırı içerirken, $argi satır numarasını içerir.

-F --process-file

Her girdi satırı için işletilecek PHP dosyasıdır. PHP 5'de eklenmiştir.

-E --process-end

Girdi işlendikten sonra işletilecek PHP kodudur. PHP 5'de eklenmiştir.

Örnek 2 - Bir projedeki satır sayısını saymak için -B, -R ve -E seçeneklerinin kullanımı

$ find projem | php -B '$l=0;' -R '$l += count(@file($argn));' -E 'echo "Toplam Satır Sayısı: $l\n";'
Toplam Satır Sayısı: 37328

-s --syntax-highlight ve --syntax-highlighting

Renklendirilmiş söz dizimi ile kaynak gösterimi.

Bu seçenek dosyayı çözümlemek için içsel yöntemleri kullanır ve renklendirilmiş bir HTML sürümü üreterek standart çıktıya yazar. Bütün yaptığı HTML başlıkları olmadan <code> [...] </code> HTML etiketlerinden oluşan bir blok üretmektir.

Bilginize: Bu seçenek -r seçeneği ile birlikte çalışmaz.

-v --version

PHP, PHP SAPI ve Zend sürümlerini standart çıktıya yazar. Örneğin:

$ php -v
PHP 5.3.0alpha3-dev (cli) (built: Nov 13 2008 18:20:00)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2008 Zend Technologies

-w --strip

Kaynağı boşluklar ve yorumlardan arındırılmış olarak gösterir.

Bilginize: Bu seçenek -r seçeneği ile birlikte çalışmaz.

-z --zend-extension

Zend eklentisini yükler. Eğer sadece dosya ismi verilirse, PHP bu eklentiyi sisteminizde geçerli öntanımlı kütüphane yolundan yüklemeye çalışır (Linux sistemlerde genellikle /etc/ld.so.conf dosyasında belirtilir). Dosya adı tam yol bilgisi ile aktarılırsa sistem kütüphanesi arama yolu kullanılmaz. Bir dizin bilgisiyle göreceli bir dosya ismi kullanımı PHP'ye sadece geçerli dizine göreceli eklentinin yüklenmesini söyler.

  --ini

Yapılandırma dosya isimlerini ve taranan dizinleri gösterir. PHP 5.2.3'den beri mevcuttur.

Örnek 3 --ini örneği

$ php --ini
Configuration File (php.ini) Path: /usr/dev/php/5.2/lib
Loaded Configuration File:         /usr/dev/php/5.2/lib/php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

--rf --rfunction

Verilen işlev veya sınıf yöntemi hakkında bilgi gösterir (örneğin, değiştirge adlarını ve sayısını). PHP 5.1.2'den beri vardır.

Bu seçenek sadece PHP Reflection desteği ile derlendiyse mevcuttur.

Örnek 4 - Temel --rf kullanımı

$ php --rf var_dump
Function [ <internal> public function var_dump ] {

  - Parameters [2] {
    Parameter #0 [ <required> $var ]
    Parameter #1 [ <optional> $... ]
  }
}

--rc --rclass

Verilen sınıf hakkında bilgi gösterir (sabitler, özellikler ve yöntemler listesi). PHP 5.1.2'den beri vardır.

Bu seçenek sadece PHP Reflection desteği ile derlendiyse mevcuttur.

Örnek 5 --rc örneği

$ php --rc Directory
Class [ <internal:standard> class Directory ] {

  - Constants [0] {
  }

  - Static properties [0] {
  }

  - Static methods [0] {
  }

  - Properties [0] {
  }

  - Methods [3] {
    Method [ <internal> public method close ] {
    }

    Method [ <internal> public method rewind ] {
    }

    Method [ <internal> public method read ] {
    }
  }
}

--re --rextension

Verilen eklenti hakkında bilgi gösterir (php.ini seçenekleri, tanımlı işlevler, sabitler ve sınıflar listesi). PHP 5.1.2'den beri vardır.

Bu seçenek sadece PHP Reflection desteği ile derlendiyse mevcuttur.

Örnek 6 --re örneği

$ php --re json
Extension [ <persistent> extension #19 json version 1.2.1 ] {

  - Functions {
    Function [ <internal> function json_encode ] {
    }
    Function [ <internal> function json_decode ] {
    }
  }
}

--ri --rextinfo

Verilen eklenti için yapılandırma bilgisini gösterir (phpinfo() ile aynı bilgiyi döndürür). PHP 5.2.2'den beri vardır. Çekirdek yapılandırma bilgisi "main" eklenti adı kullanılarak bulunabilir.

Örnek 7 --ri örneği

$ php --ri date

date

date/time support => enabled
"Olson" Timezone Database Version => 2008.9
Timezone Database => internal
Default timezone => Europe/Helsinki

Directive => Local Value => Master Value
date.timezone => no value => no value
date.default_latitude => 31.7667 => 31.7667
date.default_longitude => 35.2333 => 35.2333
date.sunset_zenith => 90.583333 => 90.583333
date.sunrise_zenith => 90.583333 => 90.583333

Bilginize: -rBRFEH, --ini ve --r[fcei] seçenekleri sadece CLI'de kullanılabilir.

PHP çalıştırılabiliri HTTP sunucusundan tamamen bağımsız olarak PHP betikleri çalıştırmak için kullanılabilir. Eğer Unix sistemi üzerindeyseniz, PHP betiğinizin başına özel bir satır eklemeli ve dosyanızı çalıştırılabilir yapmalısınız; böylece sistem betiğinizi hangi programın çalıştıracağını bilir. Windows üzerinde .php dosyalarına çift tıklama seçeneği ile php.exe ilişkilendirebilir veya betiği PHP üzerinden çalıştıracak bir yığın dosyası yapabilirsiniz. Unix'de çalışması için betiğe eklenen ilk satır Windows'da sorun çıkarmaz, böylece platformdan bağımsız programlar yazabilirsiniz. Örnek basit bir komut satırı PHP programı aşağıdaki gibi olabilir.

Örnek 8 - Komut satırından çalıştırılması planlanan betik (betik.php)

#!/usr/bin/php
<?php

if ($argc != || in_array($argv[1], array('--help''-help''-h''-?'))) {
?>
Bu tek seçenekli bir komut satırı PHP betiğidir.

  Kullanımı:
  <?php echo $argv[0]; ?> <secenek>

  <secenek> yazdırmak istediğiniz bir kelime olabilir.
  --help, -help, -h,
  veya -? seçenekleriyle, bu yardımı alabilirsiniz.

<?php
} else {
    echo 
$argv[1];
}
?>

Yukarıdaki betikte, bu dosyanın PHP tarafından çalıştırılması gerektiğini belirten özel bir ilk satır kullandık. Burada CLI sürümü ile çalışıyoruz, böylece HTTP başlık çıktıları olmayacak. PHP ile komut satırı uygulamaları yazarken kullanabileceğiniz iki değişken vardır: $argc ve $argv. Birincisi değiştirge sayısından bir fazlasıdır (çalışan betiğin adı). İkincisi değiştirgeleri içeren bir dizidir, sıfır numarayla başlar ve ilk elemanında betik adını içerir ($argv[0]).

Yukarıdaki programda birden farklı sayıda değiştirge olup olmadığını kontrol ettik. Ayrıca eğer değiştirge --help, -help, -h veya -? ise yardım iletisini yazdırdık ve betik adını devingen olarak yazdırdık. Eğer bazı başka değiştirgeler aldıysak yazdırdık.

Eğer yukarıdaki betiği Unix üzerinde çalıştırmak isterseniz betiği çalıştırılabilir yapmalı ve betik.php echothis veya betik.php -h ile çağırmalısınız. Windows'da bu iş için bir yığın dosyası yapabilirsiniz:

Örnek 9 - Bir komut satırı PHP betiği çalıştırmak için yığın dosyası (betik.bat)

@echo OFF
"C:\php\php.exe" script.php %*

Yukarıdaki programı betik.php olarak adlandırdığınız ve C:\php\php.exe içinde CLI'nin php.exe olduğu varsayılarak bu yığın dosyası sizin eklediğiniz seçeneklerle çalışacaktır: betik.bat echothis veya betik.bat -h.

PHP'deki komut satırı uygulamalarını iyileştirmek için kullanabileceğiniz işlevlerle ilgili bilgi için Readline eklentisinin belgesine bakınız.

Windows üzerindeyseniz PHP, Command Line PHP on Microsoft Windows bölümünde açıklandığı gibi .php uzantısına veya C:\php\php.exe çalıştırılabilirinin belirtilmesine gerek kalmadan çalıştırılmak üzere yapılandırılabilir.



Garbage Collection

İçindekiler

This section explains the merits of the new Garbage Collection (also known as GC) mechanism that is part of PHP 5.3. This was originally written as a three part column for » php|architect.


Reference Counting Basics

A PHP variable is stored in a container called a "zval". A zval container contains, besides the variable's type and value, two additional bits of information. The first is called "is_ref" and is a boolean value indicating whether or not the variable is part of a "reference set". With this bit, PHP's engine knows how to differentiate between normal variables and references. Since PHP allows user-land references, as created by the & operator, a zval container also has an internal reference counting mechanism to optimize memory usage. This second piece of additional information, called "refcount", contains how many variable names (also called symbols) point to this one zval container. All symbols are stored in a symbol table, of which there is one per scope. There is a scope for the main script (i.e., the one requested through the browser), as well as one for every function or method.

A zval container is created when a new variable is created with a constant value, such as:

<?php
$a 
"new string";
?>

In this case, the new symbol name, "a", is created in the current scope, and a new variable container is created with type "string", value "new string". The "is_ref" bit is by default set to "false" because no user-land reference has been created. The "refcount" is set to "1" as there is only one symbol that makes use of this variable container. Note that if "refcount" is "1", "is_ref" is always "false". If you have » Xdebug installed, you can display this information by calling:

<?php
xdebug_debug_zval
('a');
?>

which displays:


a: (refcount=1, is_ref=0)='new string'

Assigning this variable to another variable name increases the refcount:

<?php
$a 
"new string";
$b $a;
xdebug_debug_zval'a' );
?>

which displays:


a: (refcount=2, is_ref=0)='new string'

The refcount is "2" here, because the same variable container is linked with both "a" and "b". PHP is smart enough not to copy the actual variable container when it is not necessary. Variable containers get destroyed when the "refcount" reaches zero. The "refcount" gets decreased by one when any symbol linked to the variable container leaves the scope (e.g. when the function ends) or when unset() is called on a symbol. The following example shows this:

<?php
$a 
"new string";
$c $b $a;
xdebug_debug_zval'a' );
unset( 
$b$c );
xdebug_debug_zval'a' );
?>

which displays:


a: (refcount=3, is_ref=0)='new string'
a: (refcount=1, is_ref=0)='new string'

If we now call "unset( $a );", the variable container, including the type and value, will be removed from memory.

Compound Types

Things get a tad more complex with compound types such as arrays and objects. Instead of a scalar value, arrays and objects store their properties in a symbol table of their own. This means that the following example creates three zval containers:

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
xdebug_debug_zval'a' );
?>

which displays (after formatting):


a: (refcount=1, is_ref=0)=array (
'meaning' => (refcount=1, is_ref=0)='life',
'number' => (refcount=1, is_ref=0)=42
)

Or graphically:

The three zval containers are: "a", "meaning", and "number". Similar rules apply for increasing and decreasing "refcounts". Below, we add another element to the array, and set its value to the contents of an already existing element:

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
$a['life'] = $a['meaning'];
xdebug_debug_zval'a' );
?>

which displays (after formatting):


a: (refcount=1, is_ref=0)=array (
'meaning' => (refcount=2, is_ref=0)='life',
'number' => (refcount=1, is_ref=0)=42,
'life' => (refcount=2, is_ref=0)='life'
)

Or graphically:

From the above Xdebug output, we see that both the old and new array element now point to a zval container whose "refcount" is "2". Of course, there are now two zval containers, but they are the same one. The xdebug_debug_zval() function does not show this, but you could see this by also displaying the memory pointer. Removing an element from the array is like removing a symbol from a scope. By doing so, the "refcount" of a container that an array element points to is decreased. Again, when the "refcount" reaches zero, the variable container is removed from memory. Again, an example to show this:

<?php
$a 
= array( 'meaning' => 'life''number' => 42 );
$a['life'] = $a['meaning'];
unset( 
$a['meaning'], $a['number'] );
xdebug_debug_zval'a' );
?>

which displays (after formatting):


a: (refcount=1, is_ref=0)=array (
'life' => (refcount=1, is_ref=0)='life'
)

Now, things get interesting if we add the array itself as an element of the array, which we do in the next example, in which I also snuck in a reference operator, since otherwise PHP would create a copy:

<?php
$a 
= array( 'one' );
$a[] =& $a;
xdebug_debug_zval'a' );
?>

which displays (after formatting):


a: (refcount=2, is_ref=1)=array (
0 => (refcount=1, is_ref=0)='one',
1 => (refcount=2, is_ref=1)=...
)

Or graphically:

You can see that the array variable ("a") as well as the second element ("1") now point to a variable container that has a "refcount" of "2". The "..." in the display above shows that there is recursion involved, which, of course, in this case means that the "..." points back to the original array.

Just like before, unsetting a variable removes the symbol, and the reference count of the variable container it points to is decreased by one. So, if we unset variable $a after running the above code, the reference count of the variable container that $a and element "1" point to gets decreased by one, from "2" to "1". This can be represented as:


(refcount=1, is_ref=1)=array (
0 => (refcount=1, is_ref=0)='one',
1 => (refcount=1, is_ref=1)=...
)

Or graphically:

Cleanup Problems

Although there is no longer a symbol in any scope pointing to this structure, it cannot be cleaned up because the array element "1" still points to this same array. Because there is no external symbol pointing to it, there is no way for a user to clean up this structure; thus you get a memory leak. Fortunately, PHP will clean up this data structure at the end of the request, but before then, this is taking up valuable space in memory. This situation happens often if you're implementing parsing algorithms or other things where you have a child point back at a "parent" element. The same situation can also happen with objects of course, where it actually is more likely to occur, as objects are always implicitly used by reference.

This might not be a problem if this only happens once or twice, but if there are thousands, or even millions, of these memory losses, this obviously starts being a problem. This is especially problematic in long running scripts, such as daemons where the request basically never ends, or in large sets of unit tests. The latter caused problems while running the unit tests for the Template component of the eZ Components library. In some cases, it would require over 2 GB of memory, which the test server didn't quite have.



Collecting Cycles

Traditionally, reference counting memory mechanisms, such as that used by PHP, fail to address those circular reference memory leaks. Back in 2007, while looking into this issue, I was pointed to a paper by David F. Bacon and V.T. Rajan titled "» Concurrent Cycle Collection in Reference Counted Systems". Although the paper was written with Java in mind, I started to play around with it to see if it was feasible to implement the synchronous algorithm, as outlined in the paper, in PHP. At that moment, I didn't have a lot of time, but along came the Google Summer of Code project and we put forward the implementation of this paper as one of our ideas. Yiduo (David) Wang picked up this idea and started hacking on the first version as part of the Summer of Code project.

A full explanation of how the algorithm works would be slightly beyond the scope of this section, but the basics are explained here. First of all, we have to establish a few ground rules. If a refcount is increased, it's still in use and therefore, not garbage. If the refcount is decreased and hits zero, the zval can be freed. This means that garbage cycles can only be created when a refcount argument is decreased to a non-zero value. Secondly, in a garbage cycle, it is possible to discover which parts are garbage by checking whether it is possible to decrease their refcount by one, and then checking which of the zvals have a refcount of zero.

To avoid having to call the checking of garbage cycles with every possible decrease of a refcount, the algorithm instead puts all possible roots (zvals) in the "root buffer" (marking them "purple"). It also makes sure that each possible garbage root ends up in the buffer only once. Only when the root buffer is full does the collection mechanism start for all the different zvals inside. See step A in the figure.

In step B, the algorithm runs a depth-first search on all possible roots to decrease by one the refcounts of each zval it finds, making sure not to decrease a refcount on the same zval twice (by marking them as "grey"). In step C, the algorithm again runs a depth-first search from each root node, to check the refcount of each zval again. If it finds that the refcount is zero, the zval is marked "white" (blue in the figure). If it's larger than zero, it reverts the decreasing of the refcount by one with a depth-first search from that point on, and they are marked "black" again. In the last step (D), the algorithm walks over the root buffer removing the zval roots from there, and meanwhile, checks which zvals have been marked "white" in the previous step. Every zval marked as "white" will be freed.

Now that you have a basic understanding of how the algorithm works, we will look back at how this integrates with PHP. By default, PHP's garbage collector is turned on. There is, however, a php.ini setting that allows you to change this: zend.enable_gc.

When the garbage collector is turned on, the cycle-finding algorithm as described above is executed whenever the root buffer runs full. The root buffer has a fixed size of 10,000 possible roots (although you can alter this by changing the GC_ROOT_BUFFER_MAX_ENTRIES constant in Zend/zend_gc.c in the PHP source code, and re-compiling PHP). When the garbage collector is turned off, the cycle-finding algorithm will never run. However, possible roots will always be recorded in the root buffer, no matter whether the garbage collection mechanism has been activated with this configuration setting.

If the root buffer becomes full with possible roots while the garbage collection mechanism is turned off, further possible roots will simply not be recorded. Those possible roots that are not recorded will never be analyzed by the algorithm. If they were part of a circular reference cycle, they would never be cleaned up and would create a memory leak.

The reason why possible roots are recorded even if the mechanism has been disabled is because it's faster to record possible roots than to have to check whether the mechanism is turned on every time a possible root could be found. The garbage collection and analysis mechanism itself, however, can take a considerable amount of time.

Besides changing the zend.enable_gc configuration setting, it is also possible to turn the garbage collecting mechanism on and off by calling gc_enable() or gc_disable() respectively. Calling those functions has the same effect as turning on or off the mechanism with the configuration setting. It is also possible to force the collection of cycles even if the possible root buffer is not full yet. For this, you can use the gc_collect_cycles() function. This function will return how many cycles were collected by the algorithm.

The rationale behind the ability to turn the mechanism on and off, and to initiate cycle collection yourself, is that some parts of your application could be highly time-sensitive. In those cases, you might not want the garbage collection mechanism to kick in. Of course, by turning off the garbage collection for certain parts of your application, you do risk creating memory leaks because some possible roots might not fit into the limited root buffer. Therefore, it is probably wise to call gc_collect_cycles() just before you call gc_disable() to free up the memory that could be lost through possible roots that are already recorded in the root buffer. This then leaves an empty buffer so that there is more space for storing possible roots while the cycle collecting mechanism is turned off.

In this section, we saw how the garbage collection mechanism works and how it is integrated into PHP. In the third and final section, we will look at performance considerations and benchmarks.



Performance Considerations

We have already mentioned in the previous section that simply collecting the possible roots had a very tiny performance impact, but this is when you compare PHP 5.2 against PHP 5.3. Although the recording of possible roots compared to not recording them at all, like in PHP 5.2, is slower, other changes to the PHP runtime in PHP 5.3 prevented this particular performance loss from even showing.

There are two major areas in which performance is affected. The first area is reduced memory usage, and the second area is run-time delay when the garbage collection mechanism performs its memory cleanups. We will look at both of those issues.

Reduced Memory Usage

First of all, the whole reason for implementing the garbage collection mechanism is to reduce memory usage by cleaning up circular-referenced variables as soon as the prerequisites are fulfilled. In PHP's implementation, this happens as soon as the root-buffer is full, or when the function gc_collect_cycles() is called. In the graph below, we display the memory usage of the script below, in both PHP 5.2 and PHP 5.3, excluding the base memory that PHP itself uses when starting up.

<?php
class Foo
{
    public 
$var '3.1415962654';
}

$baseMemory memory_get_usage();

for ( 
$i 0$i <= 100000$i++ )
{
    
$a = new Foo;
    
$a->self $a;
    if ( 
$i 500 === )
    {
        echo 
sprintf'%8d: '$i ), memory_get_usage() - $baseMemory"\n";
    }
}
?>

In this very academic example, we are creating an object in which a property is set to point back to the object itself. When the $a variable in the script is re-assigned in the next iteration of the loop, a memory leak would typically occur. In this case, two zval-containers are leaked (the object zval, and the property zval), but only one possible root is found: the variable that was unset. When the root-buffer is full after 10,000 iterations (with a total of 10,000 possible roots), the garbage collection mechanism kicks in and frees the memory associated with those possible roots. This can very clearly be seen in the jagged memory-usage graph for PHP 5.3. After each 10,000 iterations, the mechanism kicks in and frees the memory associated with the circular referenced variables. The mechanism itself does not have to do a whole lot of work in this example, because the structure that is leaked is extremely simple. From the diagram, you see that the maximum memory usage in PHP 5.3 is about 9 Mb, whereas in PHP 5.2 the memory usage keeps increasing.

Run-Time Slowdowns

The second area where the garbage collection mechanism influences performance is the time taken when the garbage collection mechanism kicks in to free the "leaked" memory. In order to see how much this is, we slightly modify the previous script to allow for a larger number of iterations and the removal of the intermediate memory usage figures. The second script is here:

<?php
class Foo
{
    public 
$var '3.1415962654';
}

for ( 
$i 0$i <= 1000000$i++ )
{
    
$a = new Foo;
    
$a->self $a;
}

echo 
memory_get_peak_usage(), "\n";
?>

We will run this script two times, once with the zend.enable_gc setting turned on, and once with it turned off:


time ~/dev/php/php-5.3dev/sapi/cli/php -dzend.enable_gc=0 \
-dmemory_limit=-1 -n Listing1.php
# and
time ~/dev/php/php-5.3dev/sapi/cli/php -dzend.enable_gc=1 \
-dmemory_limit=-1 -n Listing2.php

On my machine, the first command seems to take consistently about 10.7 seconds, whereas the second command takes about 11.4 seconds. This is a slowdown of about 7%. However, the maximum amount of memory used by the script is reduced by 98% from 931Mb to 10Mb. This benchmark is not very scientific, or even representative of real-life applications, but it does demonstrate the memory usage benefits that this garbage collection mechanism provides. The good thing is that the slowdown is always the same 7%, for this particular script, while the memory saving capabilities save more and more memory as more circular references are found during script execution.

Let's now have a look at non-academic situation. I first started looking for circular reference collecting algorithms when I found out that while running the tests of the eZ Components' Template component with PHPUnit, I ended up swapping a lot, rendering my machine useless in the process. In order to do some benchmarks for this article, I re-ran those same tests with an empty php.ini file to disable the overhead and memory allocation that Xdebug was creating while doing code-coverage analysis.

Memory consumption dropped 95% from 1.7Gb to 75Mb, and the runtime as reported by PHPUnit increased from 2:17 for the non-GC enabled run to 2:33 for the GC enabled run, an increase of about 12%. However, with the non-GC enabled run, PHP sat there doing "nothing" for almost 15 seconds. Upon investigation with the Unix debugger, GDB, I noticed that those 15 seconds were all spent on freeing memory allocated for objects inside the PHP runtime. The actual time that the script ran was about the same in the end.

PHP's Internal GC Statistics

It is possible to coax a little bit more information about how the garbage collection mechanism is run from within PHP. But in order to do so, you will have to re-compile PHP to enable the benchmark and data-collecting code. You will have to set the CFLAGS environment variable to -DGC_BENCH=1 prior to running ./configure with your desired options. The following sequence should do the trick:


export CFLAGS=GC_BENCH=1
./config.nice
make clean
make

When you run the above example code again with the newly built PHP binary, you will see the following being shown after PHP has finished execution:


GC Statistics
-------------
Runs: 110
Collected: 2072204
Root buffer length: 0
Root buffer peak: 10000

Possible Remove from Marked
Root Buffered buffer grey
-------- -------- ----------- ------
ZVAL 7175487 1491291 1241690 3611871
ZOBJ 28506264 1527980 677581 1025731

The most informative statistics are displayed in the first block. You can see here that the garbage collection mechanism ran 110 times, and in total, more than 2 million memory allocations were freed during those 110 runs. As soon as the garbage collection mechanism has run at least one time, the "Root buffer peak" is always 10000.

Conclusion

In this third and final installment, we had a quick look at the performance implications of the garbage collection mechanism that is now part of PHP 5.3. In general, it will only cause a slowdown when the cycle collecting algorithm actually runs, whereas in normal (smaller) scripts there should be no performance hit at all.

However, in the cases where the cycle collection mechanism does run for normal scripts, the memory reduction it will provide allows more of those scripts to run concurrently on your server, since not so much memory is used in total.

The benefits are most apparent for longer-running scripts, such as lengthy test suites or daemon scripts. Also, for PHP-GTK applications that generally tend to run longer than scripts for the Web, the new mechanism should make quite a bit of a difference regarding memory leaks creeping in over time.





İşlev Başvuru Kılavuzu

İpucu

Ayrıca bakınız: Eklenti Grupları/Listesi.


PHP'nin Davranışını Etkileyenler


Alternatif PHP Önbelleği


Giriş

Alternatif PHP Önbelleği (APC), PHP için işlem kodu önbelleklemesi sağlayan özgür ve açık kaynaklı bir yazılımdır. PHP ara kodlarını en iyilemek, önbellekleme sağlamak için tasarlanmıştır.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu » PECL eklentisi PHP ile gelmez.

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/apc.

Bu PECL eklentisi için bir DLL mevcut değildir. Ayrıca, Windows üzerinde kurulum bölümüne de bakınız.

Bilginize: Windows'ta, APC bir geçici dizinin varlığını ve HTTP sunucusu tarafından yazılabilir olmasını gerektirir. Bunun için TMP, TEMP, USERPROFILE ortam değişkenlerine bakar ve hiçbiri atanmamışsa son olarak WINDOWS dizinini dener.

Bilginize: Gerçeklenimle ilgili daha derinliğine ve daha teknik ayrıntılar için » geliştiriciler tarafından yazılmış TECHNOTES dosyasına bakınız.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

APC öntanımlı ayarları çoğu kurulum için yeterli olsa da daha fazla başarım için aşağıdaki değiştirgelerde ince ayarlar yapmak gerekebilir.

Başlıca iki önemli ayara karar vermek gerekir. Birincisi, APC için ne kadar paylaşımlı bellek ayıracaksınız, ikincisi APC'nin her istekte dosya değiştirilmiş mi diye bakmasını istiyor musunuz? Bu ayarların ini yönergeleri sırası ile apc.shm_size ve apc.stat'dır.

Çalışır halde bir sunucuda, eklenti ile birlikte gelen apc.php betiğini sunucunun belge kök dizinindeki bir yere koymak ve tarayıcıdan çağırmak önbellek ile ilgili ayrıntılı bilgiler sağlayacaktır. Eğer PHP kurulumunda GD desteği varsa grafikler de görüntülenecektir. Denetlenmesi gereken ilk şey önbelleğe alınan dosyalardır. Önbelleğin çalıştığını varsayar isek Önbellek tam dolma sayısı'na dikkat etmek gerekir. Bu sayı önbelleğin dolup son apc.ttl saniyede erişilmeyen girdilerin kaç kez zorla temizlenmek zorunda kalındığını gösterir. Ayarlarınızı bu sayıyı küçüktecek şekilde yapmanız gerekir. Eğer sürekli önbelleğinizi dolduruyor iseniz bu önbellek başarımınızı kötü etkileyecektir. APC için daha fazla bellek ayırmanız veya apc.filters kullanarak daha az betiği önbelleğe almanız sorunu çözebilir.

APC Yapılandırma Seçenekleri
İsim Öntanımlı değeri Değişiklik yeri Değişiklik bilgisi
apc.enabled "1" PHP_INI_SYSTEM APC 2'de PHP_INI_SYSTEM. APC <= 3.0.12'de PHP_INI_ALL.
apc.shm_segments "1" PHP_INI_SYSTEM  
apc.shm_size "30" PHP_INI_SYSTEM  
apc.optimization "0" PHP_INI_ALL APC 2'de PHP_INI_SYSTEM. APC 3.0.13 sürümünde çıkartılmıştır.
apc.num_files_hint "1000" PHP_INI_SYSTEM  
apc.user_entries_hint "4096" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir.
apc.ttl "0" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir.
apc.user_ttl "0" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir.
apc.gc_ttl "3600" PHP_INI_SYSTEM  
apc.cache_by_default "1" PHP_INI_ALL APC <= 3.0.12'de PHP_INI_SYSTEM. APC 3.0.0'dan beri kullanılabilmektedir.
apc.filters NULL PHP_INI_SYSTEM  
apc.mmap_file_mask NULL PHP_INI_SYSTEM  
apc.slam_defense "0" PHP_INI_SYSTEM APC 3.0.0'dan beri kullanılabilmektedir.
apc.file_update_protection "2" PHP_INI_SYSTEM APC 3.0.6'dan beri kullanılabilmektedir.
apc.enable_cli "0" PHP_INI_SYSTEM APC 3.0.7'den beri kullanılabilmektedir.
apc.max_file_size "1M" PHP_INI_SYSTEM APC 3.0.7'dan beri kullanılabilmektedir.
apc.stat "1" PHP_INI_SYSTEM APC 3.0.10'dan beri kullanılabilmektedir.
apc.write_lock "1" PHP_INI_SYSTEM APC 3.0.11'den beri kullanılabilmektedir.
apc.report_autofilter "0" PHP_INI_SYSTEM APC 3.0.11'den beri kullanılabilmektedir.
apc.include_once_override "0" PHP_INI_SYSTEM APC 3.0.12'den beri kullanılabilmektedir.
apc.rfc1867 "0" PHP_INI_SYSTEM APC 3.0.13'den beri kullanılabilmektedir.
apc.rfc1867_prefix "upload_" PHP_INI_SYSTEM  
apc.rfc1867_name "APC_UPLOAD_PROGRESS" PHP_INI_SYSTEM  
apc.rfc1867_freq "0" PHP_INI_SYSTEM  
apc.localcache "0" PHP_INI_SYSTEM APC 3.0.14'den beri kullanılabilmektedir.
apc.localcache.size "512" PHP_INI_SYSTEM APC 3.0.14'den beri kullanılabilmektedir.
apc.coredump_unmap "0" PHP_INI_SYSTEM APC 3.0.16'dan beri kullanılabilmektedir.
apc.stat_ctime "0" PHP_INI_SYSTEM APC 3.0.13'den beri kullanılabilmektedir.

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

apc.enabled boolean

APC'yi etkisiz duruma getirmek için apc.enabled 0 olarak ayarlanabilir. Bu APC durağan bir şekilde PHP içine derlendi ise özellikle yararlıdır, zaten bu şekilde derlendi ise etkisiz kılmanın başka bir yolu yoktur (DSO olarak derlendi ise php.ini içindeki ilgili extension satırı çıkartılabilir).

apc.shm_segments integer

Derleyici önbelleği için ayrılan paylaşılan bellek bölümlerinin sayısı. Eğer APC paylaşılan belleğin dışına taşıyorsa ve apc.shm_size için sisteminizin izin verdiği en yüksek değeri verdiyseniz bu değeri yükseltmeyi deneyebilirsiniz.

apc.shm_size integer

MB olarak her bir paylaşılan bellek kesiminin boyutu. Öntanımlı olarak bazı sistemler (çoğu BSD türevi dahil) paylaşılan bellek kesimi için çok düşük sınırlara sahiptir.

apc.optimization integer

Eniyileme seviyesi. Sıfır eniyilemeyi iptal eder, daha yüksek değerler daha etkili eniyileme sağlar. Hız artışlarının pek fazla olmamasını bekleyin, deneyseldir.

apc.num_files_hint integer

HTTP sunucundan dahil edilecek veya istenecek bağımsız kaynak dosyalarının sayısı ile ilgili bir "ipucu". Emin değilseniz sıfıra ayarlayın veya ihmal edin; Bu ayar binlerce kaynak dosyası olan sitelerde yararlıdır.

apc.user_entries_hint integer

Depolanacak kullanıcı önbellek değişkenlerinin sayısı ile ilgili bir "ipucu" olup apc.num_files_hint'e benzer. Emin değilseniz sıfıra ayarlayın veya ihmal edin.

apc.ttl integer

Bir önbellek girdisinin bellek yuvasında kullanılmadan kalma süresidir, saniye olarak verilir. Sıfır olarak bırakmak eski girdilerin sürekli olarak bellekte kalmasına ve yeni girdi alınmamasına neden olacaktır.

apc.user_ttl integer

Bir önbellek girdisinin bellek yuvasında kullanılmadan kalma süresidir, saniye olarak verilir. Sıfır olarak bırakmak eski girdilerin sürekli olarak bellekte kalmasına ve yeni girdi alınmamasına neden olacaktır. Önbellekte yer kalmaması durumunda ttl sıfır ise önbellek tamamen silinir; ttl sıfırdan büyük ise sadece süresi dolmuş girdiler silinmeye çalışılır.

apc.gc_ttl integer

Bir önbellek girdisinin bellek yuvasında kullanılmadan kalma süresidir, saniye olarak verilir. Sıfır olarak bırakmak eski girdilerin sürekli olarak bellekte kalmasına ve yeni girdi alınmamasına neden olacaktır. Önbellekte yer kalmaması durumunda ttl sıfır ise önbellek tamamen silinir; ttl sıfırdan büyük ise sadece süresi dolmuş girdiler silinmeye çalışılır.

apc.cache_by_default boolean

Öntanımlı olarak etkindir ("On"), fakat sadece olumlu süzgece uyan dosyaların önbelleğe alınması için etkisiz ("Off") hale getirilerek, apc.filters ile birlikte kullanılabilir.

apc.filters string

Genişletilmiş POSIX düzenli ifadelerine uyan virgülle ayrılmış dizge değerlerin listesidir. Eğer kaynak dosya adı, listedeki herhangi bir kalıba uyarsa bu dosya önbelleğe alınmaz. Eşleştirme için include / require işlevlerine aktarılmış olan dosya adı kullanılır, mutlak yol kullanılmaz. Eğer deyimin ilk karakteri + ise, süzgeç ile eşleşen dosyalar önbelleğe alınır, - ise alınmaz. - öntanımlıdır, bu yüzden yazılmayabilir.

apc.mmap_file_mask string

Eğer --enable-mmap kullanılarak MMAP desteği ile derlendiyse, mmap hafıza bölgesinin dosya mı yoksa paylaşımlı bellek desteği ile mi hazırlandığını belirlemek için mmap modülüne aktarılacak mktemp tarzı dosya maskesidir. Doğrudan dosya destekli mmap için /tmp/apc.XXXXXX'a benzer şekilde ayarlayın (tam olarak 6 adet X). POSIX tarzı shm_open/mmap kullanmak için dosya kalıbına .shm koyun. Örnek olarak /apc.shm.XXXXXX. Ayrıca /dev/zero şeklinde ayarlanarak, anonim mmap bellek için çekirdeğin /dev/zero arabirimi kullanılabilir. Tanımsız olarak bırakmak anonim mmap'e zorlayacaktır.

apc.slam_defense integer

Çok yoğun sunucularda, sunucuyu başlattığınızda veya dosyaları değiştirdiğinizde, aynı zamanda, aynı dosyayı önbelleğe almaya çalışan birçok sürecin birbiriyle yarışmasına neden olabilirsiniz. Bu ayar önbelleğe alınmamış bir dosya üzerinde süreçlerin es geçme yüzdesini ayarlar. Diğer bir deyişle tek bir sürecin bir dosyayı önbelleğe almama olasılığı olarak düşünebilirsiniz. Örnek olarak, apc.slam_defense'i 75'e ayarlamak %75 olasılıkla sürecin önbellekleme yapmayacağını gösterir. Bu yüzden yüksek değerler daha iyi savunma sağlar. Bu özelliği iptal etmek için 0 olarak ayarlayın.

Sonraki sürümlerde apc.write_lock ile değiştirilmiştir.

apc.file_update_protection integer

Etkin kullanılan bir HTML sunucusunda bir dosyayı değiştirdiğiniz zaman bunu çok kısa atomik bir zaman diliminde yapmalısınız, geçici bir dosyaya yazma işlemi yapılır ve hazır olduğunda özgün dosya adıyla yeniden isimlendirilir (mv). Çoğu metin düzenleyici, cp, tar ve diğer bu türden programlar bu şekilde çalışmaz. Metin düzenleyicileri dosyayı düzenlerken, APC, dosyanın hazır olmayan halinin, önbelleğe alınmasına yol açabilir. apc.file_update_protection ayarı yeni dosyaların önbelleklemesi üzerinde bir geciktirme sağlar. Varsayılan değeri 2 saniyedir. Bu dosyalara erişildiğinde, değişiklik zaman damgası (mtime) 2 saniyeden küçükse önbelleğe alınmayacakları anlamına gelir. Bu tür yarım yazılmış dosyalara erişen ziyaretçiler uygulamalarda tuhaf durumlar ile karşılaşabilir, en azından bu tuhaflıklar kalıcı değildir. Eğer dosyalarınızın güncellemesini atomik zamanlama ile yaptığınızdan eminseniz, rsync bunu doğru bir şekilde yapar, bu koruma mekanizmasını 0'a ayarlayarak kapatabilirsiniz. Eğer yüksek girdi-çıktı nedeniyle 2 saniyeden daha uzun süren güncelleme süreçlerine sahipseniz bunu bir miktar arttırmak isteyebilirsiniz.

apc.enable_cli integer

Çoğunlukla deneme ve hata arama için kullanılır. Bunu ayarlamak PHP'nin CLI sürümü için APC'nin yetkilendirilmesini sağlar. Normalde her CLI isteği için APC önbelleğinin yeniden oluşturulmasını istemezsiniz, fakat çeşitli deneme senaryoları için APC'nin kolay bir şekilde yetkilendirilmesi yararlı olabilir.

apc.max_file_size integer

Bu değerden daha büyük dosyaların önbelleğe alınmasını engeller, varsayılan değeri 1M'dır.

apc.stat integer

Bu ayarı değiştirirseniz dikkatli olun, ayarın varsayılan durumunda APC her istekte betik dosyasının değiştirilme durumu denetlenecektir. Eğer betik değiştirildi ise yeni betiği işleyecek ve önbelleğe alacaktır. Eğer bu ayarı etkisiz duruma getirirseniz APC betiği değiştirilme durumu için denetlemeyecektir. Bu da betik üzerindeki değişikliklerin etkin olması için HTML sunucunuzu yeniden başlatmanızı gerektirir. Ürün ortamında kullanılan bir sunucuda nadiren kod değiştirmeleri yapılır, bu yüzden etkisiz duruma getirilmesi önemli başarım artışlarına neden olabilir.

Betiğe dışardan dahil edilen (include/require) dosyalar için de bu seçenek geçerlidir, fakat eğer göreli dosya yolları (Unix üzerinde / ile başlamayan herhangi bir yol) kullanarak dahil ediyorsanız APC dosyayı benzersiz olarak diğerlerinden ayırabilmek için denetlemek zorundadır. Eğer mutlak yol kullanıyorsanız APC bu denetimi atlayacak ve dosya için benzersiz tanımlayıcı olarak mutlak yolu kullanacaktır.

apc.write_lock boolean

Yoğun sunucularda, sunucu başlatıldığında veya birçok dosya değiştirildiğinde, bütün süreçlerinizin aynı dosyaları derleyip önbelleğe almaya çalışması gibi bir durumla karşılabilirsiniz, write_lock etkin durumda iken önbelleğe alınmamış bir betiği sadece bir süreç işleyecektir diğer süreçler kilitli durumun açılmasını beklemek yerine önbelleğe alınmamış bir betiği çalıştıracaklardır.

apc.report_autofilter boolean

Erken/Geç bağlama konuları nedeni ile özdevinimli olarak hariç bırakılan betiklerin raporlanmasını sağlar.

apc.include_once_override boolean

include_once() ve require_once() çağrılarında eniyileştirme sağlar ve pahalı sistem çağrılarının kullanımından sakınır.

apc.rfc1867 boolean

RFC1867 dosya yükleme aşamalarını kancalama yalnızca APC'yi PHP 5.2.0 veya sonraki sürümlerde derlediyseniz geçerlidir. Etkin duruma getirildiğinde, bir yükleme formunda dosya alanından önce APC_UPLOAD_PROGRESS alanına rastlandığında özdevinimli olarak upload_anahtar içeren bir kullanıcı önbelleği oluşturulur. Burada anahtar, form girdisindeki APC_UPLOAD_PROGRESS elemanının değeridir.

Şuna dikkat edin: APC_UPLOAD_PROGRESS ile belirtilen gizli alan dosya alanından önce gelmelidir, yoksa karşıya yükleme işlemi gerektiği gibi yürümez.

Karşıya dosya yükleme izlemesi, evre korumalı değildir, bu yüzden yeni yapılan yüklemeler bir önceki devam eden izlemeyi devre dışı bırakır.

Örnek 1 - Bir apc.rfc1867 örneği

<?php
print_r
(apc_fetch("upload_$_POST[APC_UPLOAD_PROGRESS]"));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [total] => 1142543
    [current] => 1142543
    [rate] => 1828068.8
    [filename] => test
    [name] => file
    [temp_filename] => /tmp/php8F
    [cancel_upload] => 0
    [done] => 1
)

apc.rfc1867_prefix string

rfc1867 karşıya dosya yükleme işlevselliğince üretilen kullanıcı önbellek girdisi için kullanılacak anahtar öneki.

apc.rfc1867_name string

APC karşıya dosya yükleme aşamalarını etkin hale getiren gizli form girdi adını ve kullanıcı önbellek sonekini bildirir.

apc.rfc1867_freq string

Karşıya yükleme işlemleri için kullanıcı önbelleğinin güncellenme sıklığını belirler. Toplam dosya boyutunun belirli bir yüzdesi ya da bayt olarak boyut verilir. Boyuta seçime bağlı olarak kilobayt için 'k', megabayt için 'm', gigabayt için 'g' son ekleri ile belirtilir (büyük veya küçük harf farketmez). Sıfır olarak ayarlamak, mümkün olduğu kadar sık güncellenmesine neden olur fakat bu yükleme işlemlerininin yavaşlamasına neden olabilir.

apc.localcache boolean

Yerel işlemler için gölge önbelleği etkin hale getirir, bu kilitsiz işlemler yaparak kilitlerden kaynaklanan çakışmaları azaltır.

apc.localcache.size integer

Yerel işlemlerin gölge önbellek boyutu, yeteri kadar büyük bir değere ayarlanmalıdır. Yaklaşık olarak apc.num_files_hint değerinin yarısı kadar.

apc.coredump_unmap boolean

APC'nin idaresi için, sinyal verildiği zaman çekirdek döküm dosyaları yazan SIGSEGV gibi sinyallerin işlenmesini etkin kılar. Bu sinyaller alındığı zaman, APC paylaşılan belleği kaldırarak çekirdek döküm dosyasından yeniden oluşturmayı deneyecektir. Bu ayar ölümcül sinyaller alındığı zaman büyük bir paylaşılan bellek alanı olan sistemlerde istikrarı iyi yönde etkileyebilir.

Uyarı

Bu özelliğin tehlikeli olma olasılığı yüksektir. Ölümcül bir hata meydana geldiğinde, paylaşılan belleği kaldırmak, belirsiz davranışlara neden olabilir.

Bilginize: Bazı sistem çekirdekleri, çekirdek döküm dosyaları oluşturulurken, çeşitli paylaşılan bellek bölümlerinin dökümünü görmezden gelecek araçlar sağlasa da, bu uygulamalar önemli paylaşılan bellek bölümlerini de görmezden gelebilir, Apache puan tahtası gibi.

apc.stat_ctime integer

Düğümlerin değişmediğininden emin olmak için ctime kullanmak svn veya rsync gibi programların neden olduğu sorunları engelleyebilir. APC normalde sadece mtime ile denetim yapar.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Bu eklentinin tanımlanmış sabitleri yoktur.



APC İşlevleri


apc_add

(PECL apc >= 3.0.13)

apc_addBir değişkeni önbellek veri deposunda saklar

Açıklama

bool apc_add ( string $anahtar , mixed $değişken [, int $yaşam_süresi = 0 ] )

Eğer daha önceden saklanmadı ise, bir değişkeni önbellek veri deposunda saklar.

Bilginize: apc_add() işlevi ile saklanan değişkenler, PHP'nin diğer saklama yöntemlerine aykırı olarak, HTTP sunucu istekleri arasında kalıcı olarak saklanacaktır (değişken önbellekten kaldırılana kadar).

Değiştirgeler

anahtar

Değişken depoda bu anahtar ismi kullanılarak saklanacaktır. anahtar 'lar önbellek içinde benzersizdir, yani apc_add() işlevi kullanarak aynı isimde varolan bir değişkeni saklamaya çalışmak, eski değeri değiştirmeyecek bunun yerine işlevin FALSE dönmesine neden olacaktır. (apc_add() ile apc_store() arasındaki tek fark budur).

degişken

Saklanacak değişken

yaşam_süresi

Yaşam Süresi; değişken , yaşam_süresi saniye süresince depoda saklanacaktır. yaşam_süresi geçildikten sonraki istekte önbellekten çıkartılacaktır. Eğer yaşam_süresi verilmediyse veya 0 olarak ayarlandıysa, değer el yordamıyla silinmediği veya önbellek boşaltılma, yeniden başlatma, vs. gibi süreçler ile temizlenmediği sürece saklanacaktır.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apc_add() örneği

<?php
$bilgi 
'bilgi';
apc_add('sakla'$bilgi);
var_dump(apc_fetch('sakla'));
echo 
"\n";
$bilgi 'önbelleğe alınmayacak';
apc_add('sakla'$bilgi);
var_dump(apc_fetch('sakla'));
echo 
"\n";
?>

Yukarıdaki örneğin çıktısı:

string(5) "bilgi"
string(5) "bilgi"

Ayrıca Bakınız

  • apc_store() - Bir değişkeni veri deposunda saklar
  • apc_fetch() - Depolanmış bir değişkeni önbellekten alır
  • apc_delete() - Depolanmış bir değişkeni önbellekten siler



apc_cache_info

(PECL apc >= 2.0.0)

apc_cache_infoAPC'nin veri deposundan önbellek bilgisini gösterir

Açıklama

array apc_cache_info ([ string $önbellek_türü [, bool $sınırlı = false ]] )

APC'nin veri deposundan önbellek ve tanımlayıcı (meta-data) bilgileri gösterir.

Dönen Değerler

Önbelleğe alınmış veri ve tanımlayıcı veriler dizisi; hata durumunda FALSE

Bilginize: apc_cache_info() eğer önbellek verisini elde edemez ise uyarı verecektir. Genelde APC etkin değilken bu durumla karşılaşırsınız.

Değiştirgeler

önbellek_türü

Eğer önbellek_türü "user", ise, kullanıcı önbellek bilgisi geri dönecektir.

Eğer önbellek_türü "filehits", ise, güncel istek için hangi dosyalar önbelleğe alınmış bilgisi dönecektir. Bu özelliğin etkin olabilmesi için derleme sırasında --enable-filehits kullanmak gerekir.

Eğer önbellek_türü geçersiz ise veya belirtilmediyse, sistem önbellek bilgisi (önbelleğe alınmış dosyalar) geri dönecektir.

sınırlı

Eğer limited TRUE ise, önbellek girdilerinin bir bölümünü listelemeyecektir. Bu istatistik elde etmek için yapılan çağrıların eniyileştirilmesinde yararlıdır.

Sürüm Bilgisi

Sürüm: Açıklama
3.0.11 sınırlı değiştirgesi eklenmiştir.
3.0.16 önbellek_türü değiştirgesi için "filehits" seçeneği eklenmiştir.

Örnekler

Örnek 1 Bir apc_cache_info() örneği

<?php
print_r
(apc_cache_info());
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [num_slots] => 2000
    [ttl] => 0
    [num_hits] => 9
    [num_misses] => 3
    [start_time] => 1123958803
    [cache_list] => Array
        (
            [0] => Array
                (
                    [filename] => /path/to/apc_test.php
                    [device] => 29954
                    [inode] => 1130511
                    [type] => file
                    [num_hits] => 1
                    [mtime] => 1123960686
                    [creation_time] => 1123960696
                    [deletion_time] => 0
                    [access_time] => 1123962864
                    [ref_count] => 1
                    [mem_size] => 677
                )
            [1] => Array (...her önbellek dosyası için yinelenir)
)



apc_clear_cache

(PECL apc >= 2.0.0)

apc_clear_cacheAPC önbelleğini temizler

Açıklama

bool apc_clear_cache ([ string $önbellek_türü ] )

Kullanıcı veya sistem önbelleğini temizler.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Değiştirgeler

önbellek_türü

Eğer önbellek_türü "user" ise, kullanıcı önbelleği temizlenecektir, aksi durumda sistem önbelleği (önbelleğe alınmış dosyalar) temizlenecektir.

Ayrıca Bakınız



apc_compile_file

(PECL apc >= 3.0.13)

apc_compile_file Bir dosyayı, süzgeçlere aldırmadan, arakod (bytecode) önbelleğinde depolar.

Açıklama

bool apc_compile_file ( string $dosyaadi )

Bir dosyayı, süzgeçlere aldırmadan, arakod önbelleğinde depolar.

Değiştirgeler

dosyaadi

Derlenip arakod önbelleğinde depolanacak bir PHP dosyasının mutlak veya göreli yol bilgisi.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.



apc_define_constants

(PECL apc >= 3.0.0)

apc_define_constants Yeniden çağırmak ve yığın tanımlama için bir grup sabit tanımlar

Açıklama

bool apc_define_constants ( string $anahtar , array $sabitler [, bool $buyukluk_duyarli = true ] )

define() işlevi herkesin bildiği gibi yavaştır. APC'nin esas faydası betik ve uygulamaların başarımını arttırmak olduğu için böyle bir mekanizma ile yığın sabit tanımlama imkanı sağlanmak istenmiştir. Bununla birlikte bu işlev beklenen başarımı sağlamamaktadır.

Daha iyi başarım sağlayan bir çözüm için, PECL'de bulunan » hidef eklentisini deneyin.

Bilginize: Bütün önbelleği temizlemeden bir grup sabiti depodan silmek için boş bir dizi, sabitler değiştirgesi olarak geçirilebilir.

Değiştirgeler

anahtar

anahtar depolanan sabitleri isimlendirmekte kullanılır. apc_load_constants() işlevine değiştirge olarak geçirilerek tanımlanan sabitlere ulaşılabilir.

sabitler

sabit_adi => deger çiftlerinden oluşan bir ilişkisel dizi. sabit_adi normal sabit isimlendirme kurallarına uymalıdır. deger sayıl (scalar) bir değer olmalıdır.

buyukluk_duyarli

İşlevin öntanımlı davranışı harf büyüklüğüne duyarlıdır, yani SABIT ile Sabit farklı değerlerdir. Eğer bu değiştirge FALSE olarak ayarlanırsa sabitler harf büyüklüğüne duyarsız sembollerle tanımlanacaktır.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apc_define_constants() örneği

<?php
$sabitler 
= array(
    
'BIR'   => 1,
    
'IKI'   => 2,
    
'UC'    => 3,
);
apc_define_constants('sayilar'$sabitler);
echo 
BIRIKIUC;
?>

Yukarıdaki örneğin çıktısı:

123

Ayrıca Bakınız



apc_delete

(PECL apc >= 3.0.0)

apc_delete Depolanmış bir değişkeni önbellekten siler

Açıklama

bool apc_delete ( string $anahtar )

Depolanmış bir değişkeni önbellekten siler.

Değiştirgeler

anahtar

Değeri saklamakta kullanılmak üzere apc_store() işlevi ile verilmiş anahtar.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apc_delete() örneği

<?php
$bar 
'BAR';
apc_store('foo'$bar);
apc_delete('foo');
// saklayip, hemen arkasindan silmek, elbette bir ise yaramaz.
?>

Ayrıca Bakınız

  • apc_store() - Bir değişkeni veri deposunda saklar
  • apc_fetch() - Depolanmış bir değişkeni önbellekten alır



apc_fetch

(PECL apc >= 3.0.0)

apc_fetch Depolanmış bir değişkeni önbellekten alır

Açıklama

mixed apc_fetch ( string $anahtar [, bool &$durum ] )

Depolanmış bir değişkeni önbellekten alır.

Değiştirgeler

anahtar

apc_store() işlevi ile değeri depolamak için kullanılan anahtar.

durum

Başarı durumunda TRUE, aksi durumda FALSE değerini alır.

Dönen Değerler

Başarı durumda depolanmış değişken, aksi durumda FALSE

Örnekler

Örnek 1 - apc_fetch() örneği

<?php
$bar 
'BAR';
apc_store('foo'$bar);
var_dump(apc_fetch('foo'));
?>

Yukarıdaki örneğin çıktısı:

string(3) "BAR"

Ayrıca Bakınız

  • apc_store() - Bir değişkeni veri deposunda saklar
  • apc_delete() - Depolanmış bir değişkeni önbellekten siler



apc_load_constants

(PECL apc >= 3.0.0)

apc_load_constants Önbellekten bir sabit kümesini yükler

Açıklama

bool apc_load_constants ( string $anahtar [, bool $buyukluk_duyarli = true ] )

Önbellekten bir dizi sabiti yükler.

Değiştirgeler

anahtar

Sabitleri yığın halinde apc_define_constants() ile önbelleğe saklarken verilmiş isim.

buyukluk_duyarli

İşlevin öntanımlı davranışı harf büyüklüğüne duyarlıdır, yani SABIT ile Sabit farklı değerlerdir. Eğer bu değiştirge FALSE olarak ayarlanırsa sabitler harf büyüklüğüne duyarsız sembollerle tanımlanacaktır.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apc_load_constants() örneği

<?php
$sabitler 
= array(
    
'BIR'   => 1,
    
'IKI'   => 2,
    
'UC' => 3,
);
apc_define_constants('sayilar'$sabitler);
apc_load_constants('sayilar');
echo 
BIRIKIUC;
?>

Yukarıdaki örneğin çıktısı:

123

Ayrıca Bakınız



apc_sma_info

(PECL apc >= 2.0.0)

apc_sma_info APC paylaşımlı bellek tahsis durumu bilgisini verir

Açıklama

array apc_sma_info ([ bool $sınırlı = false ] )

APC paylaşımlı bellek tahsis durumu bilgisini verir.

Değiştirgeler

sınırlı

Bu değiştirge FALSE olarak ayarlandığı zaman apc_sma_info() işlevi her bir bölüm için daha ayrıntılı bilgi verecektir. FALSE öntanımlı değerdir.

Dönen Değerler

Başarı durumunda paylaşımlı bellek tahsis verileri, hata durumunda FALSE.

Örnekler

Örnek 1 - apc_sma_info() örneği

<?php
print_r
(apc_sma_info());
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [num_seg] => 1
    [seg_size] => 31457280
    [avail_mem] => 31448408
    [block_lists] => Array
        (
            [0] => Array
                (
                    [0] => Array
                        (
                            [size] => 31448408
                            [offset] => 8864
                        )

                )

        )

)



apc_store

(PECL apc >= 3.0.0)

apc_store Bir değişkeni veri deposunda saklar

Açıklama

bool apc_store ( string $anahtar , mixed $degisken [, int $yasam_suresi = 0 ] )

Bir değişkeni veri deposunda saklar.

Bilginize: apc_store() işlevi ile saklanan değişkenler, PHP'nin diğer saklama yöntemlerinin aksine, istekler arasında kalıcı olacaktır (değer önbellekten kaldırılana kadar).

Değiştirgeler

anahtar

Değişken depoda bu isimle saklanacaktır. anahtar lar önbellekte benzersizdir, aynı isimde ikinci bir değer saklamaya çalışmak asıl değerin üzerine yazacaktır.

degisken

Saklanacak değişken.

yasam_suresi

Yaşam Süresi (ttl); degisken , yasam_suresi saniye süresince depoda saklanacaktır. yasam_suresi geçildikten sonraki istekte önbellekten çıkartılacaktır. Eğer yasam_suresi verilmediyse veya 0 olarak ayarlandıysa, değer el yordamıyla silinmediği veya önbellek boşaltılma, yeniden başlatma, vs. gibi süreçler ile temizlenmediği sürece saklanacaktır.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apc_store() örneği

<?php
$bilgi 
'bilgi';
apc_store('sakla'$bilgi);
var_dump(apc_fetch('sakla'));
?>

Yukarıdaki örneğin çıktısı:

string(5) "bilgi"

Ayrıca Bakınız

  • apc_add() - Bir değişkeni önbellek veri deposunda saklar
  • apc_fetch() - Depolanmış bir değişkeni önbellekten alır
  • apc_delete() - Depolanmış bir değişkeni önbellekten siler


İçindekiler

  • apc_add — Bir değişkeni önbellek veri deposunda saklar
  • apc_cache_info — APC'nin veri deposundan önbellek bilgisini gösterir
  • apc_clear_cache — APC önbelleğini temizler
  • apc_compile_file — Bir dosyayı, süzgeçlere aldırmadan, arakod (bytecode) önbelleğinde depolar.
  • apc_define_constants — Yeniden çağırmak ve yığın tanımlama için bir grup sabit tanımlar
  • apc_delete — Depolanmış bir değişkeni önbellekten siler
  • apc_fetch — Depolanmış bir değişkeni önbellekten alır
  • apc_load_constants — Önbellekten bir sabit kümesini yükler
  • apc_sma_info — APC paylaşımlı bellek tahsis durumu bilgisini verir
  • apc_store — Bir değişkeni veri deposunda saklar



Gelişmiş PHP Hata Ayıklayıcısı (Advanced PHP debugger)


Giriş

APD Gelişmiş PHP hata ayıklayıcısıdır (Advanced PHP Debugger). PHP kodları için profil oluşturma ve hata ayıklama imkanları sunmanın yanında tam bir yığın geri izlemesi çıkartabilme özelliği vardır. Etkileşimli hata ayıklamayı desteklemesine rağmen APD, öntanımlı olarak verileri izleme dosyalarına yazar. Ayrıca olay tabanlı günlük tutma özelliği sayesinde farklı betikler için farklı düzeylerdeki bilgiler (işlev çağrıları, değiştirge geçişleri, zamanlamalar vb. gibi) açılıp kapatılabilir.

Dikkat

APD bir Zend Eklentisidir, PHP'nin iç işleyişinin işlev çağrılarını ele alış şeklini değiştirir ve bu yüzden diğer Zend Eklentileri (örneğin Zend Optimizer - Zend Verimlileştiricisi) ile uyumlu olmayabilir.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

APD, bir PECL eklentisi olarak » http://pecl.php.net/package/apd adresinden edinilebilir.

Aşağıdaki komutu çalıştırırsanız, APD'nin en son kararlı sürümünü indirilir ve derlenip kurulur:

pear install apd

Bu komut, APD Zend modülünü PHP eklenti dizinine özdevinimli olarak kaydeder. Ancak eklentiyi orada tutmak şart değildir; zend_extension yönergesinde eklentinin yerini belirtmek suretiyle herhangi bir dizine yerleştirebilirsiniz.

Windows kullanıcılarının bu işlevleri kullanabilmesi için php.ini içinde php_apd.dll kütüphanesini etkin kılmaları gerekir. Bu PECL eklentisi için bir DLL mevcut değildir. Ayrıca, Windows üzerinde kurulum bölümüne de bakınız.

INI dosyanıza aşağıdaki satırları ekleyin:

zend_extension = /mutlak/dosya/yolu/apd.so
apd.dumpdir = /mutlak/dosya/yolu/trace/directory
apd.statement_tracing = 0

PHP kurulumunuza bağlı olarak zend_extension yönergesinde şunlardan biri belirtilebilir:

zend_extension              (ZTS'siz, hata ayıklamasız derleme)
zend_extension_ts           (ZTS'li,  hata ayıklamasız derleme)
zend_extension_debug        (ZTS'siz, hata ayıklamalı derleme)
zend_extension_debug_ts     (ZTS'li,  hata ayıklamalı derleme)



Win32 üzerinde Derleme

APD'yi Windows altında derlemek için http://php.net/ adresinde açıklandığı gibi çalışan bir PHP derleme ortamına ihtiyacınız var. Temel olarak Microsoft Visual C++, win32build.zip, bison/flex ve biraz da bilgi gerekir. Ayrıca, adp.dsp'nin satır sonlandırmasının da DOS türünde olmasına dikkat edin, Unix türünde olduğu takdirde Microsoft Visual C++ bundan şikayet edecektir.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

APD Yapılandırma Seçenekleri
İsim Öntanımlı Değişiklik Yeri Sürüm Bilgisi
apd.dumpdir NULL PHP_INI_ALL  
apd.statement_tracing "0" PHP_INI_ALL 0.9'dan beri kullanılabilmektedir.

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

apd.dumpdir string

APD'nin profil döküm dosyalarını yazacağı dizini belirler. Dizini bir mutlak yol olarak belirtebileceğiniz gibi bir göreli yol olarak da belirtebilirsiniz.

apd_set_pprof_trace() işlevine değiştirge olarak farklı bir dizin belirtebilirsiniz.

apd.statement_tracing boolean

Satır satır izleme yapılıp yapılmayacağı belirtilir. Bu yönergeye 'On' (1) değeri atarsanız uygulamanızın başarısı bundan etkilenecektir.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

APD sabitleri
Sabit Değer Açıklama
FUNCTION_TRACE (integer) 1  
ARGS_TRACE (integer) 2  
ASSIGNMENT_TRACE (integer) 4  
STATEMENT_TRACE (integer) 8  
MEMORY_TRACE (integer) 16  
TIMING_TRACE (integer) 32  
SUMMARY_TRACE (integer) 64  
ERROR_TRACE (integer) 128  
PROF_TRACE (integer) 256  
APD_VERSION (string) örnek: 1.0.2-dev  


Örnekler

İçindekiler


PHP-APD'yi betiklerde kullanmak

  1. İzlemeyi başlatmak için PHP betiğinizin ilk satırında apd_set_pprof_trace() işlevini çağırın.

    apd_set_pprof_trace();

    İşlevi betiğinizdeki herhangi bir satıra da ekleyebilirsiniz, fakat eğer izlemeye betiğinizin başından başlamazsanız diğer şekilde sizi bir başarım dar boğazına sürükleyebilecek olan profil bilgisini atmış olacaksınız.

  2. Şimdi betiği çalıştırın. Döküm çıktısı apd.dumpdir/pprof_pid.ext dosyasına yazılacaktır.

    İpucu

    Eğer PHP'nin CGI sürümünde çalışıyorsanız, apd'nin doğru şekilde çalışması için '-e' seçeneğini kullanarak genişletilmiş bilgiyi etkinleştirmeniz gerekecek. Örneğin: php -e -f script.php

  3. Biçimlendirilmiş profil bilgisini göstermek için, pprofp komutunu istediğiniz sıralama ve gösterme seçenekleri ile çalıştırın. Biçimlendirilmiş çıktı aşağıdaki gibi görünecektir:

    bash-2.05b$ pprofp -R /tmp/pprof.22141.0
    
    Trace for /home/dan/testapd.php
    Total Elapsed Time = 0.00
    Total System Time  = 0.00
    Total User Time    = 0.00
    
    
    Real         User        System             secs/    cumm
    %Time (excl/cumm)  (excl/cumm)  (excl/cumm) Calls    call    s/call  Memory Usage Name
    --------------------------------------------------------------------------------------
    100.0 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0000   0.0009            0 main
     56.9 0.00 0.00  0.00 0.00  0.00 0.00     1  0.0005   0.0005            0 apd_set_pprof_trace
     28.0 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 preg_replace
     14.3 0.00 0.00  0.00 0.00  0.00 0.00    10  0.0000   0.0000            0 str_replace
    

    Bu örnekte kullanılan -R seçeneği profil tablosunu betiğin verili işlevi yürütürken kullandığı gerçek zaman miktarına göre sıralar. "cumm call" sütunu her işlevin ortalama kaç kez çağrıldığını, "s/call" sütunu da her işlev çağrısı için ortalama kaç saniye gerektiğini gösterir

  4. KCacheGrind profil çözümleme uygulamasına aktarabileceğiniz bir çağrı-ağacı dosyası oluşturmak için, pprof2calltree komutunu verin.




APD İşlevleri

Erişim bilgileri

Açıklama, hata düzeltmesi, genişletme, veya geliştirmeye yardım istekleriniz için » apd@mail.communityconnect.com adresine bir eposta gönderiniz. Her türlü yardımı memnuniyetle kabul ederiz.


apd_breakpoint

(PECL apd >= 0.2)

apd_breakpointYorumlayıcıyı durdurur ve soketten bir satırbaşı bekler

Açıklama

bool apd_breakpoint ( int $hata_ayıklama_seviyesi )

Bu işlev betiğinizin çalışmasını durdurur ve bağlı soketten yanıt bekler. Programa adım attırmak için sadece satırbaşı karakteri yollayın ya da çalıştırılacak bir php komutu girin.

Değiştirgeler

hata_ayıklama_düzeyi

XXX_TRACE sabitlerinin toplamından (VEYAlanmasından) oluşan bir tamsayı.

MEMORY_TRACE sabitini kullanmanız önerilmez; çok yavaş olup gerekli doğruluğa sahip görünmemektedir. ASSIGNMENT_TRACE sabiti ise henüz gerçeklenmemiştir.

Tüm işlevselliğe (TIMING, FUNCTIONS, ARGS SUMMARY (strace -c gibi)) sahip olmak için 99 değerini kullanınız.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - tcplisten kullanılan sıradan bir oturum

bash#tcplisten localhost 7777

APD - Advanced PHP Debugger Trace File
---------------------------------------------------------------------------
Process Pid (6118)
Trace Begun at Sun Mar 10 23:13:12 2002
---------------------------------------------------------------------------
(  0.000000): apd_set_session_trace called at /home/alan/Projects/project2/test.
php:5
(  0.074824): apd_set_session_trace_socket() at /home/alan/Projects/project2/tes
t.php:5 returned.  Elapsed (0.074824)
(  0.074918): apd_breakpoint() /home/alan/Projects/project2/test.php:7
              ++ argv[0] $(??) = 9
apd_breakpoint() at /home/alan/Projects/project2/test.php:7 returned.  Elapsed (
-2089521468.1073275368)
>\n
statement: /home/alan/Projects/project2/test.php:8
>\n
statement: /home/alan/Projects/project2/test.php:8
>\n
statement: /home/alan/Projects/project2/test.php:10
>apd_echo($i);
EXEC: apd_echo($i);
0
>apd_echo(serialize(apd_get_active_symbols()));
EXEC:  apd_echo(serialize(apd_get_active_symbols()));
a:47:{i:0;s:4:"PWD";i:1;s:10:"COLORFGBG";i:2;s:11:"XAUTHORITY";i:3;s:14:"
COLORTERM_BCE";i:4;s:9:"WINDOWID";i:5;s:14:"ETERM_VERSION";i:6;s:16:"SE
SSION_MANAGER";i:7;s:4:"PS1";i:8;s:11:"GDMSESSION";i:9;s:5:"USER";i:10;s:5:"
MAIL";i:11;s:7:"OLDPWD";i:12;s:5:"LANG";i:13;s:10:"COLORTERM";i:14;s:8:"DISP
LAY";i:15;s:8:"LOGNAME";i:16;s:6:"
>apd_echo(system('ls /home/mydir'));
........
>apd_continue(0);



apd_callstack

(PECL apd 0.2-0.4)

apd_callstackGeçerli yordam dökümünü bir dizi olarak döndürür

Açıklama

array apd_callstack ( void )

Geçerli yordam dökümünü bir dizi olarak döndürür.

Dönen Değerler

Geçerli yordam dökümünü içeren bir dizi.

Örnekler

Örnek 1 - apd_callstack() örneği

<?php
print_r
(apd_callstack());
?>



apd_clunk

(PECL apd 0.2-0.4)

apd_clunkBir uyarı ve yordam dökümü verip çıkar

Açıklama

void apd_clunk ( string $uyarı [, string $delimiter ] )

Perl'ün Carp::clunk işlevine benzer davranır. Bir uyarı ve yordam dökümü verip çıkar.

Değiştirgeler

uyarı

Verilecek uyarı.

ayraç

Ayraç. <BR /> öntanımlıdır.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - apd_clunk() örneği

<?php
apd_clunk
("Herhangi bir uyarı...""<br/>");
?>

Ayrıca Bakınız

  • apd_croak() - Bir hata ve yordam dökümü verip çıkar



apd_continue

(PECL apd >= 0.2)

apd_continueYorumlayıcıyı yeniden başlatır

Açıklama

bool apd_continue ( int $hata_ayıklama_seviyesi )

Yorumlayıcıyı tekrar başlatmak isteği genelde hata ayıklama soketi aracılığıyla gönderilir.

Değiştirgeler

hata_ayıklama_düzeyi

XXX_TRACE sabitlerinin toplamından (VEYAlanmasından) oluşan bir tamsayı.

MEMORY_TRACE sabitini kullanmanız önerilmez; çok yavaş olup gerekli doğruluğa sahip görünmemektedir. ASSIGNMENT_TRACE sabiti ise henüz gerçeklenmemiştir.

Tüm işlevselliğe (TIMING, FUNCTIONS, ARGS SUMMARY (strace -c gibi)) sahip olmak için 99 değerini kullanınız.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apd_continue() örneği

<?php
apd_continue
(0);
?>



apd_croak

(PECL apd 0.2-0.4)

apd_croakBir hata ve yordam dökümü verip çıkar

Açıklama

void apd_croak ( string $hata_iletisi [, string $ayraç ] )

Perl'ün Carp::croak işlevi gibi davranır. Bir hata ve yordam dökümü verip çıkar.

Değiştirgeler

hata_iletisi

Verilecek hatanın iletisi.

ayraç

Ayraç. <BR /> öntanımlıdır.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - apd_croak() örneği

<?php
apd_croak
("Bir hata iletisi...","<P>");
?>

Ayrıca Bakınız

  • apd_clunk() - Bir uyarı ve yordam dökümü verip çıkar



apd_dump_function_table

(Unknown)

apd_dump_function_tableGeçerli işlev tablosunu çıktılar

Açıklama

void apd_dump_function_table ( void )

Geçerli işlev tablosunu çıktılar.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - apd_dump_function_table() örneği

<?php
apd_dump_function_table
();
?>



apd_dump_persistent_resources

(PECL apd 0.2-0.4)

apd_dump_persistent_resourcesTüm kalıcı özkaynakları bir dizi içinde döndürür

Açıklama

array apd_dump_persistent_resources ( void )

Tüm kalıcı özkaynakları dizi halinde döndürür.

Dönen Değerler

Geçerli çağrı yığınını içeren bir dizi.

Örnekler

Örnek 1 - apd_dump_persistent_resources() örneği

<?php
print_r
(apd_dump_persistent_resources());
?>

Ayrıca Bakınız



apd_dump_regular_resources

(PECL apd 0.2-0.4)

apd_dump_regular_resourcesGeçerli normal özkaynakların tümünü bir dizi olarak döndürür

Açıklama

array apd_dump_regular_resources ( void )

Geçerli normal özkaynakların tümünü bir dizi olarak döndürür.

Dönen Değerler

Geçerli normal özkaynakları içeren bir dizi.

Örnekler

Örnek 1 - apd_dump_regular_resources() örneği

<?php
print_r
(apd_dump_regular_resources());
?>

Ayrıca Bakınız



apd_echo

(PECL apd >= 0.2)

apd_echoÇıktıyı hata ayıklama soketine gönderir

Açıklama

bool apd_echo ( string $çıktı )

Çalışan betik hakkında bilgi isteğini hata ayıklama soketi üzerinden gönderilir.

Değiştirgeler

çıktı

Hata ayıklama sürecindeki değişken.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apd_echo() örneği

<?php
apd_echo
($i);
?>



apd_get_active_symbols

(PECL apd 0.2)

apd_get_active_symbolsYerel etki alanında geçerli değişken isimlerinden oluşan bir dizi döndürür

Açıklama

array apd_get_active_symbols ( void )

Etkin etki alanında tanımlı tüm değişkenlerin isimlerini döndürür (değerlerini değil!).

Dönen Değerler

Tüm değişkenleri içeren çok boyutlu bir dizi.

Örnekler

Örnek 1 - apd_get_active_symbols() örneği

<?php
apd_echo
(apd_get_active_symbols());
?>



apd_set_pprof_trace

(PECL apd >= 0.2)

apd_set_pprof_traceHata ayıklama oturumunu başlatır

Açıklama

string apd_set_pprof_trace ([ string $döküm_dizini [, string $önek = "pprof" ]] )

Döküm dizininde pprof_{süreç_kimliği} dosyasına hata ayıklamayı başlatır.

Değiştirgeler

döküm_dizini

Profil döküm dosyasının kaydedileceği dizin. Belirtilmez ise, php.ini dosyasındaki apd.dumpdir ayarı kullanılır.

önek

Dosya ismi için önek; "pprof" öntanımlıdır.

Dönen Değerler

Hedef dosyanın dosya yolunu döndürür.

Örnekler

Örnek 1 - apd_set_pprof_trace() örneği

<?php
apd_set_pprof_trace
();
?>

Ayrıca Bakınız



apd_set_session_trace_socket

(PECL apd >= 0.2)

apd_set_session_trace_socketUzaktan oturumla hata ayıklamayı başlatır

Açıklama

bool apd_set_session_trace_socket ( string $tcp_sunucusu , int $soket_türü , int $port , int $hata_ayıklama_seviyesi )

Belirtilen tcp_sunucusu 'na (örneğin, tcplisten) bağlanır ve hata ayıklama verilerini o bağlantı noktasına gönderir.

Değiştirgeler

tcp_sunucusu

TCP sunucunun IP'si ya da Unix Alanı bağlantı noktası (bir dosya olarak).

soket_türü

Dosya tabanlı bağlantı noktaları için AF_UNIX ya da standart tcp/ip için APD_AF_INET olabilir.

port

Herhangi bir portu kullanabilirsiniz, fakat 1024'ten büyük sayıları kullanmanız küçük sayıların diğer sistem tarafından kullanılıyor olma olasılığı nedeniyle daha iyidir.

hata_ayıklama_düzeyi

XXX_TRACE sabitlerinin toplamından (VEYAlanmasından) oluşan bir tamsayı.

MEMORY_TRACE sabitini kullanmanız önerilmez; çok yavaş olup gerekli doğruluğa sahip görünmemektedir. ASSIGNMENT_TRACE sabiti ise henüz gerçeklenmemiştir.

Tüm işlevselliğe (TIMING, FUNCTIONS, ARGS SUMMARY (strace -c gibi)) sahip olmak için 99 değerini kullanınız.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - apd_set_session_trace_socket() örneği

<?php
  apd_set_session_trace_socket 
("127.0.0.1"APD_AF_INET71120);
?>



apd_set_session_trace

(PECL apd 0.2-0.4)

apd_set_session_traceHata ayıklama oturumunu başlatır

Açıklama

void apd_set_session_trace ( int $hata_ayıklama_seviyesi [, string $döküm_dizini ] )

Döküm dizininde pprof_{süreç_kimliği} dosyasına hata ayıklamayı başlatır.

Değiştirgeler

hata_ayıklama_düzeyi

XXX_TRACE sabitlerinin toplamından (VEYAlanmasından) oluşan bir tamsayı.

MEMORY_TRACE sabitini kullanmanız önerilmez; çok yavaş olup gerekli doğruluğa sahip görünmemektedir. ASSIGNMENT_TRACE sabiti ise henüz gerçeklenmemiştir.

Tüm işlevselliğe (TIMING, FUNCTIONS, ARGS SUMMARY (strace -c gibi)) sahip olmak için 99 değerini kullanınız.

döküm_dizini

Profil döküm dosyasının kaydedileceği dizin. Belirtilmez ise, php.ini dosyasındaki apd.dumpdir ayarı kullanılır.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - apd_set_session_trace() örneği

<?php
apd_set_session_trace
(99);
?>



apd_set_session

(PECL apd 0.2-0.4)

apd_set_sessionGeçerli hata ayıklama seviyesini belirtir ya da değiştirir

Açıklama

void apd_set_session ( int $hata_ayıklama_seviyesi )

Bu işlev uygulamanızın belli bir yerinde hata ayıklama seviyesini arttırmak ya da azaltmak için kullanılır.

Değiştirgeler

hata_ayıklama_düzeyi

XXX_TRACE sabitlerinin toplamından (VEYAlanmasından) oluşan bir tamsayı.

MEMORY_TRACE sabitini kullanmanız önerilmez; çok yavaş olup gerekli doğruluğa sahip görünmemektedir. ASSIGNMENT_TRACE sabiti ise henüz gerçeklenmemiştir.

Tüm işlevselliğe (TIMING, FUNCTIONS, ARGS SUMMARY (strace -c gibi)) sahip olmak için 99 değerini kullanınız.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - apd_set_session() örneği

<?php
apd_set_session
(9);
?>



override_function

(PECL apd >= 0.2)

override_functionYerleşik işlevleri geçersiz kılar

Açıklama

bool override_function ( string $işlev_ismi , string $işlev_değiştirgeleri , string $işlev_kodu )

Simge tablosunda değişiklik yaparak yerleşik işlevleri geçersiz kılar.

Değiştirgeler

işlev_ismi

Geçersiz kılınacak işlev.

işlev_değiştirgeleri

Virgülle ayrılmış dizgeler halinde işlev değiştirgeleri.

Genellikle bu değiştirgeleri ve işlev_kodu değiştirgelerini tek tırnakla sınırlanmış dizge olarak geçirmek isteyeceksiniz. Tek tırnaklı dizge kullanımının sebebi değişken isimlerinin işlenmesini engellemektir, aksi durumda, çift tırnak kullanırsanız değişken isimlerinde önceleme karakteri kullanmanız gerekir (\$değişken gibi).

işlev_kodu

İşlevin yeni kodu.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - override_function() örneği

<?php
override_function
('test''$a,$b''echo "DNM 123"; return $a * $b;');
?>



rename_function

(PECL apd >= 0.2)

rename_functionKüresel işlev tablosunda bir işlevin ismini değiştirir

Açıklama

bool rename_function ( string $özgün_isim , string $yeni_isim )

Küresel işlev tablosunda bir işlevin ismini değiştirir. Yerleşik işlevleri geçici olarak geçersiz kılmak için kullanışlıdır.

Değiştirgeler

özgün_isim

Asıl işlev ismi.

yeni_isim

İşlevin özgün isminin yerini alacak isim.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - rename_function() örneği

<?php
rename_function
('mysql_connect'';debug_mysql_connect' );
?>


İçindekiler




PHP için derleyici


Giriş

Uyarı

Bu eklenti DENEYSELDİR. Bu eklentinin davranışı, işlev isimleri ve tüm belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu eklentiyi kullanmayın.

Bcompiler eklentisi birkaç amacı, görevi gerçekleştirmek için yazılmıştır:

  • Özel PHP uygulamalarında bütün betiğin kodlanmasını sağlamak
  • Özel PHP uygulamalarında bazı sınıf veya işlevlerin kodlanmasını sağlamak
  • İstemci masaüstlerinde çalışan php-gtk uygulamalarında, uygulamanın php.exe'ye ihtiyaç duymadan çalışmasını sağlamak.
  • PHP'den C'ye dönüştürücü için ölçeklenebilir çalışma yapmak

Bunların ilki bcompiler_write_header(), bcompiler_write_file() ve bcompiler_write_footer() işlevleri kullanılarak gerçekleştirilir. Derlenen dosyalar sıkıştırılmamış veya salt metin olarak yazılabilir. Derlenmiş dosyayı kullanabilmek için basit bir şekilde include veya require deyimleri kullanılabilir.

İkinci tip görevler bcompiler_write_header(), bcompiler_write_class(), bcompiler_write_footer(), bcompiler_read(), ve bcompiler_load() işlevleri kullanılarak gerçekleştirilebilir. Derlenmiş dosyalar sıkıştırılmamış veya salt metin olarak yazılabilir. bcompiler_load() işlevi sıkıştırılmış bir derlenmiş dosyayı okuyabilir, bu sıkıştırılmış dosyalar özgün dosyanın 1/3 boyutunda olabilirler.

EXE türünde dosyalar oluşturmak için, bcompiler değiştirilmiş bir sapi dosyası veya paylaşımlı kütüphane şeklinde derlenmiş bir PHP sürümü ile birlikte kullanılmalıdır. Bu durumda, bcompiler sıkıştırılmış kodları exe dosyasının sonundan okur.

Bcompiler sıkıştırılmamış kodlarla kullanıldığı zaman yaklaşık %30 daha verimli çalışabilir. Sıkıştırılmamış kodların özgün kaynak kodundan 5 kez daha büyük olduğunu unutmayın. Kodları sıkıştırılmış şekilde kullanmak size alan kazandırır fakat sıkıştırılmış kodun açılması kaynağın çözümlenmesinden çok daha fazla zaman ister. Bcompiler herhangi bir kod en iyileştirmesi yapmaz, en iyileştirme gelecekte eklenebilir...

Kod koruması bakış açısından, kodun derlenmiş halinden yorumlu kaynak koda ulaşmanın imkansız olduğunu söyleyebiliriz. Bcompiler ile derlenmiş koddan tekrar oluşturulmuş ve değiştirilmiş bir sınıf etkin şekilde kullanılamaz. Bununla birlikte derlenmiş dosyadan veri elde etmek mümkündür, yani şifreleri veya özel olan herhangi bir şeyi derlenecek dosyalara koymayın.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Kısaca kurulum notları:

  • Sıkıştırmanın çalışabilmesi için en az PHP 4.3.0 sürümü gereklidir.
  • Unix üzerinde PHP 4.3.0 ve sonrasını kurmak için komut isteminde pear install bcompiler yazmak yeterlidir. Bunun çalışabilmesi için Pear'ın kurulu olması gerekir.
  • Windows üzerinde kurulum için, ikilik paket dağıtım mekanizması geliştirilene kadar pear-general eposta listesinde ön derlenmiş paketleri arayınız (bir başvuru bulamazsanız eposta gönderiniz).
  • Daha eski sürümlere kurabilmek için derlemede ufak değişiklikler gereklidir.
  • bcompiler.tgz arşivini php4/ext klasörüne açın. (Arşivi PECL » http://pecl.php.net/get/bcompiler adresinden alabilirsiniz.)
  • Yeni dizin bcompiler-0.x gibi bir isimde ise bcompiler olarak isimlendirin (sadece kendisini içeren php modülü istediğiniz durum hariç).
  • PHP 4.3.0 öncesi bir sürüm kullanıyorsanız, Makefile.in.old dosyasını Makefile.in olarak ve config.m4.old dosyasını config.m4 olarak isimlendirin.
  • ext/bcompiler klasöründe phpize komutunu çalıştırın.
  • php4 klasöründe ./buildconf'u çalıştırın.
  • --enable-bcompiler seçeneği (ve diğer seçenekleriniz) ile configure komutunu çalıştırın.
  • make; make install
  • komutlarını çalıştırarak bitirin.



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Bu eklentinin tanımlanmış sabitleri yoktur.



bcompiler İşlevleri

İletişim Bilgileri

Yorum, hata düzeltmeleri, öneri veya geliştirmeye yardım etmek için bana » alan_k@php.net adresinden eposta gönderebilirsiniz. Şimdiden teşekkürler.


bcompiler_load_exe

(PECL bcompiler >= 0.4)

bcompiler_load_exebcompiler exe dosyasından sınıfları okur ve oluşturur

Açıklama

bool bcompiler_load_exe ( string $dosyaadi )

bcompiler exe dosyasından veriyi okur ve derlenmiş koddan sınıfları oluşturur.

Değiştirgeler

dosyaadi

Dizge olarak exe dosya yolu.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_load_exe() örneği

<?php

bcompiler_load_exe
("/tmp/example.exe");
print_r(get_defined_classes());

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Ayrıca Bakınız

  • bcompiler_load() - bz biçiminde sıkıştırılmış dosyadan, sınıfları okur ve oluşturur



bcompiler_load

(PECL bcompiler >= 0.4)

bcompiler_loadbz biçiminde sıkıştırılmış dosyadan, sınıfları okur ve oluşturur

Açıklama

bool bcompiler_load ( string $dosyaadi )

bz biçiminde sıkıştırılmış dosyadan veriyi okur ve derlenmiş koddan sınıfları oluşturur.

Değiştirgeler

dosyaadi

Dizge olarak, bz sıkıştırılmış dosya yolu.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_load() örneği

<?php

bcompiler_load
("/tmp/example");

print_r(get_defined_classes());

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Bilginize: Derlenmiş kodları çözümlemek için lütfen include veya require deyimlerini kullanın, bu işlevler bcompiler_load işlevinden daha uygun ve taşınabilirdir.
Bu işlevin, derlenmiş dosyanın gövdesinde bulunan betiği çalıştırmadığına dikkat edin.

Ayrıca Bakınız



bcompiler_parse_class

(PECL bcompiler >= 0.4)

bcompiler_parse_classDerlenmiş koddan sınıfı okur ve kullanıcı tanımlı işleve geriçağırım yapar

Açıklama

bool bcompiler_parse_class ( string $sinif , string $gericagirim )

Derlenmiş koddan sınıfı okur ve kullanıcı tanımlı işleve geriçağırım yapar.

Değiştirgeler

sinif

Dizge olarak sınıf adı.

gericagirim

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_parse_class() örneği

<?php

function readByteCodes($data) {
    
print_r($data);
}

bcompiler_parse_class("DB","readByteCodes");

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Bilginize: Bu işlev, bcompiler'dan çıkartılmıştır. 0.5 ve sonraki bcompiler sürümlerinde geçerli değildir.



bcompiler_read

(PECL bcompiler >= 0.4)

bcompiler_readBir dosya tanıtıcısından sınıfları okur ve oluşturur

Açıklama

bool bcompiler_read ( resource $dosyatanitici )

Açık bir dosya tanıtıcısından derlenmiş veri okur ve sınıflar oluşturur.

Değiştirgeler

dosyatanitici

fopen() işlevinden elde edilmiş bir tanıtıcı.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_read() örneği

<?php
$fh 
fopen("/tmp/example","r");
bcompiler_read($fh);
fclose($fh);
print_r(get_defined_classes());

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Bilginize: Derlenmiş kodları çözümlemek için lütfen include veya require deyimlerini kullanının, bu işlevler bcompiler_load işlevinden daha uygun ve taşınabilirdir.
Bu işlevin, derlenmiş dosyanın gövdesinde bulunan betiği çalıştırmadığına dikkat edin.



bcompiler_write_class

(PECL bcompiler >= 0.4)

bcompiler_write_classTanımlanmış bir sınıfı dosyaya yazar

Açıklama

bool bcompiler_write_class ( resource $dosyatanitici , string $sinifadi [, string $genisletme ] )

Tanımlanmış sınıfı derlenmiş koddan okur ve açık bir dosya tanıtıcısına yazar.

Değiştirgeler

dosyatanitici

fopen() işlevinden elde edilmiş bir tanıtıcı.

sinifadi

Dizge olarak sınıf adı.

genisletme

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_write_class() örneği

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
// DB_common'u DB_mysql'den önce yazmalısınız, DB_mysql DB_common'u
// genişletir.
bcompiler_write_class($fh,"DB_common");
bcompiler_write_class($fh,"DB_mysql");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Bilginize: Bu işlev bağımlılık denetlemesi yapmaz, yükleme sırasında undefined class hatası almamak için sınıfları doğru sırada yazdığınızdan emin olmalısınız.

Ayrıca Bakınız



bcompiler_write_constant

(PECL bcompiler >= 0.5)

bcompiler_write_constantTanımlanmış sabiti dosyaya yazar

Açıklama

bool bcompiler_write_constant ( resource $dosyatanitici , string $sabitadi )

PHP kodunda tanımlanmış sabiti okur ve açık bir dosya tanıtıcısına yazar.

Değiştirgeler

dosyatanitici

fopen() işlevinden elde edilmiş bir tanıtıcı.

sabitadi

Dizge olarak, tanımlanmış sabitin adı.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_write_constant() örneği

<?php
define
("MODULE_MAX"30);

$fh fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_constant($fh,"MODULE_MAX");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Ayrıca Bakınız




bcompiler_write_file

(PECL bcompiler >= 0.6)

bcompiler_write_fileBir php kaynak dosyasını derleyerek yazar

Açıklama

bool bcompiler_write_file ( resource $dosyatanitici , string $dosyaadi )

Bu işlev, verilmiş php kaynak dosyasını derler ve açık bir dosya tanıtıcısına yazar.

Değiştirgeler

dosyatanitici

fopen() işlevinden dönen bir tanıtıcı.

dosyaadi

Dizge olarak kaynak dosya yolu.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_write_file() örneği

<?php
$fh 
fopen("example.phb""w");
bcompiler_write_header($fh);
bcompiler_write_file($fh"example.php");
bcompiler_write_footer($fh);
fclose($fh);
/* aşağıdaki iki deyim denk olmalıdır:
include "example.php";
   ve
include "example.phb";
*/
?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Ayrıca Bakınız




bcompiler_write_function

(PECL bcompiler >= 0.5)

bcompiler_write_functionTanımlı bir işlevi derlenmiş olarak yazar

Açıklama

bool bcompiler_write_function ( resource $dosyatanitici , string $islevAdi )

İşlevi PHP kodundan okur ve açık dosya tanıtıcısına derlenmiş olarak yazar. Sıralama önemli değildir (aşağıdaki örnekte işlev b, işlev a'yı kullanıyor olsa bile düzgün çalışacaktır).

Değiştirgeler

dosyatanitici

fopen() işlevinden dönen tanıtıcı.

islevAdi

Dizge olarak işlev adı.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_write_function() örneği

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_function($fh,"my_function_a");
bcompiler_write_function($fh,"my_function_b");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Ayrıca Bakınız



bcompiler_write_functions_from_file

(PECL bcompiler >= 0.5)

bcompiler_write_functions_from_fileBir dosya içinde tanımlanmış bütün işlevleri derleyerek yazar

Açıklama

bool bcompiler_write_functions_from_file ( resource $dosyatanitici , string $dosyaAdi )

Dosya içindeki bütün tanımlı işlevleri arar ve derlenmiş karşılıklarını açık dosya tanıtıcısına yazar.

Değiştirgeler

dosyatanitici

fopen() işlevinden dönen tanıtıcı.

dosyaAdi

Derlenecek dosya, bu dosyayı daima include veya require deyimleri ile eklemelisiniz.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_write_functions_from_file() örneği

<?php
require('module.php');

$fh fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_functions_from_file($fh,'module.php');
bcompiler_write_footer($fh);
fclose($fh);

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Ayrıca Bakınız



bcompiler_write_header

(PECL bcompiler >= 0.3)

bcompiler_write_headerbcompiler dosya başlığını yazar

Açıklama

bool bcompiler_write_header ( resource $dosyatanitici [, string $surum ] )

bcompiler dosyasındaki başlık kısmını yazar.

Değiştirgeler

dosyatanitici

fopen() işlevinden dönen tanıtıcı.

surum

Derlenmiş kodu bcompiler'ın eski sürümleri ile birlikte kullanabilmek için dosyayı yazarken önceki sürüm biçimi seçeneği kullanılabilir.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - bcompiler_write_header() örneği

<?php
$fh 
fopen("/tmp/example","w");
bcompiler_write_header($fh);
bcompiler_write_class($fh,"DB");
bcompiler_write_footer($fh);
fclose($fh);

?>

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Ayrıca Bakınız



bcompiler_write_included_filename

(PECL bcompiler >= 0.5)

bcompiler_write_included_filenameEklenmiş bir dosyayı derlenmiş olarak yazar

Açıklama

bool bcompiler_write_included_filename ( resource $dosyatanitici , string $dosyaadi )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Notlar

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.


İçindekiler




Hata İşleme ve Günlükleme


Giriş

Bu işlevler hataların elde edilmesi ve günlük kayıtlarının tutulması ile ilgilidir. Bu işlevlerle kendi hata işleme kurallarınızı tanımlayabileceğiniz gibi hataların günlük dosyalarına nasıl kaydedileceğiyle ilgili değişiklikler de yapabilirsiniz. Böylece hata bildirimini ihtiyaçlarınıza uygun bir biçimde değiştirebilir veya genişletebilirsiniz.

Hata iletilerini günlük kayıt işlevleriyle doğrudan diğer makinelere, bir eposta adresine, sistem günlüklerine ve benzerlerine gönderebilirsiniz. Dolayısıyla, uygulamanızın veya sitenizin en önemli kısımlarını gözlem altında tutabilir ve bunlardan istediklerinizi günlük dosyalarına kaydedebilirsiniz.

Hata bildirim işlevleri, basit uyarılardan özel işlevlerin döndürdükleri hatalara kadar bir yelpazede geribildirim çeşidini ve seviyesini belirleyebilme olanağını verır.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu işlevleri kullanmak için hiçbir şey kurmaya gerek yoktur; PHP çekirdeğinin parçasıdırlar.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

Hatalar ve Günlük Kaydı ile ilgili Yapılandırma Yönergeleri
İsim Öntanımlı Değişiklik Yeri Sürüm Bilgisi
error_reporting NULL PHP_INI_ALL  
display_errors "1" PHP_INI_ALL  
display_startup_errors "0" PHP_INI_ALL  
log_errors "0" PHP_INI_ALL  
log_errors_max_len "1024" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir.
ignore_repeated_errors "0" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir.
ignore_repeated_source "0" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir.
report_memleaks "1" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir.
track_errors "0" PHP_INI_ALL  
html_errors "1" PHP_INI_ALL PHP <= 4.2.3'te PHP_INI_SYSTEM.
xmlrpc_errors "0" PHP_INI_SYSTEM PHP 4.1.0'dan beri kullanılabilmektedir.
xmlrpc_error_number "0" PHP_INI_ALL PHP 4.1.0'dan beri kullanılabilmektedir.
docref_root "" PHP_INI_ALL PHP 4.3.0'dan beri kullanılabilmektedir.
docref_ext "" PHP_INI_ALL since PHP 4.3.2'den beri kullanılabilmektedir.
error_prepend_string NULL PHP_INI_ALL  
error_append_string NULL PHP_INI_ALL  
error_log NULL PHP_INI_ALL  

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

error_reporting integer

Hata raporlama seviyesini tanımlar. Değiştirge olarak ya bir bit alanını ifade eden bir tamsayı ya da isimli sabitler verilebilir. Hata raporlama seviyeleri ve sabitleri Öntanımlı Sabitler sayfasında ve php.ini içinde açıklanmıştır. Hata raporlama seviyesini çalışma anında belirtmek için error_reporting() işlevini kullanabilirsiniz. Ayrıca, display_errors yönergesine de bakınız.

PHP 4 ve PHP 5'te öntanımlı değer E_ALL & ~E_NOTICE olup bu ayarla E_NOTICE seviyesindeki hatalar gösterilmez. Betiğinizi geliştirirken onları da görmek isteyebilirsiniz.

Bilginize: E_NOTICE seviyesindeki hataların geliştirme aşamasında gösterilmesinin bazı yararları vardır. Hata ayıklama amacıyla kullanıldığında E_NOTICE iletileri kodunuzdaki olası hatalar hakkında sizi uyarır. Örneğin atanmamış değerlerin kullanımı hakkında bir uyarı alırsınız. Özellikle yazım hatalarını bulmakta yardımcı olarak hata ayıklamakla zaman kaybetmekten sizi kurtarır. E_NOTICE iletileri kötü yazım tarzı için de sizi uyarır. Örneğin, PHP "item" indisini bir sabit olarak ele almayı deneyeceğinden $arr[item] yerine $arr['item'] yazmak daha iyidir. Belirttiğiniz indis bir sabit değilse PHP bunu dizinin bir anahtarı (dizgesel indisi) olarak kabul edecektir.

Bilginize: PHP 5'te E_STRICT yeni bir hata seviyesi olarak devreye girmiştir. E_ALL ile birlikte açıkça belirtilmedikçe E_STRICT seviyesinden hata raporları etkin olmayacaktır. E_STRICT seviyesinden hataların geliştirme aşamasında gösterilmesinin bazı yararları vardır. Bu iletiler, en son ve en çok önerilen kodlama yöntemini kullanmanız için size yardımcı olacaktır. Örneğin, kullanımı artık önerilmeyen işlevler hakkında uyarılacaksınız.

Bilginize: PHP dışında PHP sabitleri
httpd.conf gibi PHP dışı yerlerde PHP sabitlerini kullanmak isterseniz, bunların tamsayı değerlerini kullanmak zorunda kalmak anlamlarını anlamayı zorlaştırdığı için elverişli olmayacaktır. Zamanla başka hata seviyeleri ekleneceğinden azami değer de (E_ALL değeri) değişecektir. Bu bakımdan E_ALL yerine şimdiki ve gelecekteki tüm bit alanlarını kapsamak üzere 2147483647 gibi büyük bir değer kullanabilirsiniz (E_ALL'dan başka tüm hataları da içerir).

display_errors string

Hataların çıktının bir parçası olarak ekrana basılıp basılmayacağını veya bunların kullanıcıdan gizlenip gizlenmeyeceğini belirler.

"stderr" değeri hataları stdout (standart çıktı) yerine stderr'e (standart hataya) gönderir. Bu değer PHP'nin 5.2.4 sürümünden beri kullanılabilmektedir. Eski sürümlerde bu yönerge sadece boolean türünde değer kabul ederdi.

Bilginize: Bu özellik sizi geliştirme aşamasında desteklemek amacıyla konmuştur ve kullanıcıya yönelik işlemler için asla kullanılmamalıdır.

Bilginize: Bu yönergeye çalışma anında (ini_set() ile) değer atanabilse de, eğer betik ölümcül bir hataya sahipse bunun herhangi bir etkisi olmayacaktır. Bunun sebebi çalışma anında istenen eylemin yerine getirilmeyecek olmasıdır.

display_startup_errors boolean

display_errors etkin olsa bile PHP ilk başlatılırken oluşan hatalar gösterilmez. Hata ayıklamıyorsanız display_startup_errors yönergesinin değerini off olarak bırakın.

log_errors boolean

Betiğin hata iletilerinin sunucunun hata günlüğüne veya error_log ile belirtilen dosyaya kaydedilip kaydedilmeyeceğini belirler. Bu seçenek sunucuya özgüdür.

Bilginize: Sitenizde hataları kullanıcıya göstermek yerine hata günlüklerine kaydetmenizi hararetle tavsiye ederiz.

log_errors_max_len integer

Hata günlüğü iletilerinin azami uzunluğunu bayt cinsinden belirlemek için kullanılır. Kaynak hakkındaki error_log bilgisi buna eklenir. 1024 öntanımlı değer olup, 0 belirtildiği takdirde hata günlüğü iletilerininin uzunlukları sınırlanmaz. Bu uzunluk günlüğe kaydedilen ve gösterilen hata iletilerinden başka $php_errormsg iletilerine de uygulanır.

integer türünde bir değer kullanıldığında değer baytların sayısıdır. Büyük bayt değerleri için kullanılabilecek birimlerin gösterimleri hakkında bilgiyi bu SSS altında bulabilirsiniz
ignore_repeated_errors boolean

Yinelenen hata iletileri günlüğe kaydedilmez. ignore_repeated_source yönergesinin değeri true olmadıkça yinelenen hataların aynı dosyanın aynı satırında oluşması gerekir.

ignore_repeated_source boolean

Yinelenen iletiler yok sayılırken ileti kaynağının da yoksayılmasını sağlar. Bu yönergenin değeri On olduğu takdirde, farklı dosyalardan veya farklı satırlardan kaynaklanan yinelenmiş iletileri hata günlüklerine kaydedemezsiniz.

report_memleaks boolean

Bu yönergenin değeri Off olduğu takdirde, bellek sızıntıları (stdout'ta veya günlük dosyasında) gösterilmez. Bu sadece, hata ayıklama derlemesinde ve error_reporting yönergesinde E_WARNING listeye dahil edilmişse etkilidir.

track_errors boolean

Bu yönergenin değeri On olduğu takdirde, son hata iletisi daima $php_errormsg değişkenine atanır.

html_errors boolean

Hata iletilerine HTML etiketleri dahil edilmez. Yeni HTML hataları biçeminde, doğrudan kullanıcıyı hatayı veya hataya sebep olan işlemi açıklayan bir sayfaya yönlendiren tıklanabilir hatalar üretilir. Bu gönderimler docref_root ve docref_ext yönergelerinden etkilenir.

xmlrpc_errors boolean

Normal hata raporlaması kapatılıp, hatalar XML-RPC hata iletileri olarak biçemlenir.

xmlrpc_error_number integer

XML-RPC hata dizisinin faultCode elemanının değeri olarak bu değer kullanılır (bkz. xmlrpc_is_fault()).

docref_root string

Yeni hata biçemi, hatayı veya hataya sebep olan işlemi açıklayan bir sayfaya bir gönderim içerir. Bu gönderimin bir kılavuz sayfasına yönlendirmesi durumunda, kılavuzun dilinizdeki çevirisini indirebilir ve bu yerel kopyanın bulunduğu yeri bu yönergede belirtebilirsiniz. Örneğin, kılavuzun yerel kopyasına "/manual/" ile erişilebiliyorsa bunu docref_root=/manual/ şeklinde belirtebilirsiniz. Buna ek olarak, kopyanızın dosya uzantısını docref_ext yönergesinde belirtebilirsiniz (örnek: docref_ext=.html ). Harici kaynaklara gönderimler de mümkündür. Örnekler: docref_root=http://manual/en/ veya docref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"

Bazı durumlarda docref_root değerinin sonuna bir bölü çizgisi "/" eklemeniz gerekebilir. Fakat yukarıdaki ikinci örnekteki gibi bir durumda buna asla gerek yoktur.

Bilginize: Bu özellik, bir işlevin açıklamasına bakmayı kolaylaştırması nedeniyle daha ziyade geliştirme aşamasında kullanmanız için tasarlanmıştır. Hataları son kullanıcıya göstermek amacıyla kullanılmamalıdır.

docref_ext string

docref_root yönergesine bakınız.

Bilginize: docref_ext değeri bir nokta "." ile başlamalıdır.

error_prepend_string string

Bir hata iletisinden önce çıktılanacak dizge.

error_append_string string

Bir hata iletisinden sonra çıktılanacak dizge.

error_log string

Hataların kaydedileceği dosyanın adı. Dosya, HTTP sunucunun kullanıcısı tarafından yazılabilir olmalıdır. Eğer syslog özel değeri kullanılmışsa hatalar bir dosya yerine sistemin hata günlüğüne gönderilir (Unix'te syslog(3), Windows NT'de olay günlüğü). Windows 95'te sistem günlükçüsü desteği yoktur. Ayrıca, syslog() işlevine de bakınız. Yönerge tanımsız bırakılmışsa hatalar SAPI hata günlükçüsüne gönderilir. Örneğin bu, Apache'nin hata günlüğü veya CLI için stderr olabilir.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Aşağıdaki sabitler PHP çekirdeğinin parçası olarak daima kullanılabilir durumdadır.

Bilginize: Bu sabit isimlerini php.ini dosyasında kullanabilirsiniz, fakat httpd.conf gibi PHP dışı yerlerde isimlerini değil değerlerini bit maskesi olarak kullanabilirsiniz.

Hatalar ve Günlük Kaydı
Değer Sabit Açıklama Ek Bilgi
1 E_ERROR (integer) Ölümcül çalışma anı hataları. Bellek ayırma sorunu gibi giderilemeyen hatalar bu sınıfa girer. Böyle hatalar betiğin çalışmasının durmasına sebep olur.  
2 E_WARNING (integer) Çalışma anı uyarıları (ölümcül olmayan hatalar). Betiğin çalışması durmaz.  
4 E_PARSE (integer) Derleme anı çözümleme hataları. Çözümleme hatalarını sadece çözümleyici üretir.  
8 E_NOTICE (integer) Çalışma anı bildirimleri. Betikte bir hataya sebep olabilecek fakat betiğin normal çalışmasını esnasında oluşmayabilecek bir şeylerin saptandığını belirtir.  
16 E_CORE_ERROR (integer) PHP'nin başlatılması sırasında oluşan ölümcül hatalar. PHP çekirdeği tarafından üretilmesi dışında E_ERROR gibidir. PHP 4'ten beri
32 E_CORE_WARNING (integer) PHP'nin başlatılması sırasında oluşan uyarılar (ölümcül olmayan hatalar). PHP çekirdeği tarafından üretilmesi dışında E_WARNING gibidir. PHP 4'ten beri
64 E_COMPILE_ERROR (integer) Ölümcül derleme anı hataları. Zend betik motoru tarafından üretilmesi dışında E_ERROR gibidir. PHP 4'ten beri
128 E_COMPILE_WARNING (integer) Derleme anı uyarıları (ölümcül olmayan hatalar). Zend betik motoru tarafından üretilmesi dışında E_WARNING gibidir. PHP 4'ten beri
256 E_USER_ERROR (integer) Kullanıcı üretimi hata iletileri. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_ERROR gibidir. PHP 4'ten beri
512 E_USER_WARNING (integer) Kullanıcı üretimi uyarı iletileri. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_WARNING gibidir. PHP 4'ten beri
1024 E_USER_NOTICE (integer) Kullanıcı üretimi bildirim iletileri. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_NOTICE gibidir. PHP 4'ten beri
2048 E_STRICT (integer) Yazdığınızı PHP kodunun ileriye dönük uyumluluğunu ve birlikte çalışabilirliğini en iyilemek amacıyla PHP tarafından yapılan önerileri etkin kılar. PHP 5'ten beri
4096 E_RECOVERABLE_ERROR (integer) Yakalanabilir ölümcül hata. Tehlikeli olma olasılığı bulunan bir hata oluştuğunu fakat yorumlayıcıyı kararsız durumda bırakmadığını belirtir. Hata, kullanıcı tarafından bir eylemci tanımlanarak yakalanmadığı (set_error_handler() işlevine bakınız) takdirde betik E_ERROR hatasıyla sonlanır. PHP 5.2.0'dan beri
8192 E_DEPRECATED (integer) Çalışma anı bildirimleri. Gelecek sürümlerle çalışmayacak kodlar hakkındaki uyarıları etkin kılar. PHP 5.3.0'dan beri
16384 E_USER_DEPRECATED (integer) Kullanıcı üretimi kullanımı önerilmiyor bildirimleri. PHP işlevi trigger_error() tarafından PHP kodunda üretilmesi dışında E_DEPRECATED gibidir. PHP 5.3.0'dan beri
30719 E_ALL (integer) Desteklenen (PHP 6'da E_STRICT dışında kalan) tüm hatalar ve uyarılar. PHP 6'da 32767, PHP 5.3.x'te 30719, PHP 5.2.x'te 6143, öncekilerde 2047.

Gerek sayısal gerekse simgesel olarak yukarıdaki değerler raporlanacak hataları belirten bir bit maskesi oluşturmakta kullanılabilir. Bu değerlerden bir bit maskesi oluşturmak veya bunları çözümlemek için bitsel işleçleri kullanabilirsiniz. php.ini içinde sadece '|', '~', '!', '^' ve '&' işleç karakterlerinin tanındığına dikkat ediniz.



Örnekler

Aşağıda, PHP hata işleme yeteneklerinin kullanımına ilişkin bir örneğe yer verilmiştir. Hataları işleme sokan işlevin iletilerinin (XML biçeminde) bir dosyaya yazılması; kodlama mantığıyla çelişen önemli hataların ise geliştiriciye eposta ile gönderilmesi sağlanmıştır.

Örnek 1 Bir betikte hataların yakalanıp işleme sokulması

<?php
// Kendi hata işleme sistemimizi oluşturacağız.
error_reporting(0);

// kullanıcı tanımlı hata eylemcisi
function userErrorHandler($errno$errmsg$filename$linenum$vars)
{
    
// Hata iletisi için zaman damgası
    
$dt date("Y-m-d H:i:s (T)");

    
// Hata iletisi türlerini bir ilişkisel dizi olarak tanımlayalım.
    // Aslında sadece E_WARNING, E_NOTICE, E_USER_ERROR,
    // E_USER_WARNING ve E_USER_NOTICE kullanılacak.
    
$errortype = array (
                
E_ERROR              => 'Hata',
                
E_WARNING            => 'Uyarı',
                
E_PARSE              => 'Çözümleme Hatası',
                
E_NOTICE             => 'Bilginize',
                
E_CORE_ERROR         => 'PHP Hatası',
                
E_CORE_WARNING       => 'PHP Uyarısı',
                
E_COMPILE_ERROR      => 'Derleme Hatası',
                
E_COMPILE_WARNING    => 'Derleme Uyarısı',
                
E_USER_ERROR         => 'Kullanıcı Hatası',
                
E_USER_WARNING       => 'Kullanıcı Uyarısı',
                
E_USER_NOTICE        => 'Kullanıcı Bildirimi',
                
E_STRICT             => 'Çalışma Anı Bildirimi',
                
E_RECOVERABLE_ERROR  => 'Yakalanabilir Ölümcül Hata'
                
);
    
// Hataların oluşumunu izlemek için hataları bir değişkene kaydedelim
    
$user_errors = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);

    
$err "<errorentry>\n";
    
$err .= "\t<datetime>" $dt "</datetime>\n";
    
$err .= "\t<errornum>" $errno "</errornum>\n";
    
$err .= "\t<errortype>" $errortype[$errno] . "</errortype>\n";
    
$err .= "\t<errormsg>" $errmsg "</errormsg>\n";
    
$err .= "\t<scriptname>" $filename "</scriptname>\n";
    
$err .= "\t<scriptlinenum>" $linenum "</scriptlinenum>\n";

    if (
in_array($errno$user_errors)) {
        
$err .= "\t<vartrace>" wddx_serialize_value($vars"Variables") . "</vartrace>\n";
    }
    
$err .= "</errorentry>\n\n";

    
// Denemek için:
    // echo $err;

    // Hatayı günlüğe kaydedelim ve önemliyse ayrıca bana postalayalım
    
error_log($err3"/usr/local/php4/error.log");
    if (
$errno == E_USER_ERROR) {
        
mail("phpdev@example.com""Critical User Error"$err);
    }
}


function 
distance($vect1$vect2)
{
    if (!
is_array($vect1) || !is_array($vect2)) {
        
trigger_error("Değiştirgeler yanlış, dizi belirtilmesi bekleniyor",
                       
E_USER_ERROR);
        return 
NULL;
    }

    if (
count($vect1) != count($vect2)) {
        
trigger_error("Vektörlerin aynı boyutta olması gerekir"E_USER_ERROR);
        return 
NULL;
    }

    for (
$i=0$i<count($vect1); $i++) {
        
$c1 $vect1[$i]; $c2 $vect2[$i];
        
$d 0.0;
        if (!
is_numeric($c1)) {
            
trigger_error(
                
"1. vektörün $i konumu bir sayı değil, 0 kullanılıyor",
                
E_USER_WARNING);
            
$c1 0.0;
        }
        if (!
is_numeric($c2)) {
            
trigger_error(
                
"2. vektörün $i konumu bir sayı değil, 0 kullanılıyor",
                
E_USER_WARNING);
            
$c2 0.0;
        }
        
$d += $c2*$c2 $c1*$c1;
    }
    return 
sqrt($d);
}

$old_error_handler set_error_handler("userErrorHandler");

// Tanımsız sabit, bir uyarı üretir
$t TANIMSIZIM;

// bazı "vektörler" tanımlayalım
$a = array(23"foo");
$b = array(5.54.3, -1.6);
$c = array(1, -3);

// bir kullanıcı hatası üretelim
$t1 distance($c$b) . "\n";

// başka bir bir kullanıcı hatası üretelim
$t2 distance($b"ben bir dizi değilim") . "\n";

// bir uyarı üretelim
$t3 distance($a$b) . "\n";

?>



Hata İşleme İşlevleri

Ayrıca Bakınız

Ayrıca bakınız: syslog().


debug_backtrace

(PHP 4 >= 4.3.0, PHP 5)

debug_backtraceHata izleme raporunu bir dizi olarak üretir

Açıklama

array debug_backtrace ([ bool $nesne_sağla = true ] )

Hata izleme raporunu (backtrace) bir dizi olarak üretir.

Değiştirgeler

nesne_sağla

Dönen dizide "object" anahtarının bulunup bulunmayacağı belirtilir.

Dönen Değerler

Bir ilişkisel dizi döner. Dönmesi olası değerler:

debug_backtrace() işlevinden dönmesi olası elemanlar
İsim Tür Açıklama
function string O anki işlev ismi. Ayrıca bakınız: __FUNCTION__.
line integer O anki satır numarası. Ayrıca bakınız: __LINE__.
file string O anki dosya ismi. Ayrıca bakınız: __FILE__.
class string O anki sınıf ismi. Ayrıca bakınız: __CLASS__
object object O anki nesne.
type string O anki çağrı türü. Bir yöntem çağrısı ise "->", bir duruk yöntem çağrısı ise "::" içerir. Bir işlev çağrısı ise hiçbir şey içermez.
args array Bir işlevde, işlevin değiştirgelerini; bir dosyada, dahil edilen dosyalar varsa dahil edilen dosya isimlerini içerir.

Sürüm Bilgisi

Sürüm: Açıklama
5.2.5 Seçimlik nesne_sağla değiştirgesi eklendi.
5.1.1 Dönmesi olası elemanlara object eklendi.

Örnekler

Örnek 1 - debug_backtrace() örneği

<?php
// /tmp/a.php dosyası

function a_test($str)
{
    echo 
"\nHi: $str";
    
var_dump(debug_backtrace());
}

a_test('friend');
?>

<?php
// /tmp/b.php dosyası
include_once '/tmp/a.php';
?>

Results similar to the following when executing /tmp/b.php:

Hi: friend
array(2) {
[0]=>
array(4) {
    ["file"] => string(10) "/tmp/a.php"
    ["line"] => int(10)
    ["function"] => string(6) "a_test"
    ["args"]=>
    array(1) {
      [0] => &string(6) "friend"
    }
}
[1]=>
array(4) {
    ["file"] => string(10) "/tmp/b.php"
    ["line"] => int(2)
    ["args"] =>
    array(1) {
      [0] => string(10) "/tmp/a.php"
    }
    ["function"] => string(12) "include_once"
  }
}

Ayrıca Bakınız



debug_print_backtrace

(PHP 5)

debug_print_backtraceBir hata izleme raporu basar

Açıklama

void debug_print_backtrace ( void )

debug_print_backtrace() bir PHP hata izleme raporu (backtrace) basar. İşlev çağrılarını, include()/require() ile dahil edilen dosyaları ve eval() kodlarını basar.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - debug_print_backtrace() örneği

<?php
// include.php dosyası

function a() {
    
b();
}

function 
b() {
    
c();
}

function 
c(){
    
debug_print_backtrace();
}

a();

?>
<?php
// test.php dosyası
// Bu dosya çalıştırılacak.

include 'include.php';
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

#0  eval() called at [/tmp/include.php:5]
#1  a() called at [/tmp/include.php:17]
#2  include(/tmp/include.php) called at [/tmp/test.php:3]

#0  c() called at [/tmp/include.php:10]
#1  b() called at [/tmp/include.php:6]
#2  a() called at [/tmp/include.php:17]
#3  include(/tmp/include.php) called at [/tmp/test.php:3]

Ayrıca Bakınız



error_get_last

(PHP 5 >= 5.2.0)

error_get_lastSon oluşan hata hakkında bilgi verir

Açıklama

array error_get_last ( void )

Son oluşan hata hakkında bilgi verir.

Dönen Değerler

Son oluşan hata hakkındaki bilgileri "type", "message", "file" ve "line" anahtarlı bir ilişkisel dizi olarak döndürür. Henüz bir hata oluşmamışsa NULL döner.

Örnekler

Örnek 1 - error_get_last() örneği

<?php
echo $a;
print_r(error_get_last());
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [type] => 8
    [message] => Undefined variable: a
    [file] => C:\WWW\index.php
    [line] => 2
)

Ayrıca Bakınız



error_log

(PHP 4, PHP 5)

error_logBir yerlere bir hata iletisi gönderir

Açıklama

bool error_log ( string $ileti [, int $günlük_türü = 0 [, string $hedef [, string $ek_başlıklar ]]] )

Bir hata iletisini, HTTP sunucusunun hata günlüğüne, bir TCP portuna veya bir dosyaya gönderir.

Değiştirgeler

ileti

Günlüğe kaydedilecek hata iletisi.

günlük_türü

Hata iletilerinin nereye gönderileceğini belirler. Olası günlük türleri şunlardır:

error_log() günlük türleri
0 error_log yönergesinin değerine bağlı olarak, ileti ya işletim sisteminin sistem günlük kayıtları mekanizması kullanılarak PHP'nin sistem günlüğüne ya da bir dosyaya gönderilir.
1 ileti , hedef değiştirgesinde belirtilen eposta adresine gönderilir. Dördüncü, ek_başlıklar değiştirgesinin kullanıldığı tek günlük türü budur.
2 Artık bir seçenek değildir.
3 ileti , hedef dosyasına eklenir. ileti dizgesinin sonuna satırsonu karakteri özdevinimli olarak eklenir.
4 ileti doğrudan SAPI günlükleme mekanizmasına gönderilir.

hedef

Bu değiştirgenin değeri yukarıda açıklanan günlük_türü değiştirgesine bağlıdır.

ek_başlıklar

günlük_türü değiştirgesinde 1 belirtildiğinde kullanılır. Bu günlük türü mail() işlevinin kullandığı iç işlevi kullanır.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.2.7 günlük_türü değiştirgesi kullanılabilir oldu.

Örnekler

Örnek 1 - error_log() örnekleri

<?php
// Veritabanına bağlanamazsak sunucunun hata günlüğüne bir bildirim gönderir.
if (!Ora_Logon($username$password)) {
    
error_log("Oracle database not available!"0);
}

// FOO'nun dışına çıkmışsak yöneticiye bir eposta ile durumu bildirelim
if (!($foo allocate_new_foo())) {
    
error_log("Büyük bir sorun var, FOO'nun dışına çıktık!"1,
               
"operator@example.com");
}

// error_log() işlevini çağırmanın başka bir yolu:
error_log("Herşeyi yüzüne gözüne bulaştırdın!"3,
          
"/var/tmp/herkes_hata_yapar.log");
?>



error_reporting

(PHP 4, PHP 5)

error_reportingHangi PHP hatalarının raporlanacağını tanımlar

Açıklama

int error_reporting ([ int $seviye ] )

error_reporting() işlevi error_reporting yönergesinin değerini çalışma anında tanımlar. PHP bir çok hata seviyesine sahiptir. Bu işlevi kullanarak betiğinizin çalışması esnasında hangi seviyelerin raporlanacağını belirleyebilirsiniz.

Değiştirgeler

seviye

Yeni hata raporlama seviyesi. Bir bit maskesi veya isimli sabitler belirtilebilir. Gelecek sürümlerle uyumluluk bakımından bir bit maskesi değil, isimli sabitlerin kullanılması hararetle tavsiye edilir. Yeni hata seviyeleri eklendikçe tamsayı aralığı genişler. Dolayısıyla tamsayı olarak belirtilmiş hata seviyeleri her zaman beklendiği gibi davranmayabilir.

Kullanılabilecek hata seviyesi sabitleri ve anlamları Öntanımlı Sabitler sayfasında açıklanmıştır.

Dönen Değerler

Eski error_reporting değeri döner.

Sürüm Bilgisi

Sürüm: Açıklama
6.0.0 E_STRICT sabiti E_ALL sabitine dahil edildi.
5.3.0 E_DEPRECATED ve E_USER_DEPRECATED devreye girdi.
5.2.0 E_RECOVERABLE_ERROR devreye girdi.
5.0.0 E_STRICT devreye girdi (E_ALL sabitine dahil değildir).

Örnekler

Örnek 1 - error_reporting() örnekleri

<?php

// Hata raporlamayı tamamen kapatalım
error_reporting(0);

// Basit hataları raporlayalım
error_reporting(E_ERROR E_WARNING E_PARSE);

// E_NOTICE de raporlansa iyi olur (ilklendirilmemiş değişkenleri
// veya yanlış yazılmış değişken isimlerini yakalamak için, vb)
error_reporting(E_ERROR E_WARNING E_PARSE E_NOTICE);

// E_NOTICE hariç bütün hatalar raporlansın
// Bu php.ini içindeki öntanımlı değerdir
error_reporting(E_ALL E_NOTICE);

// Tüm PHP hatalarını raporlayalım (changelog dosyasına bakınız)
error_reporting(E_ALL);

// Tüm PHP hatalarını raporlayalım
error_reporting(-1);

// error_reporting(E_ALL) ile aynı;
ini_set('error_reporting'E_ALL);

?>

Notlar

Uyarı

E_STRICT hatalarının çoğu derleme anında değerlendirilir, bu bakımdan error_reporting yönergesi E_STRICT hatalarını içerse bile böyle hatalar raporlanmaz.

İpucu

-1 değeri belirtildiği takdirde olası tüm hatalar hatta PHP'nin gelecek sürümlerinde eklenen seviyeler bile raporlanır. Ayrıca PHP 6'daki E_ALL sabiti de bu şekilde davranır.

Ayrıca Bakınız



restore_error_handler

(PHP 4 >= 4.0.1, PHP 5)

restore_error_handlerBir önceki hata eylemcisini devreye sokar

Açıklama

bool restore_error_handler ( void )

set_error_handler() ile hata eylemcisini değiştirdikten sonra önceki hata eylemcisini (yerleşik veya kullanıcı tanımlı bir işlev) devreye sokmak için kullanılır.

Dönen Değerler

Bu işlev daima TRUE döndürür.

Örnekler

Örnek 1 - restore_error_handler() örneği

unserialize() bir hataya sebep olsun, böylece özgün hata eylemcisini devreye sokalım.

<?php
function unserialize_handler($errno$errstr)
{
    echo 
"Dizgeleştirilmiş değer geçersiz.\n";
}

$serialized 'foo';
set_error_handler('unserialize_handler');
$original unserialize($serialized);
restore_error_handler();
?>

Yukarıdaki örneğin çıktısı:

Dizgeleştirilmiş değer geçersiz.

Notlar

Bilginize: restore_error_handler() işlevi hata_eylemci işlevinden çağrıldığında yok sayılır.

Ayrıca Bakınız



restore_exception_handler

(PHP 5)

restore_exception_handlerBir önceki istisna eylemcisini devreye sokar

Açıklama

bool restore_exception_handler ( void )

set_exception_handler() ile istisna eylemcisini değiştirdikten sonra önceki istisna eylemcisini (yerleşik veya kullanıcı tanımlı bir işlev) devreye sokmak için kullanılır.

Dönen Değerler

Bu işlev daima TRUE döndürür.

Örnekler

Örnek 1 - restore_exception_handler() örneği

<?php
  
function istisna_eylemci_1(Exception $e)
  {
    echo 
'[' __FUNCTION__ '] ' $e->getMessage();
  }

  function 
istisna_eylemci_2(Exception $e)
  {
    echo 
'[' __FUNCTION__ '] ' $e->getMessage();
  }

  
set_exception_handler('istisna_eylemci_1');
  
set_exception_handler('istisna_eylemci_2');

  
restore_exception_handler();

  throw new 
Exception('İlk istisna eylemcisi tetiklenir...');
?>

Yukarıdaki örneğin çıktısı:

[istisna_eylemci_1] İlk istisna eylemcisi tetiklenir...

Ayrıca Bakınız



set_error_handler

(PHP 4 >= 4.0.1, PHP 5)

set_error_handlerKullanıcı tanımlı bir hata eylemcisi bildirir

Açıklama

mixed set_error_handler ( callback $hata_eylemci [, int $hata_türü = E_ALL | E_STRICT ] )

Betikteki hatalarda devreye girmek üzere kullanıcı tanımlı bir işlev (hata_eylemci ) bildirir.

Bu işlev çalışma anında oluşan hatalardan kurtulmak için yapılacak işlemleri tanımladığınız bir işlevi PHP'ye bildirmek için kullanılır. Örneğin, verilerinizi veya dosyalarınızı temizlemek isterken işlemlerin durmasına yol açacak bir hata oluştuğunda veya belli durumlar için (trigger_error() ile) bir hatayı tetiklemek gerektiğinde PHP tarafından çağrılacak bir işlev tanımlayıp, bu işlevin ismini set_error_handler() ile PHP'ye bildirebilirsiniz.

Bu işlevin çağrılmasıyla PHP'nin standart hata eylemcisi tamamen devre dışı kalacaktır. Bunu asla aklınızdan çıkarmayın. error_reporting() ayarları etkisiz olacak ve her durumda sizin hata eylemciniz çağrılacaktır. Ancak, error_reporting yönergesindeki değeri hala okuyabilecek ve buna göre davranabileceksiniz. Özellikle şuna dikkat edin: Eğer hataya sebep olan deyimin önüne bir @ hata denetim işleci konmuşsa bu değer 0 olacaktır.

Ayrıca şunu da aklınızdan çıkarmayın: Gerektiği takdirde die() işlevi de sizin sorumluluğunuzdadır. hata_eylemci işlevi döndükten sonra betiğin çalışması, hataya sebep olan deyimden sonraki deyimden devam edecektir.

Kullanıcı tanımlı bir işlev ile üzerinde herhangi bir işlem yapılamayacak hatalar vardır, bunlar: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING ve set_error_handler() işlevinin çağrıldığı dosyada oluşan E_STRICT hatalarının çoğu.

Eğer betik çalıştırılmadan önce oluşan hatalar varsa (karşıya dosya yükleme sırasında oluşan hatalar gibi), bu gibi durumlar için bildirdiğiniz hata_eylemci işlevi çağrılamayacaktır.

Değiştirgeler

hata_eylemci

Kullanıcının tanımlayacağı bu işlev iki değiştirge kabul etmelidir: hata kodu ve hatayı açıklayan bir dizge. Bu iki değiştirgeden sonra isteğe bağlı üç değiştirge daha kabul edilebilir: hatanın oluştuğu dosya adı, hatanın oluştuğu satırın numarası ve hatanın oluştuğu bağlam (hatanın oluştuğu noktada etkin simge tablosuna işaret eden bir dizi). hata_eylemci işlevinin söz dizimi:

hata_eylemci ( int $hatano , string $ileti [, string $betik_adı [, int $hata_satırı [, array $hata_bağlamı ]]] )

hatano
Oluşan hatanın seviyesini içeren bir tamsayı. İlk değiştirge olmalıdır.
ileti
Hata iletisini içeren bir dizge. İkinci değiştirge olmalıdır.
betik_adı
Hatanın oluştuğu betik dosyasının ismini bir dizge olarak içeren, belirtilmesi isteğe bağlı üçüncü değiştirge.
hata_satırı
Hatanın oluştuğu deyimin satır numarasını bir tamsayı olarak içeren, belirtilmesi isteğe bağlı dördüncü değiştirge.
hata_bağlamı
Hatanın oluştuğu noktada etkin simge tablosuna işaret eden bir diziyi kabul eden, belirtilmesi isteğe bağlı beşinci değiştirge. Bu değiştirge, başka bir deyişle, hatanın tetiklendiği etki alanında etkin değişkenleri içeren bir dizidir. İşlev bu değişkenlerde bir değişiklik yapmamalıdır.

İşlev FALSE döndürdüğü takdirde normal hata eylemcisi kaldığı yerden devam eder.

hata_türü

hata_eylemci işlevini tetikleyecek hatalar sabitleriyle, error_reporting yönergesine gösterilecek hataların değerleri belirtilirken yapıldığı gibi bir bit maskesi olarak belirtilebilir. Bu maskenin belirtilmediği durumda, error_reporting yönergesinde belirtilen değere bakılmaksızın her hatada hata_eylemci işlevi çağrılacaktır.

Dönen Değerler

(Varsa) Evvelce tanımlanmış hata eylemcisinin ismini bir dizge olarak döndürür. Eğer yerleşik hata eylemcisi kullanılmışsa NULL döner. Ayrıca belirtilen geriçağırım işlevinin geçersiz olduğu durumda da NULL döner. Eğer evvelki hata eylemcisi bir sınıfın yöntemi ise bu sınıfın ve yöntemin isimlerini içeren bir dizi döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.2.0 $php_errormsg kullanılması durumunda hata eylemcisi FALSE döndürmelidir.
5.0.0 hata_türü değiştirgesi kullanılabilir oldu.
4.3.0 hata_eylemci değiştirgesinde bir işlev ismi yerine bir nesne başvurusu ve bir yöntem ismi içeren bir dizi belirtebilmek mümkün oldu.
4.0.2 hata_eylemci işlevinin isteğe bağlı ek üç değiştirge (betik ismi, satır numarası ve bağlam) kabul edebilmesi mümkün oldu.

Örnekler

Örnek 1 - set_error_handler() ve trigger_error() ile hataların ele alınması

Bu örnekte hatalar tetiklenerek oluşan dahili istisnaların kullanıcı tanımlı bir işlev ile ele alınması gösterilmiştir.

<?php
// hata eylemci işlevi
function hataEylemcim($hatanum$ileti$betik$satırnum)
{
    switch (
$hatanum) {
    case 
E_USER_ERROR:
        echo 
"<b>HATA</b> [$hatanum$ileti<br />\n";
        echo 
"  $betik dosyasının $satırnum. satırında  ölümcül hata";
        echo 
", PHP " PHP_VERSION " (" PHP_OS ")<br />\n";
        echo 
"Çıkılıyor...<br />\n";
        exit(
1);
        break;

    case 
E_USER_WARNING:
        echo 
"<b>UYARI</b> [$hatanum$ileti<br />\n";
        break;

    case 
E_USER_NOTICE:
        echo 
"<b>BİLGİ</b> [$hatanum$ileti<br />\n";
        break;

    default:
        echo 
"Bilinmeyen hata türü: [$hatanum$ileti<br />\n";
        break;
    }

    
/* PHP'nin yerleşik hata eylemcisi çalışmasın */
    
return true;
}

// Hatanın oluşacağı işlev
function scale_by_log($vect$scale)
{
    if (!
is_numeric($scale) || $scale <= 0) {
        
trigger_error("x <= 0 için log(x) tanımsız, scale = $scale verilmiş",
                      
E_USER_ERROR);
    }

    if (!
is_array($vect)) {
        
trigger_error("Yanlış girdi, değerler dizi olarak verilmeliydi",
                      
E_USER_WARNING);
        return 
null;
    }

    
$temp = array();
    foreach(
$vect as $pos => $value) {
        if (!
is_numeric($value)) {
            
trigger_error("$pos. değer bir sayı değil, 0 kullanılıyor",
                          
E_USER_NOTICE);
            
$value 0;
        }
        
$temp[$pos] = log($scale) * $value;
    }

    return 
$temp;
}

// kullanıcı tanımlı hata eylemcisini bildirelim
$old_error_handler set_error_handler("hataEylemcim");

// Bazı hataları tetikleyelim.
// Önce sayısal olmayan bir eleman içeren bir dizi tanımlayalım.
echo "ilk durum; bir hata: sayı yerine dizge\n";
$a = array(23"foo"5.543.321.11);
print_r($a);

// burada ikinci hatayı üretiyoruz
echo "----\nikinci durum - bir uyarı (b = log(PI) * a)\n";
/* $pos. değer bir sayı değil, 0 kullanılıyor */
$b scale_by_log($aM_PI);
print_r($b);

// Bir dizi yerine bir dizge aktarıp yine sorun çıkarıyoruz
echo "----\nüçüncü durum - bir uyarı\n";
/* Yanlış girdi, değerler dizi olarak verilmeliydi */
$c scale_by_log("not array"2.3);
var_dump($c); // NULL

// Bu önemli bir hata; sıfır veya negatif bir sayının logaritması.
echo "----\ndördüncü durum - ölümcül hata\n";
/* x <= 0 için log(x) tanımsız, scale = $scale olmalıydı */
$d scale_by_log($a, -2.5);
var_dump($d); // Bu satır hiç çalışmayacak.
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

ilk durum; bir hata: sayı yerine dizge
Array
(
    [0] => 2
    [1] => 3
    [2] => foo
    [3] => 5.5
    [4] => 43.3
    [5] => 21.11
)
----
ikinci durum - bir uyarı (b = log(PI) * a)
<b>BİLGİ</b> [1024] 2. değer bir sayı değil, 0 kullanılıyor<br />
Array
(
    [0] => 2.2894597716988
    [1] => 3.4341896575482
    [2] => 0
    [3] => 6.2960143721717
    [4] => 49.566804057279
    [5] => 24.165247890281
)
----
üçüncü durum - bir uyarı
<b>UYARI</b> [512] Yanlış girdi, değerler dizi olarak verilmeliydi<br />
NULL
----
dördüncü durum - ölümcül hata
<b>HATA</b> [256] x <= 0 için log(x) tanımsız, scale = -2.5 verilmiş<br />
  php-dnm dosyasının 36. satırında  ölümcül hata, PHP 5.3.0beta2-dev
  (Linux)<br />
Çıkılıyor...<br />

Ayrıca Bakınız



set_exception_handler

(PHP 5)

set_exception_handlerKullanıcı tanımlı bir istisna eylemcisi bildirir

Açıklama

callback set_exception_handler ( callback $istisna_eylemcisi )

İstisna bir try/catch bloğu içinde yakalanamadığı durumlarda kullanılmak üzere bir istisna eylemcisi bildirir. istisna_eylemcisi işlevinin çağrılmasıyla istisna durdurulmuş olur.

Değiştirgeler

istisna_eylemcisi

Yakalanmamış bir istisna olduğunda çağrılacak işlevin ismi. Bu işlev set_exception_handler() çağrılmadan önce tanımlanmış olmalıdır. Bu eylemci işlevin tek bir değiştirge kabul etmesi gerekir: Oluşan istisna nesnesi.

Dönen Değerler

Hata durumunda NULL aksi takdirde evvelce tanımlanmış istisna eylemcisinin ismini döndürür. Evvelce tanımlanmış bir eylemci olmaması durumunda da NULL döner.

Örnekler

Örnek 1 - set_exception_handler() örneği

<?php
function istisna_eylemcisi($istisna) {
  echo 
"Yakalanmamış istisna: " $istisna->getMessage(), "\n";
}

set_exception_handler('istisna_eylemcisi');

throw new 
Exception('Yakalanmamış İstisna');
echo 
"Çalışmadı\n";
?>

Ayrıca Bakınız



trigger_error

(PHP 4 >= 4.0.1, PHP 5)

trigger_errorKullanıcı seviyesinde bir hata/uyarı/bilgi iletisi üretir

Açıklama

bool trigger_error ( string $ileti [, int $tür = E_USER_NOTICE ] )

Bir kullanıcı hatası durumunu tetiklemek için kullanır. Yerleşik bir hata eylemcisi ile birlikte kullanılabileceği gibi (set_error_handler() ile) yeni bir hata eylemcisi olarak bildirilmiş bir kullanıcı tanımlı işlev ile birlikte de kullanılabilir.

Bu işlev çalışma anında, bir olağandışılık durumunda, belli bir yanıt üretmek gerektiğinde çok kullanışlıdır.

Değiştirgeler

ileti

Tetiklenen hata için tasarlanmış hata iletisi. En fazla 1024 karakter uzunluğunda olabilir. 1024'ten sonraki karakterler kırpılır.

tür

Tetiklenen hata için tasarlanmış hata türü. Sadece E_USER_ ailesinden sabitler belirtilebilir. E_USER_NOTICE öntanımlıdır.

Dönen Değerler

tür yanlış belirtilmişse FALSE aksi takdirde TRUE döner.

Örnekler

Örnek 1 - trigger_error() örneği

Daha kapsamlı bir örnek için set_error_handler() işlevine bakınız.

<?php
if (assert($divisor == 0)) {
    
trigger_error("Sıfır bir bölen olamaz"E_USER_ERROR);
}
?>

Notlar

Uyarı

error_msg içindeki HTML öğeleri öncelenmez. Hta tarayıcıda gösterilecekse htmlentities() kullanın.

Ayrıca Bakınız



user_error

(PHP 4, PHP 5)

user_errortrigger_error() işlevinin takma adıdır

Açıklama

Bu işlev, trigger_error() işlevinin takma adıdır.


İçindekiler




htaccess-like support for all SAPIs


Giriş

The htscanner extension gives the possibility to use htaccess-like file to configure PHP per directory, just like apache's htaccess. It is especially useful with fastcgi (ISS5/6/7, lighttpd, etc.).



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

PHP version 5.2.0 or greater.



Kurulum

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/htscanner



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

htscanner Yapılandırma Seçenekleri
İsim Öntanımlı Değişlik Yeri Changelog
htscanner.config_file ".htscanner" PHP_INI_SYSTEM  
htscanner.default_docroot "/" PHP_INI_SYSTEM  
htscanner.default_ttl "300" PHP_INI_SYSTEM  
htscanner."stop_on_error" "Off" PHP_INI_SYSTEM  

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

htscanner.config_file string

Filename to use as configuration file.

htscanner.default_docroot string

Default document root.

htscanner.default_ttl int

Cache time out for the configuration data, in seconds.

htscanner.stop_on_error int

Stop on error (parse error, cannot set an ini setting).



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.





Inclusion hierarchy viewer


Giriş

Traces through and dumps the hierarchy of file inclusions and class inheritance at runtime.

The files may have been included using include(), include_once(), require(), or require_once().

Class inheritance dependencies are also reported.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

PHP version 5.1.0 or greater.

The included gengraph.php file utilizes the » graphviz library, however, this is not required.



Kurulum

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/inclued



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

inclued Yapılandırma Seçenekleri
İsim Öntanımlı Değişlik Yeri Changelog
inclued.enabled Off PHP_INI_*  
inclued.dumpdir Off PHP_INI_*  

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

inclued.enabled int

Whether or not to enable inclued.

inclued.dumpdir int

Location (path) to the directory that stores inclued files. If set, each PHP request will create a file.

Dikkat

Because every request creates a file, this directory may fill up fast!



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

Bu eklentinin tanımlanmış sabitleri yoktur.



Örnekler

İçindekiler


Example that implements inclued into an application

This example demonstrates the process of implementing inclued into an existing application, and viewing the results.

Örnek 1 Getting the data from inclued

<?php
// File to store the inclued information
$fp fopen('/tmp/wp.json''w');
if (
$fp) {
    
$clue inclued_get_data();
    if (
$clue) {
        
fwrite($fpjson_encode($clue));
    }
    
fclose($fp);
}
?>

Now that some data exists, it's time to make sense of it in the form of a graph. The inclued extension includes a PHP file named gengraph.php that creates a dot file that requires the » graphviz library. However, this form is not required.

Örnek 2 Example use of gengraph.php

This example creates an image named inclued.png that shows the inclued data.

# First, create the dot file
$ php graphviz.php -i /tmp/wp.json -o wp.dot

# Next, create the image
$ dot -Tpng -o inclued.png wp.dot




inclued İşlevleri


inclued_get_data

(PECL inclued >= 0.1.0)

inclued_get_dataGet the inclued data

Açıklama

array inclued_get_data ( void )

Get the inclued data.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

The inclued data.

Örnekler

Örnek 1 inclued_get_data() example

See the inclued examples section for ways to create a graphs with this data.

<?php 
include 'x.php';

$clue inclued_get_data();

print_r($clue);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
  [includes] => Array
    (
      [0] => Array
        (
          [operation] => include
          [op_type] => 2
          [filename] => x.php
          [opened_path] => /tmp/x.php
          [fromfile] => /tmp/z.php
          [fromline] => 2
        )
    )
)

Ayrıca Bakınız


İçindekiler




PHP Seçenek ve Bilgileri


Giriş

Bu işlevler PHP'nin kendisi hakkında pek çok bilgi almanızı sağlarlar. Çalışma anı yapılandırması, yüklü eklentiler, sürüm ve daha pek çok bilgi. Ayrıca, çalışmakta olan PHP'nin seçeneklerini atayacak işlevleri de burada bulabilirsiniz. PHP'nin belki de en bilinen işlevi phpinfo()'yu da burada bulabilirsiniz.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu işlevleri kullanmak için hiçbir şey kurmaya gerek yoktur; PHP çekirdeğinin parçasıdırlar.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

PHP Seçenekleri ve Bilgileri için Yapılandırma Seçenekleri
İsim Öntanımlı Değişiklik Yeri Sürüm Bilgisi
assert.active "1" PHP_INI_ALL  
assert.bail "0" PHP_INI_ALL  
assert.warning "1" PHP_INI_ALL  
assert.callback NULL PHP_INI_ALL  
assert.quiet_eval "0" PHP_INI_ALL  
enable_dl "1" PHP_INI_SYSTEM PHP 6.0.0'da kaldırıldı.
max_execution_time "30" PHP_INI_ALL  
max_input_time "-1" PHP_INI_PERDIR PHP 4.3.0'dan beri kullanılmaktadır.
max_input_nesting_level "64" PHP_INI_PERDIR PHP 4.4.8'den beri kullanılmaktadır. PHP 5.0.0'da kaldırıldı.
magic_quotes_gpc "1" PHP_INI_PERDIR PHP <= 4.2.3'te PHP_INI_ALL. PHP 6.0.0'da kaldırıldı.
magic_quotes_runtime "0" PHP_INI_ALL PHP 6.0.0'da kaldırıldı.
zend.enable_gc "1" PHP_INI_ALL PHP 5.3.0'dan beri kullanılmaktadır.

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

assert.active boolean

assert() değerlendirmesini etkin kılar.

assert.bail boolean

Kararlılık denetimleri başarısız olduğunda betiğin çalışmasını sonlandırır.

assert.warning boolean

Başarısız olan her kararlılık denetimi için bir PHP uyarısı çıktılar.

assert.callback string

Kararlılık denetimleri başarısız olduğunda çağrılacak kullanıcı işlevi.

assert.quiet_eval boolean

Kararlılık denetimini sağlayan ifadenin değerlendirilmesi sırasında error_reporting() işlevinin o anki ayarları kullanılır. Etkin olduğunda değerlendirme sırasında hiçbir hata gösterilmez (örtük error_reporting(0)). Aksi takdirde, hatalar error_reporting() ayarlarına uygun olarak gösterilir.

enable_dl boolean

Bu yönerge gerçekte sadece PHP'nin Apache modülünde yararlıdır. PHP eklentilerinin dl() işleviyle sanal konak veya dizin temelinde devingen olarak yüklenmesini veya yüklenmemesini etkin kılabilirsiniz.

Devingen yüklemenin devre dışı bırakılmasının asıl sebebi güvenliktir. Devingen yükleme ile, tüm open_basedir sınırlamalarını yok saymak mümkündür. Devingen yüklemeye safe_mode kullanımı dışında öntanımlı olarak izin verilir. Güvenli kipte dl() işlevi asla kullanılamaz.

max_execution_time integer

Çözümleyici tarafından sonlandırılmadan önce bir betiğin çalışabileceği azami süreyi saniye cinsinden tanımlar. Bu, yetersizce yazılmış betiklerin sunucuya bağlanmasına engel olur. Öntanımlı süre 30 saniyedir. PHP komut satırından çalıştırıldığında bu süre 0 saniyedir.

Azami çalışma süresi sistem çağrılarından, akım işlemlerinden ve benzerlerinden etkilenmez. Daha ayrıntılı bilgi için set_time_limit() işlevinin açıklamasına bakınız.

Güvenli kipte (safe_mode) çalışırken ini_set() ile bu ayarı değiştiremezsiniz. Bunu yapmanın tek çaresi php.ini içinde güvenli kipi kapatmak ya da süre sınırlamasını değiştirmektir.

HTTP sunucunuzun PHP'nin çalışmasını kesintiye uğratacak başka zaman aşımı yapılandırmaları olabilir. Apache'nin bir Timeout yönergesi ve IIS'nin bir CGI zaman aşımı işlevi vardır. Bu konuda daha ayrıntılı bilgi edinmek için HTTP sunucunuzun belgelerine bakınız.

max_input_time integer

Bir betiğin POST, GET ve karşıya dosya yükleme gibi girdileri çözümlemesi için gereken azami süre saniye cinsinden burada belirtilir.

max_input_nesting_level integer

girdi değişkenlerinin ($_GET, $_POST... gibi) azami iç içelik derinliğini ayarlar.

magic_quotes_gpc boolean
Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

GPC (Get/Post/Cookie) işlemleri için sihirli tırnakların durumunu ayarlar. Bu yönergeye 'On' atandığında tüm ' (tek tırnak), " (çift tırnak), \ (tersbölü) ve NULL karakterleri özdevinimli olarak bir tersbölü ile öncelenecektir.

Bilginize: PHP 4'te bunlardan başka $_ENV değişkenleri de öncelenir.

Bilginize: Eğer magic_quotes_sybase yönergesine de ON atanmışsa bu magic_quotes_gpc yönergesini tamamen geçersiz kılacaktır. Her iki yönergenin etkin olmasının anlamı, sadece tek tırnakların '' biçiminde öncelenmesi, çift tırnakların, tersbölülerin ve NULL'ların olduğu gibi bırakılması, öncelenmemesi demektir.

Ayrıca, get_magic_quotes_gpc() işlevinin açıklamasına da bakınız.

magic_quotes_runtime boolean
Uyarı

Bu özelliğin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu özelliğe kesinlikle güvenmemelisiniz.

magic_quotes_runtime yönergesi etkinse, veritabanları ve metin dosyaları gibi her tür harici kaynaktan veri döndüren çoğu işlev öncelem için tersbölü karakterini kullanacaktır. Eğer magic_quotes_sybase yönergesi de ON ise, tek tırnaklar tersbölü yerine bir tek tırnak ile öncelenir.

magic_quotes_runtime yönergesinden etkilenen işlevler (PECL'dekiler hariç):

zend.enable_gc boolean

Döngüsel gönderim toplayıcısını açıp kapar.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Aşağıdaki sabitler PHP çekirdeğinin parçası olarak daima kullanılabilir durumdadır.

Öntanımlı phpcredits() sabitleri
Sabit Değer Açıklama
CREDITS_GROUP 1 PHP geliştiricilerinin listesi.
CREDITS_GENERAL 2 Genel katkıcılar: Dil tasarımı ve kavramlar, PHP ve SAPI modülü yazarları.
CREDITS_SAPI 4 PHP için sunucu API modüllerinin listesi ve bunların yazarları.
CREDITS_MODULES 8 PHP için eklenti modüllerinin listesi ve bunların yazarları.
CREDITS_DOCS 16 Belgelendirme ekibi.
CREDITS_FULLPAGE 32 Genellikle diğer seçeneklerle birlikte kullanılır. Diğer seçeneklerin gösterilmesini gerektirdiği bilgilerin tamamının tek bir HTML sayfasına basılmasını sağlar.
CREDITS_QA 64 Kalite güvencesi ekibi.
CREDITS_ALL -1 Tüm katkıcılar; şu sabitlere eşdeğerdir: CREDITS_DOCS + CREDITS_GENERAL + CREDITS_GROUP + CREDITS_MODULES + CREDITS_QA + CREDITS_FULLPAGE. Bu sabitlerle ilgili bilgilerin uygun başlıklarla tek bir HTML sayfasında gösterilmesini sağlar. Bu öntanımlı değerdir.
phpinfo() sabitleri
Sabit Değer Açıklama
INFO_GENERAL 1 Yapılandırma satırı, php.ini dosyasının yeri, derleme tarihi, HTTP Sunucusu, Sistem ve benzerleri.
INFO_CREDITS 2 PHP Katkıcıları. Ayrıca bakınız: phpcredits().
INFO_CONFIGURATION 4 PHP yönergelerinin geçerli yerel ve asıl değerleri. Ayrıca bakınız: ini_get().
INFO_MODULES 8 Yüklü modüller ve bunlarla ilgili ayarlar.
INFO_ENVIRONMENT 16 $_ENV ile de kullanılabilen ortam değişkenleri bilgisi.
INFO_VARIABLES 32 EGPCS (Environment, GET, POST, Cookie, Server) ile ilgili tüm öntanımlı değişkenleri listeler.
INFO_LICENSE 64 PHP Lisans bilgisi. Ayrıca bakınız: » Lisans SSS.
INFO_ALL -1 Yukarıdakilerin tamamı gösterilir. Bu öntanımlı değerdir.
ASSERT_ACTIVE (integer)
ASSERT_CALLBACK (integer)
ASSERT_BAIL (integer)
ASSERT_WARNING (integer)
ASSERT_QUIET_EVAL (integer)

Aşağıdaki sabitler sadece Windows içindir. Çeşitli özellikleri saptamak için sürüm bilgileri verirler. Bu sabitler PHP 5.3.0'dan itibaren kullanılabilmektedir

Windows' specific constantsa özgü sabitler
Sabit Açıklama
PHP_WINDOWS_VERSION_MAJOR Windows ana sürüm numarası; 4 (NT4/ME/98/95), 5 (XP/2003 R2/2003/2000) veya 6 (Vista/2008) olabilir.
PHP_WINDOWS_VERSION_MINOR Windows alt sürüm numarası; 0 (Vista/2008/2000/NT4/95), 1 (XP), 2 (2003 R2/2003/XP x64), 10 (98) veya 90 (ME) olabilir.
PHP_WINDOWS_VERSION_BUILD Windows derleme sürümü (örneğin, Windows Vista + SP1 için 6001'dir).
PHP_WINDOWS_VERSION_PLATFORM PHP'nin üzerinde çalıştığı platform sürüm numarası; Windows Vista/XP/2000/NT4 ve Server 2008/2003 için 2, Windows ME/98/95 için 1 olabilir.
PHP_WINDOWS_VERSION_SP_MAJOR Kurulu SP ana sürümü; hiçbir SP kurulu değilse 0'dır. Örneğin SP 3 kurulu Windows XP için bu değer 3'tür.
PHP_WINDOWS_VERSION_SP_MINOR Kurulu SP ana sürümü; hiçbir SP kurulu değilse 0'dır.
PHP_WINDOWS_VERSION_SUITEMASK Çeşitli kurulu Windows özelliklerini betimleyen bir bit maskesi, Olası değerler için aşağıdaki tabloya bakınız.
PHP_WINDOWS_VERSION_PRODUCTTYPE This contains the value used to determine the PHP_WINDOWS_NT_* sabitlerini saptamakta kullanılan değer; platform türünü belirleyen PHP_WINDOWS_NT_*sabitlerinden biri olabilir.
PHP_WINDOWS_NT_DOMAIN_CONTROLLER Bir etki alanı denetleyicisidir.
PHP_WINDOWS_NT_SERVER Bir sunucu sistemi belirtir (Server 2008/2003/2000 gibi); ancak, sunucu aynı zamanda bir etki alanı denetleyicisi ise PHP_WINDOWS_NT_DOMAIN_CONTROLLER olarak raporlanır.
PHP_WINDOWS_NT_WORKSTATION Bir istemci sistemi belirtir (Vista/XP/2000/NT4 gibi).

PHP_WINDOWS_VERSION_SUITEMASK bit maskesinde kullanılabilecek bitsel değerler aşağıdaki tablada gösterilmiştir.

PHP_WINDOWS_VERSION_SUITEMASK bit alanları
Bit alanı Açıklama
0x00000004 Microsoft BackOffice bileşenleri kurulu.
0x00000400 Windows Server 2003, Web Edition kurulu.
0x00004000 Windows Server 2003, Compute Cluster Edition kurulu.
0x00000080 Windows Server 2008 Datacenter, Windows Server 2003, Datacenter Edition veya Windows 2000 Datacenter Server kurulu.
0x00000002 Windows Server 2008 Enterprise, Windows Server 2003, Enterprise Edition, Windows 2000 Advanced Server veya Windows NT Server 4.0 Enterprise Edition kurulu.
0x00000040 Windows XP Embedded kurulu.
0x00000200 Windows Vista Home Premium, Windows Vista Home Basic, or Windows XP Home Edition kurulu
0x00000100 Remote Desktop sadece etkileşimli tek oturumla desteklenir. Sistem bir uygulama sunucusu olarak çalışmadıkça bu değer atanır.
0x00000001 Evvelce sistemde Microsoft Small Business Server kuruluymuş fakat başka bir Windows sürümüne yükseltilmiş.
0x00000020 Microsoft Small Business Server, sınırlı istemci lisansı ile kurulu.
0x00002000 Windows Storage Server 2003 R2 veya Windows Storage Server 2003 kurulu.
0x00000010 Terminal Services kurulu. Bu değer daima atanır. Bu değer atanmışsa ancak 0x00000100 değilse sistem uygulama sunucusu kipinde çalışıyor demektir.
0x00008000 Windows Home Server kurulu.


PHP Seçenek/Bilgi İşlevleri


assert_options

(PHP 4, PHP 5)

assert_optionsÇeşitli kararlılık denetim seçeneklerini açar/kapar

Açıklama

mixed assert_options ( int $seçenek [, mixed $değer ] )

assert() işlevi için çeşitli denetim seçeneklerini tanımlar veya mevcut değerlerini sorgular.

Değiştirgeler

seçenek

Sav Seçenekleri
Seçenek INI değiştirgesi Öntanımlı Açıklama
ASSERT_ACTIVE assert.active 1 assert() değerlendirmesi etkin kılınır.
ASSERT_WARNING assert.warning 1 Her başarısız sav için bir PHP uyarısı çıktılanır
ASSERT_BAIL assert.bail 0 Savın başarısızlığı halinde çalışma durdurulur.
ASSERT_QUIET_EVAL assert.quiet_eval 0 Sav ifadesinin değerlendirilmesi sırasında hata raporlama kapatılır.
ASSERT_CALLBACK assert.callback (NULL) Savın başarısızlığı halinde çağrılacak geriçağırım işlevi.

değer

Seçenek için isteğe bağlı yeni değer.

Dönen Değerler

Hata oluşursa FALSE, aksi takdirde belirtilen seçeneğin özgün değeri döner.

Örnekler

Örnek 1 - assert_options() örneği

<?php
// Sav başarısızlıklarında çalışacak işlevimiz
function assert_failure()
{
  echo 
'İddia geçersiz';
}

// Sınama işlevimiz
function test_assert($parameter)
{
  
assert(is_bool($parameter));
}

// Sav seçeneklerini atayalım
assert_options(ASSERT_ACTIVE,    true);
assert_options(ASSERT_BAIL,     true);
assert_options(ASSERT_WARNING,     false);
assert_options(ASSERT_CALLBACK'assert_failure');

// Başarısız olmasını umarak bir sav ileri sürelim
test_assert(1);

// ASSERT_BAIL true olduğundan buraya asla gelinmez
echo 'Buraya gelinmemesi gerekir';
?>

Ayrıca Bakınız



assert

(PHP 4, PHP 5)

assertBelirtilen savı sınar

Açıklama

bool assert ( mixed $sav )

assert() işlevi belirtilen sav 'ı sınar ve sonuç FALSE ise uygun eylemi gerçekleştirir.

sav bir dizge olarak verilmişse işlev tarafından PHP kodu olarak değerlendirilir. Savın bir dizge olarak belirtilmesinin getirisi, sav sınama kapalı olduğu zaman daha az yük oluşması ve sav başarısız olduğunda iletilerin sav ifadesini içerebilmeleridir. Yani, sav olarak bir mantıksal ifade aktardığınız takdirde, bu koşul ifadesi assert_options() işlevi ile tanımladığınız eylemci işleve bir değiştirge olarak gösterilmez, eylemci işlev çağrılmadan önce koşul ifadesi bir dizgeye, mantıksal FALSE değeri ise boş bir dizgeye dönüştürülür.

Savlar sadece bir hata ayıklama aracı olarak kullanılmalıdır. Bazı programlama hatalarının olmadığını belirten veya bir eklenti işlevi gibi belli özelliklerin veya belli sistem sınırlamalarının ve özelliklerinin varlığını sınayan koşul ifadelerinin her zaman TRUE dönmesini gerektiren kararlılık denetimleri için de kullanabilirsiniz.

Savlar, girdi değiştirgelerinin sınanması gibi normal çalışma anı işlemleri için kullanılmamalıdır. Ana kural olarak, bir kararlılık denetimini etkin kılmaksızın kodunuz düzgün olarak çalışabilmelidir.

assert() işlevinin davranışı assert_options() işlevi ile veya bu işlevin kılavuz sayfasında açıklanan INI ayarları ile yapılandırılabilir.

assert_options() işlevi ve/veya ASSERT_CALLBACK yapılandırma yönergesi ile bir savın başarısızlığı halinde çalışacak bir geriçağırım işlevi belirtilebilir.

assert() geriçağırım işlevleri, özellikle özdevinimli deneme ortamları oluşturulurken yararlı olur. Çünkü bunlar, savın oluştuğu yer bilgisi yanında sava aktarılan kodun da yakalanmasını kolaylaştırırlar. Bu bilgi başka yöntemlerle yakalanabilirse de savların kullanımı bu işlemin daha kolay ve çabuk olmasını sağlar.

Geriçağırım işlevinin üç değiştirge kabul etmesi gerekir. İlk değiştirge savın başarısız olduğu dosyayı, ikinci değiştirge savın başarısız olduğu satırı, üçüncü değiştirge ise başarısız olan ifadeyi (1, "iki" gibi herhangi bir değer belirtilebilir) içerir.

Değiştirgeler

sav

İddia.

Dönen Değerler

Sav yanlışsa FALSE değilse TRUE.

Örnekler

Örnek 1 - Başarısız bir savın özel bir işlevle ele alınması

<?php
// Savı etkin ve sessiz kılalım
assert_options(ASSERT_ACTIVE1);
assert_options(ASSERT_WARNING0);
assert_options(ASSERT_QUIET_EVAL1);

// Savın başarısızlığı halinde çalışacak işlevimiz
function savcı($dosya$satır$ifade)
{
    echo 
"<hr>Sav geçersiz:
        Dosya: '
$dosya'<br />
        Satır: '
$satır'<br />
          Kod: '
$ifade'<br /><hr />";
}

// Geriçağırım işlevimizi belirtelim
assert_options(ASSERT_CALLBACK'savcı');

// Başarısız olmasını umarak bir sav ileri sürelim
assert('mysql_query("")');
?>

Ayrıca Bakınız



dl

(PHP 4, PHP 5)

dlBelirtilen PHP eklentisini çalışma anında yükler

Açıklama

int dl ( string $kütüphane )

Kütüphane dosyası kütüphane değiştirgesi ile belirtilen PHP eklentisini yükler.

Belli bir eklentinin yüklü olup olmadığını sınamak için, hem yerleşik (php.ini ile yüklenen) hem de devingen olarak (dl() ile) yüklenen eklentileri bulan extension_loaded() işlevini kullanın.

Uyarı

Bu işlevin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu işleve kesinlikle güvenmemelisiniz.

Değiştirgeler

eklenti

Bu değiştirge ile eklentinin platforma özgü kütüphane dosyasının ismi belirtilir. Örneğin sockets eklentisini Windows platformunda yüklemek için php_sockets.dll ismini kullanmak gerekirken Unix platformlarında sockets.so kullanmak gerekir (bir paylaşımlı modül olarak derlenmişse).

Eklentinin yükleneceği dizin platforma göre değişiklik gösterir:

Windows - php.ini içinde açıkça belirtilmemişse, eklenti öntanımlı olarak c:\php4\extensions\ dizininden yüklenir.

Unix - php.ini içinde açıkça belirtilmemişse, öntanımlı eklenti dizinin yeri şunlara bağlıdır:

  • PHP'nin --enable-debug seçeneği ile derlenip derlenmediği;
  • PHP'nin (deneysel) ZTS (Zend Thread Safety) desteği ile derlenip derlenmediği;
  • geçerli yerleşik ZEND_MODULE_API_NO sabiti (Zend yerleşik modülü API numarası; genelde API modülünün değişiklik tarihidir. 20010901 gibi).

Bu durumlar hesaba katılarak eklentilerin öntanımlı yeri şöyle saptanır: <kurulum-dizini>/lib/php/extensions/ <debug/no-debug>-<zts/non-zts>-ZEND_MODULE_API_NO. Örnek: /usr/local/php/lib/php/extensions/debug-non-zts-20010901 veya /usr/local/php/lib/php/extensions/no-debug-zts-20010901.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner. Eğer modül yükleme işlevsel değilse (enable_dl ile iptal edilmiş veya php.ini içinde safe_mode etkin kılınmışsa) bir E_ERROR iletisi çıktılanıp çalışma durdurulur. Eğer işlev, kütüphane yüklenemediğinden dolayı başarısız olursa bir E_WARNING iletisi çıktılayarak FALSEdöndürür.

Örnekler

Örnek 1 - dl() örnekleri

<?php
// Platforma göre eklenti yüklemek
if (!extension_loaded('sqlite')) {
    if (
strtoupper(substr(PHP_OS03)) === 'WIN') {
        
dl('php_sqlite.dll');
    } else {
        
dl('sqlite.so');
    }
}

// PHP 4.3.0 ve sonrası için PHP_SHLIB_SUFFIX sabiti de kullanılabilir
if (!extension_loaded('sqlite')) {
    
$prefix = (PHP_SHLIB_SUFFIX === 'dll') ? 'php_' '';
    
dl($prefix 'sqlite.' PHP_SHLIB_SUFFIX);
}
?>

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Artık CLI, CGI ve Embed hariç tüm SAPI'lerde bir E_DEPRECATED üretiliyor.

Notlar

Bilginize: dl() işlevi çok evreli HTTP sunucularında desteklenmez. Böyle bir ortamda çalışıyorsanız php.ini içinde extensions deyimini kullanın. Ancak, CGI ve CLI sürümleri bundan etkilenmez.

Bilginize: PHP 5'ten beri, dl() işlevinin CLI dışında kullanımı önerilmemektidir. Yerine Eklenti Yükleme Yönergelerini kullanın.

Bilginize: PHP 6'dan beri bu işlev CLI, CGI ve embed dışında kalan tüm SAPI'lerde kaldırılmıştır.

Bilginize: dl() işlevinin değiştirgesi Unix platformlarında harf büyüklüğüne duyarlıdır.

Bilginize: Bu işlev, PHP güvenli kipte çalışırken iptal edilir.

Ayrıca Bakınız



extension_loaded

(PHP 4, PHP 5)

extension_loadedBelirtilen eklenti yüklü mü diye bakar

Açıklama

bool extension_loaded ( string $eklenti )

Belirtilen eklenti yüklü mü diye bakar.

Değiştirgeler

eklenti

Eklentinin ismi.

Eklentilerin isimlerini phpinfo() işlevini kullanarak veya CGI / CLI sürümlerini kullanıyorsanız -m seçeneği ile listeleyebilirsiniz:

$ php -m
[PHP Modules]
xml
tokenizer
standard
sockets
session
posix
pcre
overload
mysql
mbstring
ctype

[Zend Modules]

Dönen Değerler

İsmi belirtilen eklenti yüklü ise TRUE, değilse FALSE döner.

Örnekler

Örnek 1 - extension_loaded() örneği

<?php
if (!extension_loaded('gd')) {
    if (!
dl('gd.so')) {
        exit;
    }
}
?>

Sürüm Bilgisi

Sürüm: Açıklama
5.0.0 extension_loaded() işlevi belli bir eklentinin varlığını sınamak için eklentinin dahili ismini kullanır. Çoğu eklentinin ismi küçük harflerle yazılmışsa da büyük harfler kullanılarak yazılmış olanları da vardır. Bu işlev, PHP 5 öncesinde eklenti isimleri bakımından harf büyüklüğüne duyarlı idi.

Ayrıca Bakınız

  • get_loaded_extensions() - Derlenmiş ve yüklenmiş tüm modüllerin isimlerini içeren bir dizi döndürür
  • get_extension_funcs() - Bir modülün işlevlerinin isimlerini içeren bir dizi döndürür
  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar
  • dl() - Belirtilen PHP eklentisini çalışma anında yükler



gc_collect_cycles

(PHP 5 >= 5.3.0)

gc_collect_cyclesÇöp döngülerin toplanması için zorlar

Açıklama

int gc_collect_cycles ( void )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Çöp döngülerin toplanması için zorlar.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Toplanan çöp döngü sayısı ile döner.



gc_disable

(PHP 5 >= 5.3.0)

gc_disableDöngüsel gönderim toplayıcısını etkisiz kılar

Açıklama

void gc_disable ( void )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Döngüsel gönderim toplayıcısını etkisiz kılar.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Hiçbir değer dönmez.



gc_enable

(PHP 5 >= 5.3.0)

gc_enableDöngüsel gönderim toplayıcısını etkin kılar

Açıklama

void gc_enable ( void )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Döngüsel gönderim toplayıcısını etkin kılar.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Hiçbir değer dönmez.



gc_enabled

(PHP 5 >= 5.3.0)

gc_enabledDöngüsel gönderim toplayıcısının durumunu döndürür

Açıklama

bool gc_enabled ( void )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Döngüsel gönderim toplayıcısının (çöp toplayıcı) durumunu döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Çöp toplayıcı etkinse TRUE değilse FALSE döner.



get_cfg_var

(PHP 4, PHP 5)

get_cfg_varBelirtilen PHP yönergesinin değerini döndürür

Açıklama

string get_cfg_var ( string $yönerge )

Belirtilen PHP yapılandırma yönergesininin değerini döndürür.

Bu işlev, PHP yapılandırılırken kullanılan yapılandırma seçeneklerini döndürmediği gibi Apache yapılandırma dosyasını da okumaz.

Sistemin bir yapılandırma dosyası kullanıp kullanmadığını cfg_file_path yönergesinin değerine bakarak öğrenebilirsiniz. Bir değer atanmışsa yapılandırma dosyası kullanılıyordur.

Değiştirgeler

yönerge

Yapılandırma yönergesinin ismi.

Dönen Değerler

Bir hata oluşursa FALSE, aksi takdirde belirtilen PHP yapılandırma yönergesinin değerini döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Dizi değerli yapılandırma yönergelerinin değerlerinin döndürülmesi sağlandı.

Ayrıca Bakınız

  • ini_get() - Bir yapılandırma yönergesinin değerini döndürür
  • ini_get_all() - Tüm yapılandırma yönergelerini döndürür



get_current_user

(PHP 4, PHP 5)

get_current_userPHP betiğinin sahibininin kullanıcı ismini döndürür

Açıklama

string get_current_user ( void )

Betik sahibininin kullanıcı ismini döndürür.

Dönen Değerler

Kullanıcı ismi bir dizge olarak döner.

Örnekler

Örnek 1 - get_current_user() örneği

<?php
echo 'Betiğin sahibi: ' get_current_user();
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Betiğin sahibi: SYSTEM

Ayrıca Bakınız

  • getmyuid() - PHP betiğinin sahibinin kullanıcı kimliğini döndürür
  • getmygid() - PHP betiğinin sahibinin grup kimliğini döndürür
  • getmypid() - PHP'nin süreç kimliğini (PID) döndürür
  • getmyinode() - Çalışan betiğin dosya düğümü numarasını döndürür
  • getlastmod() - Geçerli sayfanın son değişiklik zamanını döndürür



get_defined_constants

(PHP 4 >= 4.1.0, PHP 5)

get_defined_constantsTüm sabitlerin isimlerini ve değerlerini içeren bir ilişkisel dizi döndürür

Açıklama

array get_defined_constants ([ bool $sınıfla ] )

Tanımlı olan tüm sabitlerin isimlerini ve değerlerini içeren bir ilişkisel dizi döndürür. Eklentilerce oluşturulanların yanında define() işleviyle tanımlananları da döndürür.

Değiştirgeler

sınıfla

TRUE belirtildiği takdirde, dizinin içerdiği sabitler dizinin ilk anahtarlarının altında sınıflandırılırlar.

<?php
define
("SABİT"1);
print_r(get_defined_constants(true));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [internal] => Array
        (
            [E_ERROR] => 1
            [E_WARNING] => 2
            [E_PARSE] => 4
            [E_NOTICE] => 8
            [E_CORE_ERROR] => 16
            [E_CORE_WARNING] => 32
            [E_COMPILE_ERROR] => 64
            [E_COMPILE_WARNING] => 128
            [E_USER_ERROR] => 256
            [E_USER_WARNING] => 512
            [E_USER_NOTICE] => 1024
            [E_ALL] => 2047
            [TRUE] => 1
        )

    [pcre] => Array
        (
            [PREG_PATTERN_ORDER] => 1
            [PREG_SET_ORDER] => 2
            [PREG_OFFSET_CAPTURE] => 256
            [PREG_SPLIT_NO_EMPTY] => 1
            [PREG_SPLIT_DELIM_CAPTURE] => 2
            [PREG_SPLIT_OFFSET_CAPTURE] => 4
            [PREG_GREP_INVERT] => 1
        )

    [user] => Array
        (
            [SABİT] => 1
        )

)

Dönen Değerler

Sürüm Bilgisi

Sürüm: Açıklama
5.0.0 sınıfla değiştirgesi eklendi.

Örnekler

Örnek 1 - get_defined_constants() örneği

<?php
print_r
(get_defined_constants());
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [E_ERROR] => 1
    [E_WARNING] => 2
    [E_PARSE] => 4
    [E_NOTICE] => 8
    [E_CORE_ERROR] => 16
    [E_CORE_WARNING] => 32
    [E_COMPILE_ERROR] => 64
    [E_COMPILE_WARNING] => 128
    [E_USER_ERROR] => 256
    [E_USER_WARNING] => 512
    [E_USER_NOTICE] => 1024
    [E_ALL] => 2047
    [TRUE] => 1
)

Ayrıca Bakınız



get_extension_funcs

(PHP 4, PHP 5)

get_extension_funcsBir modülün işlevlerinin isimlerini içeren bir dizi döndürür

Açıklama

array get_extension_funcs ( string $modül_ismi )

modül_ismi ile belirtilen modülde tanımlı tüm işlevlerin isimlerini bir dizi içinde döndürür.

Değiştirgeler

modül_ismi

Modülün ismi.

Bilginize: Bu değiştirge küçük harflerle yazılmalıdır.

Dönen Değerler

modül_ismi geçerli bir eklenti ismi değilse FALSE, aksi takdirde tüm işlev isimlerini içeren bir dizi döner.

Örnekler

Örnek 1 - XML işlevlerinin listesi

<?php
print_r
(get_extension_funcs("xml"));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [0] => xml_parser_create
    [1] => xml_parser_create_ns
    [2] => xml_set_object
    [3] => xml_set_element_handler
    [4] => xml_set_character_data_handler
    [5] => xml_set_processing_instruction_handler
    [6] => xml_set_default_handler
    [7] => xml_set_unparsed_entity_decl_handler
    [8] => xml_set_notation_decl_handler
    [9] => xml_set_external_entity_ref_handler
    [10] => xml_set_start_namespace_decl_handler
    [11] => xml_set_end_namespace_decl_handler
    [12] => xml_parse
    [13] => xml_parse_into_struct
    [14] => xml_get_error_code
    [15] => xml_error_string
    [16] => xml_get_current_line_number
    [17] => xml_get_current_column_number
    [18] => xml_get_current_byte_index
    [19] => xml_parser_free
    [20] => xml_parser_set_option
    [21] => xml_parser_get_option
    [22] => utf8_encode
    [23] => utf8_decode
)

Ayrıca Bakınız



get_include_path

(PHP 4 >= 4.3.0, PHP 5)

get_include_pathinclude_path yönergesinin değerini döndürür

Açıklama

string get_include_path ( void )

include_path yönergesinin değerini döndürür.

Dönen Değerler

Dosya arama yolları bir dizge olarak döner.

Örnekler

Örnek 1 - get_include_path() örneği

<?php
// PHP 4.3.0 ve sonrasında çalışır
echo get_include_path();

// Tüm PHP sürümlerinde çalışır
echo ini_get('include_path');
?>

Ayrıca Bakınız



get_included_files

(PHP 4, PHP 5)

get_included_filesBetiğe dahil edilen dosyaların isimlerini içeren bir dizi döndürür

Açıklama

array get_included_files ( void )

include(), include_once(), require() veya require_once() kullanarak betiğe dahil edilen tüm dosyaların isimlerini döndürür.

Dönen Değerler

Betiğe dahil edilen dosyaların isimlerini içeren bir dizi döndürür.

Betiğin kendisi de içerilmiş bir dosya olarak ele alınır ve ismi dönen diziye dahil edilir.

Betiğe birden fazla dahil edilen dosyaların isimleri dönen dizi içinde bir kere zikredilir.

Sürüm Bilgisi

Sürüm: Açıklama
4.0.1 PHP 4.0.1 ve öncesinde, bu işlev betiğe dahil edilen dosyaların .php uzantısına sahip olduklarını varsayar, diğer dosyaların isimlerini döndürmezdi. get_included_files() tarafından döndürülen ilişkisel dizi sadece include() ve include_once() kullanılarak betiğe dahil edilen dosyaların isimlerini döndürürdü.

Örnekler

Örnek 1 - get_included_files() örneği

<?php
// Dosyanın kendi ismi: abc.php

include 'test1.php';
include_once 
'test2.php';
require 
'test3.php';
require_once 
'test4.php';

$included_files get_included_files();

foreach (
$included_files as $filename) {
    echo 
"$filename\n";
}

?>

Yukarıdaki örneğin çıktısı:

abc.php
test1.php
test2.php
test3.php
test4.php

Notlar

Bilginize: auto_prepend_file yönergesinde belirtilerek dahil edilen dosyaların isimleri dönen dizide bulunmaz.

Ayrıca Bakınız



get_loaded_extensions

(PHP 4, PHP 5)

get_loaded_extensionsDerlenmiş ve yüklenmiş tüm modüllerin isimlerini içeren bir dizi döndürür

Açıklama

array get_loaded_extensions ([ bool $zend_eklentileri = false ] )

PHP yorumlayıcı içinde derlenmiş ve yüklenmiş tüm modüllerin isimlerini içeren bir dizi döndürür.

Değiştirgeler

zend_eklentileri

Öntanımlı değeri FALSE olup, bu durumda Zend eklentilerini listelemez.

Dönen Değerler

Tüm modül isimlerini içeren indisli bir dizi ile döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.2.4 Seçimlik zend_eklentileri değiştirgesi eklendi.

Örnekler

Örnek 1 - get_loaded_extensions() örneği

<?php
print_r
(get_loaded_extensions());
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
   [0] => xml
   [1] => wddx
   [2] => standard
   [3] => session
   [4] => posix
   [5] => pgsql
   [6] => pcre
   [7] => gd
   [8] => ftp
   [9] => db
   [10] => calendar
   [11] => bcmath
)

Ayrıca Bakınız

  • get_extension_funcs() - Bir modülün işlevlerinin isimlerini içeren bir dizi döndürür
  • extension_loaded() - Belirtilen eklenti yüklü mü diye bakar
  • dl() - Belirtilen PHP eklentisini çalışma anında yükler
  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar



get_magic_quotes_gpc

(PHP 4, PHP 5)

get_magic_quotes_gpcmagic_quotes_gpc yönergesinin değerini döndürür

Açıklama

int get_magic_quotes_gpc ( void )

magic_quotes_gpc yönergesinin değerini döndürür.

magic_quotes_gpc yönergesine çalışma anında değer atanamadığını unutmayın.

Sihirli tırnaklar hakkında daha ayrıntılı bilgi edinmek için güvenlik bölümüne bakınız.

Dönen Değerler

magic_quotes_gpc yönergesinin değeri "off" ise 0, "on" ise 1 döner.

Örnekler

Örnek 1 - get_magic_quotes_gpc() örneği

<?php
echo get_magic_quotes_gpc();         // 1
echo $_POST['lastname'];             // O\'reilly
echo addslashes($_POST['lastname']); // O\\\'reilly

if (!get_magic_quotes_gpc()) {
    
$lastname addslashes($_POST['lastname']);
} else {
    
$lastname $_POST['lastname'];
}

echo 
$lastname// O\'reilly
$sql "INSERT INTO lastnames (lastname) VALUES ('$lastname')";
?>

Notlar

Bilginize: Eğer magic_quotes_sybase yönergesinin değeri ON ise magic_quotes_gpc geçersiz olacaktır. Bu bakımdan, get_magic_quotes_gpc() TRUE döndürse bile ne çift tırnaklar ne tersbölüler ne de NULL değerler öncelenecektir. Bu durumda bunlar '' olarak görünecektir.

Ayrıca Bakınız



get_magic_quotes_runtime

(PHP 4, PHP 5)

get_magic_quotes_runtimemagic_quotes_runtime yönergesinin çalışma anı değerini döndürür

Açıklama

int get_magic_quotes_runtime ( void )

magic_quotes_runtime yönergesinin çalışma anı değerini döndürür.

Dönen Değerler

Sihirli tırnaklar çalışma anında etkinse 1 değilse 0 döndürür.

Örnekler

Örnek 1 - get_magic_quotes_runtime() örneği

<?php
// magic_quotes_runtime etkinse kapatalım
if(get_magic_quotes_runtime())
{
  
// Kapat
  
set_magic_quotes_runtime(false);
}
?>

Ayrıca Bakınız



get_required_files

(PHP 4, PHP 5)

get_required_filesget_included_files() işlevinin takma adıdır

Açıklama

Bu işlev get_included_files() işlevinin takma adıdır.



getenv

(PHP 4, PHP 5)

getenvBir ortam değişkeninin değerini döndürür

Açıklama

string getenv ( string $değişken )

Belirtilen ortam değişkeninin değerini döndürür.

Tüm ortam değişkenlerini phpinfo() işlevini kullanarak bir liste halinde görebilirsiniz. Bunların pek çoğunun anlamlarını » CGI belirtimi belgesinin özellikle » ortam değişkenleri ile ilgili sayfasında bulabilirsiniz.

Değiştirgeler

değişken

Ortam değişkeninin ismi.

Dönen Değerler

Bir hata oluşursa FALSE aksi takdirde değişken ile belirtilen ortam değişkeninin değerini döndürür.

Örnekler

Örnek 1 - getenv() örneği

<?php
// getenv() kullanım örneği
$ip getenv('REMOTE_ADDR');

//Veya basitçe bir süper küresel kullan ($_SERVER veya $_ENV)
$ip $_SERVER['REMOTE_ADDR'];
?>

Ayrıca Bakınız



getlastmod

(PHP 4, PHP 5)

getlastmodGeçerli sayfanın son değişiklik zamanını döndürür

Açıklama

int getlastmod ( void )

Geçerli sayfanın son değişiklik zamanını döndürür.

Başka bir dosyanın değişiklik zamanıyla ilgileniyorsanız filemtime() işlevine bakın.

Dönen Değerler

Geçerli sayfanın son değişiklik zamanını date() işlevinde kullanılabilen bir Unix zaman damgası olarak döndürür. Hata oluşursa FALSE döner.

Örnekler

Örnek 1 - getlastmod() örneği

<?php
$fmt 
datefmt_create("tr_TR"IntlDateFormatter::FULL,
        
IntlDateFormatter::FULL,'Europe/Istanbul',
        
IntlDateFormatter::GREGORIAN"dd MMMM yyyy HH:mm:ss");
// Çıktısı: 'Son değişiklik: Son değişiklik: 13 Şubat 2009 14:10:09'
echo "Son değişiklik: " datefmt_format ($fmtgetlastmod());
?>

Ayrıca Bakınız

  • date() - Yerel tarihi/saati biçimlendirir
  • getmyuid() - PHP betiğinin sahibinin kullanıcı kimliğini döndürür
  • getmygid() - PHP betiğinin sahibinin grup kimliğini döndürür
  • get_current_user() - PHP betiğinin sahibininin kullanıcı ismini döndürür
  • getmyinode() - Çalışan betiğin dosya düğümü numarasını döndürür
  • getmypid() - PHP'nin süreç kimliğini (PID) döndürür
  • filemtime() - Dosyanın değişiklik zamanını döndürür



getmygid

(PHP 4 >= 4.1.0, PHP 5)

getmygidPHP betiğinin sahibinin grup kimliğini döndürür

Açıklama

int getmygid ( void )

Betik sahibinin grup kimliğini döndürür.

Dönen Değerler

Hata oluşursa FALSE, aksi takdirde betik sahibinin grup kimliğini döndürür.

Ayrıca Bakınız

  • getmyuid() - PHP betiğinin sahibinin kullanıcı kimliğini döndürür
  • getmypid() - PHP'nin süreç kimliğini (PID) döndürür
  • get_current_user() - PHP betiğinin sahibininin kullanıcı ismini döndürür
  • getmyinode() - Çalışan betiğin dosya düğümü numarasını döndürür
  • getlastmod() - Geçerli sayfanın son değişiklik zamanını döndürür



getmyinode

(PHP 4, PHP 5)

getmyinodeÇalışan betiğin dosya düğümü numarasını döndürür

Açıklama

int getmyinode ( void )

Çalışan betiğin dosya düğümü numarasını döndürür.

Dönen Değerler

Hata oluşursa FALSE, aksi takdirde çalışan betiğin dosya düğümü numarasını bir tamsayı olarak döndürür.

Ayrıca Bakınız

  • getmygid() - PHP betiğinin sahibinin grup kimliğini döndürür
  • getmyuid() - PHP betiğinin sahibinin kullanıcı kimliğini döndürür
  • getmypid() - PHP'nin süreç kimliğini (PID) döndürür
  • get_current_user() - PHP betiğinin sahibininin kullanıcı ismini döndürür
  • getlastmod() - Geçerli sayfanın son değişiklik zamanını döndürür



getmypid

(PHP 4, PHP 5)

getmypidPHP'nin süreç kimliğini (PID) döndürür

Açıklama

int getmypid ( void )

PHP'nin süreç kimliğini döndürür.

Dönen Değerler

Hata oluşursa FALSE, aksi takdirde PHP süreç kimliği döner.

Notlar

Uyarı

Süreç kimlikleri eşsiz değildir, bu bakımdan güvenlikle ilgili konularda güvenilir değildir.

Ayrıca Bakınız

  • getmygid() - PHP betiğinin sahibinin grup kimliğini döndürür
  • getmyuid() - PHP betiğinin sahibinin kullanıcı kimliğini döndürür
  • get_current_user() - PHP betiğinin sahibininin kullanıcı ismini döndürür
  • getmyinode() - Çalışan betiğin dosya düğümü numarasını döndürür
  • getlastmod() - Geçerli sayfanın son değişiklik zamanını döndürür



getmyuid

(PHP 4, PHP 5)

getmyuidPHP betiğinin sahibinin kullanıcı kimliğini döndürür

Açıklama

int getmyuid ( void )

Betik sahibinin kullanıcı kimliğini döndürür.

Dönen Değerler

Hata oluşursa FALSE, aksi takdirde betik sahibinin kullanıcı kimliğini döndürür.

Ayrıca Bakınız

  • getmygid() - PHP betiğinin sahibinin grup kimliğini döndürür
  • getmypid() - PHP'nin süreç kimliğini (PID) döndürür
  • get_current_user() - PHP betiğinin sahibininin kullanıcı ismini döndürür
  • getmyinode() - Çalışan betiğin dosya düğümü numarasını döndürür
  • getlastmod() - Geçerli sayfanın son değişiklik zamanını döndürür



getopt

(PHP 4 >= 4.3.0, PHP 5)

getoptKomut satırı değiştirgeleri listesinden seçenekleri döndürür

Açıklama

array getopt ( string $kısa_seçenekler [, array $uzun_seçenekler ] )

Betiğe aktarılan seçenekleri çözümler.

Değiştirgeler

kısa_seçenekler
Bir dizge olup, dizgenin her karakteri bir seçenek karakteri olarak kullanılır ve bu karakterlerle eşleşen seçenekler önlerine birer tire imi (-) konarak betik çalıştırılırken komut satırından belirtilebilir. Örneğin, "x" seçenek dizgesi -x seçeneğinin tanınmasını sağlar.
uzun_seçenekler
Bir dizi olup, dizinin her elemanı bir seçenek dizgesi olarak kullanılır ve bu dizgelerle eşleşen seçenekler önlerine birer çift tire imi (--) konarak betik çalıştırılırken komut satırından belirtilebilir. Örneğin, "opt" elemanı --opt seçeneğinin tanınmasını sağlar.

Bilginize: PHP 5.3.0 öncesinde bu değiştirge sadece bir kaç sistemde kullanılabiliyordu.

kısa_seçenekler değiştirgesi şu bileşenleri içerebilir:

  • Tek tek karakterler (değerler kabul edilmez)
  • Ardına tek bir iki nokta imi konmuş karakterler (değiştirgenin değer gerektirdiğini belirtir)
  • Ardına bir çift iki nokta imi konmuş karakterler (değiştirgenin isteğe bağlı değer kabul ettiğini belirtir)

Seçenek değerleri dizgeden sonraki ilk değiştirgedir. Bir değerin sonunda boşluk bulunup bulunmadığına bakılmaz.

Bilginize: İsteğe bağlı değerler bir ayraç olarak " " (boşluk) kabul etmezler.

Bilginize: kısa_seçenekler ve uzun_seçenekler için biçem hemen hemen aynıdır. Tek fark, birincisinin bir dizge (her karakter bir seçenek) ikincisinin bir dizi (her eleman bir seçenek) almasıdır.

Dönen Değerler

Bu işlev başarısız olursa FALSE, aksi takdirde seçenek / değiştirge çiftlerini içeren bir dizi döndürür.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Değiştirge/değer ayracı olarak "=" desteği eklendi.
5.3.0 İsteğe bağlı değerler için destek eklendi ("::" ile belirtilir).
5.3.0 İşlev sisteme bağlı olmaktan çıktı. Artık Windows üzerinde de çalışmaktadır.

Örnekler

Örnek 1 - getopt() örneği - 1

<?php
$options 
getopt("f:hp:");
var_dump($options);
?>

Yukarıdaki betik php betik.php -fdeğer -h komut satırı için aşağıdaki çıktıyı üretir:

array(2) {
  ["f"]=>
  string(5) "değer"
  ["h"]=>
  bool(false)
}

Örnek 2 - getopt() örneği - 2

<?php
$kısalar  
"";
$kısalar .= "f:";  // Değer, zorunlu
$kısalar .= "v::"// Değer, seçimlik
$kısalar .= "abc"// Bunlar değer kabul etmez

$uzunlar  = array(
    
"gerekli:",     // Değer, zorunlu
    
"seçimlik::",   // Değer, seçimlik
    
"seçenek",      // Değer kabul etmez
    
"sçnk",         // Değer kabul etmez
);
$seçenekler getopt($kısalar$uzunlar);
var_dump($seçenekler);
?>

Yukarıdaki betik php betik.php -f "f değeri" -v -a --gerekli değer --seçimlik="seçimlik değer" --seçenek komut satırı için aşağıdaki çıktıyı üretir:

array(6) {
  ["f"]=>
  string(9) "f değeri"
  ["v"]=>
  bool(false)
  ["a"]=>
  bool(false)
  ["gerekli"]=>
  string(6) "değer"
  ["seçimlik"]=>
  string(16) "seçimlik değer"
  ["seçenek"]=>
  bool(false)
}

Örnek 3 - getopt() örneği - 3

Çok sayıda seçeneğin tek bir seçenek olarak verilmesi:

<?php
$options 
getopt("abc");
var_dump($options);
?>

Yukarıdaki betik php betik.php -aaac komut satırı için aşağıdaki çıktıyı üretir:

array(2) {
  ["a"]=>
  array(3) {
    [0]=>
    bool(false)
    [1]=>
    bool(false)
    [2]=>
    bool(false)
  }
  ["c"]=>
  bool(false)
}



getrusage

(PHP 4, PHP 5)

getrusageGeçerli özkaynak kullanımlarını döndürür

Açıklama

array getrusage ([ int $kim = 0 ] )

getrusage(2) için bir arayüz olup sistem çağırısından dönen veriyi döndürür.

Değiştirgeler

kim

1 belirtilirse işlev RUSAGE_CHILDREN ile çağrılır.

Dönen Değerler

Sistem çağrısından dönen veriyi içeren bir ilişkisel dizi döner. Tüm girdilere belgelenmiş alan isimleri kullanılarak erişilebilir.

Örnekler

Örnek 1 - getrusage() örneği

<?php
$dat 
getrusage();
echo 
$dat["ru_nswap"];         // takas alanlarının sayısı
echo $dat["ru_majflt"];        // sayfa hatalarının sayısı
echo $dat["ru_utime.tv_sec"];  // kullanılan kullanıcı zamanı (saniye)
echo $dat["ru_utime.tv_usec"]; // kullanılan kullanıcı zamanı (mikrosaniye)
?>

Notlar

Bilginize: Bu işlev Windows sistemlerinde çalışmaz.

Ayrıca Bakınız

  • Sisteminizdeki getrusage(2) kılavuz sayfası



ini_alter

(PHP 4, PHP 5)

ini_alterini_set() işlevinin takma adıdır

Açıklama

Bu işlev, ini_set() işlevinin takma adıdır.



ini_get_all

(PHP 4 >= 4.2.0, PHP 5)

ini_get_allTüm yapılandırma yönergelerini döndürür

Açıklama

array ini_get_all ([ string $eklenti [, bool $ayrıntılı = true ]] )

Kayıtlı yapılandırma seçeneklerinin hepsini değerleriyle döndürür.

Değiştirgeler

eklenti

İsteğe bağlı olarak bir eklenti ismi. Belirtildiği takdirde sadece bu eklentiye özgü yönergeler döndürülür.

ayrıntılı

Ya her ayarın geçerli değeri ya da her ayarın ayrıntılı değerleri döndürülür. Öntanımlı olan TRUE değeri ayrıntılı bir çıktı üretir.

Dönen Değerler

Yönerge isimlerinin dizinin anahtarları olduğu bir dizi döner.

ayrıntılı değiştirgesi TRUE (öntanımlı) olduğu takdirde dizinin her elemanı, anahtarları global_value (php.ini'de atanmış değer), local_value (ini_set() veya .htaccess üzerinden atanmış değer), ve access (erişim seviyesi) olan bir alt dizi içerir.

ayrıntılı değiştirgesi FALSE olduğu takdirde her elemanın değeri sadece yönergenin geçerli değerini içerecektir.

Bilginize: Bir yönergenin, access anahtarı altında bir bit maskesi değeri olarak çok sayıda erişim seviyesine sahip olması mümkündür.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 ayrıntılı değiştirgesi eklendi.

Örnekler

Örnek 1 - ini_get_all() örnekleri

<?php
print_r
(ini_get_all("pcre"));
print_r(ini_get_all());
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [pcre.backtrack_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

    [pcre.recursion_limit] => Array
        (
            [global_value] => 100000
            [local_value] => 100000
            [access] => 7
        )

)
Array
(
    [allow_call_time_pass_reference] => Array
        (
            [global_value] => 0
            [local_value] => 0
            [access] => 6
        )

    [allow_url_fopen] => Array
        (
            [global_value] => 1
            [local_value] => 1
            [access] => 4
        )

    ...

)

Örnek 2 - Ayrıntısız listeleme

<?php
print_r
(ini_get_all("pcre"false)); // PHP 5.3.0'dan itibaren
print_r(ini_get_all(nullfalse));   // PHP 5.3.0'dan itibaren
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [pcre.backtrack_limit] => 100000
    [pcre.recursion_limit] => 100000
)
Array
(
    [allow_call_time_pass_reference] => 0
    [allow_url_fopen] => 1
    ...
)

Ayrıca Bakınız



ini_get

(PHP 4, PHP 5)

ini_getBir yapılandırma yönergesinin değerini döndürür

Açıklama

string ini_get ( string $yönerge )

Belirtilen yapılandırma yönergesinin değerini döndürür.

Değiştirgeler

yönerge

yapılandırma yönergesinin ismi.

Dönen Değerler

Başarısızlık durumunda ve NULL değerler için boş bir dizge, aksi takdirde yapılandırma yönergesinin değeri ile döner.

Örnekler

Örnek 1 - ini_get() örnekleri

<?php
/*
php.ini dosyamız şu ayarları içeriyor:

display_errors = On
register_globals = Off
post_max_size = 8M
*/

echo 'display_errors = ' ini_get('display_errors') . "\n";
echo 
'register_globals = ' ini_get('register_globals') . "\n";
echo 
'post_max_size = ' ini_get('post_max_size') . "\n";
echo 
'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
echo 
'post_max_size (bayt olarak) = ' return_bytes(ini_get('post_max_size'));

function 
return_bytes($val) {
    
$val trim($val);
    
$last strtolower($val[strlen($val)-1]);
    switch(
$last) {
        
// 'G' birimi PHP 5.1.0 sürümünden beri var.
        
case 'g':
            
$val *= 1024;
        case 
'm':
            
$val *= 1024;
        case 
'k':
            
$val *= 1024;
    }

    return 
$val;
}

?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:


display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size (bayt olarak) = 8388608

Notlar

Bilginize: Mantıksal değerleri sorgularken
Bir mantıksal ini değeri olarak off, boş bir dizge veya "0" olarak dönerken, on değeri "1" olarak dönecektir. Bu işlev ayrıca yönergenin değerini birebir dizge olarak da döndürebilir.

Bilginize: Bellek miktarı değerlerini sorgularken
upload_max_filesize yönergesinde olduğu gibi pek çok bellek miktarı değeri, php.ini dosyasında kısa gösterimleriyle saklanabilir. ini_get() işlevi, yönergenin değeri olarak değerin tamsayı karşılığını değil, php.ini dosyasında saklandığı haliyle dizge değerini döndürür. Bu bakımdan, bu değer üzerindeki aritmetik işlemler beklenen sonuçları vermeyebilir. Yukarıdaki örnekte, kısa gösterimi bayt cinsinden bir değere dönüştürmenin yolu gösterilmektedir.

Ayrıca Bakınız

  • get_cfg_var() - Belirtilen PHP yönergesinin değerini döndürür
  • ini_get_all() - Tüm yapılandırma yönergelerini döndürür
  • ini_restore() - Bir yapılandırma yönergesine eski değerini atar
  • ini_set() - Bir yapılandırma yönergesine değer atar



ini_restore

(PHP 4, PHP 5)

ini_restoreBir yapılandırma yönergesine eski değerini atar

Açıklama

void ini_restore ( string $yönerge )

Belirtilen yapılandırma yönergesine eski değeri atanır.

Değiştirgeler

yönerge

Yönergenin ismi.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - ini_restore() örneği

<?php
$setting 
'y2k_compliance';

echo 
'\'' $setting '\' yönergesinin şu anki değeri: ' ini_get($setting), PHP_EOL;

ini_set($settingini_get($setting) ? 1);
echo 
'\'' $setting '\' yönergesinin yeni değeri: ' ini_get($setting), PHP_EOL;

ini_restore($setting);
echo 
'\'' $setting '\' yönergesinin özgün değeri: ' ini_get($setting), PHP_EOL;
?>

Yukarıdaki örneğin çıktısı:

'y2k_compliance' yönergesinin şu anki değeri: 1
'y2k_compliance' yönergesinin yeni değeri: 0
'y2k_compliance' yönergesinin özgün değeri: 1

Ayrıca Bakınız

  • ini_get() - Bir yapılandırma yönergesinin değerini döndürür
  • ini_get_all() - Tüm yapılandırma yönergelerini döndürür
  • ini_set() - Bir yapılandırma yönergesine değer atar



ini_set

(PHP 4, PHP 5)

ini_setBir yapılandırma yönergesine değer atar

Açıklama

string ini_set ( string $yönerge , string $değer )

Belirtilen yapılandırma yönergesine belirtilen değeri atar. Bu ayarlama betiğinizin çalışma süresince geçerli kalır, betik sonlandığında eski değer geçerli olur.

Değiştirgeler

yönerge

ini_set() işlevi ile tüm yapılandırma yönergelerine değer atanamaz. Mevcut yapılandırma yönergelerinin listesini eklerde bulabilirsiniz.

değer

Yönergeye atanacak yeni değer.

Dönen Değerler

Atama işlemi başarılı olursa eski değer, aksi takdirde FALSE döner.

Örnekler

Örnek 1 - Bir INI yönergesine değer atamak

<?php
echo ini_get('display_errors');

if (!
ini_get('display_errors')) {
    
ini_set('display_errors'1);
}

echo 
ini_get('display_errors');
?>

Ayrıca Bakınız



magic_quotes_runtime

(PHP 4, PHP 5)

magic_quotes_runtimeTakma Adı: set_magic_quotes_runtime()

Açıklama

Bu işlev şu işlevin takma adıdır: set_magic_quotes_runtime()



main

mainBöyle bir işlev yoktur

Açıklama

PHP kaynak kodunun main() işlevinden başka main() işlevi yoktur. PHP 4.3.0 sürümünde PHP kaynak kodunda yeni bir hata eylemci türü (php_error_docref) devreye girdi. html_errors (öntanımlı olarak 'On') ve docref_root (PHP 4.3.2'ye kadar öntanımlı olarak 'On') yapılandırma yönergelerine 'On' atandığı takdirde, bu özellik, PHP hata iletilerinde bir kılavuz sayfasına atıfta bulunmayı sağlamaktadır.

Bazı hata iletilerinde, bu sayfanın mevcudiyet sebebi olarak, main() işlevi için bir kılavuz sayfasına atıf yapılır. Bir PHP işlevinde main() işlevi ile ilişkili olarak bir hata alırsanız lütfen bunun için » bir hata raporu oluşturun. Bu hata giderilecek ve gerektiği gibi belgelenecektir.

main() işlevine atıflı bilinen hatalar
İşlev ismi Hatanın artık görülmediği sürüm
include() 5.1.0
include_once() 5.1.0
require() 5.1.0
require_once() 5.1.0

Ayrıca Bakınız



memory_get_peak_usage

(PHP 5 >= 5.2.0)

memory_get_peak_usagePHP'ye ayrılan belleğin azami miktarını döndürür

Açıklama

int memory_get_peak_usage ([ bool $gerçek_kullanım = false ] )

PHP betiğinize ayrılan azami belleğin bayt cinsinden miktarını döndürür.

Değiştirgeler

gerçek_kullanım

TRUE olduğu takdirde sistem tarafından PHP'ye ayrılan gerçek bellek miktarı, FALSE olduğunda veya değiştirge belirtilmediğinde emalloc() tarafından kullanılan bellek miktarı raporlanır.

Dönen Değerler

Ayrılan azami belleğin bayt cinsinden miktarı.

Sürüm Bilgisi

Sürüm: Açıklama
5.2.1 Bu işlevin kullanılabilmesi için derleme sırasında --enable-memory-limit seçeneğini belirtme ihtiyacı ortadan kalktı.
5.2.0 real_usage değiştirgesi eklendi.

Ayrıca Bakınız



memory_get_usage

(PHP 4 >= 4.3.2, PHP 5)

memory_get_usagePHP'ye ayrılan belleğin miktarını döndürür

Açıklama

int memory_get_usage ([ bool $gerçek_kullanım = false ] )

PHP betiğinize ayrılan belleğin bayt cinsinden miktarını döndürür.

Değiştirgeler

gerçek_kullanım

TRUE olduğu takdirde sistem tarafından PHP'ye ayrılan gerçek bellek miktarı, FALSE olduğunda veya değiştirge belirtilmediğinde emalloc() tarafından kullanılan bellek miktarı raporlanır.

Dönen Değerler

Ayrılan belleğin bayt cinsinden miktarı.

Sürüm Bilgisi

Sürüm: Açıklama
5.2.1 Bu işlevin kullanılabilmesi için derleme sırasında --enable-memory-limit seçeneğini belirtme ihtiyacı ortadan kalktı.
5.2.0 gerçek_kullanım değiştirgesi eklendi.

Örnekler

Örnek 1 - memory_get_usage() örneği

<?php
// Bu sadece bir örnektir.
// Miktarlar, sisteminizde farklı olabilir.

echo memory_get_usage() . "\n"// 36640

$a str_repeat("Hello"4242);

echo 
memory_get_usage() . "\n"// 57960

unset($a);

echo 
memory_get_usage() . "\n"// 36744

?>

Ayrıca Bakınız



php_ini_loaded_file

(PHP 5 >= 5.2.4)

php_ini_loaded_fileYüklü php.ini dosyasının dosya yolunu döndürür

Açıklama

string php_ini_loaded_file ( void )

Bir php.ini dosyası yüklü mü diye bakar ve dosyanın yolunu döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

php.ini yüklüyse dosyanın yolu, değilse FALSE döner.

Örnekler

Örnek 1 - php_ini_loaded_file() örneği

<?php
$inipath 
php_ini_loaded_file();

if (
$inipath) {
    echo 
'Yüklü php.ini: ' $inipath;
} else {
    echo 
'Bir php.ini dosyası yüklü değil';
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Yüklü php.ini: /usr/local/php/php.ini

Ayrıca Bakınız



php_ini_scanned_files

(PHP 4 >= 4.3.0, PHP 5)

php_ini_scanned_filesEk ini dizininden ayrıştırılan dosyaların listesi ile döner

Açıklama

string php_ini_scanned_files ( void )

php_ini_scanned_files() işlevi php.ini dosyasından sonra ayrıştırılan yapılandırma dosyalarını bir virgül ayraçlı liste olarak döndürür. Bu dosyalar, derleme sırasında --with-config-file-scan-dir seçeneği tarafından tanımlanan bir dizinde bulunur.

Döndürülen yapılandırma dosyaları --with-config-file-scan-dir seçeneğinde bildirilen yolu da içerir.

Dönen Değerler

Başarı durumunda .ini dosyalarının virgül ayraçlı listesini bir dizge olarak döndürür. Derleme sırasında --with-config-file-scan-dir seçeneği kullanılmamışsa FALSE döner. Seçenek kullanılmışsa fakat dizin boşsa bir boş dizge döner. INI dosyası olmayan bir dosyanın varlığı halinde dosya ismi listeye konur, fakat ek olarak bir PHP hatası çıktılanır. Bu PHP hatası hem derleme sırasında hem de php_ini_scanned_files() işlevi kullanıldığında görüntülenir.

Örnekler

Örnek 1 - Dönen ini dosyalarının listelenmesi

<?php
if ($filelist php_ini_scanned_files()) {
    if (
strlen($filelist) > 0) {
        
$files explode(','$filelist);

        foreach (
$files as $file) {
            echo 
"<li>" trim($file) . "</li>\n";
        }
    }
}
?>

Ayrıca Bakınız

  • ini_set() - Bir yapılandırma yönergesine değer atar
  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar
  • php_ini_loaded_file() - Yüklü php.ini dosyasının dosya yolunu döndürür



php_logo_guid

(PHP 4, PHP 5)

php_logo_guidPHP logo kimliğini döndürür

Açıklama

string php_logo_guid ( void )

Bu işlev, yerleşik resmi kullanarak PHP logosunu göstermekte kullanılacak kimliği döndürür. Logonunu gösterilip gösterilmeyeceğini expose_php yönergesi belirler.

Dönen Değerler

PHPE9568F34-D428-11d2-A769-00AA001ACF42 döner.

Örnekler

Örnek 1 - php_logo_guid() örneği

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' php_logo_guid() . '" alt="PHP Logo !" />';

?>

Ayrıca Bakınız

  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar
  • phpversion() - Çalışan PHP'nin sürümünü döndürür
  • phpcredits() - PHP'ya katkıda bulunanları gösterir
  • zend_logo_guid() - Zend logo kimliğini döndürür



php_sapi_name

(PHP 4 >= 4.0.1, PHP 5)

php_sapi_nameHTTP sunucusu ile PHP arasındaki arayüzün türünü döndürür

Açıklama

string php_sapi_name ( void )

PHP'nin kullandığı arayüz (Sunucu API'si, SAPI) türünü belirten küçük harfli bir dizge döndürür. Örneğin CLI PHP için bu dizge "cli" olurken Apache ile kullanılan API'ye bağlı olarak değişiklik gösteribilir. Olası değerler aşağıda listelenmiştir.

Dönen Değerler

Arayüz türünü küçük harfli bir dizge olarak döndürür.

Tamamı olmasa da olası değerler şunlardır: aolserver, apache, apache2filter, apache2handler, caudium, cgi (PHP 5.3'ten beri), cgi-fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux ve webjames.

Örnekler

Örnek 1 - php_sapi_name() örneği

Bu örnektecgi-fcgi değerini de kapsayan cgi alt dizgesinin varlığı aranmaktadır.

<?php
$sapi_type 
php_sapi_name();
if (
substr($sapi_type03) == 'cgi') {
    echo 
"CGI PHP kullanıyorsunuz\n";
} else {
    echo 
"CGI PHP kullanmıyorsunuz\n";
}
?>

Notlar

Bilginize: Başka bir yaklaşım
PHP sabiti PHP_SAPI, php_sapi_name() işlevinden dönen değerin aynını içerir.

İpucu

Olası bir yanlış anlama

Tanımlı SAPI her zaman apaçık belli değildir. Apache örneğindeki gibi apache2handler veya apache2filter olarak tanımlanmış olabilir.

Ayrıca Bakınız



php_uname

(PHP 4 >= 4.0.2, PHP 5)

php_unamePHP'nin çalıştığı işletim sistemi hakkında bilgi döndürür

Açıklama

string php_uname ([ string $kip = "a" ] )

php_uname() işlevi PHP'nin üzerinde çalıştığı işletim sistemi hakkında bilgi döndürür. Bu bilgiyi phpinfo() çıktısının üst satırlarında da görebilirsiniz. İşletim sisteminin sadece ismini öğrenmek isterseniz PHP_OS sabitini kullanabilirsiniz; fakat bu sabiti kullanırken, sabitin, PHP'nin derlendiği işletim sistemi adını içereceğini unutmayın.

Bazı eski Unix sürümlerinde, üzerinde çalışılan işletim sistemi saptanamaz ve PHP üzerinde derlendiği işletim sistemi bilgisi gösterilir. Buna genellikle uname() kütüphane çağrısının mevcut olmadığı veya çalışmadığı sistemlerde rastlanır.

Değiştirgeler

kip

kip döndürülecek bilgi çeşidini belirtmek için kullanılan tek bir karakter içerebilir. Olası değerler:

  • 'a': Bu öntanımlıdır. "s n r v m" kiplerinin hepsini içerir.
  • 's': işletim sisteminin ismi. Örnek: FreeBSD.
  • 'n': Konak ismi. Örnek: localhost.example.com.
  • 'r': Dağıtım ismi. Örnek: 5.1.2-RELEASE.
  • 'v': Sürüm bilgisi. İşletim sistemine göre değişiklik gösterir.
  • 'm': Makine türü. Örnek: i386.

Dönen Değerler

Bilgiyi bir dizge olarak döndürür.

Örnekler

Örnek 1 - php_uname() örnekleri

<?php
echo php_uname();
echo 
PHP_OS;

/* Bazı olası çıktılar:
Linux localhost 2.4.21-0.13mdk #1 Fri Mar 14 15:08:06 EST 2003 i686
Linux

FreeBSD localhost 3.2-RELEASE #15: Mon Dec 17 08:46:02 GMT 2001
FreeBSD

Windows NT XN1 5.1 build 2600
WINNT
*/

if (strtoupper(substr(PHP_OS03)) === 'WIN') {
    echo 
'Bu sunucu Windows üzerinde!';
} else {
    echo 
'Bu sunucu Windows üzerinde değil!';
}

?>

İşinizi yarayacak bazı öntanımlı PHP sabitleri vardır. Örneğin:

Örnek 2 - İşletim sistemine göre bazı sabit örnekleri

<?php
// *nix
echo DIRECTORY_SEPARATOR// /
echo PHP_SHLIB_SUFFIX;    // so
echo PATH_SEPARATOR;      // :

// Win*
echo DIRECTORY_SEPARATOR// \
echo PHP_SHLIB_SUFFIX;    // dll
echo PATH_SEPARATOR;      // ;
?>

Ayrıca Bakınız

  • phpversion() - Çalışan PHP'nin sürümünü döndürür
  • php_sapi_name() - HTTP sunucusu ile PHP arasındaki arayüzün türünü döndürür
  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar



phpcredits

(PHP 4, PHP 5)

phpcreditsPHP'ya katkıda bulunanları gösterir

Açıklama

bool phpcredits ([ int $seçenek = CREDITS_ALL ] )

PHP ve eklenti geliştiricilerinin listesini basar. Uygun HTML kodlarını üretip içine bu bilgiyi yerleştirir.

Değiştirgeler

seçenek

Bu değiştirgeyi sayfayı özelleştirmek için kullanabilirsiniz. Değiştirge isteğe bağlıdır ve CREDITS_ALL öntanımlıdır.

Olası phpcredits() seçenekleri
Seçenek Açıklama
CREDITS_ALL Tüm katkıcılar. CREDITS_DOCS, CREDITS_GENERAL, CREDITS_GROUP, CREDITS_MODULES ve CREDITS_FULLPAGE seçeneklerinin tamamına eşdeğerdir. Uygun başlıklarla tek bir HTML sayfası üretilir.
CREDITS_DOCS Belgelendirme ekibi.
CREDITS_FULLPAGE Diğer seçeneklerin çıktılarının birleşiminden oluşan tek bir HTML sayfası üretilir.
CREDITS_GENERAL Genel katkıcılar: Dil tasarımı ve kavramlar, PHP 4.0 ve SAPI modülünün yazarları.
CREDITS_GROUP Çekirdek geliştiricilerin listesi
CREDITS_MODULES Eklenti modüllerinin ve yazarlarının listesi.
CREDITS_SAPI Sunucu API modüllerinin ve yazarlarının listesi.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - Genel katkıcıların listelenmesi

<?php
phpcredits
(CREDITS_GENERAL);
?>

Örnek 2 - Çekirdek geliştiricilerin ve belgelendirme ekibinin listelenmesi

<?php
phpcredits
(CREDITS_GROUP CREDITS_DOCS CREDITS_FULLPAGE);
?>

Örnek 3 - Tüm katkıcıların listelenmesi

<html>
 <head>
  <title>Katılımcılar</title>
 </head>
 <body>
<?php
// bazı kodlar
phpcredits(CREDITS_ALL CREDITS_FULLPAGE);
// bazı kodlar
?>
 </body>
</html>

Ayrıca Bakınız

  • phpversion() - Çalışan PHP'nin sürümünü döndürür
  • php_logo_guid() - PHP logo kimliğini döndürür
  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar



phpinfo

(PHP 4, PHP 5)

phpinfoPHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar

Açıklama

bool phpinfo ([ int $ne = INFO_ALL ] )

PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar. Bu bilgi, PHP derleme seçenekleri, kurulu eklentiler, PHP sürümü, sunucu bilgisi, (PHP bir modül olarak derlenmişse) sunucu ortam değişkenleri, PHP ortam değişkenleri, işletim sistemi sürüm bilgileri, dosya yolları, asıl ve yerel yapılandırma seçenekleri, HTTP başlıkları ve PHP lisansını içerir.

Her sistemin yapılandırması farklı olduğundan phpinfo() işlevi genellikle, yapılandırma ayarlarını ve kullanılabilecek öntanımlı değişkenleri öğrenmek için kullanılır.

phpinfo() tüm EGPCS (Environment, GET, POST, Cookie, Server) verisini içerdiğinden ayrıca değerli bir hata ayıklama aracıdır.

Değiştirgeler

ne

İsteğe bağlı bu değiştirgede aşağıdaki sabitlerin bitsel değerlerinin toplamı belirtilerek işlevin çıktısı özelleştirilebilir. Bu sabitleri veya bitsel değerlerini VEYA işleci ile birleştirerek belirtebilirsiniz.

phpinfo() seçenekleri
Sabit Değer Açıklama
INFO_GENERAL 1 Yapılandırma satırı, php.ini dosyasının yeri, derleme tarihi, HTTP Sunucusu, Sistem, vesaire.
INFO_CREDITS 2 PHP'ye katkıda bulunanlar. Ayrıca, phpcredits() işlevine de bakınız.
INFO_CONFIGURATION 4 PHP yönergelerinin asıl ve yerel değerleri. Ayrıca ini_get() işlevine de bakınız.
INFO_MODULES 8 Yüklü modüller ve binlerğn ayarları. Ayrıca get_loaded_extensions() işlevine de bakınız.
INFO_ENVIRONMENT 16 $_ENV dizisi ile de edinilebilen ortam değişkenleri bilgileri.
INFO_VARIABLES 32 EGPCS (Environment, GET, POST, Cookie, Server) verisinden elde edilen tüm öntanımlı değişkenler.
INFO_LICENSE 64 PHP Lisans bilgileri. Ayıca bakınız: » Lisans SSS.
INFO_ALL -1 Yukarıdakiler hepsi gösterilir. Bu öntanımlı değerdir.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.2.2 "Loaded Configuration File" başlığı altında yüklü yapılandırma dosyası bilgi eklendi. Evvelce sadece "Configuration File (php.ini) Path" başlığı altında yapılandırma dosyasının yolu bulunurdu.

Örnekler

Örnek 1 - phpinfo() örneği

<?php

// Tüm bilgiyi gösterelim (INFO_ALL sabitine eşdeğer)
phpinfo();

// Sadece modül bilgisini gösterelim.
// phpinfo(8) de aynı sonucu verir.
phpinfo(INFO_MODULES);

?>

Notlar

Bilginize: Parts of the information displayed are disabled when the expose_php yapılandırma seçeneğine off atanmışsa bazı bilgiler gösterilmez. PHP ve Zend logoları ve katkıcılar bunlardan bazılarıdır.

Bilginize: PHP'yi komut satırından kullanıyorsanız phpinfo() işlevi HTML çıktı yerine düz metin çıktı verir.

Ayrıca Bakınız



phpversion

(PHP 4, PHP 5)

phpversionÇalışan PHP'nin sürümünü döndürür

Açıklama

string phpversion ([ string $eklenti ] )

Çalışan PHP'nin veya belirtilen eklentinin sürüm numarasını bir dizge olarak döndürür.

Değiştirgeler

eklenti

İsteğe bağlı bir eklenti ismi.

Dönen Değerler

İsteğe bağlı eklenti değiştirgesi belirtilmişse işlev bu eklentinin sürüm bilgisini döndürür. Eklenti ile ilgili bir sürüm bilgisi yoksa veya eklenti etkin değilse FALSE döner.

Örnekler

Örnek 1 - phpversion() örneği

<?php
// prints e.g. 'Current PHP version: 4.1.1'
echo 'Çalışan PHP\'nin sürümü: ' phpversion();

// eklenti etkinse '2.0' gibi bir değer basar
// eklenti etkin değilse hiçbir şey basılmaz
echo phpversion('tidy');
?>

Örnek 2 - PHP_VERSION_ID örneği

<?php
// PHP_VERSION_ID, PHP 5.2.7'den beri kullanılabilmektedir.
// Kullandığınız sürüm daha düşükse taklit edin
if(!defined('PHP_VERSION_ID'))
{
 
$version explode('.',PHP_VERSION);

 
define('PHP_VERSION_ID',
        (
$version[0] * 10000 $version[1] * 100 $version[2]));
}

// PHP_VERSION_ID bir sayı olarak tanımlanır. PHP sürümü yükseldikçe
// sayı büyür. Şu ifade ile tanımlanır:
//
// $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
//
// Artık PHP sürümlerinin özellikleri için PHP_VERSION_ID'ye bakabiliriz.
// Kullandığınız PHP sürümü bir özelliği desteklemezse version_compare()
// kullanmanız gerekmez. Örneğin 5.2.7 öncesi sürümlerden birini
// kullanıyorsanız PHP_VERSION_* sabitlerini şöyle tanımlayabilirsiniz:

if(PHP_VERSION_ID 50207)
{
 
define('PHP_MAJOR_VERSION',   $version[0]);
 
define('PHP_MINOR_VERSION',   $version[1]);
 
define('PHP_RELEASE_VERSION',   $version[2]);

 
// ve böyle gider, ...
}
?>

Notlar

Bilginize: Bu bilgi ayrıca PHP_VERSION öntanımlı sabitinde de bulunur.

Ayrıca Bakınız

  • version_compare() - PHP standardına uygun hale getirilmiş iki sürüm numarası dizgesini karşılaştırır
  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar
  • phpcredits() - PHP'ya katkıda bulunanları gösterir
  • php_logo_guid() - PHP logo kimliğini döndürür
  • zend_version() - Zend motorunun sürümünü döndürür



putenv

(PHP 4, PHP 5)

putenvBir ortam değişkenine değer atar

Açıklama

bool putenv ( string $atama_dizgesi )

atama_dizgesi 'ni sunucu ortamına ekler. Yeni ortam değişkeni sadece o anki istek için istek süresince geçerli olacaktır. İstek sunumunun sonunda ortam özgün durumuna getirilir.

Belli ortam değişkenlerinin atanması bir güvenlik sorunun ortaya çıkma ihtimalini arttırır. safe_mode_allowed_env_vars yönergesi virgül ayraçlı bir önekler listesi içerir. Güvenli kipte kullanıcı sadece bu yönergede belirtilen öneklerden biriyle başlayan ortam değişkenlerini değiştirebilir. Öntanımlı olarak, kullanıcılar sadece PHP_ önekiyle başlayan (PHP_FOO=BAR gibi) ortam değişkenlerine değer atayabilirler. Dikkat: Eğer yönergeye değer olarak boş bir dizge atanmışsa kullanıcı her ortam değişkenine değer atayabilir!

safe_mode_protected_env_vars yönergesi, kullanıcının putenv() işlevini kullanarak değiştiremeyeceği ortam değişkenlerinin virgül ayraçlı listesini içerir. safe_mode_allowed_env_vars yönergesinde belirtilen önekler safe_mode_protected_env_vars yönergesinde belirtilen ortam değişkenlerine uysa bile bu ortam değişkenlerine putenv() ile değer atanamaz.

Değiştirgeler

atama_dizgesi

"FOO=BAR" gibi bir atama dizgesi.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - Bir ortam değişkeninin atanması

<?php
putenv
("UNIQID=$uniqid");
?>

Notlar

Uyarı

Bu yönergeler sadece güvenli kip etkinken geçerlidir!

Ayrıca Bakınız

  • getenv() - Bir ortam değişkeninin değerini döndürür



restore_include_path

(PHP 4 >= 4.3.0, PHP 5)

restore_include_pathinclude_path yönergesini eski değerine ayarlar

Açıklama

void restore_include_path ( void )

include_path yönergesinin çalışma anı değerini tekrar php.ini dosyasında belirtilen değerine ayarlar.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek 1 - restore_include_path() örneği

<?php

echo get_include_path();  // .:/usr/local/lib/php

set_include_path('/inc');

echo 
get_include_path();  // /inc

// PHP 4.3.0 ve sonrasında çalışır
restore_include_path();

// Bütün PHP sürümlerinde çalışır
ini_restore('include_path');

echo 
get_include_path();  // .:/usr/local/lib/php

?>

Ayrıca Bakınız



set_include_path

(PHP 4 >= 4.3.0, PHP 5)

set_include_pathinclude_path yönergesinin çalışma anı değerini belirler

Açıklama

string set_include_path ( string $yeni_değer )

include_path yönergesinin, betiğin çalışma süresince geçerli olacak değerini belirler.

Değiştirgeler

yeni_değer

include_path yönergesini yeni değeri.

Dönen Değerler

Başarısızlık durumunda FALSE, aksi takdirde include_path yönergesinin eski değeriyle döner.

Örnekler

Örnek 1 - set_include_path() örneği

<?php
// PHP 4.3.0 ve sonrasında çalışır
set_include_path('/inc');

// PHP'nin tüm sürümlerinde çalışır
ini_set('include_path''/inc');
?>

Örnek 2 - İçerilecek dosyaların aranacağı yollara bir yenisini eklemek

PATH_SEPARATOR sabitini kullanarak bu yolları işletim sisteminden bağımsız olarak çoğaltmak mümkündür.

Bu örnekte, include_path yönergesinde belirtilen dosya yollarına /usr/lib/pear dizinini ekleyeceğiz.

<?php
$path 
'/usr/lib/pear';
set_include_path(get_include_path() . PATH_SEPARATOR $path);
?>

Ayrıca Bakınız



set_magic_quotes_runtime

(PHP 4, PHP 5)

set_magic_quotes_runtimemagic_quotes_runtime yönergesinin çalışma anı değerini belirler

Açıklama

bool set_magic_quotes_runtime ( bool $yeni_değer )

magic_quotes_runtime yönergesinin çalışma anı değerini belirler.

Uyarı

Bu işlevin kullanımı PHP 5.3.0'dan beri ÖNERİLMEMEKTEDİR ve PHP 6.0.0'da tamamen KALDIRILACAKTIR. Bu işleve kesinlikle güvenmemelisiniz.

Değiştirgeler

yeni_değer

Off için FALSE. On için TRUE olmalıdır.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - set_magic_quotes_runtime() örneği

<?php
// Geçici bir dosya tanıtıcısı oluşturalım
$fp tmpfile();

// Biraz veri yazalım
fwrite($fp'\'PHP\' ardışık bir kısaltmadır');

// magic_quotes_runtime olmaksızın
rewind($fp);
set_magic_quotes_runtime(false);

echo 
'magic_quotes_runtime olmaksızın: ' fread($fp64), PHP_EOL;

// magic_quotes_runtime ile
rewind($fp);
set_magic_quotes_runtime(true);

echo 
'magic_quotes_runtime ile: ' fread($fp64), PHP_EOL;

// Ortalığı temizleyelim
fclose($fp);
?>

Yukarıdaki örneğin çıktısı:

magic_quotes_runtime olmaksızın: 'PHP' ardışık bir kısaltmadır
magic_quotes_runtime ile: \'PHP\' ardışık bir kısaltmadır

Ayrıca Bakınız



set_time_limit

(PHP 4, PHP 5)

set_time_limitAzami çalıştırma süresini sınırlar

Açıklama

void set_time_limit ( int $saniye )

Bir betiğin çalıştırılabileceği süreyi saniye cinsinden belirler. Bu süre aşıldığında betik ölümcül hata ile döner. php.ini dosyasında max_execution_time yönergesi ile başka bir değer belirtilmemişse öntanımlı süre 30 saniyedir.

set_time_limit() işlevi çağrıldığı anda süre sıfırdan başlatılır. Başka bir deyişle, betik örneğin 30 saniyelik öntanımlı zaman aşımı dahilinde 25 saniye çalıştıktan sonra set_time_limit(20) çağrısı yapılırsa süre bitiminde betik 45 saniye çalışmış olacaktır.

Değiştirgeler

saniye

Betiğin çalıştırılabileceği azami süre (saniye cinsinden). Sıfır belirtilirse bir zaman sınırlaması kaldırılmış olur.

Dönen Değerler

Hiçbir değer dönmez.

Notlar

Uyarı

PHP güvenli kipte (safe_mode) çalışıyorsa bu işlevin bir etkisi olmaz. Azami süreyi değiştirmek için php.ini dosyasında güvenli kipi iptal etmek veya azami süreyi php.ini dosyasında değiştirmekten başka çare yoktur.

Bilginize: max_execution_time yönergesi veya set_time_limit() işlevi sadece betiğin kendi çalışma süresini etkilerler. Betiğin çalışması sırasında, akım işlemleri, veritabanı sorguları ve system() işlevi kullanılarak yapılan sistem çağrıları gibi betiğin dışında gerçekleşen işlemler için harcanan zaman betiğin azami çalışma süresinin hesaplanmasında hesaba katılmaz. Gerçek zamanın ölçüldüğü Windows üzerinde bu geçerli değildir.



sys_get_temp_dir

(PHP 5 >= 5.2.1)

sys_get_temp_dirGeçici dosyalar için kullanılan dizini döndürür

Açıklama

string sys_get_temp_dir ( void )

PHP'nin geçici dosyaları sakladığı öntanımlı dizinin tam yolunu döndürür.

Dönen Değerler

Geçici dosyaların saklandığı dizinin tam yolunu döndürür.

Örnekler

Örnek 1 - sys_get_temp_dir() örneği

<?php
// sys_get_temp_dir() kullanarak geçici dosyaların
// tutulduğu dizinde bir geçici dosya oluşturalım
$temp_file tempnam(sys_get_temp_dir(), 'Tux');

echo 
$temp_file;
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

C:\Windows\Temp\TuxA318.tmp

Ayrıca Bakınız



version_compare

(PHP 4 >= 4.1.0, PHP 5)

version_comparePHP standardına uygun hale getirilmiş iki sürüm numarası dizgesini karşılaştırır

Açıklama

mixed version_compare ( string $sürüm1 , string $sürüm2 [, string $işleç ] )

version_compare() işlevi PHP standardına uygun hale getirilmiş iki sürüm numarası dizgesini karşılaştırır. PHP'nin sadece belli bir sürümü ile çalışabilecek betikler yazıyorsanız bu işleve ihtiyacınız olacaktır.

İşlev önce _, - ve + karakterlerini birer nokta . ile değiştirir, ardından numara olmayan dizgeciklerin önüne ve ardına birer nokta konur. Örneğin, '4.3.2RC1' dizgesi '4.3.2.RC.1' haline gelir. Elde edilen dizge, explode('.', $sürüm) kullanılmışçasına bileşenlerine ayrıldıktan sonra her bileşen soldan sağa karşılaştırılır. Bileşenlerin içerdiği özel sürüm dizgeleri şu sıralamaya göre ele alınırlar: bu listede olmayan bir dizge < dev < alpha = a < beta = b < RC = rc < # < pl = p. Bu yöntemle, '4.1' ve '4.1.2' gibi farklı seviyelerden sürümler karşılaştırabileceği gibi geliştirme sürümlerinin karşılaştırılması için de kullanılabilir.

Değiştirgeler

sürüm1

İlk sürüm numarası.

sürüm2

İkinci sürüm numarası.

işleç

İsteğe bağlı bu değiştirge ile sürümler arasında belli ilişkileri sınayabilirsiniz. Olası işleçler şunlardır: <, lt, <=, le, >, gt, >=, ge, ==, =, eq, !=, <>, ne.

Bu değiştirge harf büyüklüğüne duyarlıdır, yani değerlerin hepsi küçük harfli olmalıdır.

Dönen Değerler

Öntanımlı olarak, version_compare() işlevi, birinci sürüm ikincisinden küçükse -1, büyükse 1, eşitlerse 0 döndürür.

İsteğe bağlı işleç değiştirgesi kullanılırsa ve sürümler arasında belirtilen ilişki varsa TRUE aksi takdirde FALSE döner.

Örnekler

Aşağıdaki örnekte, kodu çalıştıran PHP sürümüne içermesi nedeniyle PHP_VERSION sabiti kullanılmıştır.

Örnek 1 - version_compare() örnekleri

<?php
if (version_compare(PHP_VERSION'6.0.0') === 1) {
    echo 
'PHP sürümüm en azından 6.0.0, gerçek sürüm: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.3.0') === 1) {
    echo 
'PHP sürümüm en azından 5.3.0, gerçek sürüm: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''>')) {
    echo 
'PHP 5 kullanıyorum, gerçek sürüm: ' PHP_VERSION "\n";
}

if (
version_compare(PHP_VERSION'5.0.0''<')) {
    echo 
'PHP 4 kullanıyorum, gerçek sürüm: ' PHP_VERSION "\n";
}
?>

Notlar

Bilginize: PHP_VERSION sabiti kullanılan PHP'nin sürüm numarasını içerir.

Bilginize: 5.3.0-dev gibi ön dağıtım sürümleri için, alt sürümün, ulaşacakları asıl sürümün numarası (PHP 5.3.0) olduğu varsayılır.

Ayrıca Bakınız

  • phpversion() - Çalışan PHP'nin sürümünü döndürür
  • php_uname() - PHP'nin çalıştığı işletim sistemi hakkında bilgi döndürür
  • function_exists() - Eğer işlev tanımlanmış ise TRUE döndürür



zend_logo_guid

(PHP 4, PHP 5)

zend_logo_guidZend logo kimliğini döndürür

Açıklama

string zend_logo_guid ( void )

Bu işlev, yerleşik resmi kullanarak Zend logosunu göstermekte kullanılacak kimliği döndürür.

Dönen Değerler

PHPE9568F35-D428-11d2-A769-00AA001ACF42 dizgesini döndürür.

Örnekler

Örnek 1 zend_logo_guid() örneği

<?php

echo '<img src="' $_SERVER['PHP_SELF'] .
     
'?=' zend_logo_guid() . '" alt="Zend Logo!" />';

?>

Ayrıca Bakınız



zend_thread_id

(PHP 5)

zend_thread_idGeçerli evre için eşsiz bir betimleyici döndürür

Açıklama

int zend_thread_id ( void )

Bu işlev geçerli evre için eşsiz bir betimleyici döndürür.

Dönen Değerler

Evre kimliğini bir tamsayı olarak döndürür.

Örnekler

Örnek 1 - zend_thread_id() örneği

<?php
$thread_id 
zend_thread_id();

echo 
'Evre kimliği: ' $thread_id;
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Evre kimliği: 7864

Notlar

Bilginize: Bu işlev, PHP, ZTS (Zend Thread Safety) desteği ve hata ayıklama kipi (--enable-debug) ile derlendiği takdirde kullanılabilir.



zend_version

(PHP 4, PHP 5)

zend_versionZend motorunun sürümünü döndürür

Açıklama

string zend_version ( void )

Kurulu Zend Motorunun sürümünü içeren bir dizge döndürür.

Dönen Değerler

Zend Motorunun sürüm numarasını bir dizge olarak döndürür.

Örnekler

Örnek 1 - zend_version() örneği

<?php
echo "Zend motorunun sürümü: " zend_version();
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Zend motorunun sürümü: 2.3.0

Ayrıca Bakınız

  • phpinfo() - PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar
  • phpcredits() - PHP'ya katkıda bulunanları gösterir
  • php_logo_guid() - PHP logo kimliğini döndürür
  • phpversion() - Çalışan PHP'nin sürümünü döndürür


İçindekiler

  • assert_options — Çeşitli kararlılık denetim seçeneklerini açar/kapar
  • assert — Belirtilen savı sınar
  • dl — Belirtilen PHP eklentisini çalışma anında yükler
  • extension_loaded — Belirtilen eklenti yüklü mü diye bakar
  • gc_collect_cycles — Çöp döngülerin toplanması için zorlar
  • gc_disable — Döngüsel gönderim toplayıcısını etkisiz kılar
  • gc_enable — Döngüsel gönderim toplayıcısını etkin kılar
  • gc_enabled — Döngüsel gönderim toplayıcısının durumunu döndürür
  • get_cfg_var — Belirtilen PHP yönergesinin değerini döndürür
  • get_current_user — PHP betiğinin sahibininin kullanıcı ismini döndürür
  • get_defined_constants — Tüm sabitlerin isimlerini ve değerlerini içeren bir ilişkisel dizi döndürür
  • get_extension_funcs — Bir modülün işlevlerinin isimlerini içeren bir dizi döndürür
  • get_include_path — include_path yönergesinin değerini döndürür
  • get_included_files — Betiğe dahil edilen dosyaların isimlerini içeren bir dizi döndürür
  • get_loaded_extensions — Derlenmiş ve yüklenmiş tüm modüllerin isimlerini içeren bir dizi döndürür
  • get_magic_quotes_gpc — magic_quotes_gpc yönergesinin değerini döndürür
  • get_magic_quotes_runtime — magic_quotes_runtime yönergesinin çalışma anı değerini döndürür
  • get_required_files — get_included_files işlevinin takma adıdır
  • getenv — Bir ortam değişkeninin değerini döndürür
  • getlastmod — Geçerli sayfanın son değişiklik zamanını döndürür
  • getmygid — PHP betiğinin sahibinin grup kimliğini döndürür
  • getmyinode — Çalışan betiğin dosya düğümü numarasını döndürür
  • getmypid — PHP'nin süreç kimliğini (PID) döndürür
  • getmyuid — PHP betiğinin sahibinin kullanıcı kimliğini döndürür
  • getopt — Komut satırı değiştirgeleri listesinden seçenekleri döndürür
  • getrusage — Geçerli özkaynak kullanımlarını döndürür
  • ini_alter — ini_set işlevinin takma adıdır
  • ini_get_all — Tüm yapılandırma yönergelerini döndürür
  • ini_get — Bir yapılandırma yönergesinin değerini döndürür
  • ini_restore — Bir yapılandırma yönergesine eski değerini atar
  • ini_set — Bir yapılandırma yönergesine değer atar
  • magic_quotes_runtime — Takma Adı: set_magic_quotes_runtime
  • main — Böyle bir işlev yoktur
  • memory_get_peak_usage — PHP'ye ayrılan belleğin azami miktarını döndürür
  • memory_get_usage — PHP'ye ayrılan belleğin miktarını döndürür
  • php_ini_loaded_file — Yüklü php.ini dosyasının dosya yolunu döndürür
  • php_ini_scanned_files — Ek ini dizininden ayrıştırılan dosyaların listesi ile döner
  • php_logo_guid — PHP logo kimliğini döndürür
  • php_sapi_name — HTTP sunucusu ile PHP arasındaki arayüzün türünü döndürür
  • php_uname — PHP'nin çalıştığı işletim sistemi hakkında bilgi döndürür
  • phpcredits — PHP'ya katkıda bulunanları gösterir
  • phpinfo — PHP'nin o anki durumu hakkında büyük miktarda bilgi çıktılar
  • phpversion — Çalışan PHP'nin sürümünü döndürür
  • putenv — Bir ortam değişkenine değer atar
  • restore_include_path — include_path yönergesini eski değerine ayarlar
  • set_include_path — include_path yönergesinin çalışma anı değerini belirler
  • set_magic_quotes_runtime — magic_quotes_runtime yönergesinin çalışma anı değerini belirler
  • set_time_limit — Azami çalıştırma süresini sınırlar
  • sys_get_temp_dir — Geçici dosyalar için kullanılan dizini döndürür
  • version_compare — PHP standardına uygun hale getirilmiş iki sürüm numarası dizgesini karşılaştırır
  • zend_logo_guid — Zend logo kimliğini döndürür
  • zend_thread_id — Geçerli evre için eşsiz bir betimleyici döndürür
  • zend_version — Zend motorunun sürümünü döndürür



Memtrack


Giriş

The purpose of this extension is to detect the most memory hungry scripts and functions.

memtrack tracks memory consumption in PHP scripts and produces reports (warnings) when the consumption reaches certain levels set by the user. This is achieved by replacing default executor function by a special function which compares memory usage before and after running the original executor - this way we can tell how much the memory usage has changed during the execution of the current part of the code.

Zend Engine runs its executor for each opcode array (op_array), which usually means function, plain script and such, so memtrack doesn't have any noticeable effect on performance.

memtrack doesn't provide any functions, there are only INI directives which allow you to configure the way it should work.

Uyarı

Bu eklenti DENEYSELDİR. Bu eklentinin davranışı, işlev isimleri ve tüm belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu eklentiyi kullanmayın.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/memtrack



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

Memtrack Configuration Options
Name Default Changeable
memtrack.enabled "0" PHP_INI_SYSTEM
memtrack.soft_limit "0" PHP_INI_ALL
memtrack.hard_limit "0" PHP_INI_ALL
memtrack.vm_limit "0" PHP_INI_ALL
memtrack.ignore_functions "" PHP_INI_SYSTEM

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

memtrack.enabled boolean

Disables or enables the extension. Default value is 0, i.e. disabled.

memtrack.soft_limit int

Soft memory limit.

The extension checks memory consumption before and after executing an op_array and produces a warning is the difference between the two values is equal to or greater than the soft limit, but only if the function is not ignored.

Setting this option to 0 also disables both soft and hard limit warnings. Default value is 0, i.e. no warnings is produced.

memtrack.hard_limit int

Hard memory limit.

The extension checks memory consumption before and after executing an op_array and produces a warning is the difference between the two values is equal to or greater than the hard limit, even if the function is ignored. Setting this option to 0 disables hard limit warnings completely. Default value is 0, i.e. no hard limit warnings is produced.

memtrack.vm_limit int

Virtual memory limit (set on a process).

This limit is checked only on shutdown and a warning is produced if the value is greater than or equal to the limit.

This option is currently supported only on OSes where mallinfo() function is available (i.e. Linux).

memtrack.ignore_functions string

A comma or whitespace-separated list of functions which are to be ignored by soft_limit. The values are case-insensitive, for class methods use class::method syntax.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Bu eklentinin tanımlanmış sabitleri yoktur.



Örnekler

İçindekiler


Basic example on using memtrack extension:

Örnek 1 Creating large array in a function

<?php

/* /tmp/example1.php */

function foo() {
    
$a = array();
    for (
$i 0$i 10000$i++) $a[] = "test";
    return 
$a;
}
$arr foo();

?>

Run the example with the following command:

php -d memtrack.enabled=1 -d memtrack.soft_limit=1M -d memtrack.vm_limit=3M /tmp/example1.php

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Warning: [memtrack] [pid 26177] user function foo() executed in /tmp/example1.php on line 10 allocated 4194304 bytes in /tmp/example1.php on line 0
Warning: [memtrack] [pid 26177] virtual memory usage on shutdown: 32911360 bytes in Unknown on line 0




Nesne özellikleri ve yöntemlerinde aşırı yükleme


Giriş

Bu eklentinin amacı, nesne özellik erişimlerinin ve yöntem çağrılarının aşırı yüklenmesini mümkün kılmaktır. Bu eklentinin tek bir işlevi vardır: overload(). Bu işlev değiştirge olarak bu işlevselliğin etkin kılınacağı sınıfın ismini alır. İsmi belirtilen sınıf bu işlevselliği istiyorsa uygun yöntemleri tanımlamalıdır: bir özelliği döndürmek için __get(), tanımlamak için __set() ve yöntem çağrısı için __call(). Bu yöntemle aşırı yükleme seçimlik olarak uygulanabilir. Bu eylemci işlevlerin içinde aşırı yükleme kullanılamaz, dolayısıyla nesne özelliklerine normal yollarla erişebilirsiniz.

Uyarı

Bu eklenti DENEYSELDİR. Bu eklentinin davranışı, işlev isimleri ve tüm belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu eklentiyi kullanmayın.

Uyarı

Bu eklenti PHP 5'in bir parçası değildir. PHP 5 __get(), __set() ve __call() çağrılarını yerleşik olarak destekler. Daha fazla bilgi için Aşırı Yükleme sayfasına bakınız.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu eklentiyi kullanabilmek için PHP'yi --enable-overload seçeneği ile derlemeniz gerekir. PHP 4.3.0'dan itibaren bu eklenti öntanımlı olarak etkindir. Eklenti desteğini iptal etmek için derleme sırasında --disable--overload seçeneğini kullanabilirsiniz.

PHP'nin Windows sürümünde bu eklenti yerleşik olarak gelmektedir. Bu işlevleri Windows'ta kullanmak için herhangi bir eklenti kurmanıza gerek yoktur.

Bilginize: Yerleşik aşırı yükleme desteği PHP 4.3.0 ile kullanılabilir olmuştur.



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Bu eklentinin tanımlanmış sabitleri yoktur.



Örnekler

İçindekiler


Bir PHP sınıfının aşırı yüklenmesi

overload() işlevini kullanan basit bir örnek:

Örnek 1 - Bir PHP sınıfının aşırı yüklenmesi

<?php

class OO {
   var 
$a 111;
   var 
$elem = array('b' => 9'c' => 42);

   
// Bir özelliği döndürmek için geriçağırım yöntemi
   
function __get($prop_name, &$prop_value)
   {
       if (isset(
$this->elem[$prop_name])) {
           
$prop_value $this->elem[$prop_name];
           return 
true;
       } else {
           return 
false;
       }
   }

   
// Bir özelliği tanımlamak için geriçağırım yöntemi
   
function __set($prop_name$prop_value)
   {
       
$this->elem[$prop_name] = $prop_value;
       return 
true;
   }
}

// Nesneyi burada aşırı yüklüyoruz
overload('OO');

$o = new OO;
echo 
"\$o->a: $o->a\n"// print: $o->a: 111
echo "\$o->b: $o->b\n"// print: $o->b: 9
echo "\$o->c: $o->c\n"// print: $o->c: 42
echo "\$o->d: $o->d\n"// print: $o->d:

// $elem dizisine yeni bir öğe ekleyelim
$o->56;

// stdclass'ı örnekleyelim (PHP 4'te yerleşiktir)
// $val aşırı yüklenmez!
$val = new stdclass;
$val->prop 555;

// içinde $val nesnesi olar bir diziyi "a"'ya atayalım'
// Fakat __set() bunu $elem dizisine koyacak
$o->= array($val);
var_dump($o->a[0]->prop);

?>




Nesne Aşırı Yükleme İşlevleri


overload

(PHP 4 >= 4.3.0)

overloadBir sınıfın özellik ve yöntem çağrısı aşırı yüklemesini etkinleştirir

Açıklama

void overload ( string $sınıfAdı )

sınıfAdı ile belirtilen sınıfın yöntem çağrısı ve özellik aşırı yüklemesini etkin kılar.

Değiştirgeler

sınıfAdı

Bir dizge olarak aşırı yüklenecek sınıfın ismi.

Dönen Değerler

Hiçbir değer dönmez.

Örnekler

Örnek için Örnekler sayfasına bakınız.


İçindekiler

  • overload — Bir sınıfın özellik ve yöntem çağrısı aşırı yüklemesini etkinleştirir



Çıktı Tamponlama Denetimi


Giriş

Çıktı denetim işlevleri, betikten gönderilen çıktıyı denetiminizde tutmaya yardımcı olurlar. Bu özellik, çok çeşitli durumlarda yararlı olabilir, özellikle de betiğiniz veriyi çıktılamaya başladıktan sonra bir başlık göndermek isterseniz. Çıktı denetim işlevleri, header() ve setcookie() işlevlerini kullanarak başlık gönderimini etkilemez, sadece PHP kod blokları arasındaki veriler ve echo() gibi işlevler etkilenir.

Bilginize: PHP 4.1.x'ten (ve 4.2.x'ten) 4.3.x'e sürüm yükseltirken önceki sürümlerdeki bir yazılım hatasından dolayı php.ini dosyanızda implict_flush yönergesine OFF atamak zorunda kalacaksınız, aksi takdirde ob_start() ile yapılan bir çıktı, çıktıdan gizlenmeyecektir.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu işlevleri kullanmak için hiçbir şey kurmaya gerek yoktur; PHP çekirdeğinin parçasıdırlar.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

Çıktı Denetimi yapılandırma seçenekleri
İsim Öntanımlı Değişiklik yeri Sürüm bilgisi
output_buffering "0" PHP_INI_PERDIR  
output_handler NULL PHP_INI_PERDIR PHP 4.0.4'ten beri kullanılabilmektedir.
implicit_flush "0" PHP_INI_ALL PHP <= 4.2.3'te PHP_INI_PERDIR.

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

output_buffering boolean/integer

Bu yönergeye 'On' değeri atamak suretiyle çıktı tamponlamasını bütün dosyalar için etkin kılabilirsiniz. Tamponun boyunu belli bir değerle sınırlamak isterseniz 'On' yerine bu değeri bayt cinsinden yazabilirsiniz (örnek: output_buffering=4096). PHP 4.3.5'ten itibaren PHP-CLI'de bu yönergenin değeri daima 'Off'tur.

output_handler string

Betiğinizin tüm çıktısını bir işleve yönlendirebilirsiniz. Örneğin, bu yönergeye mb_output_handler() atarsanız karakter kodlaması şeffaf olarak belirtilen kodlamaya dönüştürülür. Bu yönergeye herhangi bir çıktı eylemcisinin atanması özdevinimli olarak çıktı tamponlamasını etkin kılar.

Bilginize: mb_output_handler() ve ob_iconv_handler() işlevlerini birlikte kullanamazsınız, bu durum ob_gzhandler() ve zlib.output_compression çifti için de geçerlidir.

Bilginize: Bu yönergede sadece yerleşik işlevler belirtilebilir. Kullanıcı tanımlı işlevler için ob_start() işlevini kullanın.

implicit_flush boolean

FALSE öntanımlıdır. TRUE atandığında her çıktı bloğundan sonra çıktı tamponu kendi kendini özdevinimli olarak boşaltır. Bu işlem, her HTML bloğundan, her print() veya echo() çağrısından sonra flush() işlevini çağırmaya eşdeğerdir.

PHP'yi HTTP ortamında kullanırken bu seçeneğe TRUE atandığında bir takım başarım sorunları ortaya çıkabilir, bu bakımdan genellikle sadece hata ayıklama amacıyla kullanılması önerilir. CLI SAPI altında bu yönergenin öntanımlı değeri TRUE'dur.

Ayrıca bakınız: ob_implicit_flush().



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Bu eklentinin tanımlanmış sabitleri yoktur.



Örnekler

İçindekiler


Örnekler

Örnek 1 - Çıktı Denetimi örneği

<?php

ob_start
();
echo 
"Hello\n";

setcookie("cookiename""cookiedata");

ob_end_flush();

?>

Yukarıdaki örnekte, ob_end_flush() işlevi çağrılana kadar echo() çıktısı çıktı tamponunda saklanır. Bu süre zarfında, setcookie() çağrısı çerezi bir hataya yol açmadan başarıyla saklar. (Normalde, tarayıcıya veri gönderildikten sonra başlıkları gönderemezsiniz.)




Çıktı Denetim İşlevleri

Ayrıca Bakınız

header() ve setcookie().


flush

(PHP 4, PHP 5)

flushÇıktı tamponunu boşaltır

Açıklama

void flush ( void )

PHP'nin kullandığı ve PHP'nin artalanında kullanılan (CGI, HTTP sunucusu gibi) yazma tamponlarını boşaltır. Bu işlem, çıktı tamponları boşalıncaya kadar çıktının kullanıcının tarayıcısına gönderilmesi demektir.

flush() işlevi HTTP sunucunuzun veya istemci tarafında tarayıcının tamponlama ayarlarını ve PHP'nin kullanıcı alanı çıktı tamponlama mekanizmasını etkilemez. Bu bakımdan, çıktı tamponlarını boşaltmak için hem ob_flush() hem de flush() çağrısı yapmalısınız.

Çeşitli sunucular, özellikle de Win32 üstünde, tarayıcıya sonuçların aktarılması bitmemişse betiğiniz sonlanıncaya kadar betiğinizin çıktısı tamponlanmaya devam eder.

mod_gzip gibi Apache sunucu modülleri, verinin istemciye gönderimi bitmeden kendi tamponunu boşaltırken bir flush() işlemine sebep olabilir.

Tarayıcı, göstermeden önce girdisini tamponlayabilir. Örneğin, Netscape, bir satırsonu veya bir kapama etiketi alana kadar metni tamponlar ve en dıştaki tablonun </table> kapama etiketini almadan tabloyu oluşturmaz.

Microsoft Internet Explorer'ın bazı sürümleri 256 baytlık çıktı almadan sayfayı göstermeye başlamaz, yani, bu tarayıcının daha önce birşeyler göstermesini istiyorsanız boşaltma öncesi ek boşluk karakterleri göndermeniz gerekebilir.

Dönen Değerler

Hiçbir değer dönmez.



ob_clean

(PHP 4 >= 4.2.0, PHP 5)

ob_cleanÇıktı tamponunu temizler (siler)

Açıklama

void ob_clean ( void )

Bu işlev, en üst seviye çıktı tamponunun içeriğini siler.

Bu işlev, ob_end_clean() gibi tamponu yok etmez.

Dönen Değerler

Hiçbir değer dönmez.

Ayrıca Bakınız

  • ob_flush() - Çıktı tamponunu boşaltır (gönderir)
  • ob_end_flush() - Çıktı tamponunu boşaltır (gönderir) ve tamponu kapatır
  • ob_end_clean() - Çıktı tamponunu temizler (siler) ve tamponu kapatır



ob_end_clean

(PHP 4, PHP 5)

ob_end_cleanÇıktı tamponunu temizler (siler) ve tamponu kapatır

Açıklama

bool ob_end_clean ( void )

Bu işlev, en üst seviye çıktı tamponunun içeriğini siler ve bu çıktı tamponunu kapatır. ob_end_clean() çağrısından sonra tampon yok edildiğinden eğer gönderilen tampon içeriğin saklamak istiyorsanız ob_end_clean() çağrısından önce bir ob_get_contents() çağrısı yapmalısınız.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner. Başarısızlık sebeplerinden biri etkin bir tamponun bulunmaması diğeri ise tamponun silinememesi (özel bir tamponsa) olabilir.

Hatalar/İstisnalar

İşlev başarısız olursa E_NOTICE seviyesinde bir ileti üretir.

Sürüm Bilgisi

Sürüm: Açıklama
4.2.0 Mantıksal dönüş değeri eklendi.

Örnekler

Aşağıda çıktı tamponlarından kurtulmanın kolay bir yolu gösterilmiştir:

Örnek 1 - ob_end_clean() örneği

<?php
ob_start
();
echo 
'Gösterilmek istenmeyen metin.';
ob_end_clean();
?>

Ayrıca Bakınız



ob_end_flush

(PHP 4, PHP 5)

ob_end_flushÇıktı tamponunu boşaltır (gönderir) ve tamponu kapatır

Açıklama

bool ob_end_flush ( void )

Bu işlev en üst seviye çıktı tamponunun (varsa) içeriğini gönderir ve bu tamponu kapatır. ob_end_flush() çağrısından sonra tampon yok edildiğinden eğer gönderilen tampon içeriğin saklamak istiyorsanız ob_end_flush() çağrısından önce bir ob_get_contents() çağrısı yapmalısınız.

Bilginize: ob_get_flush() işlevi, bu işlevden farklı olarak tampon içeriğini bir dizge olarak döndürür.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner. Başarısızlık sebeplerinden biri etkin bir tamponun bulunmaması diğeri ise tamponun silinememesi (özel bir tamponsa) olabilir.

Hatalar/İstisnalar

İşlev başarısız olursa E_NOTICE seviyesinde bir ileti üretir.

Sürüm Bilgisi

Sürüm: Açıklama
4.2.0 Mantıksal dönüş değeri eklendi.

Örnekler

Örnek 1 - ob_end_flush() örneği

Aşağıda çıktı tamponlarının boşaltılıp silinmesinin kolay bir yolu gösterilmiştir:

<?php
  
while (@ob_end_flush());
?>

Ayrıca Bakınız

  • ob_start() - Çıktı tamponlamasını başlatır
  • ob_get_contents() - Çıktı tamponunun içeriği ile döner
  • ob_get_flush() - Çıktı tamponunu boşaltır, içeriğini bir dizge olarak döndürür ve çıktı tamponlamasını kapatır
  • ob_flush() - Çıktı tamponunu boşaltır (gönderir)
  • ob_end_clean() - Çıktı tamponunu temizler (siler) ve tamponu kapatır



ob_flush

(PHP 4 >= 4.2.0, PHP 5)

ob_flushÇıktı tamponunu boşaltır (gönderir)

Açıklama

void ob_flush ( void )

Bu işlev (varsa) çıktı tamponunun içeriğini gönderir. ob_flush() sonrası tampon içeriği temizlendiğinden eğer gönderilen içeriği saklamak istiyorsanız ob_flush() çağrısından önce bir ob_get_contents() çağrısı yapmalısınız.

Bu işlev, ob_end_flush() işlevinin yaptığı gibi çıktı tamponunu yok etmez.

Dönen Değerler

Hiçbir değer dönmez.

Ayrıca Bakınız



ob_get_clean

(PHP 4 >= 4.3.0, PHP 5)

ob_get_cleanGeçerli çıktı tamponun içeriğini döndürüp tamponu siler

Açıklama

string ob_get_clean ( void )

Geçerli çıktı tamponun içeriğini döndürüp tamponu siler.

ob_get_clean() esasen ob_get_contents() ve ob_end_clean() işlevlerini çağırır.

Dönen Değerler

Çıktı tamponlaması etkin değilse FALSE, aksi takdirde çıktı tamponunun içeriğini döndürür.

Örnekler

Örnek 1 - Basit bir ob_get_clean() örneği

<?php

ob_start
();

echo 
"Hello World";

$out ob_get_clean();
$out strtolower($out);

var_dump($out);
?>

Yukarıdaki örneğin çıktısı:


string(11) "hello world"

Ayrıca Bakınız



ob_get_contents

(PHP 4, PHP 5)

ob_get_contentsÇıktı tamponunun içeriği ile döner

Açıklama

string ob_get_contents ( void )

Çıktı tamponunu temizlemeden içeriği ile döner.

Dönen Değerler

Çıktı tamponlaması etkin değilse FALSE, aksi takdirde çıktı tamponunun içeriğini döndürür.

Örnekler

Örnek 1 - ob_get_contents() örneği

<?php

ob_start
();

echo 
"Hello ";

$out1 ob_get_contents();

echo 
"World";

$out2 ob_get_contents();

ob_end_clean();

var_dump($out1$out2);
?>

Yukarıdaki örneğin çıktısı:

string(6) "Hello "
string(11) "Hello World"

Ayrıca Bakınız

  • ob_start() - Çıktı tamponlamasını başlatır
  • ob_get_length() - Çıktı tamponunundaki içeriğin uzunluğunu döndürür



ob_get_flush

(PHP 4 >= 4.3.0, PHP 5)

ob_get_flushÇıktı tamponunu boşaltır, içeriğini bir dizge olarak döndürür ve çıktı tamponlamasını kapatır

Açıklama

string ob_get_flush ( void )

ob_get_flush() işlevi, çıktı tamponunu boşaltır, içeriğini bir dizge olarak döndürür ve çıktı tamponlamasını kapatır.

Bilginize: Tampon içeriğini bir dizge olarak döndürmesi dışında ob_end_flush() işlevine benzer.

Dönen Değerler

Çıktı tamponlaması etkin değilse FALSE aksi takdirde çıktı tamponunun içeriğini döndürür.

Örnekler

Örnek 1 - ob_get_flush() örneği

<?php
// output_buffering=On
print_r(ob_list_handlers());

// tamponu bir dosyaya kaydedelim
$buffer ob_get_flush();
file_put_contents('buffer.txt'$buffer);

print_r(ob_list_handlers());
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => default output handler
)
Array
(
)

Ayrıca Bakınız



ob_get_length

(PHP 4 >= 4.0.2, PHP 5)

ob_get_lengthÇıktı tamponunundaki içeriğin uzunluğunu döndürür

Açıklama

int ob_get_length ( void )

Çıktı tamponunundaki içeriğin uzunluğunu döndürür.

Dönen Değerler

Çıktı tamponu etkin değilse FALSE, aksi takdirde bayt cinsinden çıktı tamponunundaki içeriğin uzunluğunu döndürür.

Örnekler

Örnek 1 - ob_get_length() örneği

<?php

ob_start
();

echo 
"Hello ";

$len1 ob_get_length();

echo 
"World";

$len2 ob_get_length();

ob_end_clean();

echo 
$len1 ", ." $len2;
?>

Yukarıdaki örneğin çıktısı:

6, 11

Ayrıca Bakınız



ob_get_level

(PHP 4 >= 4.2.0, PHP 5)

ob_get_levelÇıktı tamponlama mekanizmasının iç içelik seviyesini döndürür

Açıklama

int ob_get_level ( void )

Çıktı tamponlama mekanizmasının iç içelik seviyesini döndürür

Dönen Değerler

Çıktı tamponlaması etkin değilse sıfır, aksi takdirde çıktı tamponlama eylemcilerinin iç içelik seviyesini döndürür.

Ayrıca Bakınız



ob_get_status

(PHP 4 >= 4.2.0, PHP 5)

ob_get_statusÇıktı tamponlarının durumu ile döner

Açıklama

array ob_get_status ([ bool $tam_durum = FALSE ] )

ob_get_status() işlevi, tam_durum değiştirgesinde TRUE belirtilmişse her seviyeden etkin çıktı tamponlarının tamamının durumunu, aksi takdirde üst seviye çıktı tamponunun durumunu döndürür.

Değiştirgeler

tam_durum

TRUE her seviyeden etkin çıktı tamponlarının tamamının durumunu, FALSE ise veya belirtilmezse sadece üst seviye çıktı tamponunun durumunu döndürür.

Dönen Değerler

tam_durum değiştirgesi belirtilmezse veya tam_durum = FALSE olduğunda aşağıdaki elemanlarla basit bir dizi döner:

Array
(
    [level] => 2
    [type] => 0
    [status] => 0
    [name] => URL-Rewriter
    [del] => 1
)

ob_get_status() işlevinin basit sonuçları
Anahtar:level
Değer:Çıktı iç içelik seviyesi
Anahtar:type
Değer:PHP_OUTPUT_HANDLER_INTERNAL (0) veya PHP_OUTPUT_HANDLER_USER (1)
Anahtar:status
Değer:PHP_OUTPUT_HANDLER_START (0), PHP_OUTPUT_HANDLER_CONT (1) veya PHP_OUTPUT_HANDLER_END (2) değerlerinden biri
Anahtar:name
Değer:Etkin çıktı eylemcisinin ismi veya atanmamışsa ' default output handler'
Anahtar:del
Değer:ob_start() tarafından belirlenen silme seçeneği

İşlev, tam_durum = TRUE değeriyle çağrılırsa, her ektin çıktı tamponu seviyesi için bir eleman içeren bir dizi döner. Çıktı seviyesi üst seviye dizinin anahtarı olarak kullanılır ve bu anahtarların değerleri de kendi etkin çıktı seviyelerine ilişkin durum bilgisi içeren birer dizi içerirler.

Array
(
    [0] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 1
            [status] => 0
            [name] => default output handler
            [del] => 1
        )

    [1] => Array
        (
            [chunk_size] => 0
            [size] => 40960
            [block_size] => 10240
            [type] => 0
            [buffer_size] => 0
            [status] => 0
            [name] => URL-Rewriter
            [del] => 1
        )

)

Tam çıktı ek olarak şu elemanları içerir:

ob_get_status() işlevinin tam sonuçları
Anahtar:chunk_size
Değer:ob_start() tarafından atanan parça boyutu
Anahtar:size
Değer:...
Anahtar:blocksize
Değer:...

Ayrıca Bakınız



ob_gzhandler

(PHP 4 >= 4.0.4, PHP 5)

ob_gzhandlerÇıktı tamponunu gziplemek için ob_start geriçağırım işlevi

Açıklama

string ob_gzhandler ( string $tampon , int $kip )

ob_gzhandler() işlevi, sıkıştırılmış sayfaları destekleyen tarayıcılara gziplenmiş veri gönderim oluşumuna yardımcı olmak için ob_start() işlevinde bir geriçağırım işlevi olarak belirtilmek üzere tasarlanmıştır. ob_gzhandler() asıl veriyi sıkıştırılmış olarak göndermeden önce tarayıcının kabul edeceği içerik kodlamasının türünü ("gzip", "deflate" veya hiçbiri) tespit edip tampon içeriğini buna uygun olarak kodlayıp çıktılar. Hangi sıkıştırma türünü kabul edeceğini doğru başlıkları göndererek tarayıcı belirlediğinden tüm tarayıcılar desteklenir. Eğer bir tarayıcı sıkıştırılmış sayfaları desteklemiyorsa işlev FALSE döndürecektir.

Değiştirgeler

tampon

kip

Dönen Değerler

Sürüm Bilgisi

Sürüm: Açıklama
4.0.5 kip değiştirgesi eklendi.

Örnekler

Örnek 1 - ob_gzhandler() örneği

<?php

ob_start
("ob_gzhandler");

?>
<html>
<body>
<p>Bu sayfa sıkıştırılmış olabilir.</p>
</html>
<body>

Notlar

Bilginize: ob_gzhandler() işlevi zlib eklentisini gerektirir.

Bilginize: ob_gzhandler() işlevini ve zlib.output_compression yönergesini birlikte kullanamazsınız. Ayrıca, zlib.output_compression yörengesinin ob_gzhandler() işlevine tercih edildiğini bilmenizde yarar var.

Ayrıca Bakınız

  • ob_start() - Çıktı tamponlamasını başlatır
  • ob_end_flush() - Çıktı tamponunu boşaltır (gönderir) ve tamponu kapatır



ob_implicit_flush

(PHP 4, PHP 5)

ob_implicit_flushÖrtük boşaltmayı açar/kapar

Açıklama

void ob_implicit_flush ([ int $seçenek ] )

ob_implicit_flush() işlevi örtük tampon boşalmayı açar veya kapatır. Örtük boşaltma işlemi, her çıktı çağrısından sonra bir boşaltma işlemiyle sonuçlanır, dolayısıyla açıkça flush() çağrıları yapma gereği ortadan kalkar.

Değiştirgeler

seçenek

TRUE ise örtük boşaltma açılır FALSE ise kapatılır. TRUE öntanımlıdır.

Dönen Değerler

Hiçbir değer dönmez.

Ayrıca Bakınız

  • flush() - Çıktı tamponunu boşaltır
  • ob_start() - Çıktı tamponlamasını başlatır
  • ob_end_flush() - Çıktı tamponunu boşaltır (gönderir) ve tamponu kapatır



ob_list_handlers

(PHP 4 >= 4.3.0, PHP 5)

ob_list_handlersKullanımdaki çıktı eylemcileri listeler

Açıklama

array ob_list_handlers ( void )

Kullanımdaki çıktı eylemcileri listeler.

Dönen Değerler

Kullanımdaki çıktı eylemcileri (varsa) içeren bir dizi döndürür. Eğer output_buffering etkinse veya ob_start() ile bir anonim işlev belirtilmişse ob_list_handlers() işlevi "default output handler" (öntanımlı çıktı eylemcisi) dizgesini döndürür.

Örnekler

Örnek 1 - ob_list_handlers() işlevi

<?php
// output_buffering=On
print_r(ob_list_handlers());
ob_end_flush();

ob_start("ob_gzhandler");
print_r(ob_list_handlers());
ob_end_flush();

// anonim işlev
ob_start(create_function('$string''return $string;'));
print_r(ob_list_handlers());
ob_end_flush();
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => default output handler
)

Array
(
    [0] => ob_gzhandler
)

Array
(
    [0] => default output handler
)

Ayrıca Bakınız

  • ob_end_clean() - Çıktı tamponunu temizler (siler) ve tamponu kapatır
  • ob_end_flush() - Çıktı tamponunu boşaltır (gönderir) ve tamponu kapatır
  • ob_get_flush() - Çıktı tamponunu boşaltır, içeriğini bir dizge olarak döndürür ve çıktı tamponlamasını kapatır
  • ob_start() - Çıktı tamponlamasını başlatır



ob_start

(PHP 4, PHP 5)

ob_startÇıktı tamponlamasını başlatır

Açıklama

bool ob_start ([ callback $çıktı_geriçağırıcı [, int $parça_boyu [, bool $sil ]]] )

Bu işlev çıktı tamponlamasını ektin kılar. Çıktı tamponlaması etkinken betikten (başlıklar dışında) hiçbir çıktı gönderilmez ve çıktı dahili bir tamponda saklanır.

Bu dahili tamponun içeriği ob_get_contents() işleviyle bir dizge değişkenine kopyalanabilir. Dahili tamponda birikenleri çıktılamak için ob_end_flush() işlevini kullanın. Çıktılamak istemiyorsanız, ob_end_clean() işlevi ile tampon içeriğini sessiz sedasız silebilirsiniz.

Uyarı

Bazı HTTP sunucuları (Apache gibi) geriçağırım işlevini çağırırken betiğin çalışma dizinini değiştirir. Geriçağırım işlevinde chdir(dirname($_SERVER['SCRIPT_FILENAME'])) gibi bir çağrıyla betiğin bulunduğu dizine dönebilirsiniz.

Çıktı tamponlaması bir yığıt gibi çalışabilir, bir ob_start() etkinken başka bir ob_start() çağrısı yapabilirsiniz. Yalnız aynı sayıda ob_end_flush() çağrısı yapmayı unutmayın. Eğer çok sayıda çıktı geriçağırım işlevi etkinse, her biri iç içelik sırası gözetilerek çıktıyı süzerler.

Değiştirgeler

çıktı_geriçağırıcı

Bu değiştirge ile isteğe bağlı bir çıktı eylemcisi işlev belirtilebilir. Bu işlev değiştirge olarak bir dizge almalı ve bir dizge döndürmelidir. Bu işlev, çıktı tamponu boşaltılırken (gönderim), tampon temizlenirken (ob_flush(), ob_clean() ve benzeri bir işlevle) veya isteğin sonunda çıktı tamponu kullanıcının tarayıcısına boşaltılırken çağrılacaktır. İşlev çağrıldığında çıktı tamponunu değiştirge olarak alması ve sonuçta tarayıcıya gönderilmek üzere yeni bir çıktı tamponu döndürmesi beklenir. Eğer bu değiştirge ile belirtilen işlev çağrılabilir değilse ob_start() FALSE döndürür.

Eğer geriçağırıcı iki değiştirgeli ise ikinci değiştirge PHP_OUTPUT_HANDLER_START, PHP_OUTPUT_HANDLER_CONT ve PHP_OUTPUT_HANDLER_END değerlerinden oluşan bir bit alanı ile doldurulur.

çıktı_geriçağırıcı FALSE döndürdüğü takdirde özgün çıktı tarayıcıya gönderilir.

çıktı_geriçağırıcı , değiştirgesine bir NULL değer aktarılarak atlanabilir.

ob_end_clean(), ob_end_flush(), ob_clean(), ob_flush() ve ob_start() bir geriçağırım işlevi olarak belirtilemez. Bunlardan biri belirtilirse, davranışın nasıl olacağı belirsizdir. Bir tamponun içeriğini silmek isterseniz geriçağrıcıdan "" (boş dizge) döndürmelisiniz. Bir geriçağırım işlevinden, çıktı tamponlama işlevlerini kullanarak print_r($ifade, true) veya highlight_file($dosyaismi, true) gibi işlevleri çağıramazsınız.

Bilginize: PHP 4.0.4'ten itibaren, sıkıştırılmış sayfaları destekleyen tarayıcılara gziplenmiş veri göndermek için ob_gzhandler() işlevi kullanılabilmektedir. ob_gzhandler() işlevi tarayıcının kabul edeceği içerik kodlamasının türünü tespit ettikten sonra buna uygun çıktı döndürür.

parça_boyu

İsteğe bağlı parça_boyu belirtildiği takdirde, parça_boyu nu aşan veya tamponun tam dolmasına sebep olan bir çıktılama çağrısından sonra tampon boşaltılır. Öntanımlı 0 değerinin anlamı işlevin sadece tamponun sonuna gelindiğinde çağrılacağı anlamına gelirken, özel 1 değeri parça_boyu değerinin 4096 olacağı anlamına gelir.

sil

İsteğe bağlı sil değiştirgesinde FALSE belirtilirse, betik sonlanana kadar tampon boşaltılmaz.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Sürüm Bilgisi

Sürüm: Açıklama
4.3.2 çıktı_geriçağırıcı çalıştırılamadığı zaman işlevin FALSE döndürmesi sağlandı.
4.2.0 sil değiştirgesi eklendi.

Örnekler

Örnek 1 - Kullanıcı tanımlı geriçağırım işlevi örneği

<?php

function geriçağırım($tampon)
{
  
// elmaları armutlarla değiştirelim
  
return (str_replace("elmalar""armutlar"$tampon));
}

ob_start("geriçağırım");

?>
<html>
<body>
<p>Bizden elmalarla armutların karşılaştırılması isteniyor.</p>
</body>
</html>
<?php

ob_end_flush
();

?>

Yukarıdaki örneğin çıktısı:

<html>
<body>
<p>Bizden armutlarla armutların karşılaştırılması isteniyor.</p>
</body>
</html>

Ayrıca Bakınız



output_add_rewrite_var

(PHP 4 >= 4.3.0, PHP 5)

output_add_rewrite_varURL yeniden yazım değerlerini ekler

Açıklama

bool output_add_rewrite_var ( string $isim , string $değer )

Bu işlev URL yeniden yazım mekanizmasına yeni bir isim/değer çifti ekler. İsim ve değer URL'lere (GET değiştirgesi olarak) ve formlara (gizli girdi alanı olarak), session.use_trans_sid ile şeffaf URL yeniden yazımı etkinleştirilmiş gibi oturum ID'sinin eklendiği tarzda eklenir. Bu yolla mutlak URL'lerin (http://example.com/.. gibi) yeniden yazılmayacağına lütfen dikkat ediniz.

Bu işlevin davranışı url_rewriter.tags php.ini yönergesi ile denetlenir.

Bilginize: Bu işlevin çağrılması örtük olarak çıktı tamponlamasını henüz başlamamışsa başlatır.

Değiştirgeler

isim

Değişkenin ismi.

değer

Değişkenin değeri.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - output_add_rewrite_var() örneği

<?php
output_add_rewrite_var
('var''value');

// bazı bağlar
echo '<a href="file.php">bağlantı</a>
<a href="http://example.com">diğer bağlantı</a>'
;

// bir form
echo '<form action="script.php" method="post">
<input type="text" name="var2" />
</form>'
;

print_r(ob_list_handlers());
?>

Yukarıdaki örneğin çıktısı:

<a href="file.php?var=value">bağlantı</a>
<a href="http://example.com">diğer bağlantı</a>

<form action="script.php" method="post">
<input type="hidden" name="var" value="value" />
<input type="text" name="var2" />
</form>

Array
(
    [0] => URL-Rewriter
)

Ayrıca Bakınız



output_reset_rewrite_vars

(PHP 4 >= 4.3.0, PHP 5)

output_reset_rewrite_varsURL yeniden yazma değerlerini sıfırlar

Açıklama

bool output_reset_rewrite_vars ( void )

Bu işlev URL yeniden yazım mekanizmasını sıfırlar ve output_add_rewrite_var() işleviyle veya (session_start() işleviyle session.use_trans_sid tanımlanmışsa) oturum mekanizmasıyla evvelce atanmış olan tüm yeniden yazım çiftlerini siler.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 - output_reset_rewrite_vars() örneği

<?php
session_start
();
output_add_rewrite_var('var''value');

echo 
'<a href="file.php">bağlantı</a>';
ob_flush();

output_reset_rewrite_vars();
echo 
'<a href="file.php">bağlantı</a>';
?>

Yukarıdaki örneğin çıktısı:

<a href="file.php?PHPSESSID=xxx&var=value">bağlantı</a>
<a href="file.php">bağlantı</a>

Ayrıca Bakınız


İçindekiler

  • flush — Çıktı tamponunu boşaltır
  • ob_clean — Çıktı tamponunu temizler (siler)
  • ob_end_clean — Çıktı tamponunu temizler (siler) ve tamponu kapatır
  • ob_end_flush — Çıktı tamponunu boşaltır (gönderir) ve tamponu kapatır
  • ob_flush — Çıktı tamponunu boşaltır (gönderir)
  • ob_get_clean — Geçerli çıktı tamponun içeriğini döndürüp tamponu siler
  • ob_get_contents — Çıktı tamponunun içeriği ile döner
  • ob_get_flush — Çıktı tamponunu boşaltır, içeriğini bir dizge olarak döndürür ve çıktı tamponlamasını kapatır
  • ob_get_length — Çıktı tamponunundaki içeriğin uzunluğunu döndürür
  • ob_get_level — Çıktı tamponlama mekanizmasının iç içelik seviyesini döndürür
  • ob_get_status — Çıktı tamponlarının durumu ile döner
  • ob_gzhandler — Çıktı tamponunu gziplemek için ob_start geriçağırım işlevi
  • ob_implicit_flush — Örtük boşaltmayı açar/kapar
  • ob_list_handlers — Kullanımdaki çıktı eylemcileri listeler
  • ob_start — Çıktı tamponlamasını başlatır
  • output_add_rewrite_var — URL yeniden yazım değerlerini ekler
  • output_reset_rewrite_vars — URL yeniden yazma değerlerini sıfırlar



runkit


Giriş

The runkit extension provides means to modify constants, user-defined functions, and user-defined classes. It also provides for custom superglobal variables and embeddable sub-interpreters via sandboxing.

This package is meant as a feature added replacement for the » classkit package. When compiled with the --enable-runkit=classkit option to ./configure, it will export classkit compatible function definitions and constants.



Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

RUNKIT_IMPORT_FUNCTIONS (integer)
runkit_import() flag indicating that normal functions should be imported from the specified file.
RUNKIT_IMPORT_CLASS_METHODS (integer)
runkit_import() flag indicating that class methods should be imported from the specified file.
RUNKIT_IMPORT_CLASS_CONSTS (integer)
runkit_import() flag indicating that class constants should be imported from the specified file. Note that this flag is only meaningful in PHP versions 5.1.0 and above.
RUNKIT_IMPORT_CLASS_PROPS (integer)
runkit_import() flag indicating that class standard properties should be imported from the specified file.
RUNKIT_IMPORT_CLASSES (integer)
runkit_import() flag representing a bitwise OR of the RUNKIT_IMPORT_CLASS_* constants.
RUNKIT_IMPORT_OVERRIDE (integer)
runkit_import() flag indicating that if any of the imported functions, methods, constants, or properties already exist, they should be replaced with the new definitions. If this flag is not set, then any imported definitions which already exist will be discarded.
RUNKIT_ACC_PUBLIC (integer)
PHP 5 specific flag to runkit_method_add()
RUNKIT_ACC_PROTECTED (integer)
PHP 5 specific flag to runkit_method_add()
RUNKIT_ACC_PRIVATE (integer)
PHP 5 specific flag to runkit_method_add()
CLASSKIT_ACC_PUBLIC (integer)
PHP 5 specific flag to classkit_method_add() Only defined when classkit compatibility is enabled.
CLASSKIT_ACC_PROTECTED (integer)
PHP 5 specific flag to classkit_method_add() Only defined when classkit compatibility is enabled.
CLASSKIT_ACC_PRIVATE (integer)
PHP 5 specific flag to classkit_method_add() Only defined when classkit compatibility is enabled.
CLASSKIT_AGGREGATE_OVERRIDE (integer)
PHP 5 specific flag to classkit_import() Only defined when classkit compatibility is enabled.
RUNKIT_VERSION (string)
Defined to the current version of the runkit package.
CLASSKIT_VERSION (string)
Defined to the current version of the runkit package. Only defined when classkit compatibility is enabled.


Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Modifying Constants, Functions, Classes, and Methods works with all releases of PHP 4 and PHP 5. No special requirements are necessary.

Custom Superglobals are only available in PHP 4.2.0 or later.

Sandboxing requires PHP 5.1.0 or later, or PHP 5.0.0 with a special TSRM patch applied. Regardless of which version of PHP is in use it must be compiled with the --enable-maintainer-zts option. See the README file in the runkit package for additional information.



Kurulum

Bu » PECL eklentisi PHP ile gelmez.

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/runkit.

Bu PECL eklentisi için bir DLL mevcut değildir. Ayrıca, Windows üzerinde kurulum bölümüne de bakınız.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

Runkit Configuration Options
Name Default Changeable Changelog
runkit.superglobal "" PHP_INI_PERDIR  
runkit.internal_override "0" PHP_INI_SYSTEM  

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

runkit.superglobal string
Comma-separated list of variable names to be treated as superglobals. This value should be set in the systemwide php.ini file, but may work in perdir configuration contexts depending on your SAPI.

Örnek 1 Custom Superglobals with runkit.superglobal=_FOO,_BAR in php.ini

<?php
function show_values() {
  echo 
"Foo is $_FOO\n";
  echo 
"Bar is $_BAR\n";
  echo 
"Baz is $_BAZ\n";
}

$_FOO 'foo';
$_BAR 'bar';
$_BAZ 'baz';

/* Displays foo and bar, but not baz */
show_values();
?>
runkit.internal_override boolean
Enables ability to modify/rename/remove internal functions.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




runkit İşlevleri


Runkit_Sandbox

(PECL runkit >= 0.7.0)

Runkit_Sandbox Runkit Sandbox Class -- PHP Virtual Machine

Açıklama

Instantiating the Runkit_Sandbox class creates a new thread with its own scope and program stack. Using a set of options passed to the constructor, this environment may be restricted to a subset of what the primary interpreter can do and provide a safer environment for executing user supplied code.

Bilginize: Sandbox support (required for runkit_lint(), runkit_lint_file(), and the Runkit_Sandbox class) is only available as of PHP 5.1.0 or specially patched versions of PHP 5.0, and requires that thread safety be enabled. See the README file included in the runkit package for more information.

Constructor

void Runkit_Sandbox::__construct ([ array $options ] )

options is an associative array containing any combination of the special ini options listed below.

safe_mode

If the outer script which is instantiating the Runkit_Sandbox class is configured with safe_mode = off, then safe_mode may be turned on for the sandbox environment. This setting can not be used to disable safe_mode when it's already enabled in the outer script.

safe_mode_gid

If the outer script which is instantiating the Runkit_Sandbox class is configured with safe_mode_gid = on, then safe_mode_gid may be turned off for the sandbox environment. This setting can not be used to enable safe_mode_gid when it's already disabled in the outer script.

safe_mode_include_dir

If the outer script which is instantiating the Runkit_Sandbox class is configured with a safe_mode_include_dir, then a new safe_mode_include_dir may be set for sandbox environments below the currently defined value. safe_mode_include_dir may also be cleared to indicate that the bypass feature is disabled. If safe_mode_include_dir was blank in the outer script, but safe_mode was not enabled, then any arbitrary safe_mode_include_dir may be set while turning safe_mode on.

open_basedir

open_basedir may be set to any path below the current setting of open_basedir. If open_basedir is not set within the global scope, then it is assumed to be the root directory and may be set to any location.

allow_url_fopen

Like safe_mode , this setting can only be made more restrictive, in this case by setting it to FALSE when it is previously set to TRUE

disable_functions

Comma separated list of functions to disable within the sandbox sub-interpreter. This list need not contain the names of the currently disabled functions, they will remain disabled whether listed here or not.

disable_classes

Comma separated list of classes to disable within the sandbox sub-interpreter. This list need not contain the names of the currently disabled classes, they will remain disabled whether listed here or not.

runkit.superglobal

Comma separated list of variables to be treated as superglobals within the sandbox sub-interpreter. These variables will be used in addition to any variables defined internally or through the global runkit.superglobal setting.

runkit.internal_override

Ini option runkit.internal_override may be disabled (but not re-enabled) within sandboxes.

Örnek 1 Instantiating a restricted sandbox

<?php
$options 
= array(
  
'safe_mode'=>true,
  
'open_basedir'=>'/var/www/users/jdoe/',
  
'allow_url_fopen'=>'false',
  
'disable_functions'=>'exec,shell_exec,passthru,system',
  
'disable_classes'=>'myAppClass');
$sandbox = new Runkit_Sandbox($options);
/* Non-protected ini settings may set normally */
$sandbox->ini_set('html_errors',true);
?>

Accessing Variables

All variables in the global scope of the sandbox environment are accessible as properties of the sandbox object. The first thing to note is that because of the way memory between these two threads is managed, object and resource variables can not currently be exchanged between interpreters. Additionally, all arrays are deep copied and any references will be lost. This also means that references between interpreters are not possible.

Örnek 2 Working with variables in a sandbox

<?php
$sandbox 
= new Runkit_Sandbox();

$sandbox->foo 'bar';
$sandbox->eval('echo "$foo\n"; $bar = $foo . "baz";');
echo 
"{$sandbox->bar}\n";
if (isset(
$sandbox->foo)) unset($sandbox->foo);
$sandbox->eval('var_dump(isset($foo));');
?>

Yukarıdaki örneğin çıktısı:

bar
barbaz
bool(false)

Calling PHP Functions

Any function defined within the sandbox may be called as a method on the sandbox object. This also includes a few pseudo-function language constructs: eval(), include(), include_once(), require(), require_once(), echo(), print(), die(), and exit().

Örnek 3 Calling sandbox functions

<?php
$sandbox 
= new Runkit_Sandbox();

echo 
$sandbox->str_replace('a','f','abc');
?>

Yukarıdaki örneğin çıktısı:

fbc

When passing arguments to a sandbox function, the arguments are taken from the outer instance of PHP. If you wish to pass arguments from the sandbox's scope, be sure to access them as properties of the sandbox object as illustrated above.

Örnek 4 Passing arguments to sandbox functions

<?php
$sandbox 
= new Runkit_Sandbox();

$foo 'bar';
$sandbox->foo 'baz';
echo 
$sandbox->str_replace('a',$foo,'a');
echo 
$sandbox->str_replace('a',$sandbox->foo,'a');
?>

Yukarıdaki örneğin çıktısı:

bar
baz

Changing Sandbox Settings

As of runkit version 0.5, certain Sandbox settings may be modified on the fly using ArrayAccess syntax. Some settings, such as active are read-only and meant to provide status information. Other settings, such as output_handler may be set and read much like a normal array offset. Future settings may be write-only, however no such settings currently exist.

Sandbox Settings / Status Indicators
Setting Type Purpose Default
active Boolean (Read Only) TRUE if the Sandbox is still in a usable state, FALSE if the request is in bailout due to a call to die(), exit(), or because of a fatal error condition. TRUE (Initial)
output_handler Callback When set to a valid callback, all output generated by the Sandbox instance will be processed through the named function. Sandbox output handlers follow the same calling conventions as the system-wide output handler. None
parent_access Boolean May the sandbox use instances of the Runkit_Sandbox_Parent class? Must be enabled for other Runkit_Sandbox_Parent related settings to work. FALSE
parent_read Boolean May the sandbox read variables in its parent's context? FALSE
parent_write Boolean May the sandbox modify variables in its parent's context? FALSE
parent_eval Boolean May the sandbox evaluate arbitrary code in its parent's context? DANGEROUS FALSE
parent_include Boolean May the sandbox include php code files in its parent's context? DANGEROUS FALSE
parent_echo Boolean May the sandbox echo data in its parent's context effectively bypassing its own output_handler? FALSE
parent_call Boolean May the sandbox call functions in its parent's context? FALSE
parent_die Boolean May the sandbox kill its own parent? (And thus itself) FALSE
parent_scope Integer What scope will parental property access look at? 0 == Global scope, 1 == Calling scope, 2 == Scope preceeding calling scope, 3 == The scope before that, etc..., etc... 0 (Global)
parent_scope String When parent_scope is set to a string value, it refers to a named array variable in the global scope. If the named variable does not exist at the time of access it will be created as an empty array. If the variable exists but it not an array, a dummy array will be created containing a reference to the named global variable.  



Runkit_Sandbox_Parent

(PECL runkit >= 0.7.0)

Runkit_Sandbox_Parent Runkit Anti-Sandbox Class

Açıklama

void Runkit_Sandbox_Parent::__construct ( void )

Instantiating the Runkit_Sandbox_Parent class from within a sandbox environment created from the Runkit_Sandbox class provides some (controlled) means for a sandbox child to access its parent.

Bilginize: Sandbox support (required for runkit_lint(), runkit_lint_file(), and the Runkit_Sandbox class) is only available as of PHP 5.1.0 or specially patched versions of PHP 5.0, and requires that thread safety be enabled. See the README file included in the runkit package for more information.

In order for any of the Runkit_Sandbox_Parent features to function. Support must be enabled on a per-sandbox basis by enabling the parent_access flag from the parent's context.

Örnek 1 Working with variables in a sandbox

<?php
$sandbox 
= new Runkit_Sandbox();
$sandbox['parent_access'] = true;
?>

Accessing the Parent's Variables

Just as with sandbox variable access, a sandbox parent's variables may be read from and written to as properties of the Runkit_Sandbox_Parent class. Read access to parental variables may be enabled with the parent_read setting (in addition to the base parent_access setting). Write access, in turn, is enabled through the parent_write setting.

Unlike sandbox child variable access, the variable scope is not limited to globals only. By setting the parent_scope setting to an appropriate integer value, other scopes in the active call stack may be inspected instead. A value of 0 (Default) will direct variable access at the global scope. 1 will point variable access at whatever variable scope was active at the time the current block of sandbox code was executed. Higher values progress back through the functions that called the functions that led to the sandbox executing code that tried to access its own parent's variables.

Örnek 2 Accessing parental variables

<?php
$php 
= new Runkit_Sandbox();
$php['parent_access'] = true;
$php['parent_read'] = true;

$test "Global";

$php->eval('$PARENT = new Runkit_Sandbox_Parent;');

$php['parent_scope'] = 0;
one();

$php['parent_scope'] = 1;
one();

$php['parent_scope'] = 2;
one();

$php['parent_scope'] = 3;
one();

$php['parent_scope'] = 4;
one();

$php['parent_scope'] = 5;
one();

function 
one() {
    
$test "one()";
    
two();
}

function 
two() {
    
$test "two()";
    
three();
}

function 
three() {
    
$test "three()";
    
$GLOBALS['php']->eval('var_dump($PARENT->test);');
}
?>

Yukarıdaki örneğin çıktısı:

string(6) "Global"
string(7) "three()"
string(5) "two()"
string(5) "one()"
string(6) "Global"
string(6) "Global"

Calling the Parent's Functions

Just as with sandbox access, a sandbox may access its parents functions providing that the proper settings have been enabled. Enabling parent_call will allow the sandbox to call all functions available to the parent scope. Language constructs are each controlled by their own setting: print() and echo() are enabled with parent_echo. die() and exit() are enabled with parent_die. eval() is enabled with parent_eval while include(), include_once(), require(), and require_once() are enabled through parent_include.



runkit_class_adopt

(PECL runkit >= 0.7.0)

runkit_class_adopt Convert a base class to an inherited class, add ancestral methods when appropriate

Açıklama

bool runkit_class_adopt ( string $classname , string $parentname )

Değiştirgeler

classname

Name of class to be adopted

parentname

Parent class which child class is extending

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 A runkit_class_adopt() example

<?php
class myParent {
  function 
parentFunc() {
    echo 
"Parent Function Output\n";
  }
}

class 
myChild {
}

runkit_class_adopt('myChild','myParent');
myChild::parentFunc();
?>

Yukarıdaki örneğin çıktısı:

Parent Function Output

Ayrıca Bakınız



runkit_class_emancipate

(PECL runkit >= 0.7.0)

runkit_class_emancipate Convert an inherited class to a base class, removes any method whose scope is ancestral

Açıklama

bool runkit_class_emancipate ( string $classname )

Değiştirgeler

classname

Name of class to emancipate

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 A runkit_class_emancipate() example

<?php
class myParent {
  function 
parentFunc () {
    echo 
"Parent Function Output\n";
  }
}
class 
myChild extends myParent {
}

myChild::parentFunc();
runkit_class_emancipate('myChild');
myChild::parentFunc();
?>

Yukarıdaki örneğin çıktısı:

Parent Function Output
Fatal error: Call to undefined function:  parentFunc() in example.php on line 12

Ayrıca Bakınız

  • runkit_class_adopt() - Convert a base class to an inherited class, add ancestral methods when appropriate



runkit_constant_add

(PECL runkit >= 0.7.0)

runkit_constant_add Similar to define(), but allows defining in class definitions as well

Açıklama

bool runkit_constant_add ( string $constname , mixed $value )

Değiştirgeler

constname

Name of constant to declare. Either a string to indicate a global constant, or classname::constname to indicate a class constant.

value

NULL, Bool, Long, Double, String, or Resource value to store in the new constant.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



runkit_constant_redefine

(PECL runkit >= 0.7.0)

runkit_constant_redefine Redefine an already defined constant

Açıklama

bool runkit_constant_redefine ( string $constname , mixed $newvalue )

Değiştirgeler

constname

Constant to redefine. Either string indicating global constant, or classname::constname indicating class constant.

newvalue

New value to assign to constant.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



runkit_constant_remove

(PECL runkit >= 0.7.0)

runkit_constant_remove Remove/Delete an already defined constant

Açıklama

bool runkit_constant_remove ( string $constname )

Değiştirgeler

constname

Name of constant to remove. Either a string indicating a global constant, or classname::constname indicating a class constant.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



runkit_function_add

(PECL runkit >= 0.7.0)

runkit_function_add Add a new function, similar to create_function()

Açıklama

bool runkit_function_add ( string $funcname , string $arglist , string $code )

Değiştirgeler

funcname

Name of function to be created

arglist

Comma separated argument list

code

Code making up the function

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 A runkit_function_add() example

<?php
runkit_function_add
('testme','$a,$b','echo "The value of a is $a\n"; echo "The value of b is $b\n";');
testme(1,2);
?>

Yukarıdaki örneğin çıktısı:

The value of a is 1
The value of b is 2

Ayrıca Bakınız



runkit_function_copy

(PECL runkit >= 0.7.0)

runkit_function_copy Copy a function to a new function name

Açıklama

bool runkit_function_copy ( string $funcname , string $targetname )

Değiştirgeler

funcname

Name of existing function

targetname

Name of new function to copy definition to

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 A runkit_function_copy() example

<?php
function original() {
  echo 
"In a function\n";
}
runkit_function_copy('original','duplicate');
original();
duplicate();
?>

Yukarıdaki örneğin çıktısı:

In a function
In a function

Ayrıca Bakınız



runkit_function_redefine

(PECL runkit >= 0.7.0)

runkit_function_redefine Replace a function definition with a new implementation

Açıklama

bool runkit_function_redefine ( string $funcname , string $arglist , string $code )

Bilginize: By default, only userspace functions may be removed, renamed, or modified. In order to override internal functions, you must enable the runkit.internal_override setting in php.ini.

Değiştirgeler

funcname

Name of function to redefine

arglist

New list of arguments to be accepted by function

code

New code implementation

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 A runkit_function_redefine() example

<?php
function testme() {
  echo 
"Original Testme Implementation\n";
}
testme();
runkit_function_redefine('testme','','echo "New Testme Implementation\n";');
testme();
?>

Yukarıdaki örneğin çıktısı:

Original Testme Implementation
New Testme Implementation

Ayrıca Bakınız



runkit_function_remove

(PECL runkit >= 0.7.0)

runkit_function_remove Remove a function definition

Açıklama

bool runkit_function_remove ( string $funcname )

Bilginize: By default, only userspace functions may be removed, renamed, or modified. In order to override internal functions, you must enable the runkit.internal_override setting in php.ini.

Değiştirgeler

funcname

Name of function to be deleted

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



runkit_function_rename

(PECL runkit >= 0.7.0)

runkit_function_rename Change a function's name

Açıklama

bool runkit_function_rename ( string $funcname , string $newname )

Bilginize: By default, only userspace functions may be removed, renamed, or modified. In order to override internal functions, you must enable the runkit.internal_override setting in php.ini.

Değiştirgeler

funcname

Current function name

newname

New function name

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



runkit_import

(PECL runkit >= 0.7.0)

runkit_import Process a PHP file importing function and class definitions, overwriting where appropriate

Açıklama

bool runkit_import ( string $filename [, int $flags = RUNKIT_IMPORT_CLASS_METHODS ] )

Similar to include() however any code residing outside of a function or class is simply ignored. Additionally, depending on the value of flags , any functions or classes which already exist in the currently running environment will be automatically overwritten by their new definitions.

Değiştirgeler

filename

Filename to import function and class definitions from

flags

Bitwise OR of the RUNKIT_IMPORT_* family of constants.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.



runkit_lint_file

(PECL runkit >= 0.7.0)

runkit_lint_file Check the PHP syntax of the specified file

Açıklama

bool runkit_lint_file ( string $filename )

The runkit_lint_file() function performs a syntax (lint) check on the specified filename testing for scripting errors. This is similar to using php -l from the commandline.

Bilginize: Sandbox support (required for runkit_lint(), runkit_lint_file(), and the Runkit_Sandbox class) is only available as of PHP 5.1.0 or specially patched versions of PHP 5.0, and requires that thread safety be enabled. See the README file included in the runkit package for more information.

Değiştirgeler

filename

File containing PHP Code to be lint checked

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



runkit_lint

(PECL runkit >= 0.7.0)

runkit_lint Check the PHP syntax of the specified php code

Açıklama

bool runkit_lint ( string $code )

The runkit_lint() function performs a syntax (lint) check on the specified php code testing for scripting errors. This is similar to using php -l from the command line except runkit_lint() accepts actual code rather than a filename.

Bilginize: Sandbox support (required for runkit_lint(), runkit_lint_file(), and the Runkit_Sandbox class) is only available as of PHP 5.1.0 or specially patched versions of PHP 5.0, and requires that thread safety be enabled. See the README file included in the runkit package for more information.

Değiştirgeler

code

PHP Code to be lint checked

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



runkit_method_add

(PECL runkit >= 0.7.0)

runkit_method_addDynamically adds a new method to a given class

Açıklama

bool runkit_method_add ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )
Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Değiştirgeler

classname

The class to which this method will be added

methodname

The name of the method to add

args

Comma-delimited list of arguments for the newly-created method

code

The code to be evaluated when methodname is called

flags

The type of method to create, can be RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED or RUNKIT_ACC_PRIVATE

Bilginize: This parameter is only used as of PHP 5, because, prior to this, all methods were public.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 runkit_method_add() example

<?php
class Example {
    function 
foo() {
        echo 
"foo!\n";
    }
}

// create an Example object
$e = new Example();

// Add a new public method
runkit_method_add(
    
'Example',
    
'add',
    
'$num1, $num2',
    
'return $num1 + $num2;',
    
RUNKIT_ACC_PUBLIC
);

// add 12 + 4
echo $e->add(124);
?>

Yukarıdaki örneğin çıktısı:

16

Ayrıca Bakınız



runkit_method_copy

(PECL runkit >= 0.7.0)

runkit_method_copyCopies a method from class to another

Açıklama

bool runkit_method_copy ( string $dClass , string $dMethod , string $sClass [, string $sMethod ] )
Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Değiştirgeler

dClass

Destination class for copied method

dMethod

Destination method name

sClass

Source class of the method to copy

sMethod

Name of the method to copy from the source class. If this parameter is omitted, the value of dMethod is assumed.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 runkit_method_copy() example

<?php
class Foo {
    function 
example() {
        return 
"foo!\n";
    }
}

class 
Bar {
    
// initially, no methods
}

// copy the example() method from the Foo class to the Bar class, as baz()
runkit_method_copy('Bar''baz''Foo''example');

// output copied function
echo Bar::baz();
?>

Yukarıdaki örneğin çıktısı:

foo!

Ayrıca Bakınız



runkit_method_redefine

(PECL runkit >= 0.7.0)

runkit_method_redefineDynamically changes the code of the given method

Açıklama

bool runkit_method_redefine ( string $classname , string $methodname , string $args , string $code [, int $flags = RUNKIT_ACC_PUBLIC ] )

Bilginize: Bu işlev çalışmakta olan yöntemi değiştirmekte kullanılamaz.

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Değiştirgeler

classname

The class in which to redefine the method

methodname

The name of the method to redefine

args

Comma-delimited list of arguments for the redefined method

code

The new code to be evaluated when methodname is called

flags

The redefined method can be RUNKIT_ACC_PUBLIC, RUNKIT_ACC_PROTECTED or RUNKIT_ACC_PRIVATE

Bilginize: This parameter is only used as of PHP 5, because, prior to this, all methods were public.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 runkit_method_redefine() example

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
}

// create an Example object
$e = new Example();

// output Example::foo() (before redefine)
echo "Before: " $e->foo();

// Redefine the 'foo' method
runkit_method_redefine(
    
'Example',
    
'foo',
    
'',
    
'return "bar!\n";',
    
RUNKIT_ACC_PUBLIC
);

// output Example::foo() (after redefine)
echo "After: " $e->foo();
?>

Yukarıdaki örneğin çıktısı:

Before: foo!
After: bar!

Ayrıca Bakınız



runkit_method_remove

(PECL runkit >= 0.7.0)

runkit_method_removeDynamically removes the given method

Açıklama

bool runkit_method_remove ( string $classname , string $methodname )

Bilginize: Bu işlev çalışmakta olan yöntemi değiştirmekte kullanılamaz.

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Değiştirgeler

classname

The class in which to remove the method

methodname

The name of the method to remove

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 runkit_method_remove() example

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
    
    function 
bar() {
        return 
"bar!\n";
    }
}

// Remove the 'foo' method
runkit_method_remove(
    
'Example',
    
'foo'
);

echo 
implode(' 'get_class_methods('Example'));

?>

Yukarıdaki örneğin çıktısı:

bar

Ayrıca Bakınız



runkit_method_rename

(PECL runkit >= 0.7.0)

runkit_method_renameDynamically changes the name of the given method

Açıklama

bool runkit_method_rename ( string $classname , string $methodname , string $newname )

Bilginize: Bu işlev çalışmakta olan yöntemi değiştirmekte kullanılamaz.

Uyarı

Bu işlev DENEYSELDİR. Bu işlevin davranışı, ismi ve belgeleri PHP'nin sonraki sürümlerinde hiçbir duyuru yapılmaksızın değiştirilebilir. Bu riski göze alamayacaksanız bu işlevi kullanmayın.

Değiştirgeler

classname

The class in which to rename the method

methodname

The name of the method to rename

newname

The new name to give to the renamed method

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 runkit_method_rename() example

<?php
class Example {
    function 
foo() {
        return 
"foo!\n";
    }
}

// Rename the 'foo' method to 'bar'
runkit_method_rename(
    
'Example',
    
'foo',
    
'bar'
);

// output renamed function
echo Example::bar();
?>

Yukarıdaki örneğin çıktısı:

foo!

Ayrıca Bakınız



runkit_return_value_used

(PECL runkit >= 0.8.0)

runkit_return_value_usedDetermines if the current functions return value will be used

Açıklama

bool runkit_return_value_used ( void )

Dönen Değerler

Returns TRUE if the function's return value is used by the calling scope, otherwise FALSE

Örnekler

Örnek 1 runkit_return_value_used() example

<?php
function foo() {
  
var_dump(runkit_return_value_used());
}

foo();
$f foo();
?>

Yukarıdaki örneğin çıktısı:

bool(false)
bool(true)



runkit_sandbox_output_handler

(PECL runkit >= 0.7.0)

runkit_sandbox_output_handler Specify a function to capture and/or process output from a runkit sandbox

Açıklama

mixed runkit_sandbox_output_handler ( object $sandbox [, mixed $callback ] )

Ordinarily, anything output (such as with echo() or print()) will be output as though it were printed from the parent's scope. Using runkit_sandbox_output_handler() however, output generated by the sandbox (including errors), can be captured by a function outside of the sandbox.

Bilginize: Sandbox support (required for runkit_lint(), runkit_lint_file(), and the Runkit_Sandbox class) is only available as of PHP 5.1.0 or specially patched versions of PHP 5.0, and requires that thread safety be enabled. See the README file included in the runkit package for more information.

Bilginize: Deprecated
As of runkit version 0.5, this function is deprecated and is scheduled to be removed from the package prior to a 1.0 release. The output handler for a given Runkit_Sandbox instance may be read/set using the array offset syntax shown on the Runkit_Sandbox class definition page.

Değiştirgeler

sandbox

Object instance of Runkit_Sandbox class on which to set output handling.

callback

Name of a function which expects one parameter. Output generated by sandbox will be passed to this callback. Anything returned by the callback will be displayed normally. If this parameter is not passed then output handling will not be changed. If a non-truth value is passed, output handling will be disabled and will revert to direct display.

Dönen Değerler

Returns the name of the previously defined output handler callback, or FALSE if no handler was previously defined.

Örnekler

Örnek 1 Feeding output to a variable

<?php
function capture_output($str) {
  
$GLOBALS['sandbox_output'] .= $str;

  return 
'';
}

$sandbox_output '';

$php = new Runkit_Sandbox();
runkit_sandbox_output_handler($php'capture_output');
$php->echo("Hello\n");
$php->eval('var_dump("Excuse me");');
$php->die("I lost myself.");
unset(
$php);

echo 
"Sandbox Complete\n\n";
echo 
$sandbox_output;
?>

Yukarıdaki örneğin çıktısı:

Sandbox Complete

Hello
string(9) "Excuse me"
I lost myself.



runkit_superglobals

(PECL runkit >= 0.7.0)

runkit_superglobals Return numerically indexed array of registered superglobals

Açıklama

array runkit_superglobals ( void )

Dönen Değerler

Returns a numerically indexed array of the currently registered superglobals. i.e. _GET, _POST, _REQUEST, _COOKIE, _SESSION, _SERVER, _ENV, _FILES

Ayrıca Bakınız


İçindekiler




Break the silence operator


Giriş

The scream extension gives the possibility to disable the silencing error control operator so all errors are being reported. This feature is controlled by an ini setting.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

PHP version 5.2.0 or greater.



Kurulum

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/scream



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

scream Yapılandırma Seçenekleri
İsim Öntanımlı Değişlik Yeri Changelog
scream.enabled Off PHP_INI_ALL  

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

scream.enabled int

Whether or not to enable scream.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Örnekler

İçindekiler


Example that shows the effect of scream

This example demonstrates how scream affects the behaviour of PHP's error handler.

Örnek 1 Enabling and disabling scream at runtime

<?php
// Make sure errors will be shown
ini_set('display_errors'true);
error_reporting(E_ALL);

// Disable scream - this is the default and produce an error
ini_set('scream.enabled'false);
echo 
"Opening http://example.com/not-existing-file\n";
@
fopen('http://example.com/not-existing-file''r');

// Now enable scream and try again
ini_set('scream.enabled'true);
echo 
"Opening http://example.com/not-existing-file\n";
@
fopen('http://example.com/another-not-existing-file''r');
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Opening http://example.com/not-existing-file
Opening http://example.com/not-existing-file

Warning: fopen(http://example.com/another-not-existing-file): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in example.php on line 14

Bilginize: Usually one would set this in the php.ini configuration file instead of changing the code.





Windows Cache for PHP


Giriş

Windows Cache Extension for PHP is a PHP accelerator that is used to increase the speed of PHP applications running on Windows and Windows Server. Once the Windows Cache Extension for PHP is enabled and loaded by the PHP engine, PHP applications can take advantage of the functionality without any code modifications.

The Windows Cache Extension includes 3 different types of caches. The following describes the purpose of each cache type and the benefits it provides.

  • PHP Opcode Cache - PHP is a script processing engine, which reads an input stream of data that contains text and/or PHP instructions and produces another stream of data, most commonly in the HTML format. This means that on a web server the PHP engine reads, parses, compiles and executes a PHP script each time that it is requested by a Web client. The reading, parsing and compilation operations put additional load on the web server's CPU and file system and thus affect the overall performance of a PHP web application. The PHP bytecode (opcode) cache is used to store the compiled script bytecode in shared memory so that it can be re-used by PHP engine for subsequent executions of the same script.

  • File Cache - Even with the PHP bytecode cache enabled, the PHP engine has to accesses the script files on a file system. When PHP scripts are stored on a remote UNC file share, the file operations introduce a significant performance overhead. The Windows Cache Extension for PHP includes a file cache that is used to store the content of the PHP script files in shared memory, which reduces the amount of file system operations performed by PHP engine.

  • Relative File Path Cache - PHP scripts very often include or operate with files by using relative file paths. Every relative file path has to be converted to an absolute file path by the PHP engine. When a PHP application uses many PHP files and accesses them by relative paths, the operation of resolving relative paths to absolute paths may negatively impact the application's performance. The Windows Cache Extension for PHP provides a Relative File Path cache, which is used to store the mappings between relative and absolute file paths, thereby reducing the number of relative path resolutions that the PHP engine has to perform.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

The extension is currently supported only on the following configurations:

Windows OS:

  • Windows XP SP3 with IIS 5.1 and » FastCGI Extension
  • Windows Server 2003 with IIS 6.0 and » FastCGI Extension
  • Windows Vista SP1 with IIS 7.0 and FastCGI Module
  • Windows Server 2008 with IIS 7.0 and FastCGI Module
  • Windows 7 with IIS 7.5 and FastCGI Module
  • Windows Server 2008 R2 with IIS 7.5 and FastCGI Module

PHP:

  • PHP 5.2.X, Non-thread-safe build
  • PHP 5.3 X86, Non-thread-safe VC9 build

Bilginize: The WinCache Extension can only be used when IIS is configured to run PHP via FastCGI.



Kurulum

Bu » PECL eklentisi PHP ile gelmez.

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/wincache.

There are two packages for this extension: one package is for PHP versions 5.2.X, and the other package is for PHP 5.3.X. Select the package that is appropriate for the PHP version being used.

To install and enable the extension, follow these steps:

  1. Unpack the package into some temporary location.

  2. Copy the php_wincache.dll file into the PHP extensions folder. Typically this folder is called "ext" and it is located in the same folder with all PHP binary files. For example: C:\Program Files\PHP\ext.

  3. Using a text editor, open the php.ini file, which is usually located in the same folder where all PHP binary files are. For example: C:\Program Files\PHP\php.ini.

  4. Add the following line at the end of the php.ini file: extension = php_wincache.dll.

  5. Save and close the php.ini file.

  6. Recycle the IIS Application Pools for PHP to pick up the configuration changes. To check that the extension has been enabled, create a file called phpinfo.php with a PHP code that calls phpinfo function.

  7. Save the phpinfo.php file in the root folder of a IIS web site that uses PHP, then open a browser and make a request to http://localhost/phpinfo.php. Search within the returned web page for a section called wincache. If the extension is enabled, then the phpinfo output will list the configuration settings provided by the WinCache.

Bilginize: Do not forget to remove phpinfo.php file from the web site's root folder after verifying that extension has been enabled.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

The following table lists and explains the configuration settings provided by the WinCache extension:

WinCache configuration options
Name Default Minimum Maximum Changeable Changelog
wincache.fcenabled "1" "0" "1" PHP_INI_ALL Available since WinCache 1.0.0
wincache.fcenabledfilter "NULL" "NULL" "NULL" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.fcachesize "24" "5" "85" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.maxfilesize "256" "10" "2048" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ocenabled "1" "0" "1" PHP_INI_ALL Available since WinCache 1.0.0
wincache.ocenabledfilter "NULL" "NULL" "NULL" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ocachesize "96" "15" "255" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.filecount "4096" "1024" "16384" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.chkinterval "30" "0" "300" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ttlmax "1200" "0" "7200" PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.enablecli 0 0 1 PHP_INI_SYSTEM Available since WinCache 1.0.0
wincache.ignorelist NULL NULL NULL PHP_INI_ALL Available since WinCache 1.0.0
wincache.namesalt NULL NULL NULL PHP_INI_SYSTEM Available since WinCache 1.0.0

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

wincache.fcenabled boolean
Enables or disables the file cache functionality.
wincache.fcenabledfilter string
Defines a comma-separated list of IIS web site identifiers where file cache should be enabled or disabled. This setting works in conjunction with wincache.fcenabled: if wincache.fcenabled is set to 1, then the sites listed in the wincache.fcenabledfilter will have the file cache turned off; if wincache.fcenabled is set to 0, then the sites listed in the wincache.fcenabledfilter will have the file cache turned on.
wincache.fcachesize integer
Defines the maximum memory size (in megabytes) that is allocated for the file cache. If the total size of all the cached files exceeds the value specified in this setting, then most stale files will be removed from the file cache.
wincache.maxfilesize integer
Defines the maximum allowed size (in kilobytes) for a single file to be cached. If a file size exceeds the specified value, the file will not be cached. This setting applies to the file cache only.
wincache.ocenabled boolean
Enables or disables the opcode cache functionality
wincache.ocenabledfilter string
Defines a comma-separated list of IIS web site identifiers where opcode cache should be enabled or disabled. This setting works in conjunction with wincache.ocenabled: if wincache.ocenabled is set to 1, then the sites listed in the wincache.ocenabledfilter will have the opcode cache turned off; if wincache.ocenabled is set to 0, then the sites listed in the wincache.ocenabledfilter will have the opcode cache turned on.
wincache.ocachesize integer
Defines the maximum memory size (in megabytes) that is allocated for the opcode cache. If the cached opcode size exceeds the specified value, then most stale opcode will be removed from the cache. Note that the opcode cache size must be at least 3 times bigger than file cache size. If that is not the case the opcode cache size will be automatically increased.
wincache.filecount integer
Defines how many files are expected to be cached by the extension, so that appropriate memory size is allocated at the startup time. If the number of files exceeds the specified value, the WinCache will re-allocate more memory as needed.
wincache.chkinterval integer
Defines how often (in seconds) the extension checks for file changes in order to refresh the cache. Setting it to 0 will disable the refreshing of the cache. The file changes will not be reflected in the cache unless the cache entry for that file is removed by scavenger or IIS application pool is recycled or wincache_refresh_if_changed function is called.
wincache.ttlmax integer
Defines the maximum time to live (in seconds) for a cached entry without being used. Setting it to 0 will disable the cache scavenger, so the cached entries will never be removed from the cache during the lifetime of the IIS worker process.
wincache.enablecli boolean
Defines if caching is enabled when PHP is running in command line (CLI) mode.
wincache.ignorelist string

Defines a list of files that should not be cached by the extension. The files list is specified by using file names only, separated by the pipe symbol - "|".

Örnek 1 wincache.ignorelist example

wincache.ignorelist = "index.php|misc.php|admin.php"

wincache.namesalt boolean
Defines a string that will be used when naming the extension specific objects that are stored in shared memory. This is used to avoid conflicts that may be caused if other applications within an IIS worker process tries to access shared memory.



WinCache Statistics Script

The installation package for WinCache includes a PHP script, wincache.php, that can be used to obtain cache information and statistics.

If the WinCache extension was installed via the Microsoft Web Platform Installer, then this script is located in %SystemDrive%\Program Files\IIS\Windows Cache for PHP\. On a 64-bit version of the Windows Server operating system, the script is located in %SystemDrive%\Program Files (x86)\IIS\Windows Cache for PHP. If the extension was installed manually, then the wincache.php will be located in the same folder from which the content of the installation package was extracted.

To use wincache.php, copy it into a root folder of a Web site or into any subfolder. To protect the script, open it in any text editor and replace the values for USERNAME and PASSWORD constants. If any other IIS authentication is enabled on the server, then follow the instructions in the comments:

Örnek 1 Authentication configuration for wincache.php

/**
 * ======================== CONFIGURATION SETTINGS ==============================
 * If you do not want to use authentication for this page, set USE_AUTHENTICATION to 0.
 * If you use authentication then replace the default password.
 */
define('USE_AUTHENTICATION', 1);
define('USERNAME', 'wincache');
define('PASSWORD', 'wincache');

/**
 * The Basic PHP authentication will work only when IIS is configured to support 
 * Anonymous Authentication' and nothing else. If IIS is configured to support/use
 * any other kind of authentication like Basic/Negotiate/Digest etc, this will not work.
 * In that case use the array below to define the names of users in your 
 * domain/network/workgroup which you want to grant access to.
 */
$user_allowed = array('DOMAIN\user1', 'DOMAIN\user2', 'DOMAIN\user3');

/**
 * If the array contains string 'all', then all the users authenticated by IIS
 * will have access to the page. Uncomment the below line and comment above line
 * to grant access to all users who gets authenticated by IIS.
 */
/* $user_allowed = array('all'); */

/** ===================== END OF CONFIGURATION SETTINGS ========================== */

Bilginize: Always protect the wincache.php script by using either the built-in authentication or the server's authentication mechanism. Leaving this script unprotected may compromise the security of your web application and web server.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Bu eklentinin tanımlanmış sabitleri yoktur.



WinCache İşlevleri


wincache_fcache_fileinfo

(PECL wincache >= 1.0.0)

wincache_fcache_fileinfo Retrieves information about files cached in the file cache

Açıklama

array wincache_fcache_fileinfo ( void )

Retrieves information about file cache content and its usage.

Dönen Değerler

Array of meta data about file cache başarısızlık durumunda FALSE döner

The array returned by this function contains the following elements:

  • total_cache_uptime - total time in seconds that the file cache has been active
  • total_file_count - total number of files that are currently in the file cache
  • total_hit_count - number of times the files have been served from the file cache
  • total_miss_count - number of times the files have not been found in the file cache
  • file_entries - an array that contains the information about all the cached files:

    • file_name - absolute file name of the cached file
    • add_time - time in seconds since the file has been added to the file cache
    • use_time - time in seconds since the file has been accessed in the file cache
    • last_check - time in seconds since the file has been checked for modifications
    • hit_count - number of times the file has been served from the cache
    • file_size - size of the cached file in bytes

Örnekler

Örnek 1 A wincache_fcache_fileinfo() example

<pre>
<?php
print_r
(wincache_fcache_fileinfo());
?>
</pre>

Yukarıdaki örneğin çıktısı:

Array
(   [total_cache_uptime] => 3234
    [total_file_count] => 5
    [total_hit_count] => 0
    [total_miss_count] => 1
    [file_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 1
                    [use_time] => 0
                    [last_check] => 1
                    [hit_count] => 1
                    [file_size] => 2435
                )
            [2] => Array (...iterates for each cached file)
        )
)

Ayrıca Bakınız



wincache_fcache_meminfo

(PECL wincache >= 1.0.0)

wincache_fcache_meminfo Retrieves information about file cache memory usage

Açıklama

array wincache_fcache_meminfo ( void )

Retrieves information about memory usage by file cache.

Dönen Değerler

Array of meta data about file cache memory usage başarısızlık durumunda FALSE döner

The array returned by this function contains the following elements:

  • memory_total - amount of memory in bytes allocated for the file cache
  • memory_free - amount of free memory in bytes available for the file cache
  • num_used_blks - number of memory blocks used by the file cache
  • num_free_blks - number of free memory blocks available for the file cache
  • memory_overhead - amount of memory in bytes used for the file cache internal structures

Örnekler

Örnek 1 A wincache_fcache_meminfo() example

<pre>
<?php
print_r
(wincache_fcache_meminfo());
?>
</pre>

Yukarıdaki örneğin çıktısı:

Array
(
    [memory_total] => 134217728
    [memory_free] => 131339120
    [num_used_blks] => 361
    [num_free_blks] => 3
    [memory_overhead] => 5856
)

Ayrıca Bakınız



wincache_ocache_fileinfo

(PECL wincache >= 1.0.0)

wincache_ocache_fileinfo Retrieves information about files cached in the opcode cache

Açıklama

array wincache_ocache_fileinfo ( void )

Retrieves information about opcode cache content and its usage.

Dönen Değerler

Array of meta data about opcode cache başarısızlık durumunda FALSE döner

The array returned by this function contains the following elements:

  • total_cache_uptime - total time in seconds that the opcode cache has been active
  • total_file_count - total number of files that are currently in the opcode cache
  • total_hit_count - number of times the compiled opcode have been served from the cache
  • total_miss_count - number of times the compiled opcode have not been found in the cache
  • file_entries - an array that contains the information about all the cached files:

    • file_name - absolute file name of the cached file
    • add_time - time in seconds since the file has been added to the opcode cache
    • use_time - time in seconds since the file has been accessed in the opcode cache
    • last_check - time in seconds since the file has been checked for modifications
    • hit_count - number of times the file has been served from the cache
    • function_count - number of functions in the cached file
    • class_count - number of classes in the cached file

Örnekler

Örnek 1 A wincache_ocache_fileinfo() example

<pre>
<?php
print_r
(wincache_ocache_fileinfo());
?>
</pre>

Yukarıdaki örneğin çıktısı:

Array
(
    [total_cache_uptime] => 17357
    [total_file_count] => 121
    [total_hit_count] => 36562
    [total_miss_count] => 201
    [file_entries] => Array
        (
            [1] => Array
                (
                    [file_name] => c:\inetpub\wwwroot\checkcache.php
                    [add_time] => 17356
                    [use_time] => 7
                    [last_check] => 10
                    [hit_count] => 454
                    [function_count] => 0
                    [class_count] => 1
                )
            [2] => Array (...iterates for each cached file)
        )
)

Ayrıca Bakınız



wincache_ocache_meminfo

(PECL wincache >= 1.0.0)

wincache_ocache_meminfo Retrieves information about opcode cache memory usage

Açıklama

array wincache_ocache_meminfo ( void )

Retrieves information about memory usage by opcode cache.

Dönen Değerler

Array of meta data about opcode cache memory usage başarısızlık durumunda FALSE döner

The array returned by this function contains the following elements:

  • memory_total - amount of memory in bytes allocated for the opcode cache
  • memory_free - amount of free memory in bytes available for the opcode cache
  • num_used_blks - number of memory blocks used by the opcode cache
  • num_free_blks - number of free memory blocks available for the opcode cache
  • memory_overhead - amount of memory in bytes used for the opcode cache internal structures

Örnekler

Örnek 1 A wincache_ocache_meminfo() example

<pre>
<?php
print_r
(wincache_ocache_meminfo());
?>
</pre>

Yukarıdaki örneğin çıktısı:

Array
(
    [memory_total] => 134217728
    [memory_free] => 112106972
    [num_used_blks] => 15469
    [num_free_blks] => 4
    [memory_overhead] => 247600
)

Ayrıca Bakınız



wincache_refresh_if_changed

(PECL wincache >= 1.0.0)

wincache_refresh_if_changed Refreshes the cache entries for the cached files

Açıklama

bool wincache_refresh_if_changed ([ array $files ] )

Refreshes the cache entries for the files, whose names were passed in the input argument. If no argument is specified then refreshes all the entries in the cache.

Değiştirgeler

files

An array of file names for files that need to be refreshed. An absolute or relative file paths can be used.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

WinCache performs regular checks on the cached files to ensure that if any file has changed then the corresponding entry in the cache is updated. By default this check is performed every 30 seconds. If, for example, a PHP script updates another PHP script where the application's configuration settings are stored, then it may happen that after the configuration settings have been saved to a file, the application is still using old settings for some time until the cache is refreshed. In those cases it may be preferrable to refresh the cache right after the file has been changed. The following example shows how this can be done.

Örnek 1 A wincache_refresh_if_changed() example

<?php 
$filename 
'C:\inetpub\wwwroot\config.php';
$handle fopen($filename'w+');
if (
$handle === FALSE) die('Failed to open file '.$filename.' for writing');
fwrite($handle'<?php $setting=something; ?>');
fclose($handle);
wincache_refresh_if_changed(array($filename));
?>

Ayrıca Bakınız



wincache_rplist_fileinfo

(PECL wincache >= 1.0.0)

wincache_rplist_fileinfo Retrieves information about relative file path cache

Açıklama

array wincache_rplist_fileinfo ( void )

Retrieves information about cached mappings between relative file paths and corresponding absolute file paths.

Dönen Değerler

Array of meta data about the relative file path cache başarısızlık durumunda FALSE döner

The array returned by this function contains the following elements:

  • total_file_count - total number of relative file path mappings stored in the cache
  • rplist_entries - an array that contains the information about all the cached relative file paths:

    • relative_path - relative path to a file
    • subkey_data - corresponding absolute path to a file

Örnekler

Örnek 1 A wincache_rplist_fileinfo() example

<pre>
<?php
print_r
(wincache_rplist_fileinfo());
?>
</pre>

Yukarıdaki örneğin çıktısı:

Array
(
    [total_file_count] => 5
    [rplist_entries] => Array
        (
            [1] => Array
                (
                    [relative_path] => checkcache.php
                    [subkey_data] => c:\inetpub\wwwroot|c:\inetpub\wwwroot\checkcache.php
                )

            [2] => Array (...iterates for each cached file)
        )
)

Ayrıca Bakınız



wincache_rplist_meminfo

(PECL wincache >= 1.0.0)

wincache_rplist_meminfo Retrieves information about memory usage by the relative file path cache

Açıklama

array wincache_rplist_meminfo ( void )

Retrieves information about memory usage by relative file path cache.

Dönen Değerler

Array of meta data that describes memory usage by relative file path cache. başarısızlık durumunda FALSE döner

The array returned by this function contains the following elements:

  • memory_total - amount of memory in bytes allocated for the relative file path cache
  • memory_free - amount of free memory in bytes available for the relative file path cache
  • num_used_blks - number of memory blocks used by the relative file path cache
  • num_free_blks - number of free memory blocks available for the relative file path cache
  • memory_overhead - amount of memory in bytes used for the internal structures of relative file path cache

Örnekler

Örnek 1 A wincache_rplist_meminfo() example

<pre>
<?php
print_r
(wincache_rplist_meminfo());
?>
</pre>

Yukarıdaki örneğin çıktısı:

Array
(
    [memory_total] => 9437184
    [memory_free] => 9416744
    [num_used_blks] => 23
    [num_free_blks] => 1
    [memory_overhead] => 416
)

Ayrıca Bakınız


İçindekiler



Building for Windows

İçindekiler


Prerequisites

Building WinCache extension will require:

  1. PHP source code
  2. PHP build environment
  3. WinCache source code

For completing first two steps, follow the step-by-step guide for how to » build PHP on Windows.

For getting the WinCache source code follow the instructions described in Downloading PECL extensions.



Compiling and building

The following steps describe how to compile and build WinCache on Windows OS:

  1. Open a command prompt which is used to build PHP

  2. Go to the root folder where PHP sources are present

  3. Run the command:

    cscript.exe win32\build\buildconf.js

  4. Run the command:

    configure.bat --help

    The output will contain a new flag --enable-wincache.

  5. Run the command:

    configure.js [all options used to build PHP] --enable-wincache

    --enable-wincache is the only extra option which is required to ensure that WinCache extension gets built properly. This option will build WinCache and will statically link it with PHP dll. To build WinCache extension as a stand-alone DLL use the option --enable-wincache=shared.

  6. Run the command:

    nmake



Verifying the build

The following steps describe how to verify that WinCache has been built correctly:

  1. Go to the folder where the PHP binaries are built

  2. Run the command:

    php.exe -n -d extension=php_wincache.dll -re wincache

    If WinCache has been built properly, the output of this command will list the INI directives and functions supported by WinCache.






Ses Biçemleme İşlemleri


ID3 Tags


Giriş

These functions let you read and manipulate ID3 tags. ID3 tags are used in MP3 files to store title of the song, as well as information about the artist, album, genre, year and track number.

Since version 0.2 it is also possible to extract text frames from ID3 v2.2+ tags.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

id3 is part of PECL and can be installed using the PEAR installer. To compile PHP with id3 support, download the sourcecode, put it in php-src/ext/id3 and compile PHP using --enable-id3.



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Predefined Constants

Most of the id3 functions either let you specify or return a tag version. In order to specify the version please use on of these constants.

ID3_V1_0 (integer)
ID3_V1_0 is used if you are working with ID3 V1.0 tags. These tags may contain the fields title, artist, album, genre, year and comment.
ID3_V1_1 (integer)
ID3_V1_1 is used if you are working with ID3 V1.1 tags. These tags may all information contained in v1.0 tags plus the track number.
ID3_V2_1 (integer)
ID3_V2_1 is used if you are working with ID3 V2.1 tags.
ID3_V2_2 (integer)
ID3_V2_2 is used if you are working with ID3 V2.2 tags.
ID3_V2_3 (integer)
ID3_V2_3 is used if you are working with ID3 V2.3 tags.
ID3_V2_4 (integer)
ID3_V2_4 is used if you are working with ID3 V2.4 tags.
ID3_BEST (integer)
ID3_BEST is used if would like to let the id3 functions determine which tag version should be used.



ID3 İşlevleri


id3_get_frame_long_name

(PECL id3 >= 0.2)

id3_get_frame_long_nameGet the long name of an ID3v2 frame

Açıklama

string id3_get_frame_long_name ( string $frameId )

id3_get_frame_long_name() returns the long name for an ID3v2 frame.

Değiştirgeler

frameId

An ID3v2 frame

Dönen Değerler

Returns the frame long name or FALSE on errors.

Örnekler

Örnek 1 id3_get_frame_long_name() example

<?php
$longName 
id3_get_frame_long_name("TOLY");
echo 
$longName;
?>

Yukarıdaki örneğin çıktısı:

Original lyricist(s)/text writer(s)

Ayrıca Bakınız



id3_get_frame_short_name

(PECL id3 >= 0.2)

id3_get_frame_short_nameGet the short name of an ID3v2 frame

Açıklama

string id3_get_frame_short_name ( string $frameId )

id3_get_frame_short_name() returns the short name for an ID3v2 frame.

Değiştirgeler

frameId

An ID3v2 frame

Dönen Değerler

Returns the frame short name or FALSE on errors.

The values returned by id3_get_frame_short_name() are used in the array returned by id3_get_tag().

Örnekler

Örnek 1 id3_get_frame_short_name() example

<?php
$shortName 
id3_get_frame_short_name("TOLY");
echo 
$shortName;
?>

Yukarıdaki örneğin çıktısı:

originalLyricist

Ayrıca Bakınız



id3_get_genre_id

(PECL id3 >= 0.1)

id3_get_genre_idGet the id for a genre

Açıklama

int id3_get_genre_id ( string $genre )

id3_get_genre_id() returns the id for a genre.

Değiştirgeler

genre

An integer ranging from 0 to 147

Dönen Değerler

The genre id or FALSE on errors.

Örnekler

Örnek 1 id3_get_genre_id() example

<?php
$id 
id3_get_genre_id("Alternative");
echo 
$id;
?>

Yukarıdaki örneğin çıktısı:

20

Ayrıca Bakınız



id3_get_genre_list

(PECL id3 >= 0.1)

id3_get_genre_listGet all possible genre values

Açıklama

array id3_get_genre_list ( void )

id3_get_genre_list() returns an array containing all possible genres that may be stored in an ID3 tag. This list has been created by Eric Kemp and later extended by WinAmp.

This function is useful to provide you users a list of genres from which they may choose one. When updating the ID3 tag you will always have to specify the genre as an integer ranging from 0 to 147.

Dönen Değerler

Returns an array containing all possible genres that may be stored in an ID3 tag.

Örnekler

Örnek 1 id3_get_genre_list() example

<?php
$genres 
id3_get_genre_list();
print_r($genres);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [0] => Blues
    [1] => Classic Rock
    [2] => Country
    [3] => Dance
    [4] => Disco
    [5] => Funk
    [6] => Grunge
    [7] => Hip-Hop
    [8] => Jazz
    [9] => Metal
    [10] => New Age
    [11] => Oldies
    [12] => Other
    [13] => Pop
    [14] => R&B
    [15] => Rap
    [16] => Reggae
    [17] => Rock
    [18] => Techno
    [19] => Industrial
    [20] => Alternative
    [21] => Ska
    [22] => Death Metal
    [23] => Pranks
    [24] => Soundtrack
    [25] => Euro-Techno
    [26] => Ambient
    [27] => Trip-Hop
    [28] => Vocal
    [29] => Jazz+Funk
    [30] => Fusion
    [31] => Trance
    [32] => Classical
    [33] => Instrumental
    [34] => Acid
    [35] => House
    [36] => Game
    [37] => Sound Clip
    [38] => Gospel
    [39] => Noise
    [40] => Alternative Rock
    [41] => Bass
    [42] => Soul
    [43] => Punk
    [44] => Space
    [45] => Meditative
    [46] => Instrumental Pop
    [47] => Instrumental Rock
    [48] => Ethnic
    [49] => Gothic
    [50] => Darkwave
    [51] => Techno-Industrial
    [52] => Electronic
    [53] => Pop-Folk
    [54] => Eurodance
    [55] => Dream
    [56] => Southern Rock
    [57] => Comedy
    [58] => Cult
    [59] => Gangsta
    [60] => Top 40
    [61] => Christian Rap
    [62] => Pop/Funk
    [63] => Jungle
    [64] => Native US
    [65] => Cabaret
    [66] => New Wave
    [67] => Psychadelic
    [68] => Rave
    [69] => Showtunes
    [70] => Trailer
    [71] => Lo-Fi
    [72] => Tribal
    [73] => Acid Punk
    [74] => Acid Jazz
    [75] => Polka
    [76] => Retro
    [77] => Musical
    [78] => Rock & Roll
    [79] => Hard Rock
    [80] => Folk
    [81] => Folk-Rock
    [82] => National Folk
    [83] => Swing
    [84] => Fast Fusion
    [85] => Bebob
    [86] => Latin
    [87] => Revival
    [88] => Celtic
    [89] => Bluegrass
    [90] => Avantgarde
    [91] => Gothic Rock
    [92] => Progressive Rock
    [93] => Psychedelic Rock
    [94] => Symphonic Rock
    [95] => Slow Rock
    [96] => Big Band
    [97] => Chorus
    [98] => Easy Listening
    [99] => Acoustic
    [100] => Humour
    [101] => Speech
    [102] => Chanson
    [103] => Opera
    [104] => Chamber Music
    [105] => Sonata
    [106] => Symphony
    [107] => Booty Bass
    [108] => Primus
    [109] => Porn Groove
    [110] => Satire
    [111] => Slow Jam
    [112] => Club
    [113] => Tango
    [114] => Samba
    [115] => Folklore
    [116] => Ballad
    [117] => Power Ballad
    [118] => Rhytmic Soul
    [119] => Freestyle
    [120] => Duet
    [121] => Punk Rock
    [122] => Drum Solo
    [123] => Acapella
    [124] => Euro-House
    [125] => Dance Hall
    [126] => Goa
    [127] => Drum & Bass
    [128] => Club-House
    [129] => Hardcore
    [130] => Terror
    [131] => Indie
    [132] => BritPop
    [133] => Negerpunk
    [134] => Polsk Punk
    [135] => Beat
    [136] => Christian Gangsta
    [137] => Heavy Metal
    [138] => Black Metal
    [139] => Crossover
    [140] => Contemporary C
    [141] => Christian Rock
    [142] => Merengue
    [143] => Salsa
    [144] => Thrash Metal
    [145] => Anime
    [146] => JPop
    [147] => SynthPop
)

Ayrıca Bakınız



id3_get_genre_name

(PECL id3 >= 0.1)

id3_get_genre_nameGet the name for a genre id

Açıklama

string id3_get_genre_name ( int $genre_id )

id3_get_genre_name() returns the name for a genre id.

Değiştirgeler

genre_id

An integer ranging from 0 to 147

Dönen Değerler

Returns the name as a string.

Örnekler

Örnek 1 id3_get_genre_name() example

<?php
$genre 
id3_get_genre_name(20);
echo 
$genre;
?>

Yukarıdaki örneğin çıktısı:

Alternative

Ayrıca Bakınız



id3_get_tag

(PECL id3 >= 0.1)

id3_get_tagGet all information stored in an ID3 tag

Açıklama

array id3_get_tag ( string $filename [, int $version = ID3_BEST ] )

id3_get_tag() is used to get all information stored in the id3 tag of the specified file.

Değiştirgeler

filename

The path to the MP3 file

Instead of a filename you may also pass a valid stream resource

version

Allows you to specify the version of the tag as MP3 files may contain both, version 1.x and version 2.x tags

Since version 0.2 id3_get_tag() also supports ID3 tags of version 2.2, 2.3 and 2.4. To extract information from these tags, pass one of the constants ID3_V2_2, ID3_V2_3 or ID3_V2_4 as the second parameter. ID3 v2.x tags can contain a lot more information about the MP3 file than ID3 v1.x tags.

Dönen Değerler

Returns an associative array with various keys like: title, artist, ..

The key genre will contain an integer between 0 and 147. You may use id3_get_genre_name() to convert it to a human readable string.

Örnekler

Örnek 1 id3_get_tag() example

<?php
$tag 
id3_get_tag"path/to/example.mp3" );
print_r($tag);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [title] => DN-38416
    [artist] => Re:\Legion
    [album] => Reflections
    [year] => 2004
    [genre] => 19
)

Örnek 2 id3_get_tag() example

<?php
$tag 
id3_get_tag"path/to/example2.mp3"ID3_V2_3 );
print_r($tag);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [copyright] => Dirty Mac
    [originalArtist] => Dirty Mac
    [composer] => Marcus Götze
    [artist] => Dirty Mac
    [title] => Little Big Man
    [album] => Demo-Tape
    [track] => 5/12
    [genre] => (17)Rock
    [year] => 2001
)

Ayrıca Bakınız



id3_get_version

(PECL id3 >= 0.1)

id3_get_versionGet version of an ID3 tag

Açıklama

int id3_get_version ( string $filename )

id3_get_version() retrieves the version(s) of the ID3 tag(s) in the MP3 file.

If a file contains an ID3 v1.1 tag, it always contains a 1.0 tag, as version 1.1 is just an extension of 1.0.

Değiştirgeler

filename

The path to the MP3 file

Instead of a filename you may also pass a valid stream resource

Dönen Değerler

Returns the version number of the ID3 tag of the file. As a tag can contain ID3 v1.x and v2.x tags, the return value of this function should be bitwise compared with the predefined constants ID3_V1_0, ID3_V1_1 and ID3_V2.

Örnekler

Örnek 1 id3_get_version() example

<?php
$version 
id3_get_version"path/to/example.mp3" );
if (
$version ID3_V1_0) {
    echo 
"Contains a 1.x tag\n";
}
if (
$version ID3_V1_1) {
    echo 
"Contains a 1.1 tag\n";
}
if (
$version ID3_V2) {
    echo 
"Contains a 2.x tag\n";
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Contains a 1.x tag
Contains a 1.1 tag

Ayrıca Bakınız



id3_remove_tag

(PECL id3 >= 0.1)

id3_remove_tagRemove an existing ID3 tag

Açıklama

bool id3_remove_tag ( string $filename [, int $version = ID3_V1_0 ] )

id3_remove_tag() is used to remove the information stored of an ID3 tag.

Değiştirgeler

filename

The path to the MP3 file

Instead of a filename you may also pass a valid stream resource

version

Allows you to specify the version of the tag as MP3 files may contain both, version 1.x and version 2.x tags.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 id3_remove_tag() example

<?php
$result 
id3_remove_tag"path/to/example.mp3"ID3_V1_0 );
if (
$result === true) {
    echo 
"Tag succesfully removed\n";
}
?>

If the file is writable and contained a 1.0 tag, this will output:

Tag succesfully removed

Notlar

Bilginize: Currently id3_remove_tag() only supports version 1.0 and 1.1. If you choose to remove a 1.0 tag and the file contains a 1.1 tag, this tag will be removed, as v1.1 is only an extension of 1.0.

Ayrıca Bakınız



id3_set_tag

(PECL id3 >= 0.1)

id3_set_tagUpdate information stored in an ID3 tag

Açıklama

bool id3_set_tag ( string $filename , array $tag [, int $version = ID3_V1_0 ] )

id3_set_tag() is used to change the information stored of an ID3 tag. If no tag has been present, it will be added to the file.

Değiştirgeler

filename

The path to the MP3 file

Instead of a filename you may also pass a valid stream resource

tag

An associative array of tag keys and values

The following keys may be used in the associative array:

Keys in the associative array
key possible value available in version
title string with maximum of 30 characters v1.0, v1.1
artist string with maximum of 30 characters v1.0, v1.1
album string with maximum of 30 characters v1.0, v1.1
year 4 digits v1.0, v1.1
genre integer value between 0 and 147 v1.0, v1.1
comment string with maximum of 30 characters (28 in v1.1) v1.0, v1.1
track integer between 0 and 255 v1.1

version

Allows you to specify the version of the tag as MP3 files may contain both, version 1.x and version 2.x tags

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 id3_set_tag() example

<?php
$data 
= array(
              
"title" => "Re:Start",
              
"artist" => "Re:\Legion",
              
"comment" => "A nice track"
             
);
$result id3_set_tag"path/to/example.mp3"$dataID3_V1_0 );
if (
$result === true) {
    echo 
"Tag succesfully updated\n";
}
?>

If the file is writable, this will output:

Tag succesfully updated

Notlar

Bilginize: Currently id3_remove_tag() only supports version 1.0 and 1.1.

Ayrıca Bakınız


İçindekiler




KTaglib


Giriş

KTaglib is an object oriented binding to the taglib library from the KDE project used in projects like Amarok to read and write ID3 and Ogg tags. The library also provides access to audio information. The bindings are designed usually follow the underlying C++ API, but were changed whenever there is a more PHP-like way.

Bilginize: At the moment ktaglib is able to read and write ID3v1 and ID3v2 tags.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

If you want to build ktaglib you need at least taglib 1.5 installed. To obtain the taglib see the » taglib project page. Windows DLL's are build static against taglib, therefore there is no need to have taglib installed.



Kurulum

KTaglib support in PHP is not enabled by default. You will need to configure PHP --with-ktaglib[=DIR]

Bilginize: KTaglib is part of PECL.




Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

KTaglib uses class constants. Most of the constants are mappings to the according Taglib enums and constants.

KTaglib_MPEG_Header::Version1 (integer)
ID3 version is 1.0
KTaglib_MPEG_Header::Version2 (integer)
ID3 version is 2.0
KTaglib_MPEG_Header::Version2_5 (integer)
ID3 version is 2.5
KTaglib_ID3v2_AttachedPictureFrame::Other (integer)
Picture type Other
KTaglib_ID3v2_AttachedPictureFrame::FileIcon (integer)
Picture type FileIcon
KTaglib_ID3v2_AttachedPictureFrame::OtherFileIcon (integer)
Picture type OtherFileIcon
KTaglib_ID3v2_AttachedPictureFrame::FrontCover (integer)
Picture type FrontCover
KTaglib_ID3v2_AttachedPictureFrame::BackCover (integer)
Picture type BackCover
KTaglib_ID3v2_AttachedPictureFrame::LeafletPage (integer)
Picture type LeafletPage
KTaglib_ID3v2_AttachedPictureFrame::Media (integer)
Picture type Media
KTaglib_ID3v2_AttachedPictureFrame::LeadArtist (integer)
Picture type LeadArtist
KTaglib_ID3v2_AttachedPictureFrame::Artist (integer)
Picture type Artist
KTaglib_ID3v2_AttachedPictureFrame::Conductor (integer)
Picture type Condutor
KTaglib_ID3v2_AttachedPictureFrame::Band (integer)
Picture type Band
KTaglib_ID3v2_AttachedPictureFrame::Composer (integer)
Picture type Composer
KTaglib_ID3v2_AttachedPictureFrame::Lyricist (integer)
Picture type Lyricist
KTaglib_ID3v2_AttachedPictureFrame::RecordingLocation (integer)
Picture type RecordingLocation
KTaglib_ID3v2_AttachedPictureFrame::DuringRecording (integer)
Picture type DuringRecording
KTaglib_ID3v2_AttachedPictureFrame::DuringPerformance (integer)
Picture type DuringPerformance
KTaglib_ID3v2_AttachedPictureFrame::MovieScreenCapture (integer)
Picture type MovieScreenCapture
KTaglib_ID3v2_AttachedPictureFrame::ColouredFish (integer)
Picture type ColouredFish
KTaglib_ID3v2_AttachedPictureFrame::Illustration (integer)
Picture type Illustration
KTaglib_ID3v2_AttachedPictureFrame::BandLogo (integer)
Picture type BandLogo


The KTagLib_MPEG_File class

Giriş

Represents an MPEG file. MPEG files can have ID3v1, ID3v2 tags and audio properties.

Class synopsis

KTagLib_MPEG_File
KTagLib_MPEG_File {
}

KTaglib_MPEG_File::__construct

(0.0.1)

KTaglib_MPEG_File::__constructOpens a new file

Açıklama

KTaglib_MPEG_File::__construct ( string $filename )

Opens a new MPEG file.

Değiştirgeler

filename

The file to read

Örnekler

Örnek 1 Opens a new MP3 file and read the title

<?php
$mpeg 
= new KTaglib_MPEG_File('example.mp3');
echo 
$mpeg->getID3v1Tag()->getTitle();
?>



KTaglib_MPEG_File::getAudioProperties

(0.0.1)

KTaglib_MPEG_File::getAudioPropertiesReturns an object that provides access to the audio properties

Açıklama

public KTaglib_MPEG_File: KTaglib_MPEG_File::getAudioProperties ( void )

Returns an object that provides access to the audio properties of the mpeg file.

Dönen Değerler

Returns an KTaglib_MPEG_AudioProperties object or false.



KTaglib_MPEG_File::getID3v1Tag

(0.0.1)

KTaglib_MPEG_File::getID3v1TagReturns an object representing an ID3v1 tag

Açıklama

public KTaglib_ID3v1_Tag KTaglib_MPEG_File::getID3v1Tag ([ bool $create = false ] )

Returns an object that represents an ID3v1 tag, which can be used to get information about the ID3v1 tag.

Dönen Değerler

Returns an KTaglib_MPEG_ID3v1Tag object or false if there is no ID3v1 tag.



KTaglib_MPEG_File::getID3v2Tag

(0.0.1)

KTaglib_MPEG_File::getID3v2TagReturns a ID3v2 object

Açıklama

public KTaglib_ID3v2_Tag KTaglib_MPEG_File::getID3v2Tag ([ bool $create = false ] )

Returns a ID3v2 object for the mpeg file. If no ID3v2 Tag is present, an KTaglib_TagNotFoundException is thrown.

Dönen Değerler

Returns the KTaglib_ID3v2_Tag object of the MPEG file or false if there is no ID3v2 tag


İçindekiler



The KTaglib_MPEG_AudioProperties class

Giriş

Represents the audio properties of a MPEG file, like length, bitrate or samplerate.

Class synopsis

KTaglib_MPEG_Audioproperties
KTaglib_MPEG_AudioProperties {
}

KTaglib_MPEG_AudioProperties::getBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getBitrateReturns the bitrate of the MPEG file

Açıklama

public int KTaglib_MPEG_AudioProperties::getBitrate ( void )

Returns the bitrate of the MPEG file

Dönen Değerler

Returns the bitrate as an integer



KTaglib_MPEG_AudioProperties::getChannels

(0.0.1)

KTaglib_MPEG_AudioProperties::getChannelsReturns the amount of channels of a MPEG file

Açıklama

public int KTaglib_MPEG_AudioProperties::getChannels ( void )

Returns the amount of channels of the MPEG file

Dönen Değerler

Returns the channel count as an integer



KTaglib_MPEG_AudioProperties::getLayer

(0.0.1)

KTaglib_MPEG_AudioProperties::getLayerReturns the layer of a MPEG file

Açıklama

public int KTaglib_MPEG_AudioProperties::getLayer ( void )

Returns the layer of the MPEG file (usually 3 for MP3).

Dönen Değerler

Returns the layer as an integer



KTaglib_MPEG_AudioProperties::getLength

(0.0.1)

KTaglib_MPEG_AudioProperties::getLengthReturns the length of a MPEG file

Açıklama

public int KTaglib_MPEG_AudioProperties::getLength ( void )

Returns the length of the MPEG file

Dönen Değerler

Returns the length as an integer



KTaglib_MPEG_AudioProperties::getSampleBitrate

(0.0.1)

KTaglib_MPEG_AudioProperties::getSampleBitrateReturns the sample bitrate of a MPEG file

Açıklama

public int KTaglib_MPEG_AudioProperties::getSampleBitrate ( void )

Returns the sample bitrate of the MPEG file

Dönen Değerler

Returns the sample bitrate as an integer



KTaglib_MPEG_AudioProperties::getVersion

(0.0.1)

KTaglib_MPEG_AudioProperties::getVersionReturns the version of a MPEG file

Açıklama

public int KTaglib_MPEG_AudioProperties::getVersion ( void )

Returns the version of the MPEG file header. The possible versions are defined in Tag_MPEG_Header (Version1, Version2, Version2.5).

Dönen Değerler

Returns the version



KTaglib_MPEG_AudioProperties::isCopyrighted

(0.0.1)

KTaglib_MPEG_AudioProperties::isCopyrightedReturns the length of a MPEG file

Açıklama

public bool KTaglib_MPEG_AudioProperties::isCopyrighted ( void )

Returns true if the MPEG file is copyrighted

Dönen Değerler

Returns true if the MPEG file is copyrighted



KTaglib_MPEG_AudioProperties::isOriginal

(0.0.1)

KTaglib_MPEG_AudioProperties::isOriginalReturns the length of a MPEG file

Açıklama

public bool KTaglib_MPEG_AudioProperties::isOriginal ( void )

Returns true if the file is marked as the original file

Dönen Değerler

Returns true if the file is marked as the original file



KTaglib_MPEG_AudioProperties::isProtectionEnabled

(0.0.1)

KTaglib_MPEG_AudioProperties::isProtectionEnabledReturns the length of a MPEG file

Açıklama

public bool KTaglib_MPEG_AudioProperties::isProtectionEnabled ( void )

Returns true if protection mechanism (like DRM) are enabled for this file

Dönen Değerler

Returns true if protection mechanism (like DRM) are enabled for this file


İçindekiler



The KTaglib_Tag class

Giriş

Base class for ID3v1 or ID3v2 tags

Class synopsis

KTaglib_Tag
KTaglib_Tag {
}

KTaglib_Tag::getAlbum

(0.0.1)

KTaglib_Tag::getAlbumReturns the title string from a ID3 tag

Açıklama

public string KTaglib_Tag::getAlbum ( void )

Returns the album string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns the album string



KTaglib_Tag::getArtist

(0.0.1)

KTaglib_Tag::getArtistReturns the artist string from a ID3 tag

Açıklama

public string KTaglib_Tag::getArtist ( void )

Returns the artist string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns the artist string



KTaglib_Tag::getComment

(0.0.1)

KTaglib_Tag::getCommentReturns the comment from a ID3 tag

Açıklama

public string KTaglib_Tag::getComment ( void )

Returns the comment of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns the comment string



KTaglib_Tag::getGenre

(0.0.1)

KTaglib_Tag::getGenreReturns the genre from a ID3 tag

Açıklama

public string KTaglib_Tag::getGenre ( void )

Returns the genre of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns the genre string



KTaglib_Tag::getTitle

(0.0.1)

KTaglib_Tag::getTitleReturns the title string from a ID3 tag

Açıklama

public string KTaglib_Tag::getTitle ( void )

Returns the title string of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns the title string



KTaglib_Tag::getTrack

(0.0.1)

KTaglib_Tag::getTrackReturns the track number from a ID3 tag

Açıklama

public int KTaglib_Tag::getTrack ( void )

Returns the track number of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns the track number as an integer



KTaglib_Tag::getYear

(0.0.1)

KTaglib_Tag::getYearReturns the year from a ID3 tag

Açıklama

public int KTaglib_Tag::getYear ( void )

Returns the year of an ID3 tag. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns the year as an integer



KTaglib_Tag::isEmpty

(0.0.1)

KTaglib_Tag::isEmptyReturns true if the tag is empty

Açıklama

public bool KTaglib_Tag::isEmpty ( void )

Returns true if the tag exists, but is empty. This method is implemented in ID3v1 and ID3v2 tags.

Dönen Değerler

Returns true if the tag is empty, otherwise false.


İçindekiler



The KTagLib_ID3v2_Tag class

Giriş

Represents and ID3v2 tag. It provides a list of ID3v2 frames and can be used to add and remove additional frames.

Class synopsis

KTagLib_ID3v2_Tag
extends KTagLib_Tag {
}

KTaglib_ID3v2_Tag::addFrame

(0.0.1)

KTaglib_ID3v2_Tag::addFrameAdd a frame to the ID3v2 tag

Açıklama

public bool KTaglib_ID3v2_Tag::addFrame ( KTagLib_ID3v2_Frame $frame )

Adds a frame to the ID3v2 tag. The frame must be a valid KTagLib_ID3v2_Frame object. To save the tag, the save function needs to be invoked.

Dönen Değerler

Returns true on success, otherwise false.



KTaglib_ID3v2_Tag::getFrameList

(0.0.1)

KTaglib_ID3v2_Tag::getFrameListReturns an array of ID3v2 frames, associated with the ID3v2 tag

Açıklama

public array KTaglib_ID3v2_Tag::getFrameList ( void )

Returns an array of ID3v2 frames, associated with the ID3v2 tag.

Dönen Değerler

Return an array of KTaglib_ID3v2_Frame objects


İçindekiler



The KTagLib_ID3v2_Frame class

Giriş

The base class for ID3v2 frames. ID3v2 tags are separated in various specialized frames. Some frames can exists multiple times.

Class synopsis

KTagLib_ID3v2_Frame
extends KTagLib_Tag {
}

KTaglib_ID3v2_Frame::getSize

(0.0.1)

KTaglib_ID3v2_Frame::getSizeReturns the size of the frame in bytes

Açıklama

public int KTaglib_ID3v2_Frame::getSize ( void )

Returns the size of the frame in bytes. Please refer to id3.org to see what ID3v2 frames are and how they are defined.

Dönen Değerler

Returns the size of the frame in bytes



KTaglib_ID3v2_Frame::__toString

(0.0.1)

KTaglib_ID3v2_Frame::__toStringReturns a string representation of the frame

Açıklama

public string KTaglib_ID3v2_Frame::__toString ( void )

Returns a string representation of the frame. This might be just the frame id, but might contain more information. Please see the ktaglib documentation for more information

Dönen Değerler

Returns a string representation of the frame.


İçindekiler



The KTaglib_ID3v2_AttachedPictureFrame class

Giriş

Represents an ID3v2 frame that can hold a picture.

Class synopsis

KTaglib_ID3v2_AttachedPictureFrame
extends KTagLib_ID3v2_Frame {
}

KTaglib_ID3v2_AttachedPictureFrame::getDescription

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::getDescriptionReturns a description for the picture in a picture frame

Açıklama

public string KTaglib_ID3v2_AttachedPictureFrame::getDescription ( void )

Returns the attached description for a picture frame in an ID3v2.x frame.

Dönen Değerler

Returns a description for the picture in a picture frame



KTaglib_ID3v2_AttachedPictureFrame::getMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getMimeTypeReturns the mime type of the picture

Açıklama

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( void )

Returns the mime type of the image represented by the attached picture frame.

Please notice that this method might return different types. While ID3v2.2 have a mime type that doesn't start with "image/", ID3v2.3 and v2.4 usually start with "image/". Therefore the method might return "image/png" for IDv2.3 frames and just "PNG" for ID3v2.2 frames.

Notice that even the frame is an attached picture, the mime type might not be set and therefore an empty string might be returned.

Dönen Değerler

Returns the mime type of the image represented by the attached picture frame.



KTaglib_ID3v2_AttachedPictureFrame::getType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::getTypeReturns the type of the image

Açıklama

public int KTaglib_ID3v2_AttachedPictureFrame::getType ( void )

Returns the type of the image.

The ID3v2 specification allows an AttachedPictureFrame to set the type of an image. This can be e.g. FrontCover or FileIcon. Please refer to the KTagLib_ID3v2_AttachedPictureFrame class description for a list of available types.

Dönen Değerler

Returns the integer representation of the type.



KTaglib_ID3v2_AttachedPictureFrame::savePicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::savePictureSaves the picture to a file

Açıklama

public bool KTaglib_ID3v2_AttachedPictureFrame::savePicture ( string $filename )

Saves the attached picture to the given filename.

Dönen Değerler

Returns true on success, otherwise false



KTaglib_ID3v2_AttachedPictureFrame::setMimeType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setMimeTypeSet's the mime type of the picture

Açıklama

public string KTaglib_ID3v2_AttachedPictureFrame::getMimeType ( string $type )

Sets the mime type of the image. This should in most cases be "image/png" or "image/jpeg".



KTaglib_ID3v2_AttachedPictureFrame::setPicture

(0.0.1)

KTaglib_ID3v2_AttachedPictureFrame::setPictureSets the frame picture to the given image

Açıklama

public void KTaglib_ID3v2_AttachedPictureFrame::setPicture ( string $filename )

Sets the picture to the give image. The image is loaded from the given filename. Please note that the picture is not saved unless you call the save method of the corresponding file object.

Dönen Değerler

Returns true on success, otherwise false



KTaglib_ID3v2_AttachedPictureFrame::setType

(0.2.0)

KTaglib_ID3v2_AttachedPictureFrame::setTypeSet the type of the image

Açıklama

public void KTaglib_ID3v2_AttachedPictureFrame::setType ( int $type )

Sets the type of the image. This can be e.g. FrontCover or FileIcon. Please refer to the KTaglib_ID3v2_AttachedPictureFrame class description for a list of available types and their constant mappings.


İçindekiler




OGG/Vorbis


Giriş

The OGG/Vorbis file format, as defined by » http://www.vorbis.com/, is a scheme for compressing audio streams by multiple factors with a minimum of quality loss. This extension adds Ogg Vorbis support to PHP's URL Wrappers. When used in read mode, compressed OGG/Vorbis data is expanded to raw PCM audio in one of six PCM encoding formats listed below.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

This extension requires PHP >= 4.3.0, » libogg >= 1.0, and » libvorbis >= 1.0.



Kurulum

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/oggvorbis



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

OGG/Vorbis supports PCM encodings in the following formats
Constant Definition
OGGVORBIS_PCM_U8 Unsigned 8-bit PCM.
OGGVORBIS_PCM_S8 Signed 8-bit PCM.
OGGVORBIS_PCM_U16_LE Unsigned 16-bit PCM. Little Endian byte order.
OGGVORBIS_PCM_U16_BE Unsigned 16-bit PCM. Big Endian byte order.
OGGVORBIS_PCM_S16_LE Signed 16-bit PCM. Little Endian byte order.
OGGVORBIS_PCM_S16_BE Signed 16-bit PCM. Big Endian byte order.


Context options

OGG/Vorbis tuning options
Option Definition Relevance Default
pcm_mode PCM byte encoding used. See constants below. Read / Write OGGVORBIS_PCM_S16_LE
rate PCM Sampling rate. Measured in Hz. Write only 44100
bitrate Vorbis Average Bitrate Encoding / Variable Bitrate Encoding. Measured in bps (ABR) or Quality level (VBR: 0.0 to 1.0). 128000 ABR is rough equal to 0.4 VBR. Write only 128000
channels Number of PCM channels. 1 == Mono, 2 == Stereo. Write only 2
serialno Serial Number of stream within file. Must be unique within file. Because of the potential to select a duplicate serial number within a chained file, make efforts to manually assign unique numbers when encoding. Write only Random
comments Associative array of file comments. Will be translated to strtoupper($name) . "=$value". Note: This context option is not available in oggvorbis-0.1 Write only array('ENCODER' => 'PHP/OggVorbis, http://pear.php.net/oggvorbis')


Örnekler

İçindekiler


Examples on using the ogg:// wrapper.

Örnek 1 Reading an OGG/Vorbis file

<?php
dl
("oggvorbis.so");

/* By default, ogg:// will decode to Signed 16-bit Little Endian */
$fp fopen('ogg://myaudio.ogg''r');

/* Collect some information about the file. */
$metadata stream_get_meta_data($fp);

/* Inspect the first song (usually the only song, 
   but OGG/Vorbis files may be chained) */
$songdata $metadata['wrapper_data'][0];

echo 
"OGG/Vorbis file encoded by: {$songdata['vendor']}\n.";
echo 
"  {$songdata['channels']} channels of {$songdata['rate']}Hz sampling encoded at {$songdata['bitrate_nominal']}bps.\n";
foreach(
$songdata['comments'] as $comment) {
    echo 
"  $comment\n";
}

while (
$audio_data fread($fp8192)) {
  
/* Do something with the PCM audio we're extracting from the OGG.
     Copying to /dev/dsp is a good target on linux systems, 
     just remember to setup the device for your sampling mode first. */
}

fclose($fp);

?>

Örnek 2 Encode an audio file to OGG/Vorbis

<?php
dl
('oggvorbis.so');

$context stream_context_create(array('ogg'=>array(
             
'pcm_mode' => OGGVORBIS_PCM_S8,  /* Signed 8bit audio */
             
'rate' => 44100,                 /* 44kHz CD quality */
             
'bitrate' => 0.5,                /* Midquality VBR */
             
'channels' => 1,                 /* Mono */
             
'serialno' => 12345)));          /* Unique within our stream */

/* Open file for appending.  This will "chain" a second OGG stream at the end of the first. */
$ogg fopen('ogg://mysong.ogg''a'false$context);

$pcm fopen('mysample.pcm''r');

/* Compress the raw PCM audio from mysample.pcm into mysong.ogg */
stream_copy_to_stream($pcm$ogg);

fclose($pcm);
fclose($ogg);
?>





OpenAL Audio Bindings


Giriş

Platform independent audio bindings. Requires the » OpenAL library.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu » PECL eklentisi PHP ile gelmez.

Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/openal.

Bu PECL eklentisi için bir DLL mevcut değildir. Ayrıca, Windows üzerinde kurulum bölümüne de bakınız.



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

This extension defines four resource types: Open AL(Device) - Returned by openal_device_open(), Open AL(Context) - Returned by openal_context_create(), Open AL(Buffer) - Returned by openal_buffer_create(), and Open AL(Source) - Returned by openal_source_create().




Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

ALC_FREQUENCY (integer)
Context Attribute
ALC_REFRESH (integer)
Context Attribute
ALC_SYNC (integer)
Context Attribute
AL_FREQUENCY (integer)
Buffer Setting
AL_BITS (integer)
Buffer Setting
AL_CHANNELS (integer)
Buffer Setting
AL_SIZE (integer)
Buffer Setting
AL_BUFFER (integer)
Source/Listener Setting (Integer)
AL_SOURCE_RELATIVE (integer)
Source/Listener Setting (Integer)
AL_SOURCE_STATE (integer)
Source/Listener Setting (Integer)
AL_PITCH (integer)
Source/Listener Setting (Float)
AL_GAIN (integer)
Source/Listener Setting (Float)
AL_MIN_GAIN (integer)
Source/Listener Setting (Float)
AL_MAX_GAIN (integer)
Source/Listener Setting (Float)
AL_MAX_DISTANCE (integer)
Source/Listener Setting (Float)
AL_ROLLOFF_FACTOR (integer)
Source/Listener Setting (Float)
AL_CONE_OUTER_GAIN (integer)
Source/Listener Setting (Float)
AL_CONE_INNER_ANGLE (integer)
Source/Listener Setting (Float)
AL_CONE_OUTER_ANGLE (integer)
Source/Listener Setting (Float)
AL_REFERENCE_DISTANCE (integer)
Source/Listener Setting (Float)
AL_POSITION (integer)
Source/Listener Setting (Float Vector)
AL_VELOCITY (integer)
Source/Listener Setting (Float Vector)
AL_DIRECTION (integer)
Source/Listener Setting (Float Vector)
AL_ORIENTATION (integer)
Source/Listener Setting (Float Vector)
AL_FORMAT_MONO8 (integer)
PCM Format
AL_FORMAT_MONO16 (integer)
PCM Format
AL_FORMAT_STEREO8 (integer)
PCM Format
AL_FORMAT_STEREO16 (integer)
PCM Format
AL_INITIAL (integer)
Source State
AL_PLAYING (integer)
Source State
AL_PAUSED (integer)
Source State
AL_STOPPED (integer)
Source State
AL_LOOPING (integer)
Source State
AL_TRUE (integer)
Boolean value recognized by OpenAL
AL_FALSE (integer)
Boolean value recognized by OpenAL


OpenAL İşlevleri


openal_buffer_create

(PECL openal >= 0.1.0)

openal_buffer_create Generate OpenAL buffer

Açıklama

resource openal_buffer_create ( void )

Dönen Değerler

Returns an Open AL(Buffer) resource on success or FALSE on failure.

Ayrıca Bakınız



openal_buffer_data

(PECL openal >= 0.1.0)

openal_buffer_data Load a buffer with data

Açıklama

bool openal_buffer_data ( resource $buffer , int $format , string $data , int $freq )

Değiştirgeler

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

format

Format of data , one of: AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 ve AL_FORMAT_STEREO16

data

Block of binary audio data in the format and freq specified.

freq

Frequency of data given in Hz.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_buffer_destroy

(PECL openal >= 0.1.0)

openal_buffer_destroy Destroys an OpenAL buffer

Açıklama

bool openal_buffer_destroy ( resource $buffer )

Değiştirgeler

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_buffer_get

(PECL openal >= 0.1.0)

openal_buffer_get Retrieve an OpenAL buffer property

Açıklama

int openal_buffer_get ( resource $buffer , int $property )

Değiştirgeler

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

property

Specific property, one of: AL_FREQUENCY, AL_BITS, AL_CHANNELS ve AL_SIZE.

Dönen Değerler

Returns an integer value appropriate to the property requested başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_buffer_loadwav

(PECL openal >= 0.1.0)

openal_buffer_loadwav Load a .wav file into a buffer

Açıklama

bool openal_buffer_loadwav ( resource $buffer , string $wavfile )

Değiştirgeler

buffer

An Open AL(Buffer) resource (previously created by openal_buffer_create()).

wavfile

Path to .wav file on local file system.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_context_create

(PECL openal >= 0.1.0)

openal_context_create Create an audio processing context

Açıklama

resource openal_context_create ( resource $device )

Değiştirgeler

device

An Open AL(Device) resource (previously created by openal_device_open()).

Dönen Değerler

Returns an Open AL(Context) resource on success or FALSE on failure.

Ayrıca Bakınız



openal_context_current

(PECL openal >= 0.1.0)

openal_context_current Make the specified context current

Açıklama

bool openal_context_current ( resource $context )

Değiştirgeler

context

An Open AL(Context) resource (previously created by openal_context_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_context_destroy

(PECL openal >= 0.1.0)

openal_context_destroy Destroys a context

Açıklama

bool openal_context_destroy ( resource $context )

Değiştirgeler

context

An Open AL(Context) resource (previously created by openal_context_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_context_process

(PECL openal >= 0.1.0)

openal_context_process Process the specified context

Açıklama

bool openal_context_process ( resource $context )

Değiştirgeler

context

An Open AL(Context) resource (previously created by openal_context_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_context_suspend

(PECL openal >= 0.1.0)

openal_context_suspend Suspend the specified context

Açıklama

bool openal_context_suspend ( resource $context )

Değiştirgeler

context

An Open AL(Context) resource (previously created by openal_context_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_device_close

(PECL openal >= 0.1.0)

openal_device_close Close an OpenAL device

Açıklama

bool openal_device_close ( resource $device )

Değiştirgeler

device

An Open AL(Device) resource (previously created by openal_device_open()) to be closed.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_device_open

(PECL openal >= 0.1.0)

openal_device_open Initialize the OpenAL audio layer

Açıklama

resource openal_device_open ([ string $device_desc ] )

Değiştirgeler

device_desc

Open an audio device optionally specified by device_desc . If device_desc is not specified the first available audio device will be used.

Dönen Değerler

Returns an Open AL(Device) resource on success or FALSE on failure.

Ayrıca Bakınız



openal_listener_get

(PECL openal >= 0.1.0)

openal_listener_get Retrieve a listener property

Açıklama

mixed openal_listener_get ( int $property )

Değiştirgeler

property

Property to retrieve, one of: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) ve AL_ORIENTATION (array(float,float,float)).

Dönen Değerler

Returns a float or array of floats (as appropriate) başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_listener_set

(PECL openal >= 0.1.0)

openal_listener_set Set a listener property

Açıklama

bool openal_listener_set ( int $property , mixed $setting )

Değiştirgeler

property

Property to set, one of: AL_GAIN (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)) ve AL_ORIENTATION (array(float,float,float)).

setting

Value to set, either float, or an array of floats as appropriate.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_source_create

(PECL openal >= 0.1.0)

openal_source_create Generate a source resource

Açıklama

resource openal_source_create ( void )

Dönen Değerler

Returns an Open AL(Source) resource on success or FALSE on failure.

Ayrıca Bakınız



openal_source_destroy

(PECL openal >= 0.1.0)

openal_source_destroy Destroy a source resource

Açıklama

bool openal_source_destroy ( resource $source )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_source_get

(PECL openal >= 0.1.0)

openal_source_get Retrieve an OpenAL source property

Açıklama

mixed openal_source_get ( resource $source , int $property )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

property

Property to get, one of: AL_SOURCE_RELATIVE (int), AL_SOURCE_STATE (int), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

Dönen Değerler

Returns the type associated with the property being retrieved başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_source_pause

(PECL openal >= 0.1.0)

openal_source_pause Pause the source

Açıklama

bool openal_source_pause ( resource $source )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_source_play

(PECL openal >= 0.1.0)

openal_source_play Start playing the source

Açıklama

bool openal_source_play ( resource $source )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_source_rewind

(PECL openal >= 0.1.0)

openal_source_rewind Rewind the source

Açıklama

bool openal_source_rewind ( resource $source )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_source_set

(PECL openal >= 0.1.0)

openal_source_set Set source property

Açıklama

bool openal_source_set ( resource $source , int $property , mixed $setting )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

property

Property to set, one of: AL_BUFFER (OpenAL(Source)), AL_LOOPING (bool), AL_SOURCE_RELATIVE (int), AL_SOURCE_STATE (int), AL_PITCH (float), AL_GAIN (float), AL_MIN_GAIN (float), AL_MAX_GAIN (float), AL_MAX_DISTANCE (float), AL_ROLLOFF_FACTOR (float), AL_CONE_OUTER_GAIN (float), AL_CONE_INNER_ANGLE (float), AL_CONE_OUTER_ANGLE (float), AL_REFERENCE_DISTANCE (float), AL_POSITION (array(float,float,float)), AL_VELOCITY (array(float,float,float)), AL_DIRECTION (array(float,float,float)).

setting

Value to assign to specified property . Refer to the description of property for a description of the value(s) expected.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_source_stop

(PECL openal >= 0.1.0)

openal_source_stop Stop playing the source

Açıklama

bool openal_source_stop ( resource $source )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



openal_stream

(PECL openal >= 0.1.0)

openal_stream Begin streaming on a source

Açıklama

resource openal_stream ( resource $source , int $format , int $rate )

Değiştirgeler

source

An Open AL(Source) resource (previously created by openal_source_create()).

format

Format of data , one of: AL_FORMAT_MONO8, AL_FORMAT_MONO16, AL_FORMAT_STEREO8 ve AL_FORMAT_STEREO16

rate

Frequency of data to stream given in Hz.

Dönen Değerler

Returns a stream resource on success başarısızlık durumunda FALSE döner.

Ayrıca Bakınız


İçindekiler





Kimlik Doğrulama Hizmetleri


Kerberos V


Giriş

These package allows you to access Kerberos V administration servers. You can create, modify, and delete Kerberos V principals and policies.

More information about Kerberos can be found at » http://web.mit.edu/kerberos/www/.

Documentation for Kerberos and KADM5 can be found at » http://web.mit.edu/kerberos/www/krb5-1.2/krb5-1.2.8/doc/admin_toc.html.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

These functions allow you to access Kerberos administration servers. In order to have these functions available, you must compile PHP with KADM5 support by using the --with-kadm5 configurable option. If you use this option without specifying the path to KADM5, PHP will use the built-in KADM5 client libraries. Users who run other applications that use KADM5 (for example, running PHP 4 and PHP 5 as concurrent apache modules, or auth-kadm5) should always specify the path to KADM5: --with-kadm5=/path/to/kadm5. This will force PHP to use the client libraries installed by KADM5, avoiding any conflicts.



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

This extension defines a KADM5 handle returned by kadm5_init_with_password().




Öntanımlı Sabitler

İçindekiler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.


Constants for Attribute Flags

The functions kadm5_create_principal(), kadm5_modify_principal(), and kadm5_modify_principal() allow to specify special attributes using a bitfield. The symbols are defined below:

Attributes for use by the KDC
constant
KRB5_KDB_DISALLOW_POSTDATED
KRB5_KDB_DISALLOW_FORWARDABLE
KRB5_KDB_DISALLOW_TGT_BASED
KRB5_KDB_DISALLOW_RENEWABLE
KRB5_KDB_DISALLOW_PROXIABLE
KRB5_KDB_DISALLOW_DUP_SKEY
KRB5_KDB_DISALLOW_ALL_TIX
KRB5_KDB_REQUIRES_PRE_AUTH
KRB5_KDB_REQUIRES_HW_AUTH
KRB5_KDB_REQUIRES_PWCHANGE
KRB5_KDB_DISALLOW_SVR
KRB5_KDB_PWCHANGE_SERVER
KRB5_KDB_SUPPORT_DESMD5
KRB5_KDB_NEW_PRINC



Constants for Options

The functions kadm5_create_principal(), kadm5_modify_principal(), and kadm5_get_principal() allow to specify or return principal's options as an associative array. The keys for the associative array are defined as string constants below:

Options for creating/modifying/retrieving principals
constant funcdef description
KADM5_PRINCIPAL long The expire time of the princial as a Kerberos timestamp.
KADM5_PRINC_EXPIRE_TIME long The expire time of the princial as a Kerberos timestamp.
KADM5_LAST_PW_CHANGE long The time this principal's password was last changed.
KADM5_PW_EXPIRATION long The expire time of the principal's current password, as a Kerberos timestamp.
KADM5_MAX_LIFE long The maximum lifetime of any Kerberos ticket issued to this principal.
KADM5_MAX_RLIFE long The maximum renewable lifetime of any Kerberos ticket issued to or for this principal.
KADM5_MOD_NAME string The name of the Kerberos principal that most recently modified this principal.
KADM5_MOD_TIME long The time this principal was last modified, as a Kerberos timestamp.
KADM5_KVNO long The version of the principal's current key.
KADM5_POLICY string The name of the policy controlling this principal.
KADM5_CLEARPOLICY long Standard procedure is to assign the 'default' policy to new principals. KADM5_CLEARPOLICY suppresses this behaviour.
KADM5_LAST_SUCCESS long The KDC time of the last successfull AS_REQ.
KADM5_LAST_FAILED long The KDC time of the last failed AS_REQ.
KADM5_FAIL_AUTH_COUNT long The number of consecutive failed AS_REQs.
KADM5_RANDKEY long Generates a random password for the principal. The parameter password will be ignored.
KADM5_ATTRIBUTES long A bitfield of attributes for use by the KDC.




Örnekler

İçindekiler


This simple example shows how to connect, query, print resulting principals and disconnect from a KADM5 database.

Örnek 1 KADM5 extension overview example

<?php

  $handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

  print 
"<h1>get_principals</h1>\n";
  
$principals kadm5_get_principals($handle);
  for( 
$i=0$i<count($principals); $i++)
      print 
"$principals[$i]<br>\n";

  print 
"<h1>get_policies</h1>\n";
  
$policies kadm5_get_policies($handle);
  for( 
$i=0$i<count($policies); $i++)
      print 
"$policies[$i]<br>\n";

  print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

  
$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );
  
$keys array_keys($options);
  for( 
$i=0$i<count($keys); $i++) {
    
$value $options[$keys[$i]];
    print 
"$keys[$i]$value<br>\n";
  }

  
$options = array(KADM5_PRINC_EXPIRE_TIME => 0);
  
kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

  
kadm5_destroy($handle);
?>




KADM5 İşlevleri


kadm5_chpass_principal

(PECL kadm5 >= 0.2.3)

kadm5_chpass_principalChanges the principal's password

Açıklama

bool kadm5_chpass_principal ( resource $handle , string $principal , string $password )

kadm5_chpass_principal() sets the new password password for the principal .

Değiştirgeler

handle

A KADM5 handle.

principal

The principal.

password

The new password.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 Example of changing principal's password

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_chpass_principal($handle"burbach@GONICUS.LOCAL""newpassword");

kadm5_destroy($handle);
?>



kadm5_create_principal

(PECL kadm5 >= 0.2.3)

kadm5_create_principalCreates a kerberos principal with the given parameters

Açıklama

bool kadm5_create_principal ( resource $handle , string $principal [, string $password [, array $options ]] )

Creates a principal with the given password .

Değiştirgeler

handle

A KADM5 handle.

principal

The principal.

password

If password is omitted or is NULL, a random key will be generated.

options

It is possible to specify several optional parameters within the array options . Allowed are the following options: KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 Example of principal's creation

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Ayrıca Bakınız



kadm5_delete_principal

(PECL kadm5 >= 0.2.3)

kadm5_delete_principalDeletes a kerberos principal

Açıklama

bool kadm5_delete_principal ( resource $handle , string $principal )

Removes the principal from the Kerberos database.

Değiştirgeler

handle

A KADM5 handle.

principal

The removed principal.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 kadm5_delete_principal() example

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

kadm5_delete_principal($handle"burbach@GONICUS.LOCAL");

kadm5_destroy($handle);
?>

Ayrıca Bakınız



kadm5_destroy

(PECL kadm5 >= 0.2.3)

kadm5_destroyCloses the connection to the admin server and releases all related resources

Açıklama

bool kadm5_destroy ( resource $handle )

Closes the connection to the admin server and releases all related resources.

Değiştirgeler

handle

A KADM5 handle.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



kadm5_flush

(PECL kadm5 >= 0.2.3)

kadm5_flushFlush all changes to the Kerberos database

Açıklama

bool kadm5_flush ( resource $handle )

Flush all changes to the Kerberos database, leaving the connection to the Kerberos admin server open.

Değiştirgeler

handle

A KADM5 handle.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.



kadm5_get_policies

(PECL kadm5 >= 0.2.3)

kadm5_get_policiesGets all policies from the Kerberos database

Açıklama

array kadm5_get_policies ( resource $handle )

Gets an array containing the policies's names.

Değiştirgeler

handle

A KADM5 handle.

Dönen Değerler

Returns array of policies on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 kadm5_get_policies() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_policies</h1>\n";
foreach (
kadm5_get_policies($handle) as $policy) {
    echo 
"$policy<br />\n";
}

kadm5_destroy($handle);
?>



kadm5_get_principal

(PECL kadm5 >= 0.2.3)

kadm5_get_principalGets the principal's entries from the Kerberos database

Açıklama

array kadm5_get_principal ( resource $handle , string $principal )

Gets the principal's entries from the Kerberos database.

Değiştirgeler

handle

A KADM5 handle.

principal

The principal.

Dönen Değerler

Returns array of options containing the following keys: KADM5_PRINCIPAL, KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_MOD_NAME, KADM5_MOD_TIME, KADM5_KVNO, KADM5_POLICY, KADM5_MAX_RLIFE, KADM5_LAST_SUCCESS, KADM5_LAST_FAILED, KADM5_FAIL_AUTH_COUNT on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 kadm5_get_principal() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principal burbach@GONICUS.LOCAL</h1>\n";

$options kadm5_get_principal($handle"burbach@GONICUS.LOCAL" );

foreach (
$options as $key => $value) {
    echo 
"$key$value<br />\n";
}

kadm5_destroy($handle);
?>

Ayrıca Bakınız



kadm5_get_principals

(PECL kadm5 >= 0.2.3)

kadm5_get_principalsGets all principals from the Kerberos database

Açıklama

array kadm5_get_principals ( resource $handle )

kadm5_get_principals() returns an array containing the principals's names.

Değiştirgeler

handle

A KADM5 handle.

Dönen Değerler

Returns array of principals on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 kadm5_get_principals() example

<?php
$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

print 
"<h1>get_principals</h1>\n";
foreach (
kadm5_get_principals($handle) as $principal) {
    echo 
"$principal<br />\n";
}

kadm5_destroy($handle);
?>

Ayrıca Bakınız



kadm5_init_with_password

(PECL kadm5 >= 0.2.3)

kadm5_init_with_passwordOpens a connection to the KADM5 library

Açıklama

resource kadm5_init_with_password ( string $admin_server , string $realm , string $principal , string $password )

Opens a connection with the KADM5 library using the principal and the given password to obtain initial credentials from the admin_server .

Değiştirgeler

admin_server

The server.

realm

Defines the authentication domain for the connection.

principal

The principal.

password

If password is omitted or is NULL, a random key will be generated.

Dönen Değerler

Returns a KADM5 handle on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 KADM5 initialization example

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH KRB5_KDB_DISALLOW_PROXIABLE;
$options = array(KADM5_PRINC_EXPIRE_TIME => 0,
                 
KADM5_POLICY => "default",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_create_principal($handle"burbach@GONICUS.LOCAL""password"$options);

kadm5_destroy($handle);
?>

Notlar

Bilginize: Connection should be closed after use with kadm5_destroy().

Ayrıca Bakınız

  • kadm5_destroy() - Closes the connection to the admin server and releases all related resources



kadm5_modify_principal

(PECL kadm5 >= 0.2.3)

kadm5_modify_principalModifies a kerberos principal with the given parameters

Açıklama

bool kadm5_modify_principal ( resource $handle , string $principal , array $options )

Modifies a principal according to the given options .

Değiştirgeler

handle

A KADM5 handle.

principal

The principal.

options

It is possible to specify several optional parameters within the array options . Allowed are the following options: KADM5_PRINC_EXPIRE_TIME, KADM5_PW_EXPIRATION, KADM5_ATTRIBUTES, KADM5_MAX_LIFE, KADM5_KVNO, KADM5_POLICY, KADM5_CLEARPOLICY, KADM5_MAX_RLIFE. KADM5_FAIL_AUTH_COUNT.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 Example of modifying principal

<?php

$handle 
kadm5_init_with_password("afs-1""GONICUS.LOCAL""admin/admin""password");

$attributes KRB5_KDB_REQUIRES_PRE_AUTH;
$options = array(KADM5_PRINC_EXPIRE_TIME => 3451234,
                 
KADM5_POLICY => "gonicus",
                 
KADM5_ATTRIBUTES => $attributes);

kadm5_modify_principal($handle"burbach@GONICUS.LOCAL"$options);

kadm5_destroy($handle);
?>

Ayrıca Bakınız


İçindekiler




Radius


Giriş

This package is based on the libradius (Remote Authentication Dial In User Service) of FreeBSD. It allows clients to perform authentication and accounting by means of network requests to remote servers.

This PECL extension adds full support for Radius Authentication (» RFC 2865) and Radius Accounting (» RFC 2866). This package is available for Unix (tested on FreeBSD and Linux) and for Windows.

Bilginize: An exact description for libradius can be found » here. A detailed description of the configuration file can be found » here.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Howto install the package?

  • untar the package (usually into php4/ext)
  • rename radius-x.x to radius
  • run ./buildconf in php4
  • run ./configure --enable-radius
  • make; make install

or if you would like to have it as .so:

  • untar the package
  • run phpize in the radius-x.x directory
  • run ./configure in the radius-x.x directory
  • make; make install

For Windows I recommend to use the php_radius.dll from » http://snaps.php.net/. Bu PECL eklentisi için bir DLL mevcut değildir. Ayrıca, Windows üzerinde kurulum bölümüne de bakınız.



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

RADIUS_ACCESS_REQUEST ()
Authentication Request
RADIUS_ACCESS_ACCEPT ()
Access accepted
RADIUS_ACCESS_REJECT ()
Access rejected
RADIUS_ACCOUNTING_REQUEST ()
Accounting request
RADIUS_ACCOUNTING_RESPONSE ()
Accounting response
RADIUS_ACCESS_CHALLENGE ()
Accsess challenge
RADIUS_USER_NAME (string)
Username
RADIUS_USER_PASSWORD (string)
Password
RADIUS_CHAP_PASSWORD (string)
Chap Password: chappass = md5(ident + plaintextpass + challenge)
RADIUS_NAS_IP_ADDRESS (string)
NAS IP-Adress
RADIUS_NAS_PORT (int)
NAS Port
RADIUS_SERVICE_TYPE (int)

Type of Service, one of:

  • RADIUS_LOGIN
  • RADIUS_FRAMED
  • RADIUS_CALLBACK_LOGIN
  • RADIUS_CALLBACK_FRAMED
  • RADIUS_OUTBOUND
  • RADIUS_ADMINISTRATIVE
  • RADIUS_NAS_PROMPT
  • RADIUS_AUTHENTICATE_ONLY
  • RADIUS_CALLBACK_NAS_PROMPT

RADIUS_FRAMED_PROTOCOL (int)

Framed Protocol, one of:

  • RADIUS_PPP
  • RADIUS_SLIP
  • RADIUS_ARAP
  • RADIUS_GANDALF
  • RADIUS_XYLOGICS

RADIUS_FRAMED_IP_ADDRESS (string)
IP-Address
RADIUS_FRAMED_IP_NETMASK (string)
Netmask
RADIUS_FRAMED_ROUTING (int)
Routing
RADIUS_FILTER_ID (string)
Filter ID
RADIUS_FRAMED_MTU (int)
MTU
RADIUS_FRAMED_COMPRESSION (int)

Compression, one of:

  • RADIUS_COMP_NONE
  • RADIUS_COMP_VJ
  • RADIUS_COMP_IPXHDR

RADIUS_LOGIN_IP_HOST (string)
Login IP Host
RADIUS_LOGIN_SERVICE (int)
Login Service
RADIUS_LOGIN_TCP_PORT (int)
Login TCP Port
RADIUS_REPLY_MESSAGE (string)
Reply Message
RADIUS_CALLBACK_NUMBER (string)
Callback Number
RADIUS_CALLBACK_ID (string)
Callback ID
RADIUS_FRAMED_ROUTE (string)
Framed Route
RADIUS_FRAMED_IPX_NETWORK (string)
Framed IPX Network
RADIUS_STATE (string)
State
RADIUS_CLASS (int)
Class
RADIUS_VENDOR_SPECIFIC (int)
Vendor specific attribute
RADIUS_SESSION_TIMEOUT (int)
Session timeout
RADIUS_IDLE_TIMEOUT (int)
Idle timeout
RADIUS_TERMINATION_ACTION (int)
Termination action
RADIUS_CALLED_STATION_ID (int)
Called Station Id
RADIUS_CALLING_STATION_ID (string)
Calling Station Id
RADIUS_NAS_IDENTIFIER (int)
NAS ID
RADIUS_PROXY_STATE (int)
Proxy State
RADIUS_LOGIN_LAT_SERVICE (int)
Login LAT Service
RADIUS_LOGIN_LAT_NODE (int)
Login LAT Node
RADIUS_LOGIN_LAT_GROUP (int)
Login LAT Group
RADIUS_FRAMED_APPLETALK_LINK (int)
Framed Appletalk Link
RADIUS_FRAMED_APPLETALK_NETWORK (int)
Framed Appletalk Network
RADIUS_FRAMED_APPLETALK_ZONE (int)
Framed Appletalk Zone
RADIUS_CHAP_CHALLENGE (string)
Challenge
RADIUS_NAS_PORT_TYPE (int)

NAS port type, one of:

  • RADIUS_ASYNC
  • RADIUS_SYNC
  • RADIUS_ISDN_SYNC
  • RADIUS_ISDN_ASYNC_V120
  • RADIUS_ISDN_ASYNC_V110
  • RADIUS_VIRTUAL
  • RADIUS_PIAFS
  • RADIUS_HDLC_CLEAR_CHANNEL
  • RADIUS_X_25
  • RADIUS_X_75
  • RADIUS_G_3_FAX
  • RADIUS_SDSL
  • RADIUS_ADSL_CAP
  • RADIUS_ADSL_DMT
  • RADIUS_IDSL
  • RADIUS_ETHERNET
  • RADIUS_XDSL
  • RADIUS_CABLE
  • RADIUS_WIRELESS_OTHER
  • RADIUS_WIRELESS_IEEE_802_11

RADIUS_PORT_LIMIT (int)
Port Limit
RADIUS_LOGIN_LAT_PORT (int)
Login LAT Port
RADIUS_CONNECT_INFO (string)
Connect info
RADIUS_ACCT_STATUS_TYPE (int)

Accounting status type, one of:

  • RADIUS_START
  • RADIUS_STOP
  • RADIUS_ACCOUNTING_ON
  • RADIUS_ACCOUNTING_OFF

RADIUS_ACCT_DELAY_TIME (int)
Accounting delay time
RADIUS_ACCT_INPUT_OCTETS (int)
Accounting input bytes
RADIUS_ACCT_OUTPUT_OCTETS (int)
Accounting output bytes
RADIUS_ACCT_SESSION_ID (int)
Accounting session ID
RADIUS_ACCT_AUTHENTIC (int)

Accounting authentic, one of:

  • RADIUS_AUTH_RADIUS
  • RADIUS_AUTH_LOCAL
  • RADIUS_AUTH_REMOTE

RADIUS_ACCT_SESSION_TIME (int)
Accounting session time
RADIUS_ACCT_INPUT_PACKETS (int)
Accounting input packets
RADIUS_ACCT_OUTPUT_PACKETS (int)
Accounting output packets
RADIUS_ACCT_TERMINATE_CAUSE (int)

Accounting terminate cause, one of:

  • RADIUS_TERM_USER_REQUEST
  • RADIUS_TERM_LOST_CARRIER
  • RADIUS_TERM_LOST_SERVICE
  • RADIUS_TERM_IDLE_TIMEOUT
  • RADIUS_TERM_SESSION_TIMEOUT
  • RADIUS_TERM_ADMIN_RESET
  • RADIUS_TERM_ADMIN_REBOOT
  • RADIUS_TERM_PORT_ERROR
  • RADIUS_TERM_NAS_ERROR
  • RADIUS_TERM_NAS_REQUEST
  • RADIUS_TERM_NAS_REBOOT
  • RADIUS_TERM_PORT_UNNEEDED
  • RADIUS_TERM_PORT_PREEMPTED
  • RADIUS_TERM_PORT_SUSPENDED
  • RADIUS_TERM_SERVICE_UNAVAILABLE
  • RADIUS_TERM_CALLBACK
  • RADIUS_TERM_USER_ERROR
  • RADIUS_TERM_HOST_REQUEST

RADIUS_ACCT_MULTI_SESSION_ID (string)
Accounting multi session ID
RADIUS_ACCT_LINK_COUNT (int)
Accounting link count
RADIUS_VENDOR_MICROSOFT (int)

Microsoft specific vendor attributes (» RFC 2548), one of:

  • RADIUS_MICROSOFT_MS_CHAP_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP_ERROR
  • RADIUS_MICROSOFT_MS_CHAP_PW_1
  • RADIUS_MICROSOFT_MS_CHAP_PW_2
  • RADIUS_MICROSOFT_MS_CHAP_LM_ENC_PW
  • RADIUS_MICROSOFT_MS_CHAP_NT_ENC_PW
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_POLICY
  • RADIUS_MICROSOFT_MS_MPPE_ENCRYPTION_TYPES
  • RADIUS_MICROSOFT_MS_RAS_VENDOR
  • RADIUS_MICROSOFT_MS_CHAP_DOMAIN
  • RADIUS_MICROSOFT_MS_CHAP_CHALLENGE
  • RADIUS_MICROSOFT_MS_CHAP_MPPE_KEYS
  • RADIUS_MICROSOFT_MS_BAP_USAGE
  • RADIUS_MICROSOFT_MS_LINK_UTILIZATION_THRESHOLD
  • RADIUS_MICROSOFT_MS_LINK_DROP_TIME_LIMIT
  • RADIUS_MICROSOFT_MS_MPPE_SEND_KEY
  • RADIUS_MICROSOFT_MS_MPPE_RECV_KEY
  • RADIUS_MICROSOFT_MS_RAS_VERSION
  • RADIUS_MICROSOFT_MS_OLD_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_NEW_ARAP_PASSWORD
  • RADIUS_MICROSOFT_MS_ARAP_PASSWORD_CHANGE_REASON
  • RADIUS_MICROSOFT_MS_FILTER
  • RADIUS_MICROSOFT_MS_ACCT_AUTH_TYPE
  • RADIUS_MICROSOFT_MS_ACCT_EAP_TYPE
  • RADIUS_MICROSOFT_MS_CHAP2_RESPONSE
  • RADIUS_MICROSOFT_MS_CHAP2_SUCCESS
  • RADIUS_MICROSOFT_MS_CHAP2_PW
  • RADIUS_MICROSOFT_MS_PRIMARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_DNS_SERVER
  • RADIUS_MICROSOFT_MS_PRIMARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_SECONDARY_NBNS_SERVER
  • RADIUS_MICROSOFT_MS_ARAP_CHALLENGE



Örnekler

Howto start?

  • get a radius resource
  • configure the library
  • create the request
  • put attributes
  • send the request
  • receive attributes
  • close the radius resource (optional)

Take also a look at the examples in this package.

The package contains an example php script. This script demonstrates howto authenticate with radius using PAP or CHAP (md5). If you authenticate with Microsoft Radius servers then its not possible to use CHAP (md5). If you would like to authenticate with Microsoft Servers you have to use MS-CHAPv1 or MS-CHAPv2, but its more complicated, because you need md4, sha1 and des to generate the right data. The enclosed examples demonstrate all authentication-methods, including MS-CHAPv1 and MS-CHAPv2. To get the MS-CHAP to work you need the mcrypt and the mhash extension, starting with version 1.2 of the package, the mcrypt extension is no longer needed.



Radius İşlevleri

Contact Information

If you have comments, bugfixes, enhancements or want to help to develop this you can send me a mail at » mbretter@php.net.


radius_acct_open

(PECL radius >= 1.1.0)

radius_acct_openCreates a Radius handle for accounting

Açıklama

resource radius_acct_open ( void )

Dönen Değerler

Returns a handle on success, FALSE on error. This function only fails if insufficient memory is available.

Örnekler

Örnek 1 radius_acct_open() example

<?php
$res 
radius_acct_open ()
    or die (
"Could not create handle");
print(
"Handle successfully created");
?>



radius_add_server

(PECL radius >= 1.1.0)

radius_add_serverAdds a server

Açıklama

bool radius_add_server ( resource $radius_handle , string $hostname , int $port , string $secret , int $timeout , int $max_tries )

radius_add_server() may be called multiple times, and it may be used together with radius_config(). At most 10 servers may be specified. When multiple servers are given, they are tried in round-robin fashion until a valid response is received, or until each server's max_tries limit has been reached.

Değiştirgeler

radius_handle

hostname

The hostname parameter specifies the server host, either as a fully qualified domain name or as a dotted-quad IP address in text form.

port

The port specifies the UDP port to contact on the server. If port is given as 0, the library looks up the radius/udp or radacct/udp service in the network services database, and uses the port found there. If no entry is found, the library uses the standard Radius ports, 1812 for authentication and 1813 for accounting.

secret

The shared secret for the server host is passed to the secret parameter. The Radius protocol ignores all but the leading 128 bytes of the shared secret.

timeout

The timeout for receiving replies from the server is passed to the timeout parameter, in units of seconds.

max_tries

The maximum number of repeated requests to make before giving up is passed into the max_tries .

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 radius_add_server() example

<?php
if (!radius_add_server($res'radius.example.com'1812'testing123'33)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br>";
    exit;
}
?>

Ayrıca Bakınız

  • radius_config() - Causes the library to read the given configuration file



radius_auth_open

(PECL radius >= 1.1.0)

radius_auth_openCreates a Radius handle for authentication

Açıklama

resource radius_auth_open ( void )

Dönen Değerler

Returns a handle on success, FALSE on error. This function only fails if insufficient memory is available.

Örnekler

Örnek 1 radius_auth_open() example

<?php
$radh 
radius_auth_open()
    or die (
"Could not create handle");
echo 
"Handle successfully created";
?>



radius_close

(PECL radius >= 1.1.0)

radius_closeFrees all ressources

Açıklama

bool radius_close ( resource $radius_handle )

It is not needed to call this function because php frees all resources at the end of each request.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.



radius_config

(PECL radius >= 1.1.0)

radius_configCauses the library to read the given configuration file

Açıklama

bool radius_config ( resource $radius_handle , string $file )

Before issuing any Radius requests, the library must be made aware of the servers it can contact. The easiest way to configure the library is to call radius_config(). radius_config() causes the library to read a configuration file whose format is described in » radius.conf.

Değiştirgeler

radius_handle

file

The pathname of the configuration file is passed as the file argument to radius_config(). The library can also be configured programmatically by calls to radius_add_server().

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



radius_create_request

(PECL radius >= 1.1.0)

radius_create_requestCreate accounting or authentication request

Açıklama

bool radius_create_request ( resource $radius_handle , int $type )

A Radius request consists of a code specifying the kind of request, and zero or more attributes which provide additional information. To begin constructing a new request, call radius_create_request().

Bilginize: Attention: You must call this function, before you can put any attribute!

Değiştirgeler

radius_handle

type

Type is RADIUS_ACCESS_REQUEST or RADIUS_ACCOUNTING_REQUEST.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 radius_create_request() example

<?php
if (!radius_create_request($resRADIUS_ACCESS_REQUEST)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ayrıca Bakınız



radius_cvt_addr

(PECL radius >= 1.1.0)

radius_cvt_addrConverts raw data to IP-Address

Açıklama

string radius_cvt_addr ( string $data )

Örnekler

Örnek 1 radius_cvt_addr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FRAMED_IP_ADDRESS:
        
$ip radius_cvt_addr($data);
        echo 
"IP: $ip<br>\n";
        break;

    case 
RADIUS_FRAMED_IP_NETMASK:
        
$mask radius_cvt_addr($data);
        echo 
"MASK: $mask<br>\n";
        break;
    }
}
?>

Ayrıca Bakınız



radius_cvt_int

(PECL radius >= 1.1.0)

radius_cvt_intConverts raw data to integer

Açıklama

int radius_cvt_int ( string $data )

Örnekler

Örnek 1 radius_cvt_int() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FRAMED_MTU:
        
$mtu radius_cvt_int($data);
        echo 
"MTU: $mtu<br>\n";
        break;
    }
}
?>

Ayrıca Bakınız



radius_cvt_string

(PECL radius >= 1.1.0)

radius_cvt_stringConverts raw data to string

Açıklama

string radius_cvt_string ( string $data )

Örnekler

Örnek 1 radius_cvt_string() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
    switch (
$attr) {

    case 
RADIUS_FILTER_ID:
        
$id radius_cvt_string($data);
        echo 
"Filter ID: $id<br>\n";
        break;
    }
}
?>

Ayrıca Bakınız



radius_demangle_mppe_key

(PECL radius >= 1.2.0)

radius_demangle_mppe_keyDerives mppe-keys from mangled data

Açıklama

string radius_demangle_mppe_key ( resource $radius_handle , string $mangled )

When using MPPE with MS-CHAPv2, the send- and recv-keys are mangled (see » RFC 2548), however this function is useless, because I don't think that there is or will be a PPTP-MPPE implementation in PHP.

Dönen Değerler

Returns the demangled string, or FALSE on error.



radius_demangle

(PECL radius >= 1.2.0)

radius_demangleDemangles data

Açıklama

string radius_demangle ( resource $radius_handle , string $mangled )

Some data (Passwords, MS-CHAPv1 MPPE-Keys) is mangled for security reasons, and must be demangled before you can use them.

Dönen Değerler

Returns the demangled string, or FALSE on error.



radius_get_attr

(PECL radius >= 1.1.0)

radius_get_attrExtracts an attribute

Açıklama

mixed radius_get_attr ( resource $radius_handle )

Like Radius requests, each response may contain zero or more attributes. After a response has been received successfully by radius_send_request(), its attributes can be extracted one by one using radius_get_attr(). Each time radius_get_attr() is called, it gets the next attribute from the current response.

Dönen Değerler

Returns an associative array containing the attribute-type and the data, or error number <= 0.

Örnekler

Örnek 1 radius_get_attr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Got Attr:%d %d Bytes %s\n"$attrstrlen($data), bin2hex($data));
}
?>

Ayrıca Bakınız



radius_get_vendor_attr

(PECL radius >= 1.1.0)

radius_get_vendor_attrExtracts a vendor specific attribute

Açıklama

array radius_get_vendor_attr ( string $data )

If radius_get_attr() returns RADIUS_VENDOR_SPECIFIC, radius_get_vendor_attr() may be called to determine the vendor.

Dönen Değerler

Returns an associative array containing the attribute-type, vendor and the data, or FALSE on error.

Örnekler

Örnek 1 radius_get_vendor_attr() example

<?php
while ($resa radius_get_attr($res)) {

    if (!
is_array($resa)) {
        
printf ("Error getting attribute: %s\n",  radius_strerror($res));
        exit;
    }

    
$attr $resa['attr'];
    
$data $resa['data'];
    
printf("Got Attr:%d %d Bytes %s\n"$attrstrlen($data), bin2hex($data));
    if (
$attr == RADIUS_VENDOR_SPECIFIC) {

        
$resv radius_get_vendor_attr($data);
        if (
is_array($resv)) {
            
$vendor $resv['vendor'];
            
$attrv $resv['attr'];
            
$datav $resv['data'];    
            
printf("Got Vendor Attr:%d %d Bytes %s\n"$attrvstrlen($datav), bin2hex($datav));
        }
        
    }
}
?>

Ayrıca Bakınız



radius_put_addr

(PECL radius >= 1.1.0)

radius_put_addrAttaches an IP-Address attribute

Açıklama

bool radius_put_addr ( resource $radius_handle , int $type , string $addr )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.



radius_put_attr

(PECL radius >= 1.1.0)

radius_put_attrAttaches a binary attribute

Açıklama

bool radius_put_attr ( resource $radius_handle , int $type , string $value )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 radius_put_attr() example

<?php
mt_srand
(time());
$chall mt_rand();
$chapval md5(pack('Ca*','sepp' $chall));
$pass pack('CH*'1$chapval);
if (!
radius_put_attr($resRADIUS_CHAP_PASSWORD$pass)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ayrıca Bakınız



radius_put_int

(PECL radius >= 1.1.0)

radius_put_intAttaches an integer attribute

Açıklama

bool radius_put_int ( resource $radius_handle , int $type , int $value )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 radius_put_int() example

<?php
if (!radius_put_int($resRAD_FRAMED_PROTOCOLRAD_PPP)) {
   echo 
'RadiusError:' radius_strerror($res). "\n<br />";
   exit;
}
?>

Ayrıca Bakınız



radius_put_string

(PECL radius >= 1.1.0)

radius_put_stringAttaches a string attribute

Açıklama

bool radius_put_string ( resource $radius_handle , int $type , string $value )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 radius_put_string() example

<?php
if (!radius_put_string($resRADIUS_USER_NAME'billy')) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ayrıca Bakınız



radius_put_vendor_addr

(PECL radius >= 1.1.0)

radius_put_vendor_addrAttaches a vendor specific IP-Address attribute

Açıklama

bool radius_put_vendor_addr ( resource $radius_handle , int $vendor , int $type , string $addr )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.



radius_put_vendor_attr

(PECL radius >= 1.1.0)

radius_put_vendor_attrAttaches a vendor specific binary attribute

Açıklama

bool radius_put_vendor_attr ( resource $radius_handle , int $vendor , int $type , string $value )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 radius_put_vendor_attr() example

<?php
if (!radius_put_vendor_attr($resRADIUS_VENDOR_MICROSOFTRAD_MICROSOFT_MS_CHAP_CHALLENGE$challenge)) {
    echo 
'RadiusError:' radius_strerror($res). "\n<br />";
    exit;
}
?>

Ayrıca Bakınız



radius_put_vendor_int

(PECL radius >= 1.1.0)

radius_put_vendor_intAttaches a vendor specific integer attribute

Açıklama

bool radius_put_vendor_int ( resource $radius_handle , int $vendor , int $type , int $value )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



radius_put_vendor_string

(PECL radius >= 1.1.0)

radius_put_vendor_stringAttaches a vendor specific string attribute

Açıklama

bool radius_put_vendor_string ( resource $radius_handle , int $vendor , int $type , string $value )
Uyarı

Bu işlev hala belgelendirilmemiştir; sadece değiştirge listesi mevcuttur.

Dönen Değerler

Başarı durumunda TRUE, başarısızlık durumunda FALSE döner.

Ayrıca Bakınız



radius_request_authenticator

(PECL radius >= 1.1.0)

radius_request_authenticatorReturns the request authenticator

Açıklama

string radius_request_authenticator ( resource $radius_handle )

The request authenticator is needed for demangling mangled data like passwords and encryption-keys.

Dönen Değerler

Returns the request authenticator as string, or FALSE on error.

Ayrıca Bakınız



radius_send_request

(PECL radius >= 1.1.0)

radius_send_requestSends the request and waites for a reply

Açıklama

int radius_send_request ( resource $radius_handle )

After the Radius request has been constructed, it is sent by radius_send_request().

The radius_send_request() function sends the request and waits for a valid reply, retrying the defined servers in round-robin fashion as necessary.

Dönen Değerler

If a valid response is received, radius_send_request() returns the Radius code which specifies the type of the response. This will typically be RADIUS_ACCESS_ACCEPT, RADIUS_ACCESS_REJECT, or RADIUS_ACCESS_CHALLENGE. If no valid response is received, radius_send_request() returns FALSE.

Ayrıca Bakınız



radius_server_secret

(PECL radius >= 1.1.0)

radius_server_secretReturns the shared secret

Açıklama

string radius_server_secret ( resource $radius_handle )

The shared secret is needed as salt for demangling mangled data like passwords and encryption-keys.

Dönen Değerler

Returns the server's shared secret as string, or FALSE on error.



radius_strerror

(PECL radius >= 1.1.0)

radius_strerrorReturns an error message

Açıklama

string radius_strerror ( resource $radius_handle )

If Radius-functions fail then they record an error message. This error message can be retrieved with this function.

Dönen Değerler

Returns error messages as string from failed radius functions.


İçindekiler





Tarih ve Saat ile İlgili Eklentiler


Takvim


Giriş

Takvim eklentisi farklı takvim biçimleri arasında dönüşüm işlemlerini basitleştirmek için işlevler sunar. Ara biçim veya standart olarak Jülyen Gün Sayısını alır. Jülyen Gün Sayısı M.Ö. 1 Ocak 4713 tarihinden başlayarak geçen günlerin sayısıdır. Takvim biçimleri arasında dönüşüm yapmak için önce Jülyen Gün Sayısını bulmalı ve sonra bu bilgiyi istediğiniz takvim bilgisine dönüştürmelisiniz. Jülyen Gün Sayısı, Jülyen takviminden çok farklıdır! Jülyen Gün Sayısı hakkında daha fazla bilgi için » http://www.hermetic.ch/cal_stud/jdn.htm adresini ziyaret edebilirsiniz. Takvim biçimleri hakkında ise » http://www.fourmilab.ch/documents/calendar/ adresinden yararlanabilirsiniz. Bu adresten yapılan alıntılar tırnak işaretleri içerisinde gösterilmiştir.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

İşlevlerin çalışabilmesi için, PHP'yi --enable-calendar seçeneği ile derlemelisiniz.

PHP'nin Windows sürümünde bu eklenti yerleşik olarak gelmektedir. Bu işlevleri Windows'ta kullanmak için herhangi bir eklenti kurmanıza gerek yoktur.



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.

CAL_GREGORIAN (integer)
CAL_JULIAN (integer)
CAL_JEWISH (integer)
CAL_FRENCH (integer)
CAL_NUM_CALS (integer)
CAL_DOW_DAYNO (integer)
CAL_DOW_SHORT (integer)
CAL_DOW_LONG (integer)
CAL_MONTH_GREGORIAN_SHORT (integer)
CAL_MONTH_GREGORIAN_LONG (integer)
CAL_MONTH_JULIAN_SHORT (integer)
CAL_MONTH_JULIAN_LONG (integer)
CAL_MONTH_JEWISH (integer)
CAL_MONTH_FRENCH (integer)

Aşağıdaki sabitler, PHP 4.3.0 ve sonraki sürümlerde geçerlidir:

CAL_EASTER_DEFAULT (integer)
CAL_EASTER_ROMAN (integer)
CAL_EASTER_ALWAYS_GREGORIAN (integer)
CAL_EASTER_ALWAYS_JULIAN (integer)

Aşağıdaki sabitler, PHP 5.0.0 ve sonraki sürümlerde geçerlidir:

CAL_JEWISH_ADD_ALAFIM_GERESH (integer)
CAL_JEWISH_ADD_ALAFIM (integer)
CAL_JEWISH_ADD_GERESHAYIM (integer)


Takvim İşlevleri


cal_days_in_month

(PHP 4 >= 4.1.0, PHP 5)

cal_days_in_monthSeçilen takvime ve yıla göre istenen aydaki gün sayısını geri döndürür

Açıklama

int cal_days_in_month ( int $takvim , int $ay , int $yil )

İşlev seçilen takvim , yil ve ay değiştirgelerine göre gün sayısını geri döndürecektir.

Değiştirgeler

takvim

Hesaplama yapılacak takvim

ay

Seçilen takvimdeki ay

yil

Seçilen takvimdeki yıl

Dönen Değerler

Değiştirge olarak verilen takvimde, seçilen aydaki gün sayısı

Örnekler

Örnek 1 cal_days_in_month() örneği

<?php
$num 
cal_days_in_month(CAL_GREGORIAN82003); // 31
echo "2003 yılı Ağustos ayında $num gün vardır";
?>



cal_from_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_from_jdJülyen Gün Sayısını, istenen takvim biçimine çevirir

Açıklama

array cal_from_jd ( int $jg , int $takvim )

cal_from_jd() işlevi jg değiştirgesi ile verilen Jülyen Gün Sayısını takvim değiştirgesi ile verilen takvim gününe çevirir. Desteklenen takvim değerleri CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH ve CAL_FRENCH'dir.

Değiştirgeler

jg

Tamsayı olarak Jülyen Gün Sayısı

takvim

İstenen takvim

Dönen Değerler

Ay, gün, yıl, haftanın günü, gün ve ayın kısa ve uzun isimleri, "ay/gün/yıl" biçiminde tarih dizgesi öğelerini içeren dizi değişken döner.

Örnekler

Örnek 1 cal_from_jd() örneği

<?php
$today 
unixtojd(mktime(0008162003));
print_r(cal_from_jd($todayCAL_GREGORIAN));
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [date] => 8/16/2003
    [month] => 8
    [day] => 16
    [year] => 2003
    [dow] => 6
    [abbrevdayname] => Sat
    [dayname] => Saturday
    [abbrevmonth] => Aug
    [monthname] => August
)

Ayrıca Bakınız

  • cal_to_jd() - Desteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar
  • jdtofrench() - Jülyen gün sayısını, Fransız İhtilali takvimine çevirir
  • jdtogregorian() - Jülyen Gün Sayısını, Gregoryen tarihine çevirir
  • jdtojewish() - Jülyen Gün Sayısını, Yahudi takvimine çevirir
  • jdtojulian() - Jülyen Gün Sayısını, Jülyen takvim tarihine çevirir
  • jdtounix() - Jülyen Gün Sayısını, Unix zaman damgasına çevirir



cal_info

(PHP 4 >= 4.1.0, PHP 5)

cal_infoDeğiştirge olarak verilen takvim hakkında bilgi döner

Açıklama

array cal_info ([ int $takvim = -1 ] )

cal_info() işlevi, verilmiş takvim değiştirgesine ait bilgiler içeren dizi değişken döner.

Dizi değişken şu öğeleri içerir; calname, calsymbol, month, abbrevmonth ve maxdaysinmonth. takvim değiştirgesi olarak:

  • Gregoryen (Miladi) takvimi için 0 veya CAL_GREGORIAN
  • Jülyen (Rumi) takvimi için 1 veya CAL_JULIAN
  • Yahudi takvimi için 2 veya CAL_JEWISH
  • Fransız ihtilali takvimi için 3 veya CAL_FRENCH

Eğer takvim değeri verilmez ise, desteklenen bütün takvimler hakkında bilgi içeren dizi dönecektir.

Değiştirgeler

takvim

Bilgi verilecek takvim. Eğer belirtilmezse, bütün takvimler hakkında bilgi döner.

Dönen Değerler

Sürüm Bilgisi

Sürüm: Açıklama
5.0'dan beri takvim değiştirgesi seçimlik olmuştur ve ihmal edilirse, öntanımlı olarak "bütün takvimler" hakkında bilgi döner.

Örnekler

Örnek 1 cal_info() örneği

<?php
$info 
cal_info(0);
print_r($info);
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [months] => Array
        (
            [1] => January
            [2] => February
            [3] => March
            [4] => April
            [5] => May
            [6] => June
            [7] => July
            [8] => August
            [9] => September
            [10] => October
            [11] => November
            [12] => December
        )

    [abbrevmonths] => Array
        (
            [1] => Jan
            [2] => Feb
            [3] => Mar
            [4] => Apr
            [5] => May
            [6] => Jun
            [7] => Jul
            [8] => Aug
            [9] => Sep
            [10] => Oct
            [11] => Nov
            [12] => Dec
        )

    [maxdaysinmonth] => 31
    [calname] => Gregorian
    [calsymbol] => CAL_GREGORIAN
)



cal_to_jd

(PHP 4 >= 4.1.0, PHP 5)

cal_to_jdDesteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar

Açıklama

int cal_to_jd ( int $takvim , int $ay , int $gun , int $yil )

cal_to_jd() işlevi calendar değiştirgesine göre Jülyen Gün Sayısını hesaplar. Desteklenen takvim türleri CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH ve CAL_FRENCH'dir.

Değiştirgeler

takvim

Dönüşüm yapılacak takvim CAL_GREGORIAN, CAL_JULIAN, CAL_JEWISH veya CAL_FRENCH değerlerinden biri olabilir.

ay

Sayı olarak ay değeri, geçerli olan değer aralığı takvim değiştirgesine bağlıdır

gun

Sayı olarak gün değeri, gerçerli olan değer aralığı takvim değiştirgesine bağlıdır

yil

Sayı olarak yıl değeri, geçerli olan değer aralığı takvim değiştirgesine bağlıdır

Dönen Değerler

Jülyen Gün Sayısı.

Ayrıca Bakınız

  • cal_from_jd() - Jülyen Gün Sayısını, istenen takvim biçimine çevirir
  • frenchtojd() - Fransız İhtilali takvim tarihini, Jülyen Gün Sayısına çevirir
  • gregoriantojd() - Gregoryen tarihini, Jülyen Gün Sayısına çevirir
  • jewishtojd() - Yahudi takvimindeki bir tarihi, Jülyen Gün Sayısına çevirir
  • juliantojd() - Jülyen takvimindeki tarihi, Jülyen Gün Sayısına çevirir
  • unixtojd() - Unix zaman damgasını, Jülyen Gün Sayısına çevirir



easter_date

(PHP 4, PHP 5)

easter_dateVerilen yıl için paskalya gece yarısının unix zaman damgasını döner

Açıklama

int easter_date ([ int $yil ] )

Verilen yıl için paskalya gece yarısının unix zaman damgasını döner.

Uyarı

Bu işlev, yıl unix zaman damgasının geçerli olduğu aralık dışında (1970'den önce 2037'den sonra) verilirse bir uyarı üretir.

Paskalya günü, ilk olarak M.S. 325 yılında İznik Konseyi tarafından, İlk dolunaydan veya Bahar ılımından (ekinoks) sonraki ilk pazar günü olarak tanımlanmıştır. Ilımın daima 21 Mart tarihine rastladığı varsayılır ve hesaplama dolunayın ve sonraki pazar gününün hesaplanmasına indirgenir. Kullanılan algoritma Dionysius Exiguus tarafından 532 yılında tanıtıldı. Jülyen takvimi döneminde (1753'den önceki yıllar) ayın evrelerini takip etmek için basit 19 yıllık çevrim kullanıldı. Gregoryen takvimi döneminde (1753'den sonraki yıllar - Clavius ve Lilius tarafından hazırlandı ve XIII Papa Gregory tarafından Ekim 1582'de tanıtıldı, Eylül 1752'de Britanya ve kolonilerine yayıldı) çevrimin daha doğru olması için 2 düzeltme değişkeni eklendi.

(Simon Kershaw tarafından yazılan C programı temel alınmıştır, <webmaster at ely.anglican dot org>)

Değiştirgeler

yil

1970-2037 aralığındaki değerlerden biri.

Dönen Değerler

Unix zaman damgası olarak paskalya günü.

Sürüm Bilgisi

Sürüm: Açıklama
4.3.0 sürümünden beri yil değiştirgesi seçime bağlıdır, ihmal edilirse, öntanımlı olarak yerel zamanda, içinde bulunulan yıla eşittir.

Örnekler

Örnek 1 easter_date() örneği

<?php

echo date("M-d-Y"easter_date(1999));        // Apr-04-1999
echo date("M-d-Y"easter_date(2000));        // Apr-23-2000
echo date("M-d-Y"easter_date(2001));        // Apr-15-2001

?>

Ayrıca Bakınız

  • 1970'den önce veya 2037'den sonraki Paskalya günleri için easter_days() - Verilen yıl için Paskalya zamanına, 21 Marttan sonraki kalan gün sayısını verir.



easter_days

(PHP 4, PHP 5)

easter_daysVerilen yıl için Paskalya zamanına, 21 Marttan sonraki kalan gün sayısını verir.

Açıklama

int easter_days ([ int $yil [, int $yontem = CAL_EASTER_DEFAULT ]] )

Verilen yıl için Paskalya zamanına, 21 Marttan sonraki kalan gün sayısını verir. Yıl belirtilmezse öntanımlı olarak içinde bulunulan yıl alınır.

Bu işlev Unix zaman damgasının dışına düşen yıllarda (1970'den önce, 2037'den sonra), Paskalya gününü hesaplamak için easter_date() işlevi yerine kullanılabilir.

Paskalya günü, ilk olarak M.S. 325 yılında İznik Konseyi tarafından, İlk dolunaydan veya Bahar ılımından (ekinoks) sonraki ilk pazar günü olarak tanımlanmıştır. Ilımın daima 21 Mart tarihine rastladığı varsayılır ve hesaplama dolunayın ve sonraki pazar gününün hesaplanmasına indirgenir. Kullanılan algoritma Dionysius Exiguus tarafından 532 yılında tanıtıldı. Jülyen takvimi döneminde (1753'den önceki yıllar) ayın evrelerini takip etmek için basit 19 yıllık çevrim kullanıldı. Gregoryen takvimi döneminde (1753'den sonraki yıllar - Clavius ve Lilius tarafından hazırlandı ve XIII Papa Gregory tarafından Ekim 1582'de tanıtıldı, Eylül 1752'de Britanya ve kolonilerine yayıldı) çevrimin daha doğru olması için 2 düzeltme değişkeni eklendi.

(Simon Kershaw tarafından yazılan C programı temel alınmıştır, <webmaster at ely.anglican dot org>)

Değiştirgeler

yil

Pozitif sayı olarak yıl

yontem

CAL_EASTER_ROMAN sabiti verildiği zaman 1582 - 1752 yılları için Gregoryen takvimi temel alınarak hesaplama yapar. Diğer sabitler için takvim sabitleri adresine bakınız.

Dönen Değerler

Verilen yil değiştirgesi için Paskalya zamanına, 21 Marttan sonraki kalan gün sayısını verir.

Sürüm Bilgisi

Sürüm: Açıklama
4.3.0 sürümünden beri yil değiştirgesi seçimliktir, ihmal edilirse yerel zamana göre içinde bulunulan yıla eşittir.
4.3.0 sürümünden beri yontem değiştirgesi eklenmiştir.

Örnekler

Örnek 1 easter_days() örneği

<?php

echo easter_days(1999);        // 14, i.e. April 4
echo easter_days(1492);        // 32, i.e. April 22
echo easter_days(1913);        //  2, i.e. March 23

?>

Ayrıca Bakınız

  • easter_date() - Verilen yıl için paskalya gece yarısının unix zaman damgasını döner



FrenchToJD

(PHP 4, PHP 5)

FrenchToJDFransız İhtilali takvim tarihini, Jülyen Gün Sayısına çevirir

Açıklama

int frenchtojd ( int $ay , int $gun , int $yil )

Fransız Cumhuriyet Takvim tarihini, Jülyen Gün Sayısına çevirir.

Bu işlev, sadece 1'den 14'e kadar olan yılları çevirir (Gregoryen tarihleri 22 Eylül 1792'den 22 Eylül 1806'ya kadar). Bu aralık takvimin kullanımda olduğu zamanlardan daha geniş bir dönemi kapsar.

Değiştirgeler

ay

1'den (Vendémiaire için), 13'e (her yılın sonundaki 5-6 gün için) kadar sayı olarak ay değeri

gun

1'den 30'a kadar sayı olarak gün değeri

yil

1 ile 14 arasında yıl değeri.

Dönen Değerler

Tamsayı olarak, verilmiş Fransız İhtilali Tarihine karşılık gelen Jülyen Gün Sayısı.

Ayrıca Bakınız

  • jdtofrench() - Jülyen gün sayısını, Fransız İhtilali takvimine çevirir
  • cal_to_jd() - Desteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar



GregorianToJD

(PHP 4, PHP 5)

GregorianToJDGregoryen tarihini, Jülyen Gün Sayısına çevirir

Açıklama

int gregoriantojd ( int $ay , int $gun , int $yil )

Gregoryen Takvimi için geçerli olan aralık M.Ö. 4714 ile M.S. 9999 arasıdır

Bu işlev M.Ö. 4714'e kadar olan tarihleri işleyebilse de, bu tip bir kullanım anlamlı değildir. Gregoryen takvimi 15 Ekim 1582'ye (Jülyen takvimine göre 5 Ekim 1582) kadar kullanılmamıştır. Hatta bazı ülkeler bu tarihten daha sonra kullanmaya başlamıştır, örneğin; İngiliz krallığı 1752, SSCB 1918 ve Yunanistan 1923'de geçmiştir. Birçok Avrupa ülkesi Gregoryen takviminden önce Jülyen takvimini kullanmıştır.

Değiştirgeler

ay

1'den (Ocak), 12'ye (Aralık) kadar ay değeri

gun

1 ile 31 arasında gün değeri

yil

-4714 ile 9999 arasında yıl değeri

Dönen Değerler

Gregoryen tarihine karşılık tamsayı olarak Jülyen Gün Sayısı.

Örnekler

Örnek 1 Takvim işlevleri örneği

<?php
$jd 
GregorianToJD(10111970);
echo 
"$jd\n";
$gregorian JDToGregorian($jd);
echo 
"$gregorian\n";
?>

Ayrıca Bakınız

  • jdtogregorian() - Jülyen Gün Sayısını, Gregoryen tarihine çevirir
  • cal_to_jd() - Desteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar



JDDayOfWeek

(PHP 4, PHP 5)

JDDayOfWeekHaftanın gününü verir

Açıklama

mixed jddayofweek ( int $julyengunu [, int $yontem = CAL_DOW_DAYNO ] )

Haftanın gününü verir. Değiştirge olarak verilen yöntem'e göre dizge veya tamsayı geri döner.

Değiştirgeler

julyengunu

Tamsayı olarak Jülyen Gün Sayısı

yontem
Takvim hafta yöntemleri
Yöntem Anlamı
0 (Öntanımlı) Tamsayı olarak gün sayısını döner (0=Pazar, 1=Pazartesi, v.b.)
1 Haftanın gününün dizge karşılığını döner (İngilizce-Gregoryen)
2 Günün kısaltılmış değerini döner (İngilizce-Gregoryen)

Dönen Değerler

Dizge ya da tamsayı olarak, hafta gününün gregoryen değeri.



JDMonthName

(PHP 4, PHP 5)

JDMonthNameAy adını geri döner

Açıklama

string jdmonthname ( int $julyengunu , int $takvim )

Ay adını dizge olarak döndürür. takvim Jülyen Gün Sayısının hangi takvim ve ay adına çevrileceğini belirler.

Takvim değerleri
Yöntem Anlamı Değerleri
0 Gregoryen - kısaltılmış Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
1 Gregoryen January, February, March, April, May, June, July, August, September, October, November, December
2 Jülyen - kısaltılmış Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec
3 Jülyen January, February, March, April, May, June, July, August, September, October, November, December
4 Yahudi Tishri, Heshvan, Kislev, Tevet, Shevat, AdarI, AdarII, Nisan, Iyyar, Sivan, Tammuz, Av, Elul
5 Fransız İhtilali Vendemiaire, Brumaire, Frimaire, Nivose, Pluviose, Ventose, Germinal, Floreal, Prairial, Messidor, Thermidor, Fructidor, Extra

Değiştirgeler

julyengunu

Üzerinde işlem yapılacak Jülyen Günü

takvim

Ay adının alınacağı takvim

Dönen Değerler

Verilen Jülyen Günü ve takvim değiştirgesine göre ay adı.



JDToFrench

(PHP 4, PHP 5)

JDToFrenchJülyen gün sayısını, Fransız İhtilali takvimine çevirir

Açıklama

string jdtofrench ( int $julyengunu )

Jülyen gün sayısını, Fransız İhtilali takvimine çevirir.

Değiştirgeler

julyengunu

Tamsayı olarak Jülyen Gün Sayısı

Dönen Değerler

"ay/gün/yıl" biçiminde, dizge olarak Fransız İhtilal takvim tarihi

Ayrıca Bakınız

  • frenchtojd() - Fransız İhtilali takvim tarihini, Jülyen Gün Sayısına çevirir
  • cal_from_jd() - Jülyen Gün Sayısını, istenen takvim biçimine çevirir



JDToGregorian

(PHP 4, PHP 5)

JDToGregorianJülyen Gün Sayısını, Gregoryen tarihine çevirir

Açıklama

string jdtogregorian ( int $julyengunu )

Jülyen Gün Sayısını, "ay/gün/yıl" biçimindeki Gregoryen tarih dizgesine çevirir.

Değiştirgeler

julyengunu

Tamsayı olarak, Jülyen Gün Sayısı

Dönen Değerler

"ay/gün/yıl" biçiminde, Gregoryen tarih dizgesi

Ayrıca Bakınız

  • gregoriantojd() - Gregoryen tarihini, Jülyen Gün Sayısına çevirir
  • cal_from_jd() - Jülyen Gün Sayısını, istenen takvim biçimine çevirir



jdtojewish

(PHP 4, PHP 5)

jdtojewishJülyen Gün Sayısını, Yahudi takvimine çevirir

Açıklama

string jdtojewish ( int $julyengunu [, bool $ibrani = false [, int $bicim = 0 ]] )

Jülyen Gün Sayısını, Yahudi takvimine çevirir.

Değiştirgeler

julyengunu

Tamsayı olarak Jülyen Gün Sayısı

ibrani

ibrani değiştirgesi TRUE olarak ayarlanırsa, bicim değiştirgesi, İbranice çıktıyı biçimlendirmek için kullanılır.

bicim

Geçerli sabitler şunlardır: CAL_JEWISH_ADD_ALAFIM_GERESH, CAL_JEWISH_ADD_ALAFIM, CAL_JEWISH_ADD_GERESHAYIM.

Dönen Değerler

Dizge olarak, "ay/gün/yıl" biçiminde Yahudi takvimi tarihi

Sürüm Bilgisi

Sürüm: Açıklama
5.0.0 bicim değiştirgesi eklenmiştir.
4.3.0 ibrani değiştirgesi eklenmiştir.

Örnekler

Örnek 1 jdtojewish() örneği

<?php
echo jdtojewish(gregoriantojd(1082002), true,
       
CAL_JEWISH_ADD_GERESHAYIM CAL_JEWISH_ADD_ALAFIM +
       
CAL_JEWISH_ADD_ALAFIM_GERESH);
?>

Ayrıca Bakınız

  • jewishtojd() - Yahudi takvimindeki bir tarihi, Jülyen Gün Sayısına çevirir
  • cal_from_jd() - Jülyen Gün Sayısını, istenen takvim biçimine çevirir



JDToJulian

(PHP 4, PHP 5)

JDToJulianJülyen Gün Sayısını, Jülyen takvim tarihine çevirir

Açıklama

string jdtojulian ( int $julyengunu )

Jülyen Gün Sayısını, "ay/gün/yıl" biçiminde Jülyen takvim tarihine çevirir.

Değiştirgeler

julyengunu

Tamsayı olarak Jülyen Gün Sayısı

Dönen Değerler

"ay/gün/yıl" biçiminde dizge olarak Jülyen takvimi tarihi

Ayrıca Bakınız

  • juliantojd() - Jülyen takvimindeki tarihi, Jülyen Gün Sayısına çevirir
  • cal_from_jd() - Jülyen Gün Sayısını, istenen takvim biçimine çevirir



jdtounix

(PHP 4, PHP 5)

jdtounixJülyen Gün Sayısını, Unix zaman damgasına çevirir

Açıklama

int jdtounix ( int $julyengunu )

İşlev julyengunu 'ne karşılık gelen Unix zaman damgasını ya da verilen julyengunu Unix zaman damgası aralığında (1970 ve 2037 Gregoryen yılları arası veya 2440588 <= julyengunu <= 2465342 ) değilse FALSE değerini döner. İşlevden dönen zaman damgası, GMT'ye göre değil, yerel zamana göredir.

Değiştirgeler

julyengunu

2440588 ve 2465342 aralığında Jülyen Gün Sayısı.

Dönen Değerler

Jülyen Gün Sayısına, karşılık gelen Unix zaman damgası.

Ayrıca Bakınız

  • unixtojd() - Unix zaman damgasını, Jülyen Gün Sayısına çevirir



JewishToJD

(PHP 4, PHP 5)

JewishToJDYahudi takvimindeki bir tarihi, Jülyen Gün Sayısına çevirir

Açıklama

int jewishtojd ( int $ay , int $gun , int $yil )

İşlev, 1. yıldan (M.Ö. 3761) itibaren bütün tarihleri çevirebilse de, bu tip kullanım anlamlı değildir. Yahudi takvimi birkaç bin yıldan beri kullanımdadır, bununla birlikte ilk dönemlerinde bir ayın başlangıcı belirlemek için herhangi bir yol yoktu. Yeni bir ay, ilk hilal gözlendiğinde başlıyordu.

Değiştirgeler

ay

1 ile 13 aralığında sayı olarak ay

gun

1 ile 30 aralığında sayı olarak gün

yil

1 ile 9999 aralığında sayı olarak yıl

Dönen Değerler

Yahudi tarihine karşılık gelen Jülyen Gün Sayısı.

Ayrıca Bakınız

  • jdtojewish() - Jülyen Gün Sayısını, Yahudi takvimine çevirir
  • cal_to_jd() - Desteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar



JulianToJD

(PHP 4, PHP 5)

JulianToJDJülyen takvimindeki tarihi, Jülyen Gün Sayısına çevirir

Açıklama

int juliantojd ( int $ay , int $gun , int $yil )

Jülyen takviminin geçerli olduğu aralık M.Ö. 4713 ile M.S. 9999'dur.

İşlev, M.Ö. 4713 yılına kadar tarihler için dönüşüm yapabilse de, böyle kullanımlar anlamlı değildir. Takvim M.Ö. 46 yılında başlamıştır fakat M.S. 8 ve belki de 4. yüzyılın sonlarına kadar yaygın hale gelmemiştir. Ayrıca, yılın başlangıcı bir kültürden diğerine değişiyordu, hepsi Ocak ayını ilk ay olarak kabul etmemişti.

Dikkat

Şimdi dünya genelinde kullanılan takvim sistemin Gregoryen olduğunu unutmayın, gregoriantojd() işlevi tarihleri Jülyen Gün Sayısına çevirmek için kullanılabilir.

Değiştirgeler

ay

1 (Ocak) ile 12 (Aralık) aralığında sayı olarak ay

gun

1 ile 31 aralığında sayı olarak gün

yil

-4713 ile 9999 aralığında sayı olarak yıl değeri

Dönen Değerler

Verilen Jülyen tarihine karşılık gelen Jülyen Gün Sayısı.

Ayrıca Bakınız

  • jdtojulian() - Jülyen Gün Sayısını, Jülyen takvim tarihine çevirir
  • cal_to_jd() - Desteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar



unixtojd

(PHP 4, PHP 5)

unixtojdUnix zaman damgasını, Jülyen Gün Sayısına çevirir

Açıklama

int unixtojd ([ int $zamandamgasi = time() ] )

Verilen Unix zamandamgasi (1.1.1970'den başlayarak geçen saniye sayısı) için Jülyen Gün Sayısını döndürür, eğer zamandamgasi verilmez ise içinde bulunulan gün için Jülyen Gün Sayısını verir.

Değiştirgeler

zamandamgasi

Çevrilecek unix zaman damgası.

Dönen Değerler

Tamsayı olarak, Jülyen Gün Sayısı.

Ayrıca Bakınız

  • jdtounix() - Jülyen Gün Sayısını, Unix zaman damgasına çevirir


İçindekiler

  • cal_days_in_month — Seçilen takvime ve yıla göre istenen aydaki gün sayısını geri döndürür
  • cal_from_jd — Jülyen Gün Sayısını, istenen takvim biçimine çevirir
  • cal_info — Değiştirge olarak verilen takvim hakkında bilgi döner
  • cal_to_jd — Desteklenen bir takvimden Jülyen Gün Sayısına dönüşüm yapar
  • easter_date — Verilen yıl için paskalya gece yarısının unix zaman damgasını döner
  • easter_days — Verilen yıl için Paskalya zamanına, 21 Marttan sonraki kalan gün sayısını verir.
  • FrenchToJD — Fransız İhtilali takvim tarihini, Jülyen Gün Sayısına çevirir
  • GregorianToJD — Gregoryen tarihini, Jülyen Gün Sayısına çevirir
  • JDDayOfWeek — Haftanın gününü verir
  • JDMonthName — Ay adını geri döner
  • JDToFrench — Jülyen gün sayısını, Fransız İhtilali takvimine çevirir
  • JDToGregorian — Jülyen Gün Sayısını, Gregoryen tarihine çevirir
  • jdtojewish — Jülyen Gün Sayısını, Yahudi takvimine çevirir
  • JDToJulian — Jülyen Gün Sayısını, Jülyen takvim tarihine çevirir
  • jdtounix — Jülyen Gün Sayısını, Unix zaman damgasına çevirir
  • JewishToJD — Yahudi takvimindeki bir tarihi, Jülyen Gün Sayısına çevirir
  • JulianToJD — Jülyen takvimindeki tarihi, Jülyen Gün Sayısına çevirir
  • unixtojd — Unix zaman damgasını, Jülyen Gün Sayısına çevirir



Tarih ve Zaman


Giriş

Bu işlevler PHP betiğinizin çalıştığı sunucunun tarih ve saati üzerinde işlem yaparlar. Tarih ve saati farklı biçemlerde göstermek için bu işlevleri kullanabilirsiniz.

Her tarih bileşeni (örneğin, yıl) dahili olarak 64 bitlik bir sayı olarak saklanır, dolayısıyla hayali tarihler (negatif yıllar dahil) desteklenmez.

Bilginize: Bu işlevlerin sunucunuzun yerel zaman ayarlarına bağlı olarak işlem yaptığını lütfen aklınızdan çıkarmayın. Yaz saati uygulamasına dikkat edin. Örneğin, süre ekleme işlemi için $date += 7*24*60*60 değil $date = strtotime('+7 days', $date) kullanın. Ayrıca, bu işlevlerin artık yılları hesaba kattığını unutmayın.

Bilginize: Bu işlevlerde kullanılabilecek zaman dilimlerini Desteklenen Zaman Dilimlerinin Listesi bölümünde bulabilirsiniz.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

Bu eklentiyi derlemek için harici kütüphanelere gerek yoktur.



Kurulum

Bu işlevleri kullanmak için hiçbir şey kurmaya gerek yoktur; PHP çekirdeğinin parçasıdırlar.

Bilginize: Güncel zaman dilimi veritabanının yüklenmesi
Zaman dilimi veritabanın güncel sürümü, PECL'nin » zaman dilimi veritabanı olarak yüklenebilir.

Bilginize: PHP 5.1.x sürümlerinde Deneysel DateTime Desteği
Her ne kadar DateTime sınıfı (ve ilgili işlevleri) PHP 5.2.0 sürümünden itibaren kullanılabilir olsalar da, PHP 5.1.x sürümlerinde deneysel desteği eklemek için yapılandırma ya da derlemede sırasında CFLAGS=-DEXPERIMENTAL_DATE_SUPPORT=1 seçeneği kullanılabilir.



Çalışma Anı Yapılandırması

Bu işlevlerin davranışı php.ini içindeki ayarlardan etkilenir.

Tarih/Saat Yapılandırma Seçenekleri
İsim Varsayılan Değişiklik yeri Sürüm bilgisi
date.default_latitude "31.7667" PHP_INI_ALL PHP 5.0.0 sürümünden beri kullanılabilir.
date.default_longitude "35.2333" PHP_INI_ALL PHP 5.0.0 sürümünden beri kullanılabilir.
date.sunrise_zenith "90.583333" PHP_INI_ALL PHP 5.0.0 sürümünden beri kullanılabilir.
date.sunset_zenith "90.583333" PHP_INI_ALL PHP 5.0.0 sürümünden beri kullanılabilir.
date.timezone "" PHP_INI_ALL PHP 5.1.0 sürümünden beri kullanılabilir.

PHP_INI_* kiplerinin tanımları ve ayrıntılı açıklamaları için Yapılandırma ayarlarının yeri bölümüne bakınız.

Yapılandırma yönergelerinin kısa açıklamalarını aşağıda bulabilirsiniz.

date.default_latitude float

Varsayılan enlem.

date.default_longitude float

Varsayılan boylam.

date.sunrise_zenith float

Varsayılan gün doğumu başucu noktası.

date.sunset_zenith float

Varsayılan gün batımı başucu noktası.

date.timezone string

Eğer TZ ortam değişkeni ayarlanmamışsa tüm tarih/saat işlevleri için varsayılan zaman dilimi kullanılır. Öncelik sıralaması date_default_timezone_get() işlevinin sayfasında tanımlanmıştır. Desteklenen zaman dilimleri için Desteklenen Zaman Dilimlerinin Listesi sayfasına bakın.

Bilginize: İlk dört yapılandırma seçeneği halen sadece date_sunrise() ile date_sunset() işlevlerinde kullanılmaktadır.



Özkaynak Türleri

Bu eklentinin tanımlı hiçbir özkaynak türü yoktur.




Öntanımlı Sabitler

DATE_ sabitleri PHP 5.1.1 sürümünden itibaren tanımlanmıştır ve standart tarih gösterimi için tarih biçimlendirme işlevleriyle kullanılabilirler. (date() işlevi gibi).

Aşağıdaki sabitler PHP 5.1.2 sürümünden itibaren mevcutturlar ve date_sunrise() ile date_sunset() işlevleri tarafından biçim belirtmek için döndürülürler.

SUNFUNCS_RET_TIMESTAMP (integer)
Zaman damgası
SUNFUNCS_RET_STRING (integer)
Saat:dakika (örnek: 08:02)
SUNFUNCS_RET_DOUBLE (integer)
Gerçek sayı olarak saat (örnek: 8.75)


Desteklenen Zaman Dilimlerinin Listesi

İçindekiler

Burada, date_default_timezone_set() gibi işlevler tarafından kullanılmak üzere PHP tarafından desteklenen zaman dilimlerinin tamamı listelenmiştir.

Bilginize: Zaman dilimi veritabanının en son sürümü PECL'nin » timezonedb paketinden kurulabilir.

Bilginize: Bu liste zaman dilimi veritabanının şu sürümüne dayanır: 2009.19.


Afrika

Afrika
Africa/Abidjan Africa/Accra Africa/Addis_Ababa Africa/Algiers Africa/Asmara
Africa/Asmera Africa/Bamako Africa/Bangui Africa/Banjul Africa/Bissau
Africa/Blantyre Africa/Brazzaville Africa/Bujumbura Africa/Cairo Africa/Casablanca
Africa/Ceuta Africa/Conakry Africa/Dakar Africa/Dar_es_Salaam Africa/Djibouti
Africa/Douala Africa/El_Aaiun Africa/Freetown Africa/Gaborone Africa/Harare
Africa/Johannesburg Africa/Kampala Africa/Khartoum Africa/Kigali Africa/Kinshasa
Africa/Lagos Africa/Libreville Africa/Lome Africa/Luanda Africa/Lubumbashi
Africa/Lusaka Africa/Malabo Africa/Maputo Africa/Maseru Africa/Mbabane
Africa/Mogadishu Africa/Monrovia Africa/Nairobi Africa/Ndjamena Africa/Niamey
Africa/Nouakchott Africa/Ouagadougou Africa/Porto-Novo Africa/Sao_Tome Africa/Timbuktu
Africa/Tripoli Africa/Tunis Africa/Windhoek    


Amerika

Amerika
America/Adak America/Anchorage America/Anguilla America/Antigua America/Araguaina
America/Argentina/Buenos_Aires America/Argentina/Catamarca America/Argentina/ComodRivadavia America/Argentina/Cordoba America/Argentina/Jujuy
America/Argentina/La_Rioja America/Argentina/Mendoza America/Argentina/Rio_Gallegos America/Argentina/Salta America/Argentina/San_Juan
America/Argentina/San_Luis America/Argentina/Tucuman America/Argentina/Ushuaia America/Aruba America/Asuncion
America/Atikokan America/Atka America/Bahia America/Barbados America/Belem
America/Belize America/Blanc-Sablon America/Boa_Vista America/Bogota America/Boise
America/Buenos_Aires America/Cambridge_Bay America/Campo_Grande America/Cancun America/Caracas
America/Catamarca America/Cayenne America/Cayman America/Chicago America/Chihuahua
America/Coral_Harbour America/Cordoba America/Costa_Rica America/Cuiaba America/Curacao
America/Danmarkshavn America/Dawson America/Dawson_Creek America/Denver America/Detroit
America/Dominica America/Edmonton America/Eirunepe America/El_Salvador America/Ensenada
America/Fort_Wayne America/Fortaleza America/Glace_Bay America/Godthab America/Goose_Bay
America/Grand_Turk America/Grenada America/Guadeloupe America/Guatemala America/Guayaquil
America/Guyana America/Halifax America/Havana America/Hermosillo America/Indiana/Indianapolis
America/Indiana/Knox America/Indiana/Marengo America/Indiana/Petersburg America/Indiana/Tell_City America/Indiana/Vevay
America/Indiana/Vincennes America/Indiana/Winamac America/Indianapolis America/Inuvik America/Iqaluit
America/Jamaica America/Jujuy America/Juneau America/Kentucky/Louisville America/Kentucky/Monticello
America/Knox_IN America/La_Paz America/Lima America/Los_Angeles America/Louisville
America/Maceio America/Managua America/Manaus America/Marigot America/Martinique
America/Mazatlan America/Mendoza America/Menominee America/Merida America/Mexico_City
America/Miquelon America/Moncton America/Monterrey America/Montevideo America/Montreal
America/Montserrat America/Nassau America/New_York America/Nipigon America/Nome
America/Noronha America/North_Dakota/Center America/North_Dakota/New_Salem America/Panama America/Pangnirtung
America/Paramaribo America/Phoenix America/Port-au-Prince America/Port_of_Spain America/Porto_Acre
America/Porto_Velho America/Puerto_Rico America/Rainy_River America/Rankin_Inlet America/Recife
America/Regina America/Resolute America/Rio_Branco America/Rosario America/Santarem
America/Santiago America/Santo_Domingo America/Sao_Paulo America/Scoresbysund America/Shiprock
America/St_Barthelemy America/St_Johns America/St_Kitts America/St_Lucia America/St_Thomas
America/St_Vincent America/Swift_Current America/Tegucigalpa America/Thule America/Thunder_Bay
America/Tijuana America/Toronto America/Tortola America/Vancouver America/Virgin
America/Whitehorse America/Winnipeg America/Yakutat America/Yellowknife  


Antarktika

Antarktika
Antarctica/Casey Antarctica/Davis Antarctica/DumontDUrville Antarctica/Mawson Antarctica/McMurdo
Antarctica/Palmer Antarctica/Rothera Antarctica/South_Pole Antarctica/Syowa Antarctica/Vostok


Kuzey Kutup Dairesi

Kuzey Kutup Dairesi
Arctic/Longyearbyen


Asya

Asya
Asia/Aden Asia/Almaty Asia/Amman Asia/Anadyr Asia/Aqtau
Asia/Aqtobe Asia/Ashgabat Asia/Ashkhabad Asia/Baghdad Asia/Bahrain
Asia/Baku Asia/Bangkok Asia/Beirut Asia/Bishkek Asia/Brunei
Asia/Calcutta Asia/Choibalsan Asia/Chongqing Asia/Chungking Asia/Colombo
Asia/Dacca Asia/Damascus Asia/Dhaka Asia/Dili Asia/Dubai
Asia/Dushanbe Asia/Gaza Asia/Harbin Asia/Ho_Chi_Minh Asia/Hong_Kong
Asia/Hovd Asia/Irkutsk Asia/Istanbul Asia/Jakarta Asia/Jayapura
Asia/Jerusalem Asia/Kabul Asia/Kamchatka Asia/Karachi Asia/Kashgar
Asia/Kathmandu Asia/Katmandu Asia/Kolkata Asia/Krasnoyarsk Asia/Kuala_Lumpur
Asia/Kuching Asia/Kuwait Asia/Macao Asia/Macau Asia/Magadan
Asia/Makassar Asia/Manila Asia/Muscat Asia/Nicosia Asia/Novokuznetsk
Asia/Novosibirsk Asia/Omsk Asia/Oral Asia/Phnom_Penh Asia/Pontianak
Asia/Pyongyang Asia/Qatar Asia/Qyzylorda Asia/Rangoon Asia/Riyadh
Asia/Saigon Asia/Sakhalin Asia/Samarkand Asia/Seoul Asia/Shanghai
Asia/Singapore Asia/Taipei Asia/Tashkent Asia/Tbilisi Asia/Tehran
Asia/Tel_Aviv Asia/Thimbu Asia/Thimphu Asia/Tokyo Asia/Ujung_Pandang
Asia/Ulaanbaatar Asia/Ulan_Bator Asia/Urumqi Asia/Vientiane Asia/Vladivostok
Asia/Yakutsk Asia/Yekaterinburg Asia/Yerevan    


Atlantik

Atlantik
Atlantic/Azores Atlantic/Bermuda Atlantic/Canary Atlantic/Cape_Verde Atlantic/Faeroe
Atlantic/Faroe Atlantic/Jan_Mayen Atlantic/Madeira Atlantic/Reykjavik Atlantic/South_Georgia
Atlantic/St_Helena Atlantic/Stanley      


Avustralya

Avustralya
Australia/ACT Australia/Adelaide Australia/Brisbane Australia/Broken_Hill Australia/Canberra
Australia/Currie Australia/Darwin Australia/Eucla Australia/Hobart Australia/LHI
Australia/Lindeman Australia/Lord_Howe Australia/Melbourne Australia/North Australia/NSW
Australia/Perth Australia/Queensland Australia/South Australia/Sydney Australia/Tasmania
Australia/Victoria Australia/West Australia/Yancowinna    


Avrupa

Avrupa
Europe/Amsterdam Europe/Andorra Europe/Athens Europe/Belfast Europe/Belgrade
Europe/Berlin Europe/Bratislava Europe/Brussels Europe/Bucharest Europe/Budapest
Europe/Chisinau Europe/Copenhagen Europe/Dublin Europe/Gibraltar Europe/Guernsey
Europe/Helsinki Europe/Isle_of_Man Europe/Istanbul Europe/Jersey Europe/Kaliningrad
Europe/Kiev Europe/Lisbon Europe/Ljubljana Europe/London Europe/Luxembourg
Europe/Madrid Europe/Malta Europe/Mariehamn Europe/Minsk Europe/Monaco
Europe/Moscow Europe/Nicosia Europe/Oslo Europe/Paris Europe/Podgorica
Europe/Prague Europe/Riga Europe/Rome Europe/Samara Europe/San_Marino
Europe/Sarajevo Europe/Simferopol Europe/Skopje Europe/Sofia Europe/Stockholm
Europe/Tallinn Europe/Tirane Europe/Tiraspol Europe/Uzhgorod Europe/Vaduz
Europe/Vatican Europe/Vienna Europe/Vilnius Europe/Volgograd Europe/Warsaw
Europe/Zagreb Europe/Zaporozhye Europe/Zurich    


Hint Denizi

Hint Denizi
Indian/Antananarivo Indian/Chagos Indian/Christmas Indian/Cocos Indian/Comoro
Indian/Kerguelen Indian/Mahe Indian/Maldives Indian/Mauritius Indian/Mayotte
Indian/Reunion        


Pasifik

Pasifik
Pacific/Apia Pacific/Auckland Pacific/Chatham Pacific/Easter Pacific/Efate
Pacific/Enderbury Pacific/Fakaofo Pacific/Fiji Pacific/Funafuti Pacific/Galapagos
Pacific/Gambier Pacific/Guadalcanal Pacific/Guam Pacific/Honolulu Pacific/Johnston
Pacific/Kiritimati Pacific/Kosrae Pacific/Kwajalein Pacific/Majuro Pacific/Marquesas
Pacific/Midway Pacific/Nauru Pacific/Niue Pacific/Norfolk Pacific/Noumea
Pacific/Pago_Pago Pacific/Palau Pacific/Pitcairn Pacific/Ponape Pacific/Port_Moresby
Pacific/Rarotonga Pacific/Saipan Pacific/Samoa Pacific/Tahiti Pacific/Tarawa
Pacific/Tongatapu Pacific/Truk Pacific/Wake Pacific/Wallis Pacific/Yap


Diğerleri

Diğerleri
Brazil/Acre Brazil/DeNoronha Brazil/East Brazil/West Canada/Atlantic
Canada/Central Canada/East-Saskatchewan Canada/Eastern Canada/Mountain Canada/Newfoundland
Canada/Pacific Canada/Saskatchewan Canada/Yukon CET Chile/Continental
Chile/EasterIsland CST6CDT Cuba EET Egypt
Eire EST EST5EDT Etc/GMT Etc/GMT+0
Etc/GMT+1 Etc/GMT+10 Etc/GMT+11 Etc/GMT+12 Etc/GMT+2
Etc/GMT+3 Etc/GMT+4 Etc/GMT+5 Etc/GMT+6 Etc/GMT+7
Etc/GMT+8 Etc/GMT+9 Etc/GMT-0 Etc/GMT-1 Etc/GMT-10
Etc/GMT-11 Etc/GMT-12 Etc/GMT-13 Etc/GMT-14 Etc/GMT-2
Etc/GMT-3 Etc/GMT-4 Etc/GMT-5 Etc/GMT-6 Etc/GMT-7
Etc/GMT-8 Etc/GMT-9 Etc/GMT0 Etc/Greenwich Etc/UCT
Etc/Universal Etc/UTC Etc/Zulu Factory GB
GB-Eire GMT GMT+0 GMT-0 GMT0
Greenwich Hongkong HST Iceland Iran
Israel Jamaica Japan Kwajalein Libya
MET Mexico/BajaNorte Mexico/BajaSur Mexico/General MST
MST7MDT Navajo NZ NZ-CHAT Poland
Portugal PRC PST8PDT ROC ROK
Singapore Turkey UCT Universal US/Alaska
US/Aleutian US/Arizona US/Central US/East-Indiana US/Eastern
US/Hawaii US/Indiana-Starke US/Michigan US/Mountain US/Pacific
US/Pacific-New US/Samoa UTC W-SU WET
Zulu        
Uyarı

Lütfen burada listelenen zaman dilimlerini (UTC dışında) kullanmayın. Sadece geriye uyumluluk için varlar.




DateTime sınıfı

Giriş

Tarih ve saat gösterimi.

Sınıf Sözdizimi

DateTime
DateTime {
/* Sabitler */
const string DateTime::ATOM = Y-m-d\TH:i:sP ;
const string DateTime::COOKIE = l, d-M-y H:i:s T ;
const string DateTime::ISO8601 = Y-m-d\TH:i:sO ;
const string DateTime::RFC822 = D, d M y H:i:s O ;
const string DateTime::RFC850 = l, d-M-y H:i:s T ;
const string DateTime::RFC1036 = D, d M y H:i:s O ;
const string DateTime::RFC1123 = D, d M Y H:i:s O ;
const string DateTime::RFC2822 = D, d M Y H:i:s O ;
const string DateTime::RFC3339 = Y-m-d\TH:i:sP ;
const string DateTime::RSS = D, d M Y H:i:s O ;
const string DateTime::W3C = Y-m-d\TH:i:sP ;
/* Yöntemler */
public DateTime add ( DateInterval $interval )
__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
public static DateTime createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )
public DateInterval diff ( DateTime $datetime [, bool $absolute = false ] )
public string format ( string $format )
public static array getLastErrors ( void )
public int getOffset ( void )
public int getTimestamp ( void )
public DateTimeZone getTimezone ( void )
public DateTime modify ( string $modify )
public static DateTime __set_state ( array $array )
public DateTime setDate ( int $year , int $month , int $day )
public DateTime setISODate ( int $year , int $week [, int $day ] )
public DateTime setTime ( int $hour , int $minute [, int $second ] )
public DateTime setTimestamp ( int $unixtimestamp )
public DateTime setTimezone ( DateTimeZone $timezone )
public DateTime sub ( DateInterval $interval )
public DateTime __wakeup ( void )
}

Öntanımlı Sabitler

DateTime Düğüm Türleri

DateTime::ATOM
DATE_ATOM
Atom (örnek: 2005-08-15T15:52:01+00:00)
DateTime::COOKIE
DATE_COOKIE
HTTP Çerezleri (örnek: Monday, 15-Aug-05 15:52:01 UTC)
DateTime::ISO8601
DATE_ISO8601
ISO-8601 (örnek: 2005-08-15T15:52:01+0000)
DateTime::RFC822
DATE_RFC822
RFC 822 (örnek: Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC850
DATE_RFC850
RFC 850 (örnek: Monday, 15-Aug-05 15:52:01 UTC)
DateTime::RFC1036
DATE_RFC1036
RFC 1036 (örnek: Mon, 15 Aug 05 15:52:01 +0000)
DateTime::RFC1123
DATE_RFC1123
RFC 1123 (örnek: Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC2822
DATE_RFC2822
RFC 2822 (Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::RFC3339
DATE_RFC3339
DATE_ATOM ile aynı (PHP 5.1.3'ten beri).
DateTime::RSS
DATE_RSS
RSS (Mon, 15 Aug 2005 15:52:01 +0000)
DateTime::W3C
DATE_W3C
World Wide Web Consortium (örnek: 2005-08-15T15:52:01+00:00)

DateTime::add

(PHP 5 >= 5.3.0)

DateTime::add Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object

Açıklama

public DateTime DateTime::add ( DateInterval $interval )
DateTime date_add ( DateTime $object , DateInterval $interval )

Adds the specified DateInterval object to the specified DateTime object.

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

interval

A DateInterval object

Dönen Değerler

Returns the modified DateTime.

Örnekler

Örnek 1 date_add() example

<?php

$date 
= new DateTime("18-July-2008 16:30:30");
echo 
$date->format("d-m-Y H:i:s").'<br />';

date_add($date, new DateInterval("P5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days';

date_add($date, new DateInterval("P5M"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Months';

date_add($date, new DateInterval("P5Y"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Years';

date_add($date, new DateInterval("P5Y5M5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days, 5 Months, 5 Years';

date_add($date, new DateInterval("P5YT5H"));
echo 
'<br />'.$date->format("d-m-Y H:i:s").' : 5 Years, 5 Hours';

?>

Ayrıca Bakınız

  • DateTime::sub() - Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object
  • DateTime::diff() - Returns the difference between two DateTime objects



DateTime::__construct

(PHP 5 >= 5.2.0)

DateTime::__constructReturns new DateTime object

Açıklama

DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )

Returns new DateTime object.

Değiştirgeler

time

String in a format accepted by strtotime().

timezone

Time zone of the time.

Hatalar/İstisnalar

Emits Exception in case of an error.

Örnekler

Örnek 1 DateTime::__construct() example

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 14:52:10');
echo 
$datetime->format(DATE_ATOM);
?>



DateTime::createFromFormat

(PHP 5 >= 5.3.0)

DateTime::createFromFormatReturns new DateTime object formatted according to the specified format

Açıklama

public static DateTime DateTime::createFromFormat ( string $format , string $time [, DateTimeZone $timezone ] )

Returns new DateTime object formatted according to the specified format.

Değiştirgeler

format

Format accepted by date().

If format does not contain the character ! then portions of the date/time value specified in format but not specified in time will be set to the current system time.

If format contains the character !, then portions of the generated time specified to the left-hand side of the ! in format will be set to corresponding values from the Unix epoch.

If the first character of format is !, then all portions of the date/time value generated which are not specified in time will be initialized to corresponding values from the Unix epoch.

The Unix epoch is 1970-01-01 00:00:00 UTC.

time

String representing the time.

timezone

Time zone.

Dönen Değerler

Returns new DateTime instance başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 Using ! to reset default date/time values

<?php
echo "Current system date and time: " date('Y-m-d H:i:s') . "\n";

$format 'Y-m-d';
$dt DateTime::createFromFormat($format'2009-02-03');
echo 
"Format: $format; " $dt->date "\n";

$format 'Y-m-d H:i:s';
$dt DateTime::createFromFormat($format'2009-02-03 15:16:17');
echo 
"Format: $format; " $dt->date "\n";

$format 'Y-m-!d H:i:s';
$dt DateTime::createFromFormat($format'2009-02-03 15:16:17');
echo 
"Format: $format; " $dt->date "\n";

$format '!Y-m-d';
$dt DateTime::createFromFormat($format'2009-02-03');
echo 
"Format: $format; " $dt->date "\n";
?>

The above example will output something like the following (taking into account the current system time):

Current system date and time: 2009-09-13 01:04:03
Format: Y-m-d; 2009-02-03 01:04:03
Format: Y-m-d H:i:s; 2009-02-03 15:16:17
Format: Y-m-!d H:i:s; 1970-01-03 15:16:17
Format: !Y-m-d; 2009-02-03 00:00:00

Ayrıca Bakınız



DateTime::diff

(PHP 5 >= 5.3.0)

DateTime::diffReturns the difference between two DateTime objects

Açıklama

public DateInterval DateTime::diff ( DateTime $datetime [, bool $absolute = false ] )

Returns the difference between two DateTime objects.

Değiştirgeler

datetime

The date to compare to.

absolute

Whether to return absolute difference.

Dönen Değerler

The difference between two dates.



DateTime::format

(PHP 5 >= 5.2.0)

DateTime::formatReturns date formatted according to given format

Açıklama

public string DateTime::format ( string $format )
string date_format ( DateTime $object , string $format )

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

format

Format accepted by date().

Dönen Değerler

Returns formatted date on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 Displaying the date and time using the procedural form

<?php
date_default_timezone_set
('Europe/London');

$datetime date_create('2008-08-03 14:52:10');
echo 
date_format($datetime'jS, F Y') . "\n";
echo 
date_format($datetimeDATE_ATOM);
?>

Örnek 2 Displaying the date and time using the object oriented form

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 14:52:10');
echo 
$datetime->format('jS, F Y') . "\n";
echo 
$datetime->format(DATE_ATOM);
?>
?>

Yukarıdaki örneğin çıktısı:

3rd, August 2008
2008-08-03T14:52:10+01:00

Ayrıca Bakınız

  • date() - Yerel tarihi/saati biçimlendirir



DateTime::getLastErrors

(PHP 5 >= 5.3.0)

DateTime::getLastErrorsReturns the warnings and errors

Açıklama

public static array DateTime::getLastErrors ( void )

Returns the warnings and errors found while parsing a date/time string.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Returns array containing info about warnings and errors.

Örnekler

Örnek 1 DateTime::getLastErrors() example

<?php
$date 
date_create('asdfasdf');
print_r(DateTime::getLastErrors());
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [warning_count] => 1
    [warnings] => Array
        (
            [6] => Double timezone specification
        )

    [error_count] => 1
    [errors] => Array
        (
            [0] => The timezone could not be found in the database
        )

)



DateTime::getOffset

(PHP 5 >= 5.2.0)

DateTime::getOffsetReturns the timezone offset

Açıklama

public int DateTime::getOffset ( void )
int date_offset_get ( DateTime $object )

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

Dönen Değerler

Returns offset in seconds with respect to daylight saving time on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 Comparing offsets between Summer and Winter

<?php
date_default_timezone_set
('Europe/London');

$winter = new DateTime('2008-12-25 14:25:41');
$summer = new DateTime('2008-07-14 14:25:41');

echo 
$winter->getOffset(); // Winter offset: 0
echo $summer->getOffset(); // Summer offset: 3600 = 1 hour
?>



DateTime::getTimestamp

(PHP 5 >= 5.3.0)

DateTime::getTimestampGets the Unix timestamp

Açıklama

public int DateTime::getTimestamp ( void )

Gets the Unix timestamp.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Returns Unix timestamp representing the date.

Ayrıca Bakınız



DateTime::getTimezone

(PHP 5 >= 5.2.0)

DateTime::getTimezoneReturn time zone relative to given DateTime

Açıklama

public DateTimeZone DateTime::getTimezone ( void )

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

Dönen Değerler

Returns DateTimeZone object on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 Setting and getting DateTimeZone objects

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo 
$datetime->getTimezone()->getName() . "\n";

$datetime = new DateTime('2008-08-03 12:35:23');
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo 
$datetime->getTimezone()->getName();
?>

Yukarıdaki örneğin çıktısı:

Europe/London
America/Los_Angeles

Ayrıca Bakınız



DateTime::modify

(PHP 5 >= 5.2.0)

DateTime::modifyAlters the timestamp

Açıklama

public DateTime DateTime::modify ( string $modify )
DateTime date_modify ( DateTime $object , string $modify )

Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime().

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

modify

String in a relative format accepted by strtotime().

Dönen Değerler

Returns the modified DateTime.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Dönen değer artık NULL değil, DateTime oldu.

Örnekler

Örnek 1 A date_modify() example

<?php
$date 
= new DateTime("2006-12-12");
$date->modify("+1 day");
echo 
$date->format("Y-m-d");
?>

Yukarıdaki örneğin çıktısı:

2006-12-13

Ayrıca Bakınız

  • strtotime() - Parse about any English textual datetime description into a Unix timestamp



DateTime::__set_state

(PHP 5 >= 5.2.0)

DateTime::__set_stateThe __set_state handler

Açıklama

public static DateTime DateTime::__set_state ( array $array )

The __set_state handler.

Değiştirgeler

array

Initialization array.

Dönen Değerler

Returns a new instance of a DateTime object.



DateTime::setDate

(PHP 5 >= 5.2.0)

DateTime::setDateSets the date

Açıklama

public DateTime DateTime::setDate ( int $year , int $month , int $day )
DateTime date_date_set ( DateTime $object , int $year , int $month , int $day )

Resets the current date of the DateTime object to a different date.

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

year

Year of the date.

month

Month of the date.

day

Day of the date.

Dönen Değerler

Returns the modified DateTime.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Dönen değer artık NULL değil, DateTime oldu.

Örnekler

Örnek 1 Object oriented example usage

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 14:52:10');
$datetime->setDate(20081012);

echo 
$datetime->format(DATE_RFC2822);
?>

Örnek 2 Procedural example usage

<?php
date_default_timezone_set
('Europe/London');

$datetime date_create('2008-08-03 14:52:10');
date_date_set($datetime20081012);

echo 
date_format($datetimeDATE_RFC2822);
?>

Yukarıdaki örneğin çıktısı:

Sun, 12 Oct 2008 14:52:10 +0100

Ayrıca Bakınız



DateTime::setISODate

(PHP 5 >= 5.2.0)

DateTime::setISODateSets the ISO date

Açıklama

public DateTime DateTime::setISODate ( int $year , int $week [, int $day ] )
DateTime date_isodate_set ( DateTime $object , int $year , int $week [, int $day ] )

Set a date according to the ISO 8601 standard - using weeks and day offsets rather than specific dates.

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

year

Year of the date.

week

Week of the date.

day

Offset from the first day of the week.

Dönen Değerler

Returns the modified DateTime.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Dönen değer artık NULL değil, DateTime oldu.

Örnekler

Örnek 1 Finding the date from a week number and day offset

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime();

// Offset from start of week 2 (7) = 5
$datetime->setISODate(200825); // Day 5 of week 2 of 2008 is the 11th of January. 

// Offset from start of week 2 (7) = 10
$datetime->setISODate(2008210); // Day 10 of week 2 of 2008 is the 16th of January.
?>

Örnek 2 Finding the month a week is in

<?php
date_default_timezone_set
('Europe/London');

$datetime date_create();
date_isodate_set($datetime20086); // Week 6 of 2008 is in February.
?>

Ayrıca Bakınız



DateTime::setTime

(PHP 5 >= 5.2.0)

DateTime::setTimeSets the time

Açıklama

public DateTime DateTime::setTime ( int $hour , int $minute [, int $second ] )
DateTime date_time_set ( DateTime $object , int $hour , int $minute [, int $second ] )

Resets the current time of the DateTime object to a different time.

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

hour

Hour of the time.

minute

Minute of the time.

second

Second of the time.

Dönen Değerler

Returns the modified DateTime.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Dönen değer artık NULL değil, DateTime oldu.

Örnekler

Örnek 1 Changing the time of a DateTime object

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo 
$datetime->format('Y-m-d H:i:s') . "\n";

$datetime->setTime(145524);
echo 
$datetime->format('Y-m-d H:i:s') . "\n";

// Warning: Does not increment the hour!
// This is because the hour has been set (14) - see date_modify()
$datetime->setTime($datetime->format('H'), $datetime->format('n') + 6);
echo 
$datetime->format('Y-m-d H:i:s') . "\n";

// *Does* increment the day, because the day has not been set
$datetime->setTime($datetime->format('H') + 12$datetime->format('n'));
echo 
$datetime->format('Y-m-d H:i:s') . "\n";
?>

Yukarıdaki örneğin çıktısı:

2008-08-03 12:35:23
2008-08-03 14:55:24
2008-08-03 14:14:00
2008-08-04 02:08:00

Ayrıca Bakınız



DateTime::setTimestamp

(PHP 5 >= 5.3.0)

DateTime::setTimestampSets the date and time based on an Unix timestamp

Açıklama

public DateTime DateTime::setTimestamp ( int $unixtimestamp )

Sets the date and time based on an Unix timestamp.

Değiştirgeler

unixtimestamp

Unix timestamp representing the date.

Dönen Değerler

Returns the modified DateTime.

Ayrıca Bakınız



DateTime::setTimezone

(PHP 5 >= 5.2.0)

DateTime::setTimezoneSets the time zone for the DateTime object

Açıklama

public DateTime DateTime::setTimezone ( DateTimeZone $timezone )

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

timezone

Desired time zone.

Dönen Değerler

Returns the modified DateTime.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Changed the return value from NULL to DateTime.

Örnekler

Örnek 1 Setting and getting DateTimeZone objects

<?php
date_default_timezone_set
('Europe/London');

$datetime = new DateTime('2008-08-03 12:35:23');
echo 
$datetime->getTimezone()->getName() . "\n";

$datetime = new DateTime('2008-08-03 12:35:23');
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo 
$datetime->getTimezone()->getName();
?>

Yukarıdaki örneğin çıktısı:

Europe/London
America/Los_Angeles

Ayrıca Bakınız



DateTime::sub

(PHP 5 >= 5.3.0)

DateTime::sub Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object

Açıklama

public DateTime DateTime::sub ( DateInterval $interval )
DateTime date_sub ( DateTime $object , DateInterval $interval )

Subtracts the specified DateInterval object from the specified DateTime object.

Değiştirgeler

nesne

Sadece yordamsal biçem: date_create() işlevinden dönen bir DateTime nesnesi.

interval

A DateInterval object

Dönen Değerler

Returns the modified DateTime.

Örnekler

Örnek 1 date_sub() example

<?php

$date 
= new DateTime("18-July-2008 16:30:30");
echo 
$date->format("d-m-Y H:i:s").'<br />';

date_sub($date, new DateInterval("P5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days';

date_sub($date, new DateInterval("P5M"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Months';

date_sub($date, new DateInterval("P5Y"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Years';

date_sub($date, new DateInterval("P5Y5M5D"));
echo 
'<br />'.$date->format("d-m-Y").' : 5 Days, 5 Months, 5 Years';

date_sub($date, new DateInterval("P5YT5H"));
echo 
'<br />'.$date->format("d-m-Y H:i:s").' : 5 Years, 5 Hours';

?>

Ayrıca Bakınız

  • DateTime::add() - Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object
  • DateTime::diff() - Returns the difference between two DateTime objects



DateTime::__wakeup

(PHP 5 >= 5.2.0)

DateTime::__wakeupThe __wakeup handler

Açıklama

public DateTime DateTime::__wakeup ( void )

The __wakeup handler.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Initializes a DateTime object.


İçindekiler



DateTimeZone sınıfı

Giriş

Zaman dilimi gösterimi.

Sınıf Sözdizimi

DateTimeZone
DateTimeZone {
/* Sabitler */
const integer DateTimeZone::AFRICA = 1 ;
const integer DateTimeZone::AMERICA = 2 ;
const integer DateTimeZone::ANTARCTICA = 4 ;
const integer DateTimeZone::ARCTIC = 8 ;
const integer DateTimeZone::ASIA = 16 ;
const integer DateTimeZone::ATLANTIC = 32 ;
const integer DateTimeZone::AUSTRALIA = 64 ;
const integer DateTimeZone::EUROPE = 128 ;
const integer DateTimeZone::INDIAN = 256 ;
const integer DateTimeZone::PACIFIC = 512 ;
const integer DateTimeZone::UTC = 1024 ;
const integer DateTimeZone::ALL = 2047 ;
const integer DateTimeZone::ALL_WITH_BC = 4095 ;
const integer DateTimeZone::PER_COUNTRY = 4096 ;
/* Yöntemler */
public __construct ( string $zamandilimi )
public array getLocation ( void )
public string getName ( void )
public int getOffset ( DateTime $datetime )
public array getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )
public static array listAbbreviations ( void )
public static array listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )
}

Öntanımlı Sabitler

DateTimeZone Düğüm Türleri

DateTimeZone::AFRICA

Afrika zaman dilimleri.

DateTimeZone::AMERICA

Amerika zaman dilimleri.

DateTimeZone::ANTARCTICA

Antarktika zaman dilimleri.

DateTimeZone::ARCTIC

Kuzey Kutup Dairesi zaman dilimleri.

DateTimeZone::ASIA

Asya zaman dilimleri.

DateTimeZone::ATLANTIC

Atlantik zaman dilimleri.

DateTimeZone::AUSTRALIA

Avustralya zaman dilimleri.

DateTimeZone::EUROPE

Avrupa zaman dilimleri.

DateTimeZone::INDIAN

Hindistan zaman dilimleri.

DateTimeZone::PACIFIC

Pasifik zaman dilimleri.

DateTimeZone::UTC

UTC zaman dilimleri.

DateTimeZone::ALL

Tüm zaman dilimleri.

DateTimeZone::ALL_WITH_BC

Geriye uyumluluk dahil tüm zaman dilimleri.

DateTimeZone::PER_COUNTRY

Ülkelere göre zaman dilimleri.


DateTimeZone::__construct

(PHP 5 >= 5.2.0)

DateTimeZone::__constructYeni bir DateTimeZone nesnesi oluşturur

Açıklama

public DateTimeZone::__construct ( string $zamandilimi )

Yeni bir DateTimeZone nesnesi oluşturur.

Değiştirgeler

zamandilimi

Tanımlı zaman dilimlerinden biri.

Dönen Değerler

Başarılı olduğunda yeni bir DateTimeZone nesnesi döndürür.

Hatalar/İstisnalar

Eğer zaman dilimi geçerli bir zaman dilimi değilse bu işlev bir Exception istisnası oluşturur.

Örnekler

Örnek 1 - DateTimeZone örneklenirken hataların yakalanması

<?php
// Yakalanan istisna nesneleriyle hata işlenmesine örnek
$zamandilimleri = array('Europe/Istanbul''Mars/Phobos''Jupiter/Europa');

foreach (
$zamandilimleri as $zd) {
    try {
        
$mars = new DateTimeZone($zd);
    } catch(
Exception $e) {
        echo 
$e->getMessage() . '<br />';
    }
}
?>

Yukarıdaki örneğin çıktısı:

DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Mars/Phobos)
DateTimeZone::__construct() [datetimezone.--construct]: Unknown or bad timezone (Jupiter/Europa)



DateTimeZone::getLocation

(PHP 5 >= 5.3.0)

DateTimeZone::getLocationZaman dilimi konum bilgisini döndürür

Açıklama

public array DateTimeZone::getLocation ( void )

Zaman dilimi için konum bilgisini; ülke kodu, enlem/boylam değerlerini ve yorumları döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Zaman dilimi hakkında konum bilgisini içeren bir dizi.

Örnekler

Örnek 1 - DateTimeZone::getLocation() örneği

<?php
$tz 
= new DateTimeZone("Europe/Prague");
print_r($tz->getLocation());
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [country_code] => CZ
    [latitude] => 50.08333
    [longitude] => 14.43333
    [comments] =>
)



DateTimeZone::getName

(PHP 5 >= 5.2.0)

DateTimeZone::getNameZaman diliminin adını döndürür

Açıklama

public string DateTimeZone::getName ( void )

Zaman diliminin adını döndürür.

Değiştirgeler

Bu işlevin değiştirgesi yoktur.

Dönen Değerler

Tanımlı zaman dilimlerinden biri.



DateTimeZone::getOffset

(PHP 5 >= 5.2.0)

DateTimeZone::getOffsetReturns the timezone offset from GMT

Açıklama

public int DateTimeZone::getOffset ( DateTime $datetime )
int timezone_offset_get ( DateTimeZone $object , DateTime $datetime )

This function returns the offset to GMT for the date/time specified in the datetime parameter. The GMT offset is calculated with the timezone information contained in the DateTimeZone object being used.

Değiştirgeler

nesne

Sadece yordamsal biçem: timezone_open() işlevinden dönen bir DateTimeZone nesnesi.

datetime

DateTime that contains the date/time to compute the offset from.

Dönen Değerler

Returns time zone offset in seconds on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 DateTimeZone::getOffset() examples

<?php
// Create two timezone objects, one for Taipei (Taiwan) and one for
// Tokyo (Japan)
$dateTimeZoneTaipei = new DateTimeZone("Asia/Taipei");
$dateTimeZoneJapan = new DateTimeZone("Asia/Tokyo");

// Create two DateTime objects that will contain the same Unix timestamp, but
// have different timezones attached to them.
$dateTimeTaipei = new DateTime("now"$dateTimeZoneTaipei);
$dateTimeJapan = new DateTime("now"$dateTimeZoneJapan);

// Calculate the GMT offset for the date/time contained in the $dateTimeTaipei
// object, but using the timezone rules as defined for Tokyo
// ($dateTimeZoneJapan).
$timeOffset $dateTimeZoneJapan->getOffset($dateTimeTaipei);

// Should show int(32400) (for dates after Sat Sep 8 01:00:00 1951 JST).
var_dump($timeOffset);
?>



DateTimeZone::getTransitions

(PHP 5 >= 5.2.0)

DateTimeZone::getTransitionsReturns all transitions for the timezone

Açıklama

public array DateTimeZone::getTransitions ([ int $timestamp_begin [, int $timestamp_end ]] )
array timezone_transitions_get ( DateTimeZone $object [, int $timestamp_begin [, int $timestamp_end ]] )

Değiştirgeler

nesne

Sadece yordamsal biçem: timezone_open() işlevinden dönen bir DateTimeZone nesnesi.

timestamp_begin

Begin timestamp.

timestamp_end

End timestamp.

Dönen Değerler

Returns numerically indexed array containing associative array with all transitions on success başarısızlık durumunda FALSE döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 The optional timestamp_begin and timestamp_end were added.

Örnekler

Örnek 1 A timezone_transitions_get() example

<?php
$timezone 
= new DateTimeZone("CET");
print_r(reset($timezone->getTransitions()));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [ts] => -1693706400
    [time] => 1916-04-30T22:00:00+0000
    [offset] => 7200
    [isdst] => 1
    [abbr] => CEST
)



DateTimeZone::listAbbreviations

(PHP 5 >= 5.2.0)

DateTimeZone::listAbbreviationsReturns associative array containing dst, offset and the timezone name

Açıklama

public static array DateTimeZone::listAbbreviations ( void )

Dönen Değerler

Returns array on success başarısızlık durumunda FALSE döner.

Örnekler

Örnek 1 A timezone_abbreviations_list() example

<?php
$timezone_abbreviations 
DateTimeZone::listAbbreviations();
print_r($timezone_abbreviations["acst"]);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [0] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Porto_Acre
        )

    [1] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Eirunepe
        )

    [2] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => America/Rio_Branco
        )

    [3] => Array
        (
            [dst] => 1
            [offset] => -14400
            [timezone_id] => Brazil/Acre
        )

)

Ayrıca Bakınız



DateTimeZone::listIdentifiers

(PHP 5 >= 5.2.0)

DateTimeZone::listIdentifiersReturns numerically index array with all timezone identifiers

Açıklama

public static array DateTimeZone::listIdentifiers ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )
array timezone_identifiers_list ([ int $what = DateTimeZone::ALL [, string $country = NULL ]] )

Değiştirgeler

what

One of DateTimeZone class constants.

country

A two-letter ISO 3166-1 compatible country code.

Bilginize: This option is only used when what is set to DateTimeZone::PER_COUNTRY.

Dönen Değerler

Returns array on success başarısızlık durumunda FALSE döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Added the optional what and country parameters.

Örnekler

Örnek 1 A timezone_identifiers_list() example

<?php
$timezone_identifiers 
DateTimeZone::listIdentifiers();
for (
$i=0$i 5$i++) {
    echo 
"$timezone_identifiers[$i]\n";
}
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmera

Ayrıca Bakınız


İçindekiler



DateInterval sınıfı

Giriş

Tarih aralığının gösterimi.

Sınıf Sözdizimi

DateInterval
DateInterval {
/* Yöntemler */
__construct ( string $zaman_aralığı )
public static DateInterval createFromDateString ( string $zaman )
public string format ( string $biçem )
}

DateInterval::__construct

(PHP 5 >= 5.3.0)

DateInterval::__constructYeni bir DateInterval nesnesi oluşturur

Açıklama

DateInterval::__construct ( string $zaman_aralığı )

Yeni bir DateInterval nesnesi oluşturur.

Değiştirgeler

zaman_aralığı

Dizge türünde zaman aralığı belirtimi.

Zaman aralığını ("period") belirtmek için biçem P harfiyle başlar, ardından süreyi belirten bir tamsayı değer gelir. Süre zaman bileşenleri içeriyorsa bunların önüne T harfi getirilir..

zaman_aralığı Belirteçleri
Belirteç Açıklama
Y Yıl
M Ay
D Gün
W Hafta. Gün sayısına dönüştürmek için D harfiyle birlikte belirtilebilir.
H Saat
M Dakika
S saniye

Burada bazı basit örneklere yer verilmiştir. İki gün: P2D. İki saniye: PT2S. Altı yıl, 5 dakika: P6YT5M.

Bilginize: Birimler belirtilirken en büyük ölçekli birim solda en küçük ölçekli birim sağda kalacak şekilde veri girilir. Dolayısıyla, örneğin, aylar yıllardan sonra, günlerden önce yer alır. Bur yıl dört gün P4D1Y değil P1Y4D olarak ifade edilir.

Belirtim bir tarih saat olarak da gösterilebilir. Örneğin, bir yıl dört gün P0001-00-04T00:00:00 olarak gösterilebilir. Fakat bu biçemde belirtilen değerler birime tanınan azami değeri aşmamalıdır (örneğin 25 saat geçersizdir).

Bu biçemler » ISO 8601 süre belirtimine dayanır.

Örnekler

<?php

$interval 
= new DateInterval('P2Y4DT6H8M');
print_r($interval);

?>

Yukarıdaki örneğin çıktısı:

DateInterval Object
(
    [y] => 2
    [m] => 0
    [d] => 4
    [h] => 6
    [i] => 8
    [s] => 0
    [invert] => 0
    [days] => 0
)

Ayrıca Bakınız

  • DateInterval::format() - Zaman aralığını biçimler
  • DateTime::add() - Adds an amount of days, months, years, hours, minutes and seconds to a DateTime object
  • DateTime::sub() - Subtracts an amount of days, months, years, hours, minutes and seconds from a DateTime object
  • DateTime::diff() - Returns the difference between two DateTime objects



DateInterval::createFromDateString

(PHP 5 >= 5.3.0)

DateInterval::createFromDateStringDizgenin göreli kısımlarından bir DateInterval nesnesi döndürür

Açıklama

public static DateInterval DateInterval::createFromDateString ( string $zaman )

Normal tarih ayrıştırcısı kullanır ve dizgenin göreli kısımlarından bir DateInterval nesnesi oluşturur.

Değiştirgeler

zaman

Tarihe göreli kısımlar.

Dönen Değerler

Başarılıysa yeni bir DateInterval nesnesi döndürür.



DateInterval::format

(PHP 5 >= 5.3.0)

DateInterval::formatZaman aralığını biçimler

Açıklama

public string DateInterval::format ( string $biçem )

Zaman aralığını biçimlendirir.

Değiştirgeler

biçem

biçem dizgesinde tanınan karakterler
Karakter Açıklama Örnek değerler
Y Başına 0 getirilerek iki haneli yıl 01, 03
y 0 ile öncelenmeksizin yıl 1, 3
M Başına 0 getirilerek iki haneli ay 01, 03, 12
m 0 ile öncelenmeksizin ay 01, 03, 12
D Başına 0 getirilerek iki haneli ayın günü 01, 03, 31
d 0 ile öncelenmeksizin ayın günü 1, 3, 31
a Toplam gün sayısı 4, 18, 8123
H Başına 0 getirilerek iki haneli saat 01, 03, 23
h 0 ile öncelenmeksizin saat 1, 3, 23
I Başına 0 getirilerek iki haneli dakika 01, 03, 59
i 0 ile öncelenmeksizin dakika 1, 3, 59
S Başına 0 getirilerek iki haneli saniye 01, 03, 57
s 0 ile öncelenmeksizin saniye 1, 3, 57
R Negatifse "-", pozitifse "+" imi -, +
r Negatifse "-", pozitifse boş dizge -,
% % iminin kendisi %

Bilginize: Biçem belirteçlerinin doğru çalışması için % imi ile öncelenmeleri gerekir.

Dönen Değerler

Biçimlendirilmiş zaman aralığını bir dizge olarak döndürür.


İçindekiler



DatePeriod sınıfı

Giriş

Dönemselliğin gösterimi.

Sınıf Sözdizimi

DatePeriod
DatePeriod implements Traversable {
/* Sabitler */
const integer DatePeriod::EXCLUDE_START_DATE = 1 ;
/* Yöntemler */
__construct ( DateTime $başlangıç , DateInterval $aralık , int $tekrarlama [, int $seçenekler ] )
}

Öntanımlı Sabitler

DatePeriod Düğüm Türleri

DatePeriod::EXCLUDE_START_DATE

DatePeriod::__construct() yönteminde kullanılan başlangıç tarihi dışlanır.


DatePeriod::__construct

(PHP 5 >= 5.3.0)

DatePeriod::__constructYeni bir DatePeriod nesnesi oluşturur

Açıklama

DatePeriod::__construct ( DateTime $başlangıç , DateInterval $aralık , int $tekrarlama [, int $seçenekler ] )
DatePeriod::__construct ( DateTime $başlangıç , DateInterval $aralık , DateTime $bitiş [, int $seçenekler ] )
DatePeriod::__construct ( string $isostr [, int $seçenekler ] )

Yeni bir DatePeriod nesnesi oluşturur.

Değiştirgeler

başlangıç

Tarih başlangıcı.

aralık

Aralık.

tekrarlama

Tekrar sayısı.

bitiş

Tarih bitişi.

isostr

ISO aralığını içeren dizge.

seçenekler

DatePeriod::EXCLUDE_START_DATE sabiti olabilir.


İçindekiler



Tarih ve Zaman İşlevleri


checkdate

(PHP 4, PHP 5)

checkdateMiladi tarihi doğrular

Açıklama

bool checkdate ( int $ay , int $gün , int $yıl )

Verilen değiştirgelerle şekillenen tarihin geçerliliğini sınar. Her değiştirge doğru tanımlanmışsa, tarih geçerli sayılır.

Değiştirgeler

ay

Ay 1 ve 12 arasında olmalıdır.

gün

Gün, verilen ay 'ın gün sayıları içerisinde olmalıdır. Artık yıl lar dikkate alınacaktır.

yıl

Yıl 1 ve 32767 arasında olmalıdır.

Dönen Değerler

Verilen tarih geçerli ise TRUE değeriyle, değilse FALSE değeriyle döner.

Örnekler

Örnek 1 - checkdate() örneği

<?php
var_dump
(checkdate(12312000));
var_dump(checkdate(2292001));
?>

Yukarıdaki örneğin çıktısı:

bool(true)
bool(false)

Ayrıca Bakınız

  • mktime() - Bir tarih için Unix zaman damgasını döndürür
  • strtotime() - Parse about any English textual datetime description into a Unix timestamp



date_add

(PHP 5 >= 5.3.0)

date_add DateTime::add işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::add işlevinin takma adıdır.



date_create_from_format

(PHP 5 >= 5.3.0)

date_create_from_format DateTime::createFromFormat işlevinin takma adıdır

Açıklama

Bu işlev DateTime::createFromFormat işlevinin takma adıdır.



date_create

(PHP 5 >= 5.2.0)

date_createYeni bir DateTime nesnesi döndürür

Açıklama

DateTime date_create ([ string $zaman = "now" [, DateTimeZone $zaman_dilimi = NULL ]] )

Değiştirgeler

zaman

strtotime() tarafından kabul edilen dizge biçimlerinden biri.

zaman_dilimi

Zaman dilimi.

Dönen Değerler

Başarılı olduğunda DateTime nesnesiyle, başarısız olduğunda FALSE değeriyle döner.

Örnekler

Örnek 1 - date_create() örneği

<?php
date_default_timezone_set
('Europe/Istanbul');

$datetime date_create('2008-08-03 14:52:10');
echo 
date_format($datetimeDATE_ATOM);
?>

Yukarıdaki örneğin çıktısı:

2008-08-03T14:52:10+03:00



date_date_set

(PHP 5 >= 5.2.0)

date_date_set DateTime::setDate işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::setDate işlevinin takma adıdır.



date_default_timezone_get

(PHP 5 >= 5.1.0)

date_default_timezone_get Betik içerisindeki tüm tarih/zaman işlevleri tarafından kullanılan öntanımlı zaman dilimini getirir

Açıklama

string date_default_timezone_get ( void )

Bu işlev tercih sırasına göre öntanımlı zaman dilimini şöyle döndürür:

  • date_default_timezone_set() işlevi kullanılarak atanan zaman dilimiyle (eğer varsa).

  • TZ ortam değişkenindeki değerle (boş değilse).

  • date.timezone ini yönergesindeki değerle (ayarlanmışsa).

  • Ev sahibi işletim sistemini sorgulayarak (işletim sistemi destekliyor ve izin veriyorsa).

Eğer yukarıdakilerin hiçbirisi başarılı değilse, date_default_timezone_get işlevi öntanımlı UTC zaman dilimini döndürecektir.

Dönen Değerler

string türünde geri döner.

Örnekler

Örnek 1 - Öntanımlı zaman diliminin getirilmesi

<?php
date_default_timezone_set
('Europe/Istanbul');

if (
date_default_timezone_get()) {
    echo 
'date_default_timezone_set: 'date_default_timezone_get() .'<br />';
}

if (
ini_get('date.timezone')) {
    echo 
'date.timezone: ' ini_get('date.timezone');
}

?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

date_default_timezone_set: Europe/Istanbul
date.timezone: Europe/Istanbul

Örnek 2 - Zaman diliminin kısaltmasının getirilmesi

<?php
date_default_timezone_set
('Europa/Istanbul');
echo 
date_default_timezone_get() . ' => ' date('e') . ' => ' date('T');
?>

Yukarıdaki örneğin çıktısı:

Europe/Istanbul => Europe/Istanbul => EET

Ayrıca Bakınız



date_default_timezone_set

(PHP 5 >= 5.1.0)

date_default_timezone_set Betik içerisindeki tüm tarih/zaman işlevleri tarafından kullanılan öntanımlı zaman dilimini ayarlar

Açıklama

bool date_default_timezone_set ( string $zamandilimi_belirteci )

date_default_timezone_set() işlevi, tüm tarih/zaman işlevleri tarafından kullanılan öntanımlı zaman dilimini ayarlar.

Bilginize: PHP 5.1.0 sürümünden beri (tarih/zaman işlevleri yeniden yazıldığından beri), bir tarih/zaman işlevinin her çağrılışında, eğer zaman dilimi geçerli değilse bir E_NOTICE, eğer sistem ayarları ya da TZ ortam değişkeni kullanılıyorsa bir E_WARNING iletisi üretilmektedir.

Öntanımlı zaman dilimini ayarlamak için, bu işlevi betiğinizde kullanmak yerine, INI ayarlarındaki date.timezone yönergesini de kullanabilirsiniz.

Değiştirgeler

zamandilimi_belirteci

Zaman dilimi belirteci, UTC ya da Europe/Istanbul gibi bir değer olabilir. Geçerli belirteçlerin listesi Desteklenen Zaman Dilimlerinin Listesi bölümünde bulunmaktadır.

Dönen Değerler

Bu işlev zamandilimi_belirteci geçersizse FALSE, aksi takdirde TRUE döndürür.

Örnekler

Örnek 1 - Öntanımlı zaman dilimini almak

<?php
date_default_timezone_set
('Europa/Istanbul');

$betik_zd date_default_timezone_get();

if (
strcmp($betik_zdini_get('date.timezone'))){
    echo 
'Betik zaman dilimi ini dosyasında belirtilenden farklı.';
} else {
    echo 
'Betik zaman dilimi ini dosyasında belirtilenle aynı.';
}
?>

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Artık E_STRICT yerine E_WARNING oluşuyor.
5.1.2 İşlev, zamandilimi_belirteci değiştirgesini kullanmaya başladı.

Ayrıca Bakınız



date_diff

(PHP 5 >= 5.3.0)

date_diff DateTime::diff işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::diff işlevinin takma adıdır.



date_format

(PHP 5 >= 5.2.0)

date_format DateTime::format işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::format işlevinin takma adıdır.



date_get_last_errors

(PHP 5 >= 5.3.0)

date_get_last_errors DateTime::getLastErrors işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::getLastErrors işlevinin takma adıdır.



date_interval_create_from_date_string

(PHP 5 >= 5.3.0)

date_interval_create_from_date_string DateInterval::createFromDateString işlevinin takma adıdır

Açıklama

Bu işlev, DateInterval::createFromDateString işlevinin takma adıdır.



date_interval_format

(PHP 5 >= 5.3.0)

date_interval_format DateInterval::format işlevinin takma adıdır

Açıklama

Bu işlev, DateInterval::format işlevinin takma adıdır.



date_isodate_set

(PHP 5 >= 5.2.0)

date_isodate_set DateTime::setISODate işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::setISODate işlevinin takma adıdır.



date_modify

(PHP 5 >= 5.2.0)

date_modify DateTime::modify işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::modify işlevinin takma adıdır.



date_offset_get

(PHP 5 >= 5.2.0)

date_offset_get DateTime::getOffset işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::getOffset işlevinin takma adıdır.



date_parse_from_format

(PHP 5 >= 5.3.0)

date_parse_from_formatGet info about given date

Açıklama

array date_parse_from_format ( string $format , string $date )

Returns associative array with detailed info about given date.

Değiştirgeler

format

Format accepted by date() with some extras.

date

String representing the date.

Dönen Değerler

Returns associative array with detailed info about given date.

Örnekler

Örnek 1 date_parse_from_format() example

<?php
$date 
"6.1.2009 13:00+01:00";
print_r(date_parse_from_format("j.n.Y H:iP"$date));
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [year] => 2009
    [month] => 1
    [day] => 6
    [hour] => 13
    [minute] => 0
    [second] => 0
    [fraction] => 
    [warning_count] => 0
    [warnings] => Array
        (
        )

    [error_count] => 0
    [errors] => Array
        (
        )

    [is_localtime] => 1
    [zone_type] => 1
    [zone] => -60
    [is_dst] => 
)



date_parse

(PHP 5 >= 5.2.0)

date_parseVerilen tarih hakkındaki ayrıntılı bilgiyi ilişkisel dizi olarak döndürür

Açıklama

array date_parse ( string $tarih )

Değiştirgeler

tarih

strtotime() işlevi tarafından kabul edilen biçimde tarih.

Dönen Değerler

Başarılı olduğunda çözümlenen tarihin bilgilerini içeren diziyle, başarısız olduğunda FALSE değeriyle döner.

Hatalar/İstisnalar

Tarih biçimi hatalı olduğu taktirde, dizinin 'errors' elemanı hata iletilerini içerecektir.

Örnekler

Örnek 1 - date_parse() örneği

<?php
print_r
(date_parse("1923-11-29 20:30:00.0"));
?>

Yukarıdaki örneğin çıktısı:

Array
(
    [year] => 1923
    [month] => 11
    [day] => 29
    [hour] => 20
    [minute] => 30
    [second] => 0
    [fraction] => 0
    [warning_count] => 0
    [warnings] => Array ()
    [error_count] => 0
    [errors] => Array ()
    [is_localtime] =>
)

Ayrıca Bakınız



date_sub

(PHP 5 >= 5.3.0)

date_sub DateTime::sub işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::sub işlevinin takma adıdır.



date_sun_info

(PHP 5 >= 5.1.2)

date_sun_infoGüneşin doğuşu/batışı ve alacakaranlık başlangıcı/sonu hakkında bilgi içeren bir dizi döndürür

Açıklama

array date_sun_info ( int $zaman , float $enlem , float $boylam )

Değiştirgeler

zaman

Zaman damgası.

enlem

Enlem derecesi.

boylam

Boylam derecesi.

Dönen Değerler

Başarılı olduğunda diziyi, başarısız olduğunda FALSE değerini döndürür.

Örnekler

Örnek 1 - date_sun_info() örneği

<?php
$sun_info 
date_sun_info(strtotime("2008-12-12"), 36.5532.03);
foreach (
$sun_info as $key => $val) {
    echo 
"$key: " date("H:i:s"$val) . "\n";
}
?>

Yukarıdaki örneğin çıktısı:

sunrise: 06:54:58
sunset: 16:36:54
transit: 11:45:56
civil_twilight_begin: 06:26:20
civil_twilight_end: 17:05:32
nautical_twilight_begin: 05:54:03
nautical_twilight_end: 17:37:49
astronomical_twilight_begin: 05:22:39
astronomical_twilight_end: 18:09:14

Ayrıca Bakınız

  • date_sunrise() - Belirtilen gün ve konum için şafak zamanını döndürür
  • date_sunset() - Verilen gün ve konum için günbatımı zamanını döndürür



date_sunrise

(PHP 5)

date_sunriseBelirtilen gün ve konum için şafak zamanını döndürür

Açıklama

mixed date_sunrise ( int $zamandamgası [, int $biçim = SUNFUNCS_RET_STRING [, float $enlem = ini_get("date.default_latitude") [, float $boylam = ini_get("date.default_longitude") [, float $başucu = ini_get("date.sunrise_zenith") [, float $gmt_farkı = 0 ]]]]] )

date_sunrise() işlevi, verilen gün (zamandamgası ) ve konum için şafak zamanını döndürür.

Değiştirgeler

zamandamgası

Şafak zamanı öğrenilecek günün zamandamgası .

biçim

biçim sabitleri
sabit açıklama örnek
SUNFUNCS_RET_STRING Sonucu dizge olarak döndürür. 16:46
SUNFUNCS_RET_DOUBLE Sonucu gerçek sayı olarak döndürür. 16.78243132
SUNFUNCS_RET_TIMESTAMP Sonucu tamsayı (zaman damgası) olarak döndürür. 1095034606

enlem

Kuzey yarımküre öntanımlıdır. Güney yarımküre için negatif değer girin. Ayrıca bakınız: date.default_latitude

boylam

Doğu yarımküre öntanımlıdır. Batı yarımküre için negatif değer girin. Ayrıca bakınız: date.default_longitude

başucu

Öntanımlı: date.sunrise_zenith

gmt_farkı

Saat cinsinden belirtilir.

Dönen Değerler

Başarılı olduğunda, biçim değiştirgesiyle belirlenen biçimde şafak zamanını, başarız olduğunda FALSE değerini döndürür.

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

Örnekler

Örnek 1 - date_sunrise() örneği

<?php

/* İstanbul, Türkiye için şafak hesabı
Enlem: 41.01 Kuzey
Boylam: 28.58 Doğu
Başucu ~= 90
saat farkı: +2 GMT
*/

echo date("D M d Y"). ', şafak: ' .date_sunrise(time(), SUNFUNCS_RET_STRING41.0128.58902);

?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Fri Dec 12 2008, şafak: 07:25

Ayrıca Bakınız

  • date_sunset() - Verilen gün ve konum için günbatımı zamanını döndürür



date_sunset

(PHP 5)

date_sunset Verilen gün ve konum için günbatımı zamanını döndürür

Açıklama

mixed date_sunset ( int $zamandamgası [, int $biçim = SUNFUNCS_RET_STRING [, float $enlem = ini_get("date.default_latitude") [, float $boylam = ini_get("date.default_longitude") [, float $başucu = ini_get("date.sunset_zenith") [, float $gmt_farkı = 0 ]]]]] )

date_sunset() işlevi, verilen gün (zamandamgası ) ve konum için günbatımı zamanını döndürür.

Değiştirgeler

zaman damgası

Günbatımı zamanı alınacak günün zamandamgası .

biçim

biçim sabitleri
sabit açıklama örnek
SUNFUNCS_RET_STRING Sonucu dizge olarak döndürür. 16:46
SUNFUNCS_RET_DOUBLE Sonucu gerçek sayı olarak döndürür. 16.78243132
SUNFUNCS_RET_TIMESTAMP Sonucu tamsayı (zaman damgası) olarak döndürür. 1095034606

enlem

Kuzey yarımküre öntanımlıdır. Güney yarımküre için negatif değer girin. Ayrıca bakınız: date.default_latitude

boylam

Doğu yarımküre öntanımlıdır. Batı yarımküre için negatif değer girin. Ayrıca bakınız: date.default_longitude

başucu

Öntanımlı: date.sunset_zenith

gmt_farkı

Saat cinsinden belirtilir.

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

Dönen Değerler

Başarılı olduğunda, biçim değiştirgesiyle belirlenen biçemde gün batımı zamanını, başarız olduğunda FALSE değerini döndürür.

Örnekler

Örnek 1 - date_sunset() örneği

<?php

/* İstanbul, Türkiye için günbatımı zamanı hesabı
Enlem: 41.01 Kuzey
Boylam: 28.58 Doğu
Başucu ~= 90
saat farkı: +2 GMT
*/

echo date("D M d Y"). ', günbatımı: ' .date_sunset(time(), SUNFUNCS_RET_STRING41.0128.58902);

?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Thu Dec 11 2008, günbatımı: 16:33

Ayrıca Bakınız

  • date_sunrise() - Belirtilen gün ve konum için şafak zamanını döndürür



date_time_set

(PHP 5 >= 5.2.0)

date_time_set DateTime::setTime işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::setTime işlevinin takma adıdır.



date_timestamp_get

(PHP 5 >= 5.3.0)

date_timestamp_get DateTime::getTimestamp işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::getTimestamp işlevinin takma adıdır.



date_timestamp_set

(PHP 5 >= 5.3.0)

date_timestamp_set DateTime::setTimestamp işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::setTimestamp işlevinin takma adıdır.



date_timezone_get

(PHP 5 >= 5.2.0)

date_timezone_get DateTime::getTimezone işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::getTimezone işlevinin takma adıdır.



date_timezone_set

(PHP 5 >= 5.2.0)

date_timezone_set DateTime::setTimezone işlevinin takma adıdır

Açıklama

Bu işlev, DateTime::setTimezone işlevinin takma adıdır.



date

(PHP 4, PHP 5)

dateYerel tarihi/saati biçimlendirir

Açıklama

string date ( string $biçim [, int $zaman_damgası ] )

zaman_damgası değiştirgesi ile belirtilen zamanı ya da zaman damgası değiştirgesi kullanılmamışsa yerel zamanı, belirtilen biçime göre biçimlendirerek döndürür. Başka bir deyişle, zaman_damgası değiştirgesini belirtmek isteğe bağlıdır ve varsayılan değeri time() işlevinin değeridir.

Değiştirgeler

biçim

Çıktılanan zamanın string türünden biçimi. Biçimlendirme seçenekleri için aşağıya bakınız. Ayrıca burada kullanılabilecek önceden tanımlanmış çeşitli tarih sabitleri vardır. Örneğin, DATE_RSS sabiti 'D, d M Y H:i:s' biçemini içerir.

Aşağıdaki karakterler biçim değiştirge dizgesi içinde tanınır.
biçim karakteri Açıklama Örnek sonuç
Gün --- ---
d Ay günlerinin sıfır dolgulu iki haneli gösterimi 01'den 31'e
D Ay günlerinin üç harfli metinsel gösterimi Pzt'den Paz'a
j Ay günlerinin sıfır dolgusuz gösterimi 1'den 31'e
l (küçük 'L' harfi) Hafta günlerinin tam metinsel gösterimi Pazar'dan Cumartesi'ye
N Hafta günlerinin ISO-8601 standardında sayısal gösterimi (PHP 5.1.0'da eklenmiştir) 1'den (Pazartesi için) 7'ye (Pazar için)
S Ay günleri için 2 karakterli İngilizce sıralama ekleri st, nd, rd ya da th. j ile uyumlu çalışmaktadır.
w Hafta günlerinin sayısal gösterimi 0'dan (Pazar için) 6'ya (Cumartesi için)
z Yılın günleri (0'dan başlar) 0'dan 365'e
Hafta --- ---
W ISO-8601 standartına göre yılın hafta numarası, hafta başlangıcı Pazartesi'dir (PHP 4.1.0 sürümüyle eklenmiştir) Örneğin: 42 (Yılın 42'inci haftası)
Ay --- ---
F Ayın tam metinsel gösterimi, Ocak ya da Mart gibi January'den December'a
m Ayın sıfır dolgulu sayısal gösterimi 01'den 12'ye
M Ayın üç karakterli, metinsel kısa gösterimi Jan'dan Dec'e kadar
n Ayın sıfır dolgusuz sayısal gösterimi 1'den 12'ye kadar
t Belirtilen ayın gün sayısı 28'den 31'e
Yıl --- ---
L Artık yıl olduğunda Eğer artık yılsa 1, değilse 0.
o ISO-8601 standardı yıl numarası. ISO hafta numaralarının (W) ait olduğu yılın gösterilmesi dışında Y ile aynı değere sahiptir. (PHP 5.1.0 sürümünde eklenmiştir) Örnekler: 1999 ya da 2003 gibi
Y Yılın 4 haneli sayısal, tam gösterimi Örnekler: 1999 ya da 2003 gibi
y Yılın iki haneli gösterimi Örnekler: 99 ya da 03 gibi
Saat --- ---
a Küçük harfli öğleden önce ve öğleden sonra am ya da pm
A Büyük harfli öğleden önce ve öğleden sonra AM ya da PM
B Swatch İnternet saati 000'dan 999'a
g Saatin, 12-saatlik sıfır dolgusuz gösterimi 1'den 12'ye
G Saatin, 24-saatlik sıfır dolgusuz gösterimi 0'dan 23'e
h Saatin, 12-saatlik sıfır dolgulu gösterimi 01'den 12'ye
H Saatin, 24-saatlik sıfır dolgulu gösterimi 00'dan 23'e
i Sıfır dolgulu dakika gösterimi 00 ile 59 arasında
s Sıfır dolgulu saniye gösterimi 00 ile 59 arasında
u Mikrosaniye (PHP 5.2.2 sürümüyle eklenmiştir) Örneğin: 654321
Zaman dilimi --- ---
e Zaman dilimi belirteci (PHP 5.1.0 sürümüyle eklenmiştir) Örnekler: UTC, GMT, Europe/Istanbul
I (büyük ı) Yaz saati uygulaması var mı? Varsa 1, yoksa 0.
O Saat olarak Greenwich zamanı (GMT) farkı Örneğin: +0200
P Saat ve dakika olarak Greenwich zamanı (GMT) farkı (PHP 5.1.3 sürümüyle eklenmiştir) Örneğin: +02:00
T Zaman dilimi kısaltması Örnekler: EST, EET gibi
Z Saniye cinsinden saat farkı. UTC'nin batısı daima negatif, doğusu ise daima pozitif değerlidir. -43200'den 50400'e
Tam Tarih/Saat --- ---
c ISO 8601 standardı tarih (PHP 5'te' eklenmiştir) 2004-02-12T15:19:21+00:00
r » RFC 2822 biçiminde tarih Örneğin: Thu, 21 Dec 2000 16:01:07 +0200
U Unix Zaman Başlangıcından (1 Ocak 1970 00:00:00 GMT) itibaren geçen saniye sayısı time() işlevine bakınız

Biçim dizgesinde tanınmayan karakterler olduğu gibi yazdırılacaktır. Z biçimi gmdate() işleviyle kullanıldığında daima 0 değerini döndürür.

Bilginize: Bu işlev sadece integer türünde zaman damgalarını kabul etmektedir. u biçim karakteri sadece date_format() işlevinde, date_create() işleviyle kullanıcı tabanlı bir zaman damgası oluşturulduğunda kullanılabilir.

zaman_damgası

Seçimlik zaman_damgası değiştirgesi integer türünde bir Unix zaman damgası olup belirtilmediği takdirde yerel zaman kullanılır. Başka bir deyişle, time() işlevinden dönen değer öntanımlıdır.

Dönen Değerler

Biçimlendirilmiş tarih dizgesi döndürür. Eğer zaman_damgası değiştirgesi için sayı olmayan bir değer girilirse; FALSE döndürülür ve E_WARNING seviyesinde bir hata çıktılanır.

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0 Zaman damgasının geçerlilik aralığı, genellikle Cum, 13 Ara 1901 20:45:54 GMT ile Per, 19 Oca 2038 03:14:07 GMT arasındadır. (Bu tarih değerleri aynı zamanda en küçük ve en büyük 32-bit işaretli tamsayıları temsil etmektedir.) Bununla birikte, PHP 5.1.0'den önce bu aralık bazı sistemlerde 01-01-1970 ile 19-01-2038 arasıyla sınırlıydı. (ör: Windows).
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

5.1.1 Standart tarih/zaman biçimleri için, biçim değiştirgesinde kullanılabilecek yararlı sabitler devreye girdi.

Örnekler

Örnek 1 - date() örnekleri

<?php
// varsayılan zaman dilimini ayarla. PHP 5.1'den beri kullanılabilir.
date_default_timezone_set('UTC');


// Şöyle bir şey basar: Monday
echo date("l");

// Şöyle bir şey basar: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');

// Şöyle bir şey basar: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " date("l"mktime(000712000));

/* biçim değiştirgesi için sabit kullanımı*/
// Şöyle bir şey basar: Mon, 15 Aug 2005 15:12:46 UTC
echo date(DATE_RFC822);

// Şöyle bir şey basar: 2000-07-01T00:00:00+00:00
echo date(DATE_ATOMmktime(000712000));
?>

Biçim dizgesinin içinde tanınan bir karakterin önüne bir tersbölü imi koyarak yorumlanmasını engelleyebilirsiniz. Eğer tersbölülü karakter zaten özel bir dizilimi ifade ediyorsa, bir tane daha tersbölü karakterine ihtiyacınız olacaktır.

Örnek 2 - date() işlevinde önceleme karakterleri

<?php
// Şöyle bir şey basar: Wednesday the 15th
echo date("l \\t\h\e jS");
?>

date() ve mktime() işlevleri birlikte, geçmiş ya da gelecek zamanın bulunmasında kullanılabilir.

Örnek 3 - date() ve mktime() örneği

<?php
$yarın  
mktime(000date("m")  , date("d")+1date("Y"));
$geçenay mktime(000date("m")-1date("d"),   date("Y"));
$gelecekyıl mktime(000date("m"),   date("d"),   date("Y")+1);
?>

Bilginize: Bu kullanım, yaz saati uygulamasından dolayı, bir zaman damgasına basitçe saniye, gün ve ay ekleme veya çıkartma işlemlerinden daha güvenilirdir.

Bazı date() işlevi biçimlendirme örnekleri. Diğer öncelenen karakterlerin, geçerli bir özel anlama sahip olabileceklerinden istenmeyen sonuçlara neden olacağını ve gelecekteki PHP sürümlerinde kullanılmak üzere tahsis edilebileceklerini dikkate alın. Önceleme yaparken \n gibi özel karakterlerin oluşmasını önlemek için dizgeyi tek tırnaklar arasına almayı unutmayın.

Örnek 4 - date() Biçemlemesi

<?php
// Bugünün; March 10th, 2001, 5:16:18 pm olduğunu ve
// Mountain Standard Time (MST) Zaman Diliminde olduğumuzu varsayıyoruz

$bugün date("F j, Y, g:i a");                 // March 10, 2001, 5:16 pm
$bugün date("m.d.y");                         // 03.10.01
$bugün date("j, n, Y");                       // 10, 3, 2001
$bugün date("Ymd");                           // 20010310
$bugün date('h-i-s, j-m-y, it is w Day');     // 05-16-18, 10-03-01, 1631 1618 6 Satpm01
$bugün date('\i\t \i\s \t\h\e jS \d\a\y.');   // it is the 10th day.
$bugün date("D M j G:i:s T Y");               // Sat Mar 10 17:16:18 MST 2001
$bugün date('H:m:s \m \i\s\ \m\o\n\t\h');     // 17:03:18 m is month
$bugün date("H:i:s");                         // 17:16:18
?>

Tarihi farklı dillerde biçimlendirmek için, date() işlevi yerine setlocale() ve strftime() işlevini kullanmalısınız.

Notlar

Bilginize: Tarihin dizge gösteriminden zaman damgası üretirken, strtotime() işlevini kullanabilirsiniz. Ayrıca, bazı veritabanları girilen zaman damgalarını kendi biçimine çeviren işlevlere sahiptir (MySQL'in » UNIX_TIMESTAMP işlevi gibi).

İpucu

PHP 5.1 sürümünden beri istek başlangıcının zaman damgası $_SERVER['REQUEST_TIME'] değişkeniyle tanımlanmaktadır.

Ayrıca Bakınız



getdate

(PHP 4, PHP 5)

getdateTarih/zaman bilgisi getirir

Açıklama

array getdate ([ int $zaman_damgası = time() ] )

Değiştirgeyle çağrılmışsa zaman_damgası 'na karşılık olan tarih bilgisini bir ilişkisel dizi olarak döndürür. Değiştirgesiz çağrılmışsa dönen değer o anın yerel zamanına göre olur.

Değiştirgeler

zaman_damgası

Seçimlik zaman_damgası değiştirgesi integer türünde bir Unix zaman damgası olup belirtilmediği takdirde yerel zaman kullanılır. Başka bir deyişle, time() işlevinden dönen değer öntanımlıdır.

Dönen Değerler

zaman_damgası 'na karşılık olan tarih bilgisini bir ilişkisel dizi olarak döndürür. İlişkisel dizide döndürülen öğeler aşağıdaki gibidir:

İlişkisel diziyle döndürülen anahtarlar
Anahtar Açıklama Örnek dönüş değerleri
"seconds" Saniyelerin sayısal gösterimi 0'dan 59'a kadar
"minutes" Dakikaların sayısal gösterimi 0'dan 59'a kadar
"hours" Saatlerin sayılsal gösterimi 0'dan 23'e kadar
"mday" Ayın günlerinin sayısal gösterimi 1'den 31'e kadar
"wday" Haftanın günlerinin sayılsal gösterimi (Pazar için) 0'dan (Cumartesi için) 6'ya kadar
"mon" Ayın sayısal gösterimi 1 'den 12'ye kadar
"year" Yılın 4 haneli sayısal tam gösterimi Örnek: 1999 ya da 2003 gibi
"yday" Yılın gününün sayısal gösterimi 0'dan 365'e kadar
"weekday" Haftanın gününün metinsel tam gösterimi Sunday'dan Saturday'ye
"month" Ayın metinsel tam gösterimi, Ocak ya da Mart gibi January'dan December'a kadar
0 Saniyeler, Unix Zaman Başlangıcından itibaren, time() işlevi tarafından döndürülen ve date() işleviyle kullanılan değerlerle benzerdir. Sisteme Bağımlı, genellikle -2147483648 ile 2147483647 arasında.

Örnekler

Örnek 1 - getdate() örneği

<?php
$bugun 
getdate();
print_r($bugun);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [seconds] => 40
    [minutes] => 58
    [hours]   => 21
    [mday]    => 17
    [wday]    => 2
    [mon]     => 6
    [year]    => 2003
    [yday]    => 167
    [weekday] => Salı
    [month]   => Haziran
    [0]       => 1055901520
)

Ayrıca Bakınız

  • date() - Yerel tarihi/saati biçimlendirir
  • time() - Geçerli Unix zaman damgasını döndürür
  • setlocale() - Yereli ayarlar



gettimeofday

(PHP 4, PHP 5)

gettimeofdayGeçerli zamanı getirir

Açıklama

mixed gettimeofday ([ bool $sayı_döndür ] )

gettimeofday(2) işlevinin arayüzüdür. Sistem çağrısıdan döndürülmüş veriyi içeren bir ilişkisel dizi döndürür.

Değiştirgeler

sayı_döndür

TRUE olarak ayarlanmışsa, bir dizi yerine bir gerçek sayı döndürür.

Dönen Değerler

Varsayılan durumda değer array türünden döner. Eğer sayı_döndür değiştirgesi TRUE ise float türünde bir değerle döner.

Dizi anahtarları:

  • "sec" - Unix Zaman Başlangıcından itibaren geçen saniye sayısı.
  • "usec" - mikrosaniye
  • "minuteswest" - Greenwich'in batı saniyeleri
  • "dsttime" - yaz saati düzeltmesi

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0 sayı_döndür değiştirgesi eklendi.

Örnekler

Örnek 1 - gettimeofday() örneği

<?php
print_r
(gettimeofday());

echo 
gettimeofday(true);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [sec] => 1073504408
    [usec] => 238215
    [minuteswest] => 0
    [dsttime] => 1
)

1073504408.23910



gmdate

(PHP 4, PHP 5)

gmdateBir tarih/saati GMT/UTC tarih/saati olarak biçemler

Açıklama

string gmdate ( string $biçem [, int $zaman_damgası ] )

Zamanı, Greenwich Saatiyle (GMT) döndürmesi dışında tıpkı date() işlevi gibi çalışır.

Değiştirgeler

biçim

Zaman çıktısının biçimi string türündendir. Biçimlendirme seçenekleri için date() işlevine bakınız.

zaman_damgası

Seçimlik zaman_damgası değiştirgesi integer türünde bir Unix zaman damgası olup belirtilmediği takdirde yerel zaman kullanılır. Başka bir deyişle, time() işlevinden dönen değer öntanımlıdır.

Dönen Değerler

Biçimlendirilmiş tarih dizgesi döndürür. Eğer zaman_damgası değiştirgesi için sayısal değer kullanılmamışsa, FALSE döndürür ve E_WARNING seviyesinde bir hata çıktılar.

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0 Zaman damgasının geçerlilik aralığı, genellikle Cum, 13 Ara 1901 20:45:54 GMT ile Per, 19 Oca 2038 03:14:07 GMT arasındadır. (Bu tarih değerleri aynı zamanda en küçük ve en büyük 32 bitlik işaretli tamsayıları temsil etmektedir.) Bununla birikte, PHP 5.1.0'den önce bu aralık bazı sistemlerde (ör: Windows) 01-01-1970 ile 19-01-2038 arasıyla sınırlıdır.
5.1.1 biçem değiştirgesinde kullanılabilecek standart tarih/zaman biçem sabitleri kullanıma girdi.

Örnekler

Örnek 1 - gmdate() örneği

Aşağıdaki betik Türkiye'de (GMT +0200) çalıştırılsaydı ilk çıktı "01 Oca 1998 00:00:00", ikinci çıktı "31 Ara 1997 22:00:00" olurdu.

<?php
echo date("d M Y H:i:s"mktime(000111998));
echo 
gmdate("d M Y H:i:s"mktime(000111998));
?>

Ayrıca Bakınız

  • date() - Yerel tarihi/saati biçimlendirir
  • mktime() - Bir tarih için Unix zaman damgasını döndürür
  • gmmktime() - Bir GMT tarihi için Unix zaman damgasını döndürür
  • strftime() - Format a local time/date according to locale settings



gmmktime

(PHP 4, PHP 5)

gmmktimeBir GMT tarihi için Unix zaman damgasını döndürür

Açıklama

int gmmktime ([ int $saat = gmdate("H") [, int $dakika = gmdate("i") [, int $saniye = gmdate("s") [, int $ay = gmdate("n") [, int $gün = gmdate("j") [, int $yıl = gmdate("Y") [, int $ysu_var = -1 ]]]]]]] )

Aktarılan değiştirgelerin bir GMT tarihini belirtmesi dışında tıpkı mktime() işlevi gibidir. gmmktime() işlevi kendi içinde mktime() işlevini kullanır ve sadece türetilen yerel zamanda geçerli zamanlar kullanılabilir.

mktime() işlevindeki gibi, değiştirgeler sağdan sola sıralıdır. Böylece belirtilmeyen değiştirge için geçerli GMT zamanının kullanılabilmesi sağlanmıştır.

Değiştirgeler

saat

Saat

dakika

Dakika

saniye

Saniye-

Ay

Ay

Gün

Gün

Yıl

Yıl

ysu_var

Değiştirgeler daima GMT zamanını temsil eder. ysu_var değiştirgesinin sonuca etkisi yoktur.

Dönen Değerler

integer türünden Unix zaman damgası döner.

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0 PHP 5.1.0 sürümünden beri, ysu_var değiştirgesinin kullanılması önerilmemektedir. Sonuç olarak, yerine yeni zaman dilimi özellikleri kullanılmalıdır.

Örnekler

Örnek 1 - Windows üzerinde gmmktime() işlevi

<?php
gmmktime
(000111970); // GMT ve batıda geçerli, doğuda geçersiz
?>

Ayrıca Bakınız

  • mktime() - Bir tarih için Unix zaman damgasını döndürür
  • date() - Yerel tarihi/saati biçimlendirir
  • time() - Geçerli Unix zaman damgasını döndürür



gmstrftime

(PHP 4, PHP 5)

gmstrftimeYerel ayarlara göre tarih ve saati, GMT/UTC türüne çevirir

Açıklama

string gmstrftime ( string $biçem [, int $zaman_damgası = time() ] )

Zamanı, Greenwich Saatiyle (GMT) döndürmesi dışında tıpkı strftime() işlevi gibi davranır. Örneğin, Doğu Standart Zamanınında (GMT -0500) çalıştırıldığında, aşağıdaki örneğin ilk satırı "Ara 31 1998 20:00:00" basarken ikinci satırı "Oca 01 1999 01:00:00" basar.

Değiştirgeler

biçem

Açıklama için strftime() işlevine bakınız.

zaman_damgası

Seçimlik zaman_damgası değiştirgesi integer türünde bir Unix zaman damgası olup belirtilmediği takdirde yerel zaman kullanılır. Başka bir deyişle, time() işlevinden dönen değer öntanımlıdır.

Dönen Değerler

İstenilen biçime göre verilen zaman_damgası değiştirgesini ya da zaman damgası değiştirgesi kullanılmamışsa yerel zamanı; biçimlendirilmiş dizge olarak döndürür. Ay ve hafta günlerinin isimleri ve diğer dile bağımlı dizgelerle ilgili geçerli yereller setlocale() işlevi ile ayarlanabilir.

Örnekler

Örnek 1 - gmstrftime() örneği

<?php
setlocale
(LC_TIME'en_US');
echo 
strftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
echo 
gmstrftime("%b %d %Y %H:%M:%S"mktime(2000123198)) . "\n";
?>

Ayrıca Bakınız

  • strftime() - Format a local time/date according to locale settings



idate

(PHP 5)

idateYerel zamanı/tarihi tamsayı olarak biçimlendirir

Açıklama

int idate ( string $biçem [, int $zaman_damgası = time() ] )

zaman_damgası ile belirtilen zaman için biçem dizgesine göre biçemlenmiş bir sayı döndürür. zaman_damgası belirtilmemişse time() işlevinin çıktısı öntanımlıdır.

date() işlevinden farklı olarak, idate() işlevi biçem dizgesi olarak tek bir karakter kabul eder.

Değiştirgeler

biçem

biçim değiştirgesinde aşağıdaki karakterlerden biri belirtilebilir
biçem karakterleri Açıklama
B Swatch Ritim/İnternet Saati
d Ayın günleri
h Saat (12 saatlik gösterim)
H Saat (24 saatlik gösterim)
i Dakika
I (büyük ı) Yaz Saati Uygulaması etkinleştirilmişse 1, diğer durumlarda 0 döndürür
L (büyük l) artık yıl için 1, değilse 0 döndürür
m Ayın sayısal dengi
s Saniye
t Şimdiki ayın günleri
U Unix Zaman Başlangıcından (1 Ocak 1970 00:00:00 UTC) beri geçen saniye sayısı; time() işlevinin çıktısına eşdeğerdir.
w Haftanın günü (Pazar için 0)
W ISO-8601 standardına göre yılın hafta numarası, haftaların başlangıcı Pazartesi'dir
y Yıl (1 yada 2 karakter - aşağıya bakınız)
Y Yıl (4 haneli)
z Yılın günü
Z Sanile olarak zaman dilimi

zaman_damgası

Seçimlik zaman_damgası değiştirgesi integer türünde bir Unix zaman damgası olup belirtilmediği takdirde yerel zaman kullanılır. Başka bir deyişle, time() işlevinden dönen değer öntanımlıdır.

Dönen Değerler

integer türünde bir değer döner.

idate() işlevi daima integer türünde değer döndürse de bu değerler "0" ile başlayamaz. idate() işlevi beklediğinizden daha az karakter döndürebilir. Aşağıdaki örneğe bakınız.

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

Örnekler

Örnek 1 - idate() örneği

<?php
$timestamp 
strtotime('1st January 2004'); //1072915200

// Yılı iki haneli basması gerekirse de
// başında "0" olmadan sadece "4" basar
echo idate('y'$timestamp);
?>

Ayrıca Bakınız

  • date() - Yerel tarihi/saati biçimlendirir
  • time() - Geçerli Unix zaman damgasını döndürür



localtime

(PHP 4, PHP 5)

localtimeYerel zamanı getirir

Açıklama

array localtime ([ int $zamandamgası = time() [, bool $ilişkisel_mi = false ]] )

localtime() işlevi, standart C işlev çağrısı olan localtime tarafından döndürülen yapıya eşdeğer bir dizi döndürür.

Değiştirgeler

zaman_damgası

Seçimlik zaman_damgası değiştirgesi integer türünde bir Unix zaman damgası olup belirtilmediği takdirde yerel zaman kullanılır. Başka bir deyişle, time() işlevinden dönen değer öntanımlıdır.

ilişkisel_mi

Eğer değiştirge FALSE olarak ayarlanmış ya da kullanılmamışsa, sayısal indisli bir dizi döndürür. Eğer değiştirge TRUE olarak ayarlanmışsa localtime() işlevi standart C işlevi localtime tarafından döndürülen yapıyı farklı öğe isimleriyle indislenmiş olarak bir ilişkisel dizi olarak döndürür. İlişkisel dizinin farklı öğe isimleri aşağıdaki gibidir:

  • "tm_sec" - saniye
  • "tm_min" - dakika
  • "tm_hour" - saat
  • "tm_mday" - ayın günleri Aylar, 0'dan (Ocak) 11'e (Aralık) ve haftanın günleri 0'dan (Paz) 6'ya (Cmt).
  • "tm_mon" - yılın ayları, Ocak için 0'dan başlar
  • "tm_year" - Yıllar, başlangıç 1900 kabul edilir
  • "tm_wday" - Haftanın günleri
  • "tm_yday" - Yılın günleri
  • "tm_isdst" - Yaz saati uygulaması bilgisi

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

Örnekler

Örnek 1 - localtime() örneği

<?php
$localtime 
localtime();
$localtime_assoc localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Array
(
    [0] => 24
    [1] => 3
    [2] => 19
    [3] => 3
    [4] => 3
    [5] => 105
    [6] => 0
    [7] => 92
    [8] => 1
)

Array
(
    [tm_sec] => 24
    [tm_min] => 3
    [tm_hour] => 19
    [tm_mday] => 3
    [tm_mon] => 3
    [tm_year] => 105
    [tm_wday] => 0
    [tm_yday] => 92
    [tm_isdst] => 1
)



microtime

(PHP 4, PHP 5)

microtimeGeçerli Unix zaman damgasını mikrosaniye olarak döndürür

Açıklama

mixed microtime ([ bool $gerçek_sayı ] )

microtime() işlevi geçerli Unix zaman damgasını mikrosaniye cinsinden döndürür. Bu işlev sadece gettimeofday() sistem çağrısını destekleyen işletim sistemlerinde geçerlidir.

Değiştirgeler

gerçek_sayı

İşlev, isteğe bağlı olarak değiştirgesiz çağırıldığında; "msan. san." dizgesini döndürür. 'san.' geçerli zamanın Unix Zamam Başlangıcından (1 Ocak 1970 0:00:00 GMT) itibaren hesaplanan saniyeyi ve 'msan.' ise mikrosaniye kısmını belirtir. Dizgenin iki kısmı da saniye cinindendir.

İsteğe bağlı kullanılan bu değiştirgeyle TRUE aktarıldığında, saniyeler float türünde döndürülür.

Sürüm Bilgisi

Sürüm: Açıklama
5.0.0 gerçek_sayı değiştirgesi eklendi.

Örnekler

Örnek 1 - microtime() ile zamanlama betiği

<?php
/**
 * PHP 5 davranışını taklit eden basit bir işlev
 */
function microtime_float()
{
    list(
$usec$sec) = explode(" "microtime());
    return ((float)
$usec + (float)$sec);
}

$sure_baslangici microtime_float();

// Biraz bekle
usleep(100);

$sure_bitimi microtime_float();
$sure $sure_bitimi $sure_baslangici;

echo 
"Bekleme süresi: $time saniye\n";
?>

Örnek 2 - PHP 5'de zamanlama betiği

<?php
$sure_baslangici 
microtime(true);

// Biraz bekle
usleep(100);

$sure_bitimi microtime(true);
$sure $sure_bitimi $sure_baslangici;

echo 
"Bekleme süresi: $time saniye.\n";
?>

Ayrıca Bakınız

  • time() - Geçerli Unix zaman damgasını döndürür



mktime

(PHP 4, PHP 5)

mktimeBir tarih için Unix zaman damgasını döndürür

Açıklama

int mktime ([ int $saat = date("H") [, int $dakika = date("i") [, int $saniye = date("s") [, int $ay = date("n") [, int $gün = date("j") [, int $yıl = date("Y") [, int $ysu_var = -1 ]]]]]]] )

Verilen değiştirge düzenine göre Unix zaman damgasını döndürür. Bu zaman damgası, Unix Zaman Başlangıcı (1 Ocak 1970 00:00:00 GMT) ile belirtilen zaman arasında geçen süreyi uzun tamsayı türünde saniye olarak belirtir.

Değiştirgeler sağdan sola sıralıdır; böylece belirtilmeyen bir değiştirge yerine yerel tarih ve zamana göre geçerli değerin kullanılması sağlanmıştır.

Notlar

Bilginize: PHP 5.1'den itibaren, mktime() değiştirgesiz çağrıldığına bir E_STRICT uyarısı çıktılamaktadır. Böyle durumlarda time() işlevini kullanmalısınız.

Değiştirgeler

saat

Saat sayısı.

dakika

Dakika sayısı.

saniye

Son dakikanın geçen saniye sayısı.

ay

Ay sayısı.

gün

Gün sayısı.

yıl

Yıl sayısı, iki ya da dört hane olabilir. 0-69 değerleri arasında olanlar 2000-2069 ile ve 70-100 arasındaki değerler ise 1970-2000 yıllarıyla eşleşir. Sistemlerdeki time_t türü 32 bit işaretli tamsayı türüyle belirtilmiştir ve günümüzde çok kullanılmaktadır. yıl değiştirgesi için geçerli aralık 1901 ve 2038 arasındadır. Bununla birlikte, PHP 5.1.0 sürümünden önce bu aralık bazı sistemlerde 1970 ve 2038 arasında sınırlıydı (ör. Windows).

ysu_var

Bu değiştirge, yaz saati uygulaması varsa 1'e yoksa 0'a ya da yaz saati uygulması olup olmadığının bilinmediği durumlarda varsayılan değere yani -1'e ayarlanmalıdır. Bilinmeyen durumlarda PHP bunu çözümleyecektir. Bu beklenmeyen sonuçlara (fakat yanlış olmayan) neden olur. Bazı zamanlarda, PHP çalışırken YSU etkinleştirildiğinde ya da ysu_var değiştirgesi 1'e ayarlandığında zaman geçersiz olur. Örneğin, eğer saat 2:00'de YSU etkinleştirilirse, 2:00 ve 3:00 arasındaki tüm zaman geçersiz olacak ve mktime() işlevi anlamsız (genellikle negatif) bir değerle dönecektir. Bazı sistemlerde (ör. Solaris 8) YSU gece yarısında etkinleşir. YSU etkinleştiğinde saat 0:30 ise, saat bir önceki günün 23:30'u olarak değerlendirilecektir.

Bilginize: PHP 5.1.0 sürümünden beri, bu değiştirgenin kullanılması önerilmemektedir. Sonuç olarak, yerine yeni zaman dilimi özellikleri kullanılmalıdır.

Dönen Değerler

mktime() işlevi verilen değiştirgelerden elde edilen Unix zaman damgası döndürür. Eğer değiştirge geçersiz ise işlev FALSE değeriyle döner (PHP 5.1 sürümünden önce -1 dönerdi).

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

Sürüm Bilgisi

Sürüm: Açıklama
5.3.0 Artık mktime() işlevi, ysu_var değiştirgesi kullanılırsa E_DEPRECATED uyarısı vermektedir.
5.1.0 ysu_var değiştirgesinin kullanımı artık önerilmemektedir. İşlev hata durumunda -1 yerine, FALSE değeri döndürür olmuştur. İşlev, yıl, ay ve gün değiştirgelerinde sıfır kabul edecek şekilde düzeltilmiştir.
5.1.0 mktime() değiştirgesiz çağrıldığına bir E_STRICT uyarısı çıktılamaktadır. Böyle durumlarda time() işlevini kullanmalısınız.
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

Örnekler

Örnek 1 - Basit bir mktime() örneği

<?php
// Öntanımlı zaman dilimini belirtelim. PHP 5.1'den beri kullanılabiliyor.
date_default_timezone_set('UTC');

echo 
"July 1, 2000 is on a " date("l"mktime(000712000));
// Çıktısı: July 1, 2000 is on a Saturday

echo date('c'mktime(123452006));
// Şöyle bir şey basar: 2006-04-05T01:02:03+00:00
?>

Örnek 2 - mktime() örneği

mktime() işlevi tarih hesaplamaları ve geçerlilik denetimi için kullanışlıdır. Aralık dışına çıkan değerleri (ayın 32'si gibi) özdevinimli olarak doğru hesaplar. Örneğin, aşağıdaki satırların üreteceği dizge "Jan-01-1998" olacaktır.

<?php
echo date("M-d-Y"mktime(00012321997));
echo 
date("M-d-Y"mktime(0001311997));
echo 
date("M-d-Y"mktime(000111998));
echo 
date("M-d-Y"mktime(0001198));
?>

Örnek 3 - Gelecek ayın son günü

Verilen herhangi bir ayın son günü, gelecek ayın -1'inci değil 0'ıncı günü olarak ifade edilebilir. Aşağıdaki iki örnek de "2000 Şubat'ının son günü: 29" dizgesi üretilecektir.

<?php
$songün 
mktime(000302000);
echo 
strftime("2000 Şubat'ının son günü: %d"$songün);
$songün mktime(0004, -312000);
echo 
strftime("2000 Şubat'ının son günü: %d"$songün);
?>

Notlar

Dikkat

PHP 5.1.0 sürümünden önce, negatif zaman damgaları bilinen Windows sürümleri altında ve diğer benzer sistemlerde desteklemiyordu. Bundan dolayı, geçerli yılların aralığı 1970 ile 2038 arasında sınırlıydı.

Ayrıca Bakınız

  • gmmktime() - Bir GMT tarihi için Unix zaman damgasını döndürür
  • date() - Yerel tarihi/saati biçimlendirir
  • time() - Geçerli Unix zaman damgasını döndürür



strftime

(PHP 4, PHP 5)

strftimeFormat a local time/date according to locale settings

Açıklama

string strftime ( string $format [, int $timestamp = time() ] )

Format the time and/or date according to locale settings. Month and weekday names and other language-dependent strings respect the current locale set with setlocale().

Not all conversion specifiers may be supported by your C library, in which case they will not be supported by PHP's strftime(). Additionally, not all platforms support negative timestamps, so your date range may be limited to no earlier than the Unix epoch. This means that %e, %T, %R and, %D (and possibly others) - as well as dates prior to Jan 1, 1970 - will not work on Windows, some Linux distributions, and a few other operating systems. For Windows systems, a complete overview of supported conversion specifiers can be found at » MSDN.

Değiştirgeler

format

The following characters are recognized in the format parameter string
format Description Example returned values
Day --- ---
%a An abbreviated textual representation of the day Sun through Sat
%A A full textual representation of the day Sunday through Saturday
%d Two-digit day of the month (with leading zeros) 01 to 31
%e Day of the month, with a space preceding single digits 1 to 31
%j Day of the year, 3 digits with leading zeros 001 to 366
%u ISO-8601 numeric representation of the day of the week 1 (for Monday) though 7 (for Sunday)
%w Numeric representation of the day of the week 0 (for Sunday) through 6 (for Saturday)
Week --- ---
%U Week number of the given year, starting with the first Sunday as the first week 13 (for the 13th full week of the year)
%V ISO-8601:1988 week number of the given year, starting with the first week of the year with at least 4 weekdays, with Monday being the start of the week 01 through 53 (where 53 accounts for an overlapping week)
%W A numeric representation of the week of the year, starting with the first Monday as the first week 46 (for the 46th week of the year beginning with a Monday)
Month --- ---
%b Abbreviated month name, based on the locale Jan through Dec
%B Full month name, based on the locale January through December
%h Abbreviated month name, based on the locale (an alias of %b) Jan through Dec
%m Two digit representation of the month 01 (for January) through 12 (for December)
Year --- ---
%C Two digit representation of the century (year divided by 100, truncated to an integer) 19 for the 20th Century
%g Two digit representation of the year going by ISO-8601:1988 standards (see %V) Example: 09 for the week of January 6, 2009
%G The full four-digit version of %g Example: 2008 for the week of January 3, 2009
%y Two digit representation of the year Example: 09 for 2009, 79 for 1979
%Y Four digit representation for the year Example: 2038
Time --- ---
%H Two digit representation of the hour in 24-hour format 00 through 23
%I Two digit representation of the hour in 12-hour format 01 through 12
%l (lower-case 'L') Hour in 12-hour format, with a space preceeding single digits 1 through 12
%M Two digit representation of the minute 00 through 59
%p UPPER-CASE 'AM' or 'PM' based on the given time Example: AM for 00:31, PM for 22:23
%P lower-case 'am' or 'pm' based on the given time Example: am for 00:31, pm for 22:23
%r Same as "%I:%M:%S %p" Example: 09:34:17 PM for 21:34:17
%R Same as "%H:%M" Example: 00:35 for 12:35 AM, 16:44 for 4:44 PM
%S Two digit representation of the second 00 through 59
%T Same as "%H:%M:%S" Example: 21:34:17 for 09:34:17 PM
%X Preferred time representation based on locale, without the date Example: 03:59:16 or 15:59:16
%z Either the time zone offset from UTC or the abbreviation (depends on operating system) Example: -0500 or EST for Eastern Time
%Z The time zone offset/abbreviation option NOT given by %z (depends on operating system) Example: -0500 or EST for Eastern Time
Time and Date Stamps --- ---
%c Preferred date and time stamp based on local Example: Tue Feb 5 00:45:10 2009 for February 4, 2009 at 12:45:10 AM
%D Same as "%m/%d/%y" Example: 02/05/09 for February 5, 2009
%F Same as "%Y-%m-%d" (commonly used in database datestamps) Example: 2009-02-05 for February 5, 2009
%s Unix Epoch Time timestamp (same as the time() function) Example: 305815200 for September 10, 1979 08:40:00 AM
%x Preferred date representation based on locale, without the time Example: 02/05/09 for February 5, 2009
Miscellaneous --- ---
%n A newline character ("\n") ---
%t A Tab character ("\t") ---
%% A literal percentage character ("%") ---

Maximum length of this parameter is 1023 characters.

Uyarı

Contrary to ISO-9899:1999, Sun Solaris starts with Sunday as 1. As a result, %u may not function as described in this manual.

zaman_damgası

Seçimlik zaman_damgası değiştirgesi integer türünde bir Unix zaman damgası olup belirtilmediği takdirde yerel zaman kullanılır. Başka bir deyişle, time() işlevinden dönen değer öntanımlıdır.

Dönen Değerler

Returns a string formatted according format using the given timestamp or the current local time if no timestamp is given. Month and weekday names and other language-dependent strings respect the current locale set with setlocale().

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

As the output is dependent upon the underlying C library, some conversion specifiers are not supported. On Windows, supplying unknown conversion specifiers will result in 5 E_WARNING messages and return FALSE. On other operating systems you may not get any E_WARNING messages and the output may contain the conversion specifiers unconverted.

Sürüm Bilgisi

Sürüm: Açıklama
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

Örnekler

This example will work if you have the respective locales installed in your system.

Örnek 1 strftime() locale examples

<?php
setlocale
(LC_TIME"C");
echo 
strftime("%A");
setlocale(LC_TIME"fi_FI");
echo 
strftime(" in Finnish is %A,");
setlocale(LC_TIME"fr_FR");
echo 
strftime(" in French %A and");
setlocale(LC_TIME"de_DE");
echo 
strftime(" in German %A.\n");
?>

Örnek 2 ISO 8601:1988 week number example

<?php
/*     December 2002 / January 2003
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     16  17  18  19  20  21  22
52     23  24  25  26  27  28  29
1      30  31   1   2   3   4   5
2       6   7   8   9  10  11  12
3      13  14  15  16  17  18  19   */

// Outputs: 12/28/2002 - %V,%G,%Y = 52,2002,2002
echo "12/28/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/28/2002")) . "\n";

// Outputs: 12/30/2002 - %V,%G,%Y = 1,2003,2002
echo "12/30/2002 - %V,%G,%Y = " strftime("%V,%G,%Y"strtotime("12/30/2002")) . "\n";

// Outputs: 1/3/2003 - %V,%G,%Y = 1,2003,2003
echo "1/3/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2003")) . "\n";

// Outputs: 1/10/2003 - %V,%G,%Y = 2,2003,2003
echo "1/10/2003 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/10/2003")) . "\n";



/*     December 2004 / January 2005
ISOWk  M   Tu  W   Thu F   Sa  Su
----- ----------------------------
51     13  14  15  16  17  18  19
52     20  21  22  23  24  25  26
53     27  28  29  30  31   1   2
1       3   4   5   6   7   8   9
2      10  11  12  13  14  15  16   */

// Outputs: 12/23/2004 - %V,%G,%Y = 52,2004,2004
echo "12/23/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/23/2004")) . "\n";

// Outputs: 12/31/2004 - %V,%G,%Y = 53,2004,2004
echo "12/31/2004 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("12/31/2004")) . "\n";

// Outputs: 1/2/2005 - %V,%G,%Y = 53,2004,2005
echo "1/2/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/2/2005")) . "\n";

// Outputs: 1/3/2005 - %V,%G,%Y = 1,2005,2005
echo "1/3/2005 - %V,%G,%Y = " strftime("%V,%G,%Y",strtotime("1/3/2005")) . "\n";

?>

Notlar

Bilginize: %G and %V, which are based on ISO 8601:1988 week numbers can give unexpected (albeit correct) results if the numbering system is not thoroughly understood. See %V examples in this manual page.

Ayrıca Bakınız



strptime

(PHP 5 >= 5.1.0)

strptime strftime() işleviyle üretilen zaman ve tarihleri çözümler

Açıklama

array strptime ( string $tarih , string $biçim )

strptime() işlevi çözümlenmiş tarih değiştirgesini bir diziyle döndürür. Hata durumlarındaysa FALSE değeriyle döner.

Ay, gün isimleri ve yerel ayarlarıyla ilgili dile bağımlı diğer dizgeler (LC_TIME), setlocale() işleviyle ayarlanır.

Değiştirgeler

tarih

Çözümlenen dizge (ör. strftime() işlevinden dönen değer)

biçim

tarih değiştirgesinde kullanılan biçim (ör. strftime() işlevinde kullanılanla aynı).

Biçimlendirme seçenekleri hakkında daha fazla bilgi için strftime() sayfasını okuyun.

Dönen Değerler

Dizi döndürür. Hata durumlarında FALSE değeriyle döner.

Diziyle dönen değerler
Değiştirge Açıklama
"tm_sec" Saniye (0-61)
"tm_min" Dakika (0-59)
"tm_hour" Saat (0-23)
"tm_mday" Gün (1-31)
"tm_mon" Ay (0-11)
"tm_year" 1900'den itibaren yıllar
"tm_wday" Pazar'dan itibaren hafta günleri (0-6)
"tm_yday" Ocak 1'den itibaren günler (0-365)
"unparsed" tarih değiştirgesinin bilinmeyen biçim değiştirgesi kullanımından dönen değer

Örnekler

Örnek 1 - strptime() örneği

<?php
$biçim 
'%d/%m/%Y %H:%M:%S';
$strf strftime($biçim);

echo 
"$strf\n";

print_r(strptime($strf$biçim));
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

03/10/2004 15:54:19

Array
(
    [tm_sec] => 19
    [tm_min] => 54
    [tm_hour] => 15
    [tm_mday] => 3
    [tm_mon] => 9
    [tm_year] => 104
    [tm_wday] => 0
    [tm_yday] => 276
    [unparsed] =>
)

Notlar

Bilginize: Bu işlev Windows sistemlerinde çalışmaz.

Bilginize: "tm_sec" "artık saniyeleri" de içerir (yılda 2 saniyeye kadar). Artık saniyeler hakkında bilgi edinmek için » Wikipedia artık saniyeler makalesine bakınız.

Ayrıca Bakınız

  • strftime() - Format a local time/date according to locale settings



strtotime

(PHP 4, PHP 5)

strtotimeParse about any English textual datetime description into a Unix timestamp

Açıklama

int strtotime ( string $time [, int $now ] )

The function expects to be given a string containing a US English date format and will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now , or the current time if now is not supplied.

This function will use the TZ environment variable (if available) to calculate the timestamp. Since PHP 5.1.0 there are easier ways to define the timezone that is used across all date/time functions. That process is explained in the date_default_timezone_get() function page.

Değiştirgeler

time

The string to parse. Before PHP 5.0.0, microseconds weren't allowed in the time, since PHP 5.0.0 they are allowed but ignored.

now

The timestamp which is used as a base for the calculation of relative dates.

Dönen Değerler

Returns a timestamp on success, FALSE otherwise. Previous to PHP 5.1.0, this function would return -1 on failure.

Hatalar/İstisnalar

Bir tarih/zaman işlevine yapılan her çağrı eğer zaman dilimi ayarı geçerli değilse bir E_NOTICE üretir. Ve/veya eğer sistem ayarları veya TZ ortam değişkeni kullanılıyorsa bir E_STRICT veya bir E_WARNING iletisi üretir. Ayrıca bakınız: date_default_timezone_set()

Sürüm Bilgisi

Sürüm: Açıklama
5.2.7 In PHP 5 prior to 5.2.7, requesting a given occurrence of a given weekday in a month where that weekday was the first day of the month would incorrectly add one week to the returned timestamp. This has been corrected in 5.2.7 and later versions.
5.1.0 Now returns FALSE on failure, instead of -1.
5.1.0

Zaman dilimi hatalarında artık E_STRICT ve E_NOTICE çıktılanıyor.

5.0.2 In PHP 5 up to 5.0.2, "now" and other relative times are wrongly computed from today's midnight. This differs from other versions where it is correctly computed from current time.
4.4.0 In PHP versions prior to 4.4.0, "next" is incorrectly computed as +2. A typical solution to this is to use "+1".

Örnekler

Örnek 1 A strtotime() example

<?php
echo strtotime("now"), "\n";
echo 
strtotime("10 September 2000"), "\n";
echo 
strtotime("+1 day"), "\n";
echo 
strtotime("+1 week"), "\n";
echo 
strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo 
strtotime("next Thursday"), "\n";
echo 
strtotime("last Monday"), "\n";
?>

Örnek 2 Checking for failure

<?php
$str 
'Not Good';

// previous to PHP 5.1.0 you would compare with -1, instead of false
if (($timestamp strtotime($str)) === false) {
    echo 
"The string ($str) is bogus";
} else {
    echo 
"$str == " date('l dS \o\f F Y h:i:s A'$timestamp);
}
?>

Notlar

Bilginize: If the number of the year is specified in a two digit format, the values between 00-69 are mapped to 2000-2069 and 70-99 to 1970-1999. See the notes below for possible differences on 32bit systems (possible dates might end on 2038-01-19 03:14:07).

Bilginize: The valid range of a timestamp is typically from Fri, 13 Dec 1901 20:45:54 UTC to Tue, 19 Jan 2038 03:14:07 UTC. (These are the dates that correspond to the minimum and maximum values for a 32-bit signed integer.) Additionally, not all platforms support negative timestamps, therefore your date range may be limited to no earlier than the Unix epoch. This means that e.g. dates prior to Jan 1, 1970 will not work on Windows, some Linux distributions, and a few other operating systems. PHP 5.1.0 and newer versions overcome this limitation though.

Ayrıca Bakınız

  • strptime() - strftime işleviyle üretilen zaman ve tarihleri çözümler



time

(PHP 4, PHP 5)

timeGeçerli Unix zaman damgasını döndürür

Açıklama

int time ( void )

Unix Zaman Başlangıcından (1 Ocak 1970 00:00:00 GMT) itibaren geçen zamanı saniye cinsinden döndürür.

Örnekler

Örnek 1 - time() örneği

<?php
$gelecekHafta 
time() + (24 60 60);
                   
// 7 gün; 24 saat; 60 dakida; 60 saniye
echo 'Şimdi:         'date('d-m-Y') ."\n";
echo 
'Gelecek Hafta: 'date('d-m-Y'$gelecekHafta) ."\n";
// yada strtotime() işlevi ile kullanımı
echo 'Gelecek Hafta: 'date('d-m-Y'strtotime('+1 week')) ."\n";
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Şimdi:         25-03-2009
Gelecek Hafta: 01-04-2009
Gelecek Hafta: 01-04-2009

Notlar

İpucu

İstek başlangıç zamandamgası PHP 5.1'den beri $_SERVER['REQUEST_TIME'] değişkeniyle kullanımdadır.

Ayrıca Bakınız

  • date() - Yerel tarihi/saati biçimlendirir
  • microtime() - Geçerli Unix zaman damgasını mikrosaniye olarak döndürür



timezone_abbreviations_list

(PHP 5 >= 5.1.0)

timezone_abbreviations_list DateTimeZone::listAbbreviations işlevinin takma adıdır

Açıklama

Bu işlev, DateTimeZone::listAbbreviations işlevinin takma adıdır.



timezone_identifiers_list

(PHP 5 >= 5.1.0)

timezone_identifiers_list DateTimeZone::listIdentifiers işlevinin takma adıdır

Açıklama

Bu işlev, DateTimeZone::listIdentifiers işlevinin takma adıdır.



timezone_location_get

(PHP 5 >= 5.3.0)

timezone_location_get DateTimeZone::getLocation işlevinin takma adıdır

Açıklama

Bu işlev, DateTimeZone::getLocation işlevinin takma adıdır.



timezone_name_from_abbr

(PHP 5 >= 5.1.3)

timezone_name_from_abbrKısaltmasından, zaman diliminin adını döndürür

Açıklama

string timezone_name_from_abbr ( string $kısaltma [, int $gmt_farkı = -1 [, int $ysu_var = -1 ]] )

Değiştirgeler

kısaltma

Zaman dilimi kısaltması.

gmt_farkı

Yerel saatin GMT'ye göre saniye cinsinden farkı. Varsayılan değer, kısaltma değiştirgesinin karşılığı olarak bulunan ilk zaman diliminin döndürüleceği anlamına gelen -1'dir. Yoksa, farka uyan zaman dilimi aranır ve bulunamadığı durumlarda fark ne olursa olsun bulunan ilk zaman dilimi döndürülür.

ysu_var

Yaz saati uygulaması belirteci. Eğer kısaltma değiştirgesi yoksa zaman dilimi yalnızca gmt_farkı ve ysu_var değiştirgelerine göre aranacaktır.

Dönen Değerler

Başarılı olduğunda zaman dilimini adını, başarısız olduğunda FALSE döndürür.

Örnekler

Örnek 1 - timezone_name_from_abbr() örneği

<?php
echo timezone_name_from_abbr("EET") . "\n";
echo 
timezone_name_from_abbr(""36000) . "\n";
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

Europe/Helsinki
Europe/Paris

Ayrıca Bakınız



timezone_name_get

(PHP 5 >= 5.1.0)

timezone_name_get DateTimeZone::getName işlevinin takma adıdır

Açıklama

Bu işlev, DateTimeZone::getName işlevinin takma adıdır.



timezone_offset_get

(PHP 5 >= 5.1.0)

timezone_offset_get DateTimeZone::getOffset işlevinin takma adıdır

Açıklama

Bu işlev, DateTimeZone::getOffset işlevinin takma adıdır.



timezone_open

(PHP 5 >= 5.1.0)

timezone_openYeni bir DateTimeZone nesnesi döndürür

Açıklama

DateTimeZone timezone_open ( string $zamandilimi )
DateTimeZone DateTimeZone::__construct ( string $zamandilimi )

Değiştirgeler

zaman dilimi

Zaman dilimi belirtecinin tam adı (ör. Europe/Istanbul) ya da kısaltması (ör. EET).

Dönen Değerler

Başarılı olduğunda DateTimeZone nesnesini, başarısız olduğunda FALSE değerini döndürür.



timezone_transitions_get

(PHP 5 >= 5.2.0)

timezone_transitions_get DateTimeZone::getTransitions işlevinin takma adıdır

Açıklama

Bu işlev, DateTimeZone::getTransitions işlevinin takma adıdır.



timezone_version_get

(PHP 5 >= 5.3.0)

timezone_version_get Gets the version of the timezonedb

Açıklama

string timezone_version_get ( void )

Returns the current version of the timezonedb.

Dönen Değerler

Returns a string.

Örnekler

Örnek 1 Getting the timezonedb version

<?php
echo timezone_version_get();
?>

Yukarıdaki örnek şuna benzer bir çıktı üretir:

2009.7

Ayrıca Bakınız


İçindekiler





Komut Satırına Özgü Eklentiler


Newt


Giriş

This is a PHP language extension for RedHat Newt library, a terminal-based window and widget library for writing applications with user friendly interface. Once this extension is enabled in PHP it will provide the use of Newt widgets, such as windows, buttons, checkboxes, radiobuttons, labels, editboxes, scrolls, textareas, scales, etc. Use of this extension if very similar to the original Newt API of C programming language.



Yapılandırma/Kurulum

İçindekiler


Gereksinimler

This module uses the functions of the RedHat Newt library. You need libnewt version >= 0.51.0.



Kurulum

Bu » PECL eklentisi PHP ile gelmez. Bu PECL eklentisini kurma bilgisi kılavuzun PECL eklentisinin kurulması başlıklı faslında bulunabilir. Yeni dağıtımlar, indirmeler, kaynak dosyaları, sürdürücü bilgileri ve CHANGELOG gibi ek bilgiyi şu adreste bulabilirsiniz: » http://pecl.php.net/package/newt.

PHP 4'te bu PECL eklentilerinin kaynak kodunu PHP kaynak paketi içindeki ext/ dizininde ya da yukarıdaki PECL bağlantısında bulabilirsiniz. In order to use these functions you must compile CGI or CLI PHP with newt support by using the --with-newt[=DIR] configure option.

Bilginize: This extension is not available for Windows platform.
You may need also curses and slang libraries, in order to compile this extension. To specify locations of these libraries, use the following configuration options: --with-curses-dir=/path/to/libcurses --with-slang-dir=/path/to/libslang



Çalışma Anı Yapılandırması

Bu eklentinin php.ini'de tanımlı yapılandırma yönergesi yoktur.



Özkaynak Türleri

This extension uses two resource types: "newt component" and "newt grid".

Resource type "newt component" is returned by functions, which create common newt widgets (for example: newt_button())

Resource type "newt grid" is a special link identifier for components, returned by newt grid factory functions (for example: newt_create_grid())




Öntanımlı Sabitler

İçindekiler

Buradaki sabitler bu eklenti için tanımlanmış olup, sadece eklentinin PHP içinde derlenmiş olması veya çalışma anında devingen olarak yüklenmesi halinde kullanılabilir.


Newt form exit reasons

Newt form exit reasons
constant meaning
NEWT_EXIT_HOTKEY hotkey defined by newt_form_add_hot_key() was pressed
NEWT_EXIT_COMPONENT some component has caused form to exit
NEWT_EXIT_FDREADY file descriptor specified in newt_form_watch_fd() is ready to be read or written to
NEWT_EXIT_TIMER time specified in newt_form_set_timer() has elapsed


Newt colorsets

Newt colorsets
constant meaning
NEWT_COLORSET_ROOT  
NEWT_COLORSET_BORDER  
NEWT_COLORSET_WINDOW  
NEWT_COLORSET_SHADOW  
NEWT_COLORSET_TITLE  
NEWT_COLORSET_BUTTON  
NEWT_COLORSET_ACTBUTTON  
NEWT_COLORSET_CHECKBOX  
NEWT_COLORSET_ACTCHECKBOX  
NEWT_COLORSET_ENTRY  
NEWT_COLORSET_LABEL  
NEWT_COLORSET_LISTBOX  
NEWT_COLORSET_ACTLISTBOX  
NEWT_COLORSET_TEXTBOX  
NEWT_COLORSET_ACTTEXTBOX  
NEWT_COLORSET_HELPLINE  
NEWT_COLORSET_ROOTTEXT  
NEWT_COLORSET_ROOTTEXT  
NEWT_COLORSET_EMPTYSCALE  
NEWT_COLORSET_FULLSCALE  
NEWT_COLORSET_DISENTRY  
NEWT_COLORSET_COMPACTBUTTON  
NEWT_COLORSET_ACTSELLISTBOX  
NEWT_COLORSET_SELLISTBOX  


Newt argument flags

Newt argument flags
constant meaning
NEWT_ARG_LAST  
NEWT_ARG_APPEND  


Newt Flags Sense

Newt Flags Sense
constant meaning
NEWT_FLAGS_SET  
NEWT_FLAGS_RESET  
NEWT_FLAGS_TOGGLE  


Newt Components Flags

Newt Components Flags
constant meaning
NEWT_FLAG_RETURNEXIT Exit form, when component is activated
NEWT_FLAG_HIDDEN Component is hidden
NEWT_FLAG_SCROLL Component is scrollable
NEWT_FLAG_DISABLED Component is disabled
NEWT_FLAG_BORDER  
NEWT_FLAG_WRAP Wrap text
NEWT_FLAG_NOF12 Don't exit form on pressing F12
NEWT_FLAG_MULTIPLE  
NEWT_FLAG_SELECTED Component is selected
NEWT_FLAG_CHECKBOX Component is checkbox
NEWT_FLAG_PASSWORD Entry component is password entry
NEWT_FLAG_SHOWCURSOR Show cursor


File Descriptor Flags

File Descriptor Flags
constant meaning
NEWT_FD_READ  
NEWT_FD_WRITE  
NEWT_FD_EXCEPT  


Checkbox Tree Flags

Checkbox Tree Flags
constant meaning
NEWT_CHECKBOXTREE_UNSELECTABLE  
NEWT_CHECKBOXTREE_HIDE_BOX  
NEWT_CHECKBOXTREE_COLLAPSED  
NEWT_CHECKBOXTREE_EXPANDED  
NEWT_CHECKBOXTREE_UNSELECTED  
NEWT_CHECKBOXTREE_SELECTED  


Entry Flags

Entry Flags
constant meaning
NEWT_ENTRY_SCROLL  
NEWT_ENTRY_HIDDEN  
NEWT_ENTRY_RETURNEXIT  
NEWT_ENTRY_DISABLED  


Listbox Flags

Listbox Flags
constant meaning
NEWT_LISTBOX_RETURNEXIT  


Textbox Flags

Textbox Flags
constant meaning
NEWT_TEXTBOX_WRAP Wrap text in the textbox
NEWT_TEXTBOX_SCROLL Scroll text in the textbox


Form Flags

Form Flags
constant meaning
NEWT_FORM_NOF12 Don't exit form on F12 press


Newt Keys

Newt Keys
constant meaning
NEWT_KEY_