• 05-06-2022, 16:11:49
    #1
    arkadaşlar merhaba,
    aşağıdaki kodlarla dosta tipini kontrol etmeye çalışıyorum fakat if in içindeki sadece ilk koşulu alıyor diğer koşullar çalışmıyor nerde hata yapıyorum sizce?
        $tipi = $_FILES['file']['type']; // dosya tipi
        $isim = $_FILES['file']['name']; // dosya ismi
         
        $nokta = explode('.', $isim); // dosya isminde bulunan (nokta) işaretleriyle gelen ismi parçalıyoruz.
        $nokta = $nokta[count($nokta)-1]; // yüklenen dosyanın adında geçen (nokta)'nın sonuncusundan sonra alınan uzantı. Örn: dosya.adi.doc isminde geçen . işaretinden sonraki kelimeyi alır.
         
        if( ($tipi != "image/png" && $nokta != "png") || ($tipi != "image/jpeg" && $nokta != "jpg") || ($tipi != "image/jpeg" && $nokta != "jpeg") ) { // $tipi değişkeni beklediğimiz mime tipine uygunsa else koşulunu döndürüyoruz ve $nokta değişkeni beklediğimiz uzantıyı karşılıyorsa else döndürüyoruz.
        echo 'Bu bölümde sadece image uzantılı dosya yükleyebilirsiniz.';
        exit; } else {
  • 05-06-2022, 16:30:16
    #2
    meetadfor adlı üyeden alıntı: mesajı görüntüle
    arkadaşlar merhaba,
    aşağıdaki kodlarla dosta tipini kontrol etmeye çalışıyorum fakat if in içindeki sadece ilk koşulu alıyor diğer koşullar çalışmıyor nerde hata yapıyorum sizce?
        $tipi = $_FILES['file']['type']; // dosya tipi
        $isim = $_FILES['file']['name']; // dosya ismi
        
        $nokta = explode('.', $isim); // dosya isminde bulunan (nokta) işaretleriyle gelen ismi parçalıyoruz.
        $nokta = $nokta[count($nokta)-1]; // yüklenen dosyanın adında geçen (nokta)'nın sonuncusundan sonra alınan uzantı. Örn: dosya.adi.doc isminde geçen . işaretinden sonraki kelimeyi alır.
        
        if( ($tipi != "image/png" && $nokta != "png") || ($tipi != "image/jpeg" && $nokta != "jpg") || ($tipi != "image/jpeg" && $nokta != "jpeg") ) { // $tipi değişkeni beklediğimiz mime tipine uygunsa else koşulunu döndürüyoruz ve $nokta değişkeni beklediğimiz uzantıyı karşılıyorsa else döndürüyoruz.
        echo 'Bu bölümde sadece image uzantılı dosya yükleyebilirsiniz.';
        exit; } else {
    Jpg ve Jpeg dosyalarını yükleyemiyor musunuz bu koşula göre
  • 05-06-2022, 16:32:09
    #3
    if bloğunu yanlış mı yazıyorsun yoksa ben uykusuzluktan hayal mi görüyorum
  • 05-06-2022, 16:36:22
    #4
    socidev adlı üyeden alıntı: mesajı görüntüle
    Jpg ve Jpeg dosyalarını yükleyemiyor musunuz bu koşula göre
    evet hocam
  • 05-06-2022, 16:36:56
    #5
    Birdilimask adlı üyeden alıntı: mesajı görüntüle
    if bloğunu yanlış mı yazıyorsun yoksa ben uykusuzluktan hayal mi görüyorum
    sanmıyorum ama bir yerde hata olduğu kesin
  • 05-06-2022, 16:40:47
    #6
    $allowed_ext = ['jpg','jpeg','png','gif','gıf'];
        $allowed_mimes = ['image/jpeg','image/png','image/gif'];
    
        $ext_explode = explode('.',$file['name']);
        $uzanti = strtolower(array_pop($ext_explode));
        $mime = mime_content_type($file['tmp_name']);
    
        if(!in_array($uzanti,$allowed_ext) || !in_array($mime,$allowed_mimes)){
            echo 'hata'
            die;
        }
    en basit haliyle bu şekilde yapabilirsiniz.

    ayrıca $_FILES['file']['type']; kullanmayın. txt dosyasının sadece uzantısını değiştirip .png yaptığınızda da image/png döner. örnek olarak; shell.php dosyasını kötü niyetli kullanıcı shell.png yapar yükler, sonra yüklenen dosyayı çalıştırır sonuçları kötü olur.
    mime_content_type kullanın. bu gibi durumlarda kesin sonuç verir. uzantı farklı içerik farklı olsa da doğru sonucu döner
  • 05-06-2022, 17:05:11
    #7
    ebasit adlı üyeden alıntı: mesajı görüntüle
    $allowed_ext = ['jpg','jpeg','png','gif','gıf'];
        $allowed_mimes = ['image/jpeg','image/png','image/gif'];
    
        $ext_explode = explode('.',$file['name']);
        $uzanti = strtolower(array_pop($ext_explode));
        $mime = mime_content_type($file['tmp_name']);
    
        if(!in_array($uzanti,$allowed_ext) || !in_array($mime,$allowed_mimes)){
            echo 'hata'
            die;
        }
    en basit haliyle bu şekilde yapabilirsiniz.

    ayrıca $_FILES['file']['type']; kullanmayın. txt dosyasının sadece uzantısını değiştirip .png yaptığınızda da image/png döner. örnek olarak; shell.php dosyasını kötü niyetli kullanıcı shell.png yapar yükler, sonra yüklenen dosyayı çalıştırır sonuçları kötü olur.
    mime_content_type kullanın. bu gibi durumlarda kesin sonuç verir. uzantı farklı içerik farklı olsa da doğru sonucu döner
    hocam cevabınız için teşekkür ederim aşağıdaki gibi düzenledim kodlarımı sizin verdiklerinizi ekleyerek fakat yine de başarılı olamadım, sizde bir bakar mısınız?

  • 05-06-2022, 17:09:30
    #8
    meetadfor adlı üyeden alıntı: mesajı görüntüle
    hocam cevabınız için teşekkür ederim aşağıdaki gibi düzenledim kodlarımı sizin verdiklerinizi ekleyerek fakat yine de başarılı olamadım, sizde bir bakar mısınız?


    hata if bloğuna düşüyorsa seçilen dosya geçersizdir farklı dosyalarla deneyin. o da olmazsa print_r ile $_FILES yazdırın o gelmiyor olabilir. $_FILES gelmiyorsa otomatik olarak hataya düşer
  • 05-06-2022, 17:11:03
    #9
    ebasit adlı üyeden alıntı: mesajı görüntüle
    hata if bloğuna düşüyorsa seçilen dosya geçersizdir farklı dosyalarla deneyin. o da olmazsa print_r ile $_FILES yazdırın o gelmiyor olabilir. $_FILES gelmiyorsa otomatik olarak hataya düşer
    files geliyor hocam verdiğiniz kodu kaldırınca eski kodlar çalışıyor