Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Losowy obrazek
Forum PHP.pl > Forum > PHP
dolmi2
Mam taki oto skrypt powodujący wyświetlanie losowego obrazka z danego katalogu.

  1. <?php 
  2. $path = '.'; 
  3. $i = 0; 
  4. $imgDir = opendir ($path); 
  5.    while ( $file = readdir( $imgDir ) ) 
  6.    {     
  7.       $file_type = strrchr( $file, &#092;".\" ); 
  8.       $is_image = eregi( &#092;"jpg|gif\",$file_type ); 
  9.       if ( $file != '.' && $file != '..' && $is_image ) 
  10.       { $images[$i++] = $file; } 
  11.    } 
  12. closedir ($imgDir); 
  13. srand( (double) microtime()*1000000 ); 
  14. $image_name = $path . '/' . $images[rand( 0,sizeof( $images ) -)]; 
  15. $imgSize = GetImageSize( $image_name ); 
  16. if ( $i == 0 ) 
  17.    die(); 
  18. print ( &#092;"<img src=\"\" . $image_name . \"\"\" . $imgSize[3] . \" />n\" ); 
  19. ?>


Mój problem polega na tym, że nie wiem, jak zrobić, aby skrypt ten wyświetlał tylko pliki mniejsze niż na przykład 5kB. Czy jest jakiś sposób, aby to wymóc na skrypcie? Za radą znajomego zmieniłem 9. linijkę na
Kod
if ( $file != '.' && $file != '..' && $is_image && filesize($file)<5121)

ale niestety to nic nie dało. Proszę o pomoc.
oldek
  1. <?php
  2. $image_name = $path . '/' . $images[rand( 0,sizeof( $images ) -)]; 
  3. $imgSize = GetImageSize( $image_name );
  4. ?>
zastąp przez
  1. <?php 
  2. $safety_count=0;
  3. do {
  4.   $image_name = $path . '/' . $images[rand( 0,sizeof( $images ) -)]; 
  5.   $imgSize = GetImageSize( $image_name ); 
  6. $safety_count++;
  7. } while (($imgSize>5120) AND ($safety_count<100));
  8. ?>

$safety_count jest na wypadek gdyby w katalogu były same duże pliki... worriedsmiley.gif
ponadto linie 16 i 17 wypadałoby przenieść ponad linię 13 ( ale ta uwaga to tylko tak w ramach czepiania się guitar.gif )
dolmi2
Dzięki za odpowiedź, ale niestety twoja propozycja nie działa. Może jakieś inne pomysły??
hwao
  1. <?php
  2. $banery = file(&#092;"banery.txt\");
  3. $ile= &#092;"3\";
  4.  
  5. srand ((float)microtime()*1000000); 
  6. shuffle($banery); 
  7. for($i=0;$i<$ile;$i++){
  8.  list($adres,$img,$opis) = explode('|+|', $banery[$i]);
  9.  
  10.  echo &#092;"<a href=\"$adres\" target=\"_blank\" title=\"$opis\"><img src=\"baner/$img\" border=\"0\"></a><br />\";
  11. }
  12. ?>


Troche stare ale dziala :]
Tablica zamien na ta co robi Dir" title="Zobacz w manualu PHP" target="_manual() i wywal explod'y ;-)
dolmi2
Więc problem polega na tym, że ja kompletnie nie znam sie na php, dlatego bardzo bym prosił najlepiej o gotową aarambo.gif propozycję.
oldek
faktycznie nie miało prawa zadziałać, bo GetImgSize nie podaje ... rozmiaru pliku angrysmiley.gif Na szczęście jest jeszcze funkcja filesize() która robi to co trzeba... Poniżej nowa wersja, mam nadzieję że już działająca:
  1. <?php
  2. $safety_count=0;
  3. do {
  4.   $image_name = $path . '/' . $images[rand( 0,sizeof( $images ) -)]; 
  5.   $imgSize_inBytes = filesize( $image_name ); 
  6.   $safety_count++;
  7. } while (($imgSize_inBytes>5120) AND ($safety_count<100));
  8. $imgSize = GetImageSize( $image_name ); 
  9. ?>
i nie sprawdzi się przysłowie 'do 3 razy sztuka' tiredsmiley.gif

edit: jeśliś taki początkujący, to jeszcze dodam: zastąp powyższym swój oryginalny kod
  1. <?php
  2. $image_name = $path . '/' . $images[rand( 0,sizeof( $images ) -)]; 
  3. $imgSize = GetImageSize( $image_name );
  4. ?>
dolmi2
Dzięki wielkie Oldek winksmiley.jpg , mój Rkingsmiley.png .

Cytat
edit: jeśliś taki początkujący, to jeszcze dodam

Aż taki początkujący nie jestem aarambo.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.