Bir önceki yazımızda Joomla! 1.5 kodlarına girmiş ve index.php nin kodlarını incelemiştik. Şimdi ise index.php içerisinde bahsettiğimiz iki dosyayı; defines.php ve framework.php dosyalarını inceleyeceğiz. Bu iki dosya includes klasörü içerisindedir. Bazı tanımlamalar ve kontroller yapar. Şimdi hızlıca defines.php dosyasına bakalım.
defines.php:
1 | defined( '_JEXEC' ) or die( 'Restricted access' ); |
Bir önceki yazımızda da belirttiğimiz gibi artık bakacağımız veya hazırlayacağımız tüm php dosyalarının ilk satırına bu kodu koymak zorundayız. Böylece bu php dosyaları sadece index.php içerisinden çağırıldığında çalışacaktır. Bu oldukça etkili ve basit bir güvenlik önlemidir.
1 | $parts = explode( DS, JPATH_BASE ); |
Gene hatırlayacağınız gibi index.php içerisinde iki tanımlama yapmıştık. Şimdi bunları kullanmaya başlıyoruz.
1 2 3 4 5 6 7 8 9 10 11 | define( 'JPATH_ROOT', implode( DS, $parts ) ); define( 'JPATH_SITE', JPATH_ROOT ); define( 'JPATH_CONFIGURATION', JPATH_ROOT ); define( 'JPATH_ADMINISTRATOR', JPATH_ROOT.DS.'administrator' ); define( 'JPATH_XMLRPC', JPATH_ROOT.DS.'xmlrpc' ); define( 'JPATH_LIBRARIES', JPATH_ROOT.DS.'libraries' ); define( 'JPATH_PLUGINS', JPATH_ROOT.DS.'plugins' ); define( 'JPATH_INSTALLATION', JPATH_ROOT.DS.'installation' ); define( 'JPATH_THEMES' , JPATH_BASE.DS.'templates' ); define( 'JPATH_CACHE', JPATH_BASE.DS.'cache'); |
defines.php dosyasında isminden de anlaşılacağı üzere bazı dizinlerimizi tanımlıyoruz. Bunlar ilerleyen yazılarda bu dizinleri sıkça ve kolayca kullanmamızı sağlayan tanımlamalardır.
Şimdi de framework.php dosyamızı yazı editörümüz ile açalım ve içerisindeki kodlara bir bakalım.
framework.php:
1 | defined( '_JEXEC' ) or die( 'Restricted access' ); |
Direkt olarak erişimi engelledik.
1 2 | @set_magic_quotes_runtime( 0 ); @ini_set('zend.ze1_compatibility_mode', '0'); |
Magic quotes desteği açıksa bunu kapatıyoruz.
1 2 3 4 5 6 7 8 9 | if (!file_exists( JPATH_CONFIGURATION . DS . 'configuration.php' ) || (filesize( JPATH_CONFIGURATION . DS . 'configuration.php' ) < 10) || file_exists( JPATH_INSTALLATION . DS . 'index.php' )) { if( file_exists( JPATH_INSTALLATION . DS . 'index.php' ) ) { header( 'Location: installation/index.php' ); exit(); } else { echo 'No configuration file found and no installation code available. Exiting...'; exit(); } } |
configuration.php dosyasının ve kurulum klasörünün olup olmadığına bakıyoruz. Eğer configuration.php yoksa, 10 byte boyutundan az ise ve kurulum klasörü (installation) bulunuyorsa kurulum sayfasına gidiyoruz. Eğer durum daha farklıysa çıkış yapıyoruz.
1 | require_once( JPATH_LIBRARIES .DS.'joomla'.DS.'import.php'); |
Bu kod ile ilerleyen yazılarda detaylı olarak anlatacağım bir sınıfı (jimport) içeren import.php dosyasını alıyoruz. Bu dosya ile kütüphanemizdeki (libraries klasörü içerisindeki) birçok sınıfı kolaylıkla dosyalarımıza dahil edeceğiz.
1 | require_once( JPATH_CONFIGURATION .DS.'configuration.php' ); |
configuration.php dosyamızı alıyoruz.
1 | $CONFIG = new JConfig(); |
configuration.php içerisindeki JConfig sınıfımızı $CONFIG değeri üzerine yazdırıyoruz.
1 2 3 4 5 6 7 8 9 10 | if (@$CONFIG->error_reporting === 0) { error_reporting( 0 ); } else if (@$CONFIG->error_reporting > 0) { error_reporting( $CONFIG->error_reporting ); ini_set( 'display_errors', 1 ); } define( 'JDEBUG', $CONFIG->debug ); unset( $CONFIG ); |
Bu kodlar configuration.php içerisinde tanımlanmış olan $CONFIG->error_reporting değeri ile hata gösterimini kapatıp açmamızı sağlar. En son satırda da $CONFIG değerimizi unset komutuyla yokediyoruz.
1 | require_once(JPATH_SITE.DS.'libraries'.DS.'joomla'.DS.'utilities'.DS.'compat'.DS.'compat.php'); |
Bu kod ile Joomla! nın PHP 5.0.x mi yoksa PHP 5.1.x ile mi çalışacağını belirleyen compat.php dosyamızı alıyoruz.
1 2 3 4 | if (JDEBUG) { jimport( 'joomla.error.profiler' ); $_PROFILER =& JProfiler::getInstance( 'Application' ); } |
Bu kod ile JProfiler sınıfının getInstance fonksiyonu ile sistemimiz için bir uygulama profili oluşturuyoruz. Bu profil index.php içerisinde tetikleyici tanımlamalarında kullanılacak.
1 2 3 4 5 6 7 8 9 10 | // Joomla! library imports; jimport( 'joomla.application.menu' ); jimport( 'joomla.user.user'); jimport( 'joomla.environment.uri' ); jimport( 'joomla.html.html' ); jimport( 'joomla.utilities.utility' ); jimport( 'joomla.event.event'); jimport( 'joomla.event.dispatcher'); jimport( 'joomla.language.language'); jimport( 'joomla.utilities.string' ); |
Bu kod satırları ile import.php ile dahil ettiğimiz jimport fonksiyonunu kullanarak kütüphanemizden birçok özelliği dahil ediyoruz.
denisdulici
/ 09 Şubat 2010Benim kafama takılan bi şey var, libraries/loader.php’deki import metoduna baktığımda en sonda
mevcut fakat hatırladığım kadarıyla include_once metodu hem daha hızlı hem 2 kez çağırma hatasına karşı daha çok tercih edilir.
Bu konuda ne dersiniz, Joomla!’nın kendi sınıfları haricinde bizim yazdığımız sınıfları çağırmak için jimport kullanmak mantıklı mı?
Soner Ekici
/ 09 Şubat 2010jimport zaten joomlanın libraries kütüphanesindeki kendi sınıflarını kolayca alabilmek için yapılan bir fonksiyon. O söylediğin yere dikkat edersen oradaki açıklamada eğer jimport fonksiyonunda joomla ibaresi yoksa bizim kütüphaneye ait olmadığı için sadece include edelim diyor. Bazı 3. parti eklenti kodlayıcıları eklenti içerisindeki dosyaları defalarca include etmek zorunda bırakabilen kodlar yazabiliyor. Eğer jimport ile bu dosyayı alırsak eklentiye her defasında include etmek zorunda kalabiliriz. Sanırım joomla çekirdek kodlayıcıları bunu düşünerek include_once yerine include kullanmış olabilirler. Tabi sorunun kesin cevabını çekirdek takımı verir
denisdulici
/ 09 Şubat 2010Evet haklısınız, okumamuştım orayı
Gerçi JLoader::load metoduna baktığımızda yine include kullanılıyor da neyse, kendi sınıflarımız için require_once kullanırız