Fotoğraf yüklerken dosya izinleri nedeniyle yaşanan 403 sorunu

By Admin
In BackEnd
25/Kasım/2020
Okuma Süresi: 3 dk.

Merhabalar sevgili okur,

Bugün çok anormal bir hatayla karşılaştım. Fotoğraf upload ederken simpleImage adında bir sınıfı kullanıyorum.

Her zaman olduğu gibi bugün de bu sınıf yardımıyla daha düne kadar sorunsuz çalışan bir sitemde fotoğraf yükledim. Fotoyu yükleme konusunda bir sıkıntı çıkmadı lakin fotoyu sitemde ziyaretçilere göstermek için çağırdığım zaman sorun yaşadım. Fotolar gelmiyordu. Direkt fotonun linkini url'e yazdığım zaman ise 403 hatası veriyordu. Hosting firmasının da yardımıyla sorunun dosya izinleriyle alakalı olduğunu farkettim.

0644 olarak yüklemesi gereken fotoları bazen 0660 olarak yüklüyordu. Nedenini hala bilmiyorum ama bunu bütün fotolarda yapmıyordu. Sadece şunu söyleyebilirim ki bu sorun simpleImage ile alakalı değildi onu da araştırdım çünkü. Ayrıca simpleImage'i pasife alıp direkt olarak codeigniter upload sınıfıyla yapmaya çalıştığımda da aynı sorunu yaşadım. Bu sorun tamamen fotoğrafla alakalı bir sorundu. Bazı fotoğraflar nedenini bilmediğim bir şekilde 644 değil de 660 olarak kaydettiriyordu kendini zorla.

Başlangıçta site ziyaretçilerinin mağdur olmaması için geçici bir çözüm olarak yüklediğim fotoların izinlerini filezilla ile manuel olarak 644'e çektim. Bu işlemden sonra en azından ziyaretçiler bozuk foto ikonu görmeyeceklerdi. 

Kökten çözüm ise bazı fotolarda yaşadığım bu sorunu yüklediğim her fotoya basit bir if sorgusu yazarak çözmek oldu. 

Codeigniter kullandığım için bu sorguyu helper olarak yazdım.

function chmod_update($file){
    $value = substr(sprintf('%o', fileperms($file)), -4);
    if ($value !== "0644"){
        chmod($file, 0644);
    }
}

Bu helper'a dosya yolunu yolladığınız zaman dosya izni 0644 değilse 0644 olarak güncelliyor. Gayet basit ama kullanışlı. 

Dosya iznini öğrenmek için fileperms kullandım, dosya iznini değiştirmek içinse chmod fonksiyonunu kullandım. 

Umarım işini görecek bir bilgidir sevgili okur. Görüşmek üzere.


Codeigniter'da oluşturulmuş bütün sessionları görmek
Php'de dizinin son elemanını düzenlemek