lostyazilim
tr.link

while ile listelenen dosyalar ile array dizisi oluşturmak

11 Mesajlar 1.228 Okunma
lstbozum
tr.link

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

Merhabalar.

<?php 
	$dir = opendir("folder_name"); 
	
	while (($file_name = readdir($dir)) !== false) 
	{
		
		if(! is_dir($file_name)) 
		{
			$file_img=array 
			(
				$file_img = "folder_name/" . $file_name 
			); 
		}
		
	}
	
	closedir($dir); 
?>

<?php 
	$file_list = array_rand($file_img,1);
	
	echo "file : ".$file_img[$file_list];
?>

 

Üstteki kod ile şunları yapmaya çalıştım;

1) Belli bir klasör içindeki resim dosyalarını listelemek
2) Listelenen dosyaları array dizisine atamak
3) O dizi içinden bir tanesini rastgele göstermek

Bu şekilde sadece bir (son) dosyayı gösteriyor.

Birçok deneme yaptım ama çözemedim henüz.
Bilinçli bir müdahale gerekiyor.

Ama ne?

Teşekkürler şimdiden.

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (29.10.2023 14:31)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
wmaraci
reklam

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)

kodu deneme şansım olmadı hocam ama array(  $file_img = "folder_name" . $file_name  )  bu şekilde yazmışsın. arrayde eşittir değil de "=>" kullanılıyor.  array(  $file_img => "folder_name" . $file_name  )  şöyle bi deneyebilir misin. Bu olmazsa farklı bi yol söylerim yine. @BEYAZMASTER 

Mesaj 1 defa düzenlendi. Son düzenleyen: ÖmerGünay (29.10.2023 20:09)

BEYAZMASTER

kişi bu mesajı beğendi.

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

ÖmerGünay adlı üyeden alıntı

kodu deneme şansım olmadı hocam ama array(  $file_img = "folder_name" . $file_name  )  bu şekilde yazmışsın. arrayde eşittir değil de "=>" kullanılıyor.  array(  $file_img => "folder_name" . $file_name  )  şöyle bi deneyebilir misin. Bu olmazsa farklı bi yol söylerim yine. @BEYAZMASTER 


Hocam teşekkür ederim öncelikle.

Şunu kasdettiyseniz çalışmadı;

<?php 
	$dir = opendir("folder_name"); 
	
	while (($file_name = readdir($dir)) !== false) 
	{
		
		if(! is_dir($file_name)) 
		{
			array(  $file_img => "folder_name" . $file_name  );
		}
		
	}
	
	closedir($dir); 
?>

<?php 
	$file_list = array_rand($file_img,1);
	
	echo "file : ".$file_img[$file_list];
?>

Mesaj 1 defa düzenlendi. Son düzenleyen: BEYAZMASTER (31.10.2023 00:41)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

OmerGunay OmerGunay https://omergunay.net Kullanıcı
  • Üyelik 15.05.2015
  • Yaş/Cinsiyet 33 / E
  • Meslek PHP Developer
  • Konum İstanbul Avrupa
  • Ad Soyad Ö** G**
  • Mesajlar 1207
  • Beğeniler 382 / 381
  • Ticaret 16, (%100)

Hocam bir şunu dener misiniz false değilse dediğiniz için file_name hep 1 olarak çıktı veriyor herhalde.

 

while($file_name  = readdir($dir))  şeklinde. opendir yerine scandir kullansanız daha iyi de olabilir belki.

Mesaj 1 defa düzenlendi. Son düzenleyen: ÖmerGünay (31.10.2023 09:59)

BEYAZMASTER

kişi bu mesajı beğendi.

Herkes yediğinden ikram eder..(Yavuz Sultan Selim)
wmaraci
wmaraci

DeepJack DeepJack WM Aracı Kullanıcı
  • Üyelik 17.12.2017
  • Yaş/Cinsiyet 34 / E
  • Meslek DJ
  • Konum Antalya
  • Ad Soyad G** U**
  • Mesajlar 121
  • Beğeniler 16 / 39
  • Ticaret 8, (%100)
<?php 
$dir = "folder_name";
$files = [];

// Klasördeki dosyaları listele
if ($handle = opendir($dir)) {
    while (false !== ($file_name = readdir($handle))) {
        if ($file_name != "." && $file_name != "..") {
            $files[] = $dir . '/' . $file_name;
        }
    }
    closedir($handle);
}

// 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;
} else {
    echo "Klasörde dosya bulunamadı.";
}
?>
BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

DeepJack adlı üyeden alıntı

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

// Klasördeki dosyaları listele
if ($handle = opendir($dir)) {
    while (false !== ($file_name = readdir($handle))) {
        if ($file_name != "." && $file_name != "..") {
            $files[] = $dir . '/' . $file_name;
        }
    }
    closedir($handle);
}

// 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;
} else {
    echo "Klasörde dosya bulunamadı.";
}
?>


