Upload yaparken 500 hatası almak
Localde bir uygulama yapıyorsunuz ve takır takır çalışıyor. Dosyayı upload yapıyor, PHP ile dosya üzerinde istediğiniz işlemi yapabiliyorsunuz, dosyayı istediğiniz yere kaydediyosunuz vs vs. Sıra uygulamayı internete taşımaya geliyor ve açıyorsunuz FileZilla’yı ve uygulamayı siteye gönderiyorsunuz. Uygulamayı denemek için adres çubuğuna gelip site adını yazıyosunuz. Uygulama sorunsuz açılıyor. Yüklemek için bir dosya seçmenizi istiyor. Yüklemek istediğiniz dosyayı seçiyorsunuz ve tataaa. “500 Internal Server Error” alıyorsunuz. Ama localde herşey düzgündü. Hiçbir problem yoktu. Hatta unit testlerinden bile geçmişti. Nerden çıktı bu problem şimdi. Sorun sizden kaynaklanmıyordu. Çünkü bu sıradan bir PHP Exception değil. Serverın kendisinde bir sıkıntı var. 500 hataları server ile alakalıdır. Sizin scriptinizle alakalı değildir.
Öncelikle problem çözme aşamalarından ilki olan problemin ana kaynağını bulma konusundan başlıyoruz. Problem ne zaman oluşuyor? Dosya yükleyince. Peki biz upload yaparken scriptimiz Apache’nin bir kısıtlamasına müdahale etmeye çalışıyor mu? Hayır. O zaman bizim scriptimizde bir problem yok. Apache’nin kendisinde bir problem var. Artık öyle bir devirde yaşıyoruz ki sizin karşılaştığınız problemle çoook yüksek bir ihtimalle başkası da karşılaşmıştır hatta çözmüştür. Bu yüzden öncelikle Google amcamıza danışıyoruz.
https://www.google.com.tr/#q=internal+server+error+php+file+upload
Şunu hatırlatmakta fayda görüyorum. Probleminize Google kullanarak çözüm ararken doğru kelimeleri kullanmanız gerekiyor. Az ve öz olmalısınız. Dürüst bir şekilde doğru kelimeleri yazdığınız zaman Google doğru sonuçları getirecektir. Gereksiz hiçbir kelime yazmayın. Bazıları gibi “I’m trying to upload a file but it throws 500 error” falan filan gibi uzatmanın anlamı yok. Az ve öz olun. Google sizin kankanız yada duygularınıza derman olan bir psikolog değil. O yüzden ne istiyorsanız çat çat söyleyin dürüst olun sade olun.
Eğer sonuçlar arasında stackoverflow.com linkleri çıkıyorsa gözünüz kapalı tıklayın. Bu sitenin başarısını anlatmaya gerek görmüyorum zaten. Birkaç link geliyor ve bunlar şunlar:
http://stackoverflow.com/questions/20617408/http-500-internal-server-error-when-uploading-files
http://stackoverflow.com/questions/17669712/php-upload-and-internal-server-error
Burada kısaca diyor ki “Eğer PHP’yi FastCGI modunda çalıştırıyorsanız Apache’nin FastCGI processine ulaştıracağı request datasının miktarını ayarlamanız gerekiyor. Bunu da httpd.conf dosyasına FcgidMaxRequestLen 2000000 şeklinde bir satır girerek yaparsınız.” diyor. Tabiki yeni serverlarda httpd.conf yerine apache2.conf dosyası var. Bu satırı bu dosyaya eklemem gerekiyor. Direktifi aldıktan sonra Buğra durmaz tabiki.
Birşey daha söylemek istiyorum. Eğer PHP’yi farklı modlarda çalıştırabiliyorsanız o halde şunu da yapabilirsiniz. Farklı modları deneyerek bu gıcık 500 hatasını gidermeye çalışırsınız ama bu yöntem “halıyı tozun üzerine kapatmak” gibi olur ve problemi kökten halletmez. Tabiki böyle yaparsanız farklı hatalara davetiye çıkarmış olursunuz. Bir problemi kökten halletmezseniz ilerde daha büyük bir hatayla karşılaşacağınızı asla unutmayınız. Benim serverda farklı modlar var. FastCGI, SuPHP, ModPHP vs. FastCGI kullandığım için apache2.conf dosyasına ayar çekerek problemi hallettim. FastCGI modunda çalışan diğer siteler için de artık böyle bir problemle karşılaşmayacağım ve bunun için son derece mutluyum.
Esen kalın.
0 yorum