2016-04-07 32 views
1

Web sitemde PHP kullanarak bir parola oluşturmaya çalışıyorum. Lua'yı kullanmadan önce aynı şeyi yarattım, ancak şu anda üzerinde çalışıyorum, ancak çok fazla bellek tükettiğimi iddia etmekle hata veriyor, ancak buna neden olabileceğinden emin değilim:Özyineleme işlevinde atanan bellek hatası

function offsetASCII($OrigByte, $Offset) { 
    $OrigByte = $OrigByte + $Offset; 
    if ($OrigByte > $MaxASCII) { 
     return offsetASCII($MinASCII, $OrigByte-$MaxASCII); 
    } else { 
     return $OrigByte; 
    } 
} 

Buradaki fikir, OrigByte sayısını Offset (Offset) sayısıyla dengelememesidir. OrigByte için yeni değer izin verilen maksimum değerden daha büyükse, OrigByte işlevini izin verilen en düşük değer olarak yineler ve "artık" miktarını, maksimum değerin üzerine çıkardığı ofset'i yapar. Bu, maksimum değerin içine girene kadar tekrar eder ve sonra geri döndürür.

hatadır:

Fatal error: Allowed memory size of 94371840 bytes exhausted (tried to allocate 130968 bytes) in [PageDirectoryHere] on line 49

Hat 49 ise:

return offsetASCII($MinASCII, $OrigByte-$MaxASCII); 

OrigByte kendi ASCII değerine dönüştürülür hiçbir harf olabilir. MinascII ve MaxasCII, ASCII (65 ve 90) 'daki büyük harflerin minimum ve maksimum değerleridir. Ofset başlangıçta rand ($ MinASCII, $ MinASCII + 25).

Bunun olmasına neden olduğum için clueless, bu yüzden herhangi bir yardım için şimdiden teşekkürler!

+0

php.ini içinde bellek sınırını artırın –

+0

Neden bir şifreleme oluşturmaya çalışıyorsunuz? Bu ne için? Çünkü kendi kriptosunu asla yuvarlamamalısın. – st2erw2od

+1

Size verebileceğimiz en iyi cevabı kullandığınız gerçek veriler hakkında herhangi bir bilgi bilmediğimizden "PHP mevcut tüm belleğini tükettiği için". – h2ooooooo

cevap

1

Çözüm: Yanlış yapıyordu

function offsetASCII($OrigByte, $Offset, $MinASCII, $MaxASCII) { 
    $OrigByte = $OrigByte + $Offset; 
    if ($OrigByte > $MaxASCII) { 
     return offsetASCII($MinASCII, $OrigByte-$MaxASCII, $MinASCII, $MaxASCII); 
    } else { 
     return $OrigByte; 
    } 
} 

$EncryptedChar = chr(offsetASCII($NowByte, $NewKeyNums[$Iter], 65, 90)); 

ilk şey fonksiyonunun kapsamı dışında $ MinASCII ve $ MaxASCII kullanmaya çalışıyordu (I parametreler olarak ekleyerek çözüldü).

Yanlış yaptığım ikinci şey, işlevi çağırdığım alanın dışında MinasCII ve $ MaxASCII'yi tanımlamaktı (onlar için değişkenleri ayarlamak yerine temsil ettikleri sayıları girerek çözdüm).