Üstadım çok teşekkür ederim.



Biraz daha geliştirmek adına şunları nasıl yapabiliriz;

1) Alt klasörlereki dosyaları da diziye eklemek

2) Klasör adlarını listeye eklememek

3) Sadece resim uzatısına sahip dosyaları diziye dahil etmek.


Şimdiden teşekkürler.

Mesaj 4 defa düzenlendi. Son düzenleyen: BEYAZMASTER (05.01.2024 00:33)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

DeepJack DeepJack WM Aracı Kullanıcı
  • Üyelik 17.12.2017
  • Yaş/Cinsiyet 34 / E
  • Meslek DJ
  • Konum Antalya
  • Ad Soyad G** U**
  • Mesajlar 121
  • Beğeniler 16 / 39
  • Ticaret 8, (%100)

Buyrun

<?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'];
                    $file_info = pathinfo($file_path);
                    if (in_array(strtolower($file_info['extension']), $allowed_extensions)) {
                        $files[] = $file_path;
                    }
                }
            }
        }
        closedir($handle);
    }
}

listFiles($dir);

// 2) Klasör adlarını listeye eklememe
$files = array_filter($files, function($file) {
    return !is_dir($file);
});

// 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;
} else {
    echo "Klasörde uygun dosya bulunamadı.";
}
?>
BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

DeepJack adlı üyeden alıntı

Buyrun

<?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'];
                    $file_info = pathinfo($file_path);
                    if (in_array(strtolower($file_info['extension']), $allowed_extensions)) {
                        $files[] = $file_path;
                    }
                }
            }
        }
        closedir($handle);
    }
}

listFiles($dir);

// 2) Klasör adlarını listeye eklememe
$files = array_filter($files, function($file) {
    return !is_dir($file);
});

// 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;
} else {
    echo "Klasörde uygun dosya bulunamadı.";
}
?>

Üstadım elinize , zihninize sağlık...



Şu aşamaları da geçebiliriz umarım;
 

1) Aynı anda 3 dosya çağırmak ve sayfada kullanmak için ne yapmalıyız?


2) Bu 3 dosyadan birinin mutlaka mp3 dosyası olmasını nasıl zorunlu hale getirebiliriz?
    $allowed_extensions = ['jpg', 'jpeg', 'png', 'webp', 'gif', 'mp3']; 


3) Dosyaların boyut ve süre bilgilerini elde etmek mümkün mü?
   (Mümkünse sayfada kullanılan mp3 dosyasının süresi sona erdiğinde sayfa yönlendirilecek.)



4) Gelen dosya isimleri içinde TÜRKÇE karakter olduğunda  � şeklinde gözüküyorlar ve html kodları çalışmıyor.
    Bu nedenle gerekii utf8 karakter ayarlamasını koda nasıl entegre edebiliriz?
    (Dosya adını TÜRKÇE fonksiyonu ile revize etmek işe yaramıyor çünkü klasör içindeki dosyanın adı eğişmiş olmuyor...)


5) Adı "abc" olan bir klasör varsa bu klasörün ve içindeki dosyaların hariç tutulmasını nasıl sağlayabiliriz?


6) Adında "ç , w, 3" karakteri olan dosyalar varsa bu dosyaların hariç tutulmasını nasıl sağlayabiliriz?


+)  $allowed_extensions = ['*'];    =>    Bu kod çalışmadı, çalışan halini nasıl yazabiliriz?


Bildiğiniz kadarı ile aydınlatırsanız çok sevinirim, tekrar teşekkürler...



Mesaj 7 defa düzenlendi. Son düzenleyen: BEYAZMASTER (05.01.2024 12:11)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.

DeepJack DeepJack WM Aracı Kullanıcı
  • Üyelik 17.12.2017
  • Yaş/Cinsiyet 34 / E
  • Meslek DJ
  • Konum Antalya
  • Ad Soyad G** U**
  • Mesajlar 121
  • Beğeniler 16 / 39
  • Ticaret 8, (%100)
<?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.

 

BEYAZMASTER

kişi bu mesajı beğendi.

BEYAZMASTER BEYAZMASTER YÜCE ALLAH'IN aciz 1 kulu Kullanıcı
  • Üyelik 04.02.2020
  • Yaş/Cinsiyet 43 / E
  • Meslek Yazılım...
  • Konum Diğer
  • Ad Soyad O** B**
  • Mesajlar 597
  • Beğeniler 154 / 153
  • Ticaret 0, (%0)

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...

Mesaj 7 defa düzenlendi. Son düzenleyen: BEYAZMASTER (05.01.2024 14:18)

 

 

ÖNCE "İYİ,DOĞRU,GÜZEL BİR İNSAN" OLMAK (VEFA,TEVAZZU,NAİFLİK,SAYGI,...) GEREK!
Sonra wm oluruz.
Site Ayarları
  • Tema Seçeneği
  • Site Sesleri
  • Bildirimler
  • Özel Mesaj Al