DeepJack adlı üyeden alıntı

<?php
$dir = "folder_name";
$files = [];

function listFiles($dir) {
    global $files;
    if ($handle = opendir($dir)) {
        while (false !== ($file_name = readdir($handle))) {
            $file_path = $dir . '/' . $file_name;

            // 1) Alt klasörlereki dosyaları da diziye ekleme
            if ($file_name != "." && $file_name != "..") {
                if (is_dir($file_path)) {
                    listFiles($file_path);
                } else {
                    // 3) Sadece resim uzantısına sahip dosyaları diziye ekleme
                    $allowed_extensions = ['jpg', 'jpeg', 'png', 'gif', 'mp3'];
                    $file_info = pathinfo($file_path);
                    
                    // 2) Sadece belirli uzantılara sahip dosyaları diziye ekleme
                    if (in_array(strtolower($file_info['extension']), $allowed_extensions)) {
                        // 4) Dosyaların boyut ve süre bilgilerini almak
                        $file_size = filesize($file_path); // Boyut
                        if(strtolower($file_info['extension']) == 'mp3') {
                            $audio_duration = getMp3Duration($file_path); // Süre (sadece mp3 dosyaları için)
                            
                            // 3) Sayfa yönlendirme kontrolü (örneğin: mp3 dosyasının süresi bittiyse)
                            if ($audio_duration <= 0) {
                                header("Location: yeni_sayfa.php");
                                exit();
                            }
                        }
                        
                        $files[] = [
                            'path' => $file_path,
                            'size' => $file_size,
                            'duration' => $audio_duration ?? null,
                        ];
                    }
                }
            }
        }
        closedir($handle);
    }
}

// UTF-8 karakter desteği
setlocale(LC_ALL, 'tr_TR.UTF-8');
bind_textdomain_codeset('messages', 'UTF-8');

listFiles($dir);

// 5) "abc" adlı klasör ve içindeki dosyaları hariç tutma
$files = array_filter($files, function ($file) {
    return stripos($file['path'], '/abc/') === false;
});

// 6) Belirli karakterlere sahip dosyaları hariç tutma
$exclude_characters = ['ç', 'w', '3'];
$files = array_filter($files, function ($file) use ($exclude_characters) {
    foreach ($exclude_characters as $char) {
        if (stripos($file['path'], $char) !== false) {
            return false;
        }
    }
    return true;
});

// +) $allowed_extensions = ['*']; Bu kod çalışmadı, çalışan halini yazma
if (in_array('*', $allowed_extensions)) {
    // Tüm uzantılara izin verildiyse, bu adımı atla
} else {
    // Sadece belirli uzantılara izin verildiyse, filtrele
    $files = array_filter($files, function ($file) use ($allowed_extensions) {
        $file_info = pathinfo($file['path']);
        return in_array(strtolower($file_info['extension']), $allowed_extensions);
    });
}

// Dosyaları kontrol et ve array dizisine atama
if (!empty($files)) {
    // Rastgele bir dosyayı seç
    $random_file = $files[array_rand($files)];
    
    // Seçilen dosyayı ekrana yazdır
    echo "file: " . $random_file['path'];
} else {
    echo "Klasörde uygun dosya bulunamadı.";
}

// 4) Dosyanın süresini almak için kullanılan fonksiyon
function getMp3Duration($file_path) {
    $getID3 = new getID3;
    $file_info = $getID3->analyze($file_path);
    return (int)$file_info['playtime_seconds'];
}
?>

 

Dosyanın süresini almak için getID3 kütüphanesinin yüklü olması gerektiğini unutmayın.

 

Üstadım emeğiniz ve ilginiz için gerçekten çok teşekkür ederim.

Standardın üzerindeki bu kodları yazabildiğiniz için de tebrik ederim.


&


* 38. satırdaki parse error hatasını çözmeye çalışıyorum... ?

* getID3 kütüphanesini eklemeye çalışıyorum;
   getid3.org
   github.com/JamesHeinrich/getID3
   sourceforge.net/projects/getid3
   Tümünün içeriği aynı ve içlerinde dll, exe dosyaları da var alakasını kuramadım, bunlar ne amanla var acaba ?

   Hangi php dosyasını include etmeliyiz (içinde birçok php dosyası var) ?
   Sizin önerebileceğiniz sade ve tutarlı bir kütüphane linki var mı ?

* Son olarak mp3 ile ilgili kısımları mp4 şeklinde değiştirdiğimizde videolar için de aynı işleyişi ele edebilir miyiz?

                        if(strtolower($file_info['extension']) == 'mp4') {
                            $audio_duration = getMp4Duration($file_path); // Süre (sadece mp4 dosyaları için)
                            
                            // 3) Sayfa yönlendirme kontrolü (örneğin: mp4 dosyasının süresi bittiyse)
                            if ($audio_duration <= 0) {
                                header("Location: yeni_sayfa.php");
                                exit();

Yoksa videolar için farklı bir kod mu yazmalıyız?


Çok teşekkürler...