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