UTF-8 BOM Sorunu

Tamer tarafından, 01 26 2014 22:00:00 tarihinde yayınlandı.

Bom dosyanın en başında bir simge olarak bulunur. BOM simgesi işe ““şeklindedir ve dosyanın UTF-8 olduğunun anlaşılması için bazı sistemlerde kullanılabilir.

Gelelim bu yüzden ortaya çıkan doğal sorunlar. Bildiğiniz gibi bir çok php komudu boşluk kabul etmez ve sayfa yüklenirken php'yi yapatmadan önce çalışması gerekmektedir. Örneğin: header komutları ve session komutları gibi.

“Warning: Cannot modify header information – headers already sent by…” ile başlayan bir hata alınabilmekte.

Eğer böyle bir sorunla karşılaşmış ve hangi dosyanın Bom'lu veya Bomsuz olduğunu bilmiyorsanız çözümü var.

1. Konsol Yöntemi

Linux'ta da dosyaları bir sürü dönüştürmek için recode veya iconv gibi komut satırı araçlarını kullanabilirsiniz. Aşağıda projem/ ve alt-dizinlerinin her php dosyasını çeviren bir komut zinciri:

$ cd projem/
$ for i in $(find -name '*.php'); do encoding=$(file -bi "$i" | 
sed
-e 's/.*[ ]charset=//'); iconv -f $encoding -t UTF-8 -o "$i" "$i"; done

Bu sayede projem klasörüne bağlı büyün dosyaları utf-8 bomsuz olarak ayarlayabilirsiniz.

2. Windows için Notepad ++
Windows kullanıyorsanız Notepad ++ ile dosyaları UTF-8 bomsuz olarak kaydete bilirsiniz.

3. Son Çare

Son çare olarak başlangıç dosyanıza bu kodu ekleyerek utf-8 bomsuz dosyayı include eder etmez çevirebilirsiniz.

index.php

ob_start('My_OB');
function My_OB($str, $flags)
{
    // UTF-8 BOM'i yakalıyor
    $str = preg_replace("/\xef\xbb\xbf/","",$str);
    return $str;
}
Etiketler : Yazılım, PHP, Genel

PHP ile Boş Obje

Tamer tarafından, 05 03 2013 21:40:00 tarihinde yayınlandı.

class bosObje {
  public function __construct() {}
  public function __destruct() {}
  public function __set($name, $value) {}
  public function __get($name) { return null; }
  public function __isset($name) { return false; }
  public function __unset($name) {}
  public function __call($name, $args) {}
  public function __toString() { return ''; }
  public function __invoke() {}
  public function __clone() {}
  public static function __callStatic($name, $args) {}
}
Etiketler : PHP, Yazılım

PHP'de "0" ve "1" değerinin boolean karşılığı

Tamer tarafından, 05 03 2013 07:23:00 tarihinde yayınlandı.

"0" değerindeki bir değişkenin boolean'a çevrimi false'dır.
"1" değerindeki bir değişkenin boolean'a çevrimi ise true'dur.
Bu tip değişkenleri(değeri 0 veya 1 olan) if else komutlarında değiştirmeden denerseniz yine boolean'a çevrilmiş gibi hareket eder örneğin;


$degisken = 1;
$degisken = (bool) $degisken;
var_dump($degisken);
/*
Çıktısı:
bool(true)
*/
$degisken = 0;
$degisken = (bool) $degisken;
var_dump($degisken);
/*
Çıktısı:
bool(false)
*/

if(!0){
echo '0 != true';
}
/*
Çıktısı:
0 != true
*/

 
Etiketler : Veritabanı, PHP, Genel

PHP array key 2147483647'den sonra ?

Tamer tarafından, 05 03 2013 06:20:00 tarihinde yayınlandı.

PHP ile dizi fonksiyonları ile çalışmak en sevdiğim uğraşlardan biridir. İç içe geçmiş ağaç yapıları, uzun soluklu döngüler ve değer tutucular... Hemen  hemen her şeyde başı diziler çeker. Bugünkü yazımda sizi diziler ile ilgili farklı bir konuya götürmek istiyorum.


$dizi[20] = "şapka";
$dizi[] = "kravat"; // peki anahtarı ne olarak tanımladı ? 0 mı ?

print_r($dizi);
/*
Çıktısı
Array ( [20] => şapka [21] => kravat )
*/

Yukarda tanımladığım ilk $dizi değişkeninin dizisine anahtarına(key) 20 tanımladım. daha sonrada boş anahtarına(key) tanımladım.  Hemen altında boş anahtar(key) tanımladığım değeri "kravat" olan $dizi değişkenin anahtar numarası 21 oldu. burada anlaşılan daha önce tanımlanan varsa onun üzerine +1 ekliyor.

not: Eğer char olarak tanımlasaydım değeri "kravat" olan dizinin anahtarı 0 olacaktı.


