Zkratka na hlavní stranu: Alt + Shift + horní 2(ě)
Linkedin FB e-mail Google Plus Twitter

Hledat na tomto webu

 
 

PHP – Výběr náhodných obrázků z adresáře na serveru
Náhodné soubory s požadovanými příponami, zadaný počet nebo všechny,

 

Vytvořeno
17. 6. 2013

 

PHP funkce pro náhodný výběr zadaného počtu souborů (nebo všech, pokud jich není dostatek; nebo všech, pokud je to zadáno)
s požadovanými příponami ze zadaného adresáře na serveru (hostingu).

Typicky pro výběr a vložení potřebného počtu náhodných obrázků, např. partnerů projektu, sponzorů, referencí, ukázek, nebo ilustrační a dekorativní grafiky.

//Martin Adámek, www.adamek.cz
/////////////////////////////////////
//$pripony                 Seznam povolených přípon (á 3 nebo 4 znaky)   
//$cesta                   Cesta k prohledávanému adresáři na hostingu (bez koncového lomítka) 
//$kolik                   Názvy kolika souborů mají být vráceny (0 == všechny) 
///////////////////////////////////// 

  //Zjištění názvů náhodných souborů požadovaných přípon požadovaného počtu v požadovaném adresáři
  function vrat_nahodne_nazvy_souboru_z_adresare($pripony = array('jpg','jpeg','png'), $cesta = '', $kolik = 1) // V definici funkce uvedeny výchozí hodnoty vstupních proměnných, které se implicitně použijí, když dané proměnné nebudou při volání funkce explicitně zadány 
    { //Inicializace
      $kolik = intval($kolik);        //Ošetření textů, desetinných čísel a jiných nehezkých hodnot //Při chybě nebo poli na vstupu vrací 0 nebo 1
      if ($kolik < 0) $kolik = 0;     //Ošetření záporného vstupu 
      $soubory = array();             //Pro nalezené vyhovující soubory
      $ktere = array();               //Pro klíče odkazující na vybrané názvy souborů
      $vysledek = array();            //Pro výběr k vrácení (vybrané názvy souborů)

      //Načtení názvů vyhovujících souborů
      $adresar = opendir($cesta); 
      while ($soubor = readdir($adresar)) 
        if ( in_array( substr($soubor, strlen($soubor)-3, 3), $pripony) or in_array( substr($soubor, strlen($soubor)-4, 4), $pripony) ) // Pozn.: pro výpis souborů všech přípon bez tohoto omezení nutno vyfiltrovat adresář a nadřazený adresář: $soubor!='.' and $soubor!='..'  
          $soubory[] = $soubor;
      closedir($adresar);

      //Výběr hodnot k vrácení
      if (/*count($soubory) <= 1 or */ $kolik == 0 or count($soubory) <= $kolik)  // Nutno vrátit vše nalezené
                                                                                  //  Platné podmínky: Chce všechny; nebo se jich našlo méně než je požadováno
                                                                                  //  Zakomentovaná podmínka: Našel se žádný nebo jeden (netřeba samostatně řešit, řeší to další dvě podmínky, když nahoře zajišťujeme, že $kolik>=0 a je celé číslo)      
          $vysledek = $soubory;                                                   // Vracíme všechny  
      
      else                                                                        // Nutno vybrat jen požadovaný počet
        { $ktere = array_rand($soubory,$kolik);        
          if ($kolik == 1)                                                        // array_rand vrací přímo klíč
            $vysledek[] = $soubory[$ktere];                                       // Ale tato funkce ho vrátí jako první prvek pole, aby šlo výsledky zpracovávat jednotným způsobem
          else                                                                    // array_rand vrací pole klíčů
            foreach ($ktere as $ktery) $vysledek[] = $soubory[$ktery];
        }                                                                                      
      return $vysledek;         //Pole s názvy souborů s požadovanými příponami v požadovaném adresáři      
    }


  //Vložení obrázků s logy partnerů projektu
  function vlozlogapartneru()
    {     
      $soubory=vrat_nahodne_nazvy_souboru_z_adresare(array('jpg','jpeg','png','gif'), '/img/logotypes', 2);            
      echo '<div id="partneri">';
        foreach ($soubory as $soubor) echo '<img src="img/logotypes'.$soubor.'" alt="Partner projektu" title="Partner projektu" />'; // I když v tomto případě by se do altu správně měl psát přímo konkrétní název firmy (text viditelný na obrázku), což se tu neděje //V případě čistě dekorativního nebo jinak obsahově opravdu bezvýznamného obrázku nechte alt prázdný
      echo '</div>';      
    }

Funkce array_rand() sice vrací při různých volání různé výsledky (pokud má z čeho vybírat a není nucena vrátit všechno),
zato ale vždy ve stejném vzájemném pořadí vybraných prvků.
Pro zamíchání pořadí lze použít funkci shuffle().

Komentáře návštěvníků

Poskytovatelé diskusních služeb (Facebook, Disqus) si do cookies ve vašem prohlížeči ukládají různé údaje, čímž mohou narušit vaše soukromí. Načtením diskusí na vaši žádost s tím souhlasíte.
Na drtivé většině webů se plug-iny Facebooku, Googlu, Disqusu a jiných třetích stran načítají automaticky; a že u mě se to děje až na vaše výslovné přání (tedy většinou neděje), je moje specialitka pro ochranu vašeho soukromí.
Discussion plugins from 3rd parties (Facebook, Disqus) provide information about you to theirs providers, saving some information into cookies in your browser. If you will load discussion on your request, it means you agree with it.

