Ben Windows altında PHP'nin crypt() fonksiyonunda bir hata bulduk düşünüyorum.
However: Ben tanımak it's probably my fault. PHP milyonlarca insan tarafından kullanılan ve binlerce üzerinde çalıştı; Benim kod onlarca tarafından kullanılan ve bana göre üzerinde çalıştı. (Bu argüman explained on Coding Horror en iyisidir.)
Bu yüzden yardım için soruyorum: show me my fault. Ben şimdi bir kaç gün için onu bulmak için çalışıyor ettik, hiçbir şans ile.
The setup
Apache 2.2.14 (Win32) ve PHP 5.3.2 ile bir Windows sunucu yüklemesi kullanıyorum. Benim geliştirme kutusunu, Windows XP Professional çalışır; 'üretim', sunucu (bu bir intranet kurulum) Windows Storage Server 2003 çalışır. sorun, hem olur.
I php.ini crypt() ile ilgili herhangi bir şey görmüyorum, ama mutlu benim yapılandırma ile ilgili sorulara cevap verecektir.
The problem
Benim PHP app birkaç komut bazen asmak: sayfa 'localhost bekliyor' orada oturur ve hiçbir zaman tamamlanmaz. Bu komut her crypt veritabanında saklanan sürümle karşılaştırarak önce girilen şifreyi karma, giriş sayfasının durumunda, veritabanında saklamadan önce bir kullanıcının parolasını karma veya kullanır.
Giriş sayfası basit olduğundan, ben test için üzerine odaklanmıştır. Ben defalarca kaydedilir, ve belki 10 üzerinden 4 kez askıda olacağını bulundu.
Bir deneme olarak, düz metin parola kullanmak için giriş sayfası değişti ve düz metin sürümü veritabanında şifremi değiştirdim. Sayfa asılı durdu.
PHP'nin son sürümü bu bugfix listeler olduğunu gördüm:
Fixed bug #51059 (crypt crashes when invalid salt are [sic] given).
Aşağıdaki gibi Yani verilen aynı tuzu kullanılarak, çok basit bir test komut dosyası oluşturulur an official example:
$foo = crypt('rasmuslerdorf','r1');
echo $foo;
Ben deli gibi yeniden bu sayfa da, askıda. Ben sadece see Chrome'da asılı, ama ne olursa olsun tarayıcı, Apache üzerinde etkisi aynıdır.
Effect on Apache
Bu sayfalar asmak zaman, Apache server-status page (I açıkladığı here, farklı bir sorun ile ilgili olarak) işlenen isteklerin sayısını artırır ve atıl işçilerin sayısını azaltır. Istekler hemen hemen tüm, bazen bir an için 'Okuma isteği' ya da gösterecektir olsa 'Cevap gönderme' bir statüye sahip işleniyor 'keepalive'ı (okuyun).'
Sonuç olarak, Apache may crash. Bu olduğunda, Windows kilitlenme raporu şöyle:
szAppName: httpd.exe
szAppVer: 2.2.14.0
szModName: php5ts.dll
szModVer: 5.3.1.0 // OK, this report was before I upgraded to PHP 5.3.2,
// but that didn't fix it
offset: 00a2615
Is it my fault?
Ben bu konuda PHP bug rapor çeliyor. Buna karşı argüman bugs are nearly always my fault., yukarıda belirtildiği gibi, bir
Ancak, 'bu PHP'nin suçu' lehine benim argüman:
- Ben bir kenar davayı buldum ki en sunucuları Linux (Ben bu seçim için alamadım) kullanmak ise ben, Windows'u kullanıyorum, bu yüzden şansı daha fazladır
- Orada
crypt()ile bir hata son zamanlarda, belki hala sorunları var - Elimden basit test durumda yaptık ve ben hala sorun var
Yanlış yaptığımda burada Can anyone duplicate this? Ne önerebilirsiniz? Ben sonuçta hata dosyası gerekir?
Eğer verebilir Herhangi bir yardım için şimdiden teşekkür ederiz.