$dizi[2147483647] = "şapka";
$dizi[] = "kravat"; // peki anahtar değeri ne olarak tanımladı ? 2147483648 mi ?

print_r($dizi);
/*
Çıktısı
Error: [2] Cannot add element to the array as the next element is already occupied
Array ( [2147483647] => şapka )
*/

Açıkcası ilk seferde yukardaki hatayı vermesinin sebebini anlamamıştım. Anlaşılan dizi anahtarları "2147483647" sayısına kadar tanımlanabiliyordu. Aniden aklıma bu bir şifre olabilir gibi komplo teorileri geldi ve şunu denedim :



print(date("d.m.Y H:i:s",2147483647));
/*
Çıktısı
18.01.2038 22:14:07
*/

Cevap ürkütücü :)
Evet 2038 yılı bu Ankara Belediye Başkanı'nın 2038'de Ankara'nın ulaşım problerini çözeceği vaade mi işaret ediyordu ? Tabiki başka birşey peki ney ?

Cevabı internette ararken şuna rasladım...

2038 yılı problemi,
2038 yılında bazı POSIX zaman gösterimini kullanan 32-bit sistemlerin çökmesine yol açacak bir yazılım hatasıdır.

Hata, sistem zamanını 1 Ocak 1970 tarihinden beri saniye bazında hesaplayan ve 32-bitlik UNIX ve türevi sistemlerde 19 Ocak 2038 Salı günü saat 03:14:07'de sayacın başa dönmesiyle sistem tarihinin 13 Aralık 1901 20:45:52'yi göstermesiyle ortaya çıkacaktır. Son yıllarda bazı çözüm yöntemleri geliştirilse de hiçbiri basit ve uygulanabilir olamamıştır. Ancak 64 bit'li sistemlere geçişin 2038 yılına kadar tamamlanacağı ve böylece hatanın kendiliğinden ortadan kalkacağı düşünülmektedir.
wikipedia

Etiketler : Yazılım, PHP, Genel

PHP ile Trait'ler (traits)

Tamer tarafından, 05 01 2013 02:21:00 tarihinde yayınlandı.

Uzun bir aradan sonra yeniden merhaba, Bu paylaşımında sizlere PHP 5.4.0 versiyonu ile birlikten gelen "traits" özelliğinden bahsedeceğim.

Trait ?

"trait" bir sınıf gibi oluşturuluyor fakat bir sınıf gibi kullanamıyorsunuz. Kullanım yeri için kafamızda birşeylerin belirmesi için bir örnek verecek olsaydım; ortak fonksiyon toplama alanı diyebilirdim. Tabiki bu basit bir anlatış olacak.Tabi örnek kullanım şeklini görmeden anlaşılması biraz karışık olabilir.


NORMAL KULLANIM ŞEKLİ


trait tavuklar {
        public function kirmizi() {
	        echo "kirmizi tavuk!";
	    }
	}
	 
	trait horozlar {
	    public function siyah() {
	        echo "siyah horoz!";
	    }
	}
	 
	class kumes {
	    use tavuklar, horozlar;
	}
	 
	$ornek = new kumes;
	$ornek->kirmizi(); // kirmizi tavuk!
	$ornek->siyah(); // siyah horoz!


ELEMELİ KULLANIM ŞEKLİ

 
trait tavuklar { 
	    
  public function kirmizi() { 	        
    echo "kirmizi tavuk!"; 	    
  } 
            
  public function siyah(){                
    echo "siyah tavuk!";             
  } 	
}
 	  	
trait horozlar {  
           
  public function kirmizi() {
    echo "kirmizi horoz!";
  } 	  
  
  public function siyah() {
    echo "siyah horoz!";
  } 	
} 	
  	
class kumes { 	    
  use tavuklar, horozlar{             
    horozlar::kirmizi insteadof tavuklar;             
    horozlar::siyah insteadof tavuklar;             
    tavuklar::kirmizi as kirmizitavuk;            
  } 	
} 	  	

$ornek = new kumes; 	

$ornek->kirmizi();  // kirmizi horoz! 	
$ornek->siyah();    // siyah horoz!         
$ornek->kirmizitavuk(); // kirmizi tavuk! 
 

Yukardaki örnekte mukerrer fonksiyon isimlerinin kullanılabilir haklarını "use" kısmında belirtiyoruz. ulaşamadımız tavuklar trait'inin kirmizi tavuklarına ulaşmak içinde "tavuklar::kirmizi as kirmizitavuk" örnekteki kombinasyonu sağlıyoruz.

STATIC KULLANIM ŞEKLİ


trait statikOrnek {
    public static function foo() {
        return 'Merhaba Dünya!';
    }
}

class ornek {
    use statikOrnek;
}

ornek::foo(); // Merhaba Dünya

Etiketler : Yazılım, PHP, Genel
1 | 2 | 3 | 4 | 5 | 6 | 7