Pokud máte účet na Facebooku

(nebo jiném z několika podporovaných serverů)

Chovejte se tady jako doma, ať vidíme, jak to u vás vypadá.
[nápis v linkovém autobusu]

A priori upřímně doufám, že mě obsah a forma příspěvků nedonutí k žádným moderátorským zásahům,
ale právo zásahu si vyhrazuji, protože tyto komentáře jsou přístupné komukoliv, kdo se zaregistroval na FB, a já netuším, co se tu může objevit.

V souvislosti s vkládáním odkazů na Vaše weby do komentářů nejsem hysterický. Odkaz na nekomerční web s relevantním obsahem, který může pomoci ostatním návštěvníkům, uvítám.

 
Načíst sem facebookové komentáře
pro čtení (aktuální počet: 0)
nebo přidání vlastního

(vyžadován javascript)
 
Komentáře se záměrně nenačítají samy, aby až do jejich načtení:
Facebook nevěděl, že jste tady právě vy,
nezkazila se přizpůsobivost webu a kvalita kódu
a nezvyšoval se datový tok.
 
Facebook ví, že tuto stránku teď někdo navštívil, ale na rozdíl od řešení obvyklého na drtivé většině jiných webů s FB pluginy tady díky mému způsobu realizace nepoznal, že jste to byli právě vy.

 

Pokud nemáte účet na Facebooku

Komentářový plugin Facebooku umožňuje vkládat komentáře i prostřednictvím účtů na několika dalších serverech (i když u nás nejsou moc používané).

Pokud nemáte žádný účet, prostřednictvím kterého byste sem mohli napsat komentář, neberte to jako diskriminaci. Zkrátka jsou tu komentáře alespoň pro uživatele FB a pár dalších serverů, což je lepší, než kdyby tu nebyly vůbec.

Kromě zjevné nevýhody má toto řešení i své výhody:

  • Při použití své FB identity by se většina uživatelů mohla zamyslet, co vypouští z prstů.
  • Odkaz na komentovanou stránku se může šířít Facebookem.
  • Ve výchozím nastavení se přednostně zobrazují komentáře zanechané návštěvníkovými facebookovými známými, což v důsledku podporuje obě předchozí výhody.

Navíc většina neuživatelů FB zůstává mimo FB ze svého vlastního rozhodnutí, takže jim neužívání Facebooku přináší různé pro ně důležité výhody (soukromí, čas), které snad vykompenzují nemožnost sem něco napsat.
Případně je možné jako náhradní možnost použít návštěvní knihu společnou pro celý web.
Časem třeba napíšu nebo nasadím nějaký jiný komentářový systém, který bude mít menší omezení pro komentátory, ale teď je tu alespoň toto.

Ale i tak si můžete alespoň přečíst komentáře od ostatních.

Strukturovaný opis komentářů

Pro:

  • paranoidní jedince, kteří nechtějí, aby FB věděl, že právě oni navštívili tuto stránku,
  • programátory, kterým se ta struktura vnořených polí bude líbit,
  • uživatele mobilních zařízení, kteří nechtějí, aby FB pokazil přizpůsobivost webu,
  • případný prohlížeč bez javascriptu
  • webový archiv, který si je takto uloží jako statický text dostupný v budoucnu i bez spolupráce Facebooku.
Array
(
    [error] => Array
        (
            [message] => (#4) Application request limit reached
            [type] => OAuthException
            [is_transient] => 1
            [code] => 4
            [fbtrace_id] => FZl0fJbojwf
        )

)

Komentáře Disqus

Sem se javascriptem vkládají komentáře Disqus, teď Vám ale asi javascript nefunguje.
System for comments Disqus doesn't work without javascript.

Skok nahoru na: Navigační menu (klávesová zkratka „5”)

Zaujala Vás tato stránka?

  • Přidat do záložek (Ctrl+D)
  • Sdílet odkaz (vysílačka)Skok nahoru na:
  • Vytisknout (Ctrl+P)
  • Citovat podle ČSN ISO 690

    Tuto stránku

    ADÁMEK, Martin. PHP – Výběr náhodných obrázků z adresáře na serveru: Náhodné soubory s požadovanými příponami, zadaný počet nebo všechny,. Martin Adámek [online]. Náchod [cit. 2017-10-18]. Dostupné z: http://www.adamek.cz/sw/php/nahodny-vyber-obrazku

    Celý web

    ADÁMEK, Martin. Martin Adámek [online]. Náchod [cit. 2017-10-18]. Dostupné z: http://www.adamek.cz

 

 
 

Národní kulturní dědictví

Stránky archivovány Národní knihovnou ČR Tyto stránky jsou pravidelně archivovány Národní knihovnou ČR pro svou kulturní, vzdělávací, vědeckou, výzkumnou nebo jinou informační hodnotu za účelem dokumentace autentického vzorku českého webu. Jsou součástí kolekce českých webových stránek, které NK ČR hodlá dlouhodobě uchovávat a zpřístupňovat pro budoucí generace. Jejich záznam je součástí České národní bibliografie a katalogu NK ČR.  

 

 
 

Pro rozptýlení

There are 10 kinds of people in the world – those who understand binary and those who don't.

 

Pro zamyšlení

Dva milostné dopisy se píší nejhůř – první a poslední.
[Francesco Petrarca]