[Nasıl] Rastgele Resim Çağırmak - PHP

Başlatan ecarpar, 28 Kasım 2011 - 02:50:42

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

ecarpar

Hep soru hep soru nereye kadar :) bir seferde yaptığım birşeyi koyayım.
Bir çok yerde örneklerine rastladım, hep merak ettim ben yapsam nasıl yaparım diye...
Tabi basit bir kod sonuçta tek işi jpg uzantılı dosyaları listeleyip yayınlamak aklımada takılan 1-2 şeyde yazdım, buraya kadar olan kısmıda işimi gördü. 



function RandomBackGraund(){
$dizin = "./images";
$uzanti = "jpg";
//önce hangi uzantıyı listeliycez ona bakalım sadece jpg leri alıcak burada... aşağıda başka bir yol daha var...
function turSec($tip)  {
    $tip= strtolower(pathinfo($tip, PATHINFO_EXTENSION));
    return $tip; 
   }
//Resimleri klasörden alalım
$resimAdedi = 0;
$BgImages = array();
if ($handle = opendir("$dizin") or die ("Dizin acilamadi!")) {
    while (false !== ($file = readdir($handle))) {
    $filetype = turSec($file);
    if(is_file($dizin."/".$file) && $filetype == "$uzanti") {
   $resimAdedi++;
      //isimlerini array' e atalım
      array_push($BgImages, $file);
      }
    }

closedir($handle);
}
//karıştıralım ne gerek var deme  olsun tedbir olsun shuffle çalışmaz felan ..
$karisik = rand(1,$resimAdedi);
//diziyi karıştıralım olsun gerekir daha çok karışsın miğdesi bulansın .
//shuffle ($BgImages);
// return 2 adet değişken döndürmez bizde istediğimiz kadar değişkeni yan yana koyar sonuca tek değişken veririz..
$return = $dizin ."/".$BgImages[$karisik];
return $return;
}


shuffle patladı internete koyunca bende random yaptım.. tabi geliştirile bilir bir şey.. örneğin daha önce girmiş bir kullanıcıya aynı resim gösterilmeye bilir.. png ler için fonksiyon yeniden düzenlene bilir, misal burada sadece jpg ler çağırılıyor, bir yöntem daha buldum fakat buda güvenlik uyarısı verdi servere atınca..


   if ($file != "." && $file != "..") {
                     if(substr($file,-3)=='gif' || substr($file,-3)=='jpg') $files[count($files)] = $file;
                }

Bu satırlar...

Birisi de daha önce girmiş bir kullanıcıya aynı resmi göstermeyenini yaparda koyarsa teşekkür etmez değilim. Burada aklıma takılan şeyler, aynı kulanıcı f5 e üst üste basarsa ne olur :) misal 10 resim var ve bunların hiç birisi 10.0.0.2 ip li kulanıcıya ikinci sefer gösterilmiycek :) ve adam 11. kez F5 e bastı ? Herhalde cookie de birde sayaç tutmak gerekir ve sayaş resim adedine eşit olunca resimler yeniden sıralanır ve en baştan gösterine geçer gibi bir şey olması gerekebilir sanki :) ..

Bilemedim ..
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

ahmetturan

başlığı "Rastgele resim çağırmak" olarak değiştirsek :)
boş zaman mahsûlleri
qtHesap
qtRehber

alquirel

Başlıkta gerekli değişiklik yapıldı.
Kod incelemesini tehir ediyorum. Şimdilik...

alquirel

Diğer resim türleri için şunu yapabilirsin. $uzanti değişkenini array olarak tanımlarsın.
Yani

$uzanti = array("jpg", "png", "gif");


Daha sonra da $filetype == $uzanti şeklinde yaptığın karşılaştırmayı in_array fonksiyonu ile yaparsın.
Yani

if(is_file($dizin."/".$file) && in_array($filetype, $uzanti))


Bir kullanıcıya sürekli farklı resimler gösterme konusuna gelirsek, bence buna gerek yok. Her seferinde resimlerden gösterilmeyen kalmış mı diye kontrol etmek, bunu yaparken her seferinde kaç adet resim olduğuna bakmak, hepsi gösterilmişse kontrolünü yapmak gereksiz hammallık olur bence. Yine de bunu yapmak istersen IP veya PHPSESSID değişkenlerine ihtiyacın olmaz. Cookie veya Session global değişkenlerini kullanarak halledebilirsin.

Üstteki kontrollere alternatif olarak şöyle de bir yol denenebilir. Resimlerin olduğu dizin bir kere okunduktan sonra karıştırılıp cookie veya session değişkenlerinde tutulur. Aynı değişkenlerde bir de 0'dan başlayarak resim adedine kadar artacak olan bir değişken tutulur. Yani karışık bir resim sırası sırayla gösterilmiş olur. Sona geldiğinde tekrar karıştırılıp baştan başlanabilir. Ama dediğim gibi bence bunlara gerek yok, rand fonksiyonunun gücüne emanet edelim kendimizi :)