Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Losowy baner flash
Forum PHP.pl > Forum > Przedszkole
free
Mam takio skrypt :

  1. <?php
  2.  
  3. $losowy = 'images/kartki';
  4.  
  5. $i = 0;
  6. $imgDir = opendir ($losowy);
  7. while ( $file = readdir( $imgDir ) )
  8. {
  9. //checks that file is an image
  10. $file_type = strrchr( $file, "." );
  11. $is_image = eregi( "jpg|gif",$file_type );
  12.  
  13. if ( $file != '.' && $file != '..' && $is_image )
  14. { $images[$i++] = $file; }
  15. }
  16. closedir ($imgDir);
  17.  
  18. srand( (double) microtime()*1000000 );
  19. $image_name = $losowy . '/' . $images[rand( 0,sizeof( $images ) -)];
  20. $imgSize = GetImageSize( $image_name );
  21.  
  22. //ends script if no images found
  23. if ( $i == 0 )
  24. die();
  25. print ( "<img src=\"" . $image_name . "\"" . $imgSize[3] . " border='0'/>\n");
  26.  
  27. ?>


dziala ok.
Ale obsluguje tylko *gif, *jpg itp.
Chce by pobieral pliki flash *swf
Domyslam sie ze trzeba poprawic linijke :
  1. <?php
  2. print ( "<img src=\"" . $image_name . "\"" . $imgSize[3] . " border='0'/>\n");
  3. ?>
LBO
plikow SWF nie osadzasz (embedujesz) na strone za pomoca znacznika IMG, sluzy ku temu znacznik OBJECT
free
Wiem.
Uzywam na stronie plikow swf, sluzy do tego kod:
Kod
<OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0 height=17 width=95><PARAM
NAME=movie VALUE=plik.swf><PARAM NAME=menu VALUE=false><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent> <EMBED src=plik.swf menu=false quality=high wmode=transparent bgcolor=#FFFFFF WIDTH=990 HEIGHT=145 TYPE=application/x-shockwave-flash
PLUGINSPAGE=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash> </EMBED></OBJECT>


Problem w tym, ze nie wiem jak polaczy oba kody
pEbE
Wyciagasz typy plikow i dajesz
  1. <?php
  2.  
  3. if($type ='swf') {
  4. echo '<OBJECT>blablablabla.swf</OBJECT>';
  5. }
  6. else {
  7. echo '<img src="obrazek.gif">';
  8. }
  9.  
  10. /*
  11. Jesli masz kilka typow mozesz dac elseif zamiast else
  12. */
  13.  
  14. ?>
free
Jak połączyc oba skrypty ?
Ociu
  1. <?php
  2. $Ext = explode('.', $filename);
  3.  
  4. if($Ext[ sizeof( $Ext ) - 1 ] == 'swf') {
  5. print '<OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0>
  6. <PARAMNAME=movie VALUE='.$filename.'><PARAM NAME=menu VALUE=false><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent> <EMBED src='.$filename.' menu=false quality=high wmode=transparent bgcolor=#FFFFFF WIDTH=990 HEIGHT=145 
    TYPE=application/x-shockwave-flash
  7. PLUGINSPAGE=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash> </EMBED></OBJECT>';
  8. } else {
  9. print '<img src="'.$filename.'" />';
  10. }
  11. ?>

Saluto.
free
Z tego co widze powyzszy kod nie jest wspomagany moim kodem losowego wyboru objektu Flash.
Moj kod sprobowalem polaczyc z Ociu:
  1. <?php
  2.  
  3. $losowy = 'images/kartki';
  4.  
  5. $i = 0;
  6. $imgDir = opendir ($losowy);
  7. while ( $file = readdir( $imgDir ) )
  8. {
  9. //checks that file is an image
  10. $file_type = strrchr( $file, "." );
  11. $is_image = eregi( "jpg|gif",$file_type );
  12.  
  13. if ( $file != '.' && $file != '..' && $is_image )
  14. { $images[$i++] = $file; }
  15. }
  16. closedir ($imgDir);
  17.  
  18. srand( (double) microtime()*1000000 );
  19. $image_name = $losowy . '/' . $images[rand( 0,sizeof( $images ) -)];
  20. $imgSize = GetImageSize( $image_name );
  21.  
  22. //ends script if no images found
  23. if ( $i == 0 )
  24. die();
  25. print ( "<OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0>
  26. <PARAMNAME=movie VALUE='.$filename.'><PARAM NAME=menu VALUE=false><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent> <EMBED src='.$filename.' menu=false quality=high wmode=transparent bgcolor=#FFFFFF WIDTH=990 HEIGHT=145 
    TYPE=application/x-shockwave-flash
  27. PLUGINSPAGE=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash> </EMBED></OBJECT>\n");
  28.  
  29. ?>
LBO
tak jak podal @Ociu:
  1. <?php
  2.  
  3. $losowy = 'images/kartki';
  4.  
  5. $i = 0;
  6. $imgDir = opendir ($losowy);
  7. while ( $file = readdir( $imgDir ) )
  8. {
  9. //checks that file is an image
  10. $file_type = strrchr( $file, "." );
  11. $is_image = eregi( "jpg|gif|swf",$file_type );//nie znam sie na wyrazeniach regularnych, jezeli jest blad prosze o poprawienie k
    toregos z forumowiczow...
  12.  
  13. if ( $file != '.' && $file != '..' && $is_image )
  14. { $images[$i++] = $file; }
  15. }
  16. closedir ($imgDir);
  17.  
  18. srand( (double) microtime()*1000000 );
  19. $image_name = $losowy . '/' . $images[rand( 0,sizeof( $images ) -)];
  20.  
  21. //ends script if no images found
  22. if ( $i == 0 )
  23. die();
  24. $size = getImageSize($image_name);
  25. $Ext = explode('.', $image_name);
  26. if($Ext[ sizeof( $Ext ) - 1 ] == 'swf') {
  27. print '<OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0>
  28. <PARAMNAME=movie VALUE='.$filename.'><PARAM NAME=menu VALUE=false><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent> <EMBED src='.$filename.' menu=false quality=high wmode=transparent bgcolor=#FFFFFF width='.$size[0].' height='.$size[1].' TYPE=application/x-shockwave-flash
  29. PLUGINSPAGE=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash> </EMBED></OBJECT>';
  30. } else {
  31. print '<img src="'.$filename.'" width="'.$size[0].'" height="'.$size[1].'" />';
  32. }
  33. ?>


edit: i czywiscie dodaj poprawne osadzanie SWF'a
edit2: ogolnie jest daleko od idealu np. rozszerzenie jest sprawdzane conajmniej 2 razy.. zmodyfikowalbym tablice $images - kluczami bylyby nazwy pliku, a wartosciami extensions... ale to juz twoja glowa biggrin.gif

cheers
free
Powyzszy kod nie dziala!
Po sparsowaniu otrzymujemy:
Kod
<OBJECT classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 codeBase=http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0>
<PARAMNAME=movie VALUE=><PARAM NAME=menu VALUE=false><PARAM NAME=quality VALUE=high><PARAM NAME=wmode VALUE=transparent> <EMBED src= menu=false quality=high wmode=transparent bgcolor=#FFFFFF width=990 height=140 TYPE=application/x-shockwave-flash
PLUGINSPAGE=http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash> </EMBED></OBJECT>


Z kodu
Kod
VALUE=false
domyslilem sie ze cos jest nie tak ze zmienną.
Poprawilem
  1. <?php
  2. $filename
  3. ?>
na
  1. <?php
  2. $image_name
  3. ?>
i śmiga ! :-)

Co masz na mysli mowiac :
Cytat
edit2: ogolnie jest daleko od idealu np. rozszerzenie jest sprawdzane conajmniej 2 razy.. zmodyfikowalbym tablice $images - kluczami bylyby nazwy pliku, a wartosciami extensions.

Jezeli macie chwile czasu to poprawcie ten kod by był idealny snitch.gif .
Ja ze swojej strony zrobilem co moglem poprawilem zmienne w kodzie i skrypcik dziala.
LBO
poprawione :
  1. <?php
  2. $baners_dir = 'images/kartki/';
  3.  
  4. $dir = opendir($baners_dir);
  5. while($file = readdir($dir)) { 
  6. $ext = strrchr($file, ".");
  7. $is_baner = eregi("jpg|gif|swf", $ext);
  8. if($file != '.' && $file != '..' && $is_baner) {
  9. $images[$file] = $ext;
  10. }
  11. }
  12. closedir ($dir);
  13. print_r($images);
  14. $filename = array_rand($images);
  15. $image_path = $baners_dir.$filename;
  16.  
  17. if (empty($images)) {
  18. die('There is no baners available');
  19. }
  20.  
  21. $size = getImageSize($image_path);
  22. if($images[$filename] == '.swf') {
  23. '<!--[if IE]><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
  24.  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
  25.  width="'.$size[0].'" height="'.$size[1].'"><script>/*<![endif]-->
  26.  <object type="application/x-shockwave-flash" data="'.$image_path.'" width="'.$size[0].'" height="'.$size[1].'"><script type="text/javascript">/**/</script>
  27.  <param name="movie" value="'.$image_path.'" />
  28.  <p>Alternative Content</p>
  29.  </object>'
  30. );
  31. } else {
  32. print('<img src="'.$image_path.'" width="'.$size[0].'" height="'.$size[1].'" />');
  33. }
  34. ?>
will
Kod @LBO zwraca pliki bannerow z podanej sciezki:
Cytat
Array ( [ae1.swf] => .swf [ae2.swf] => .swf [ae3.swf] => .swf [ae4.swf] => .swf )

Wie ktos jak sie tego pozbyc?

Dzieki,
willi
erix
  1. <?php
  2. $filename = array_rand($images);
  3. $image_path = $baners_dir.$filename;
  4. ?>


zamień na:

  1. <?php
  2. $filename = array_rand(array_keys($images));
  3. $image_path = $baners_dir.$filename;
  4. ?>
will
Pozostalo:
Cytat
Array ( [ae1.swf] => .swf [ae2.swf] => .swf [ae3.swf] => .swf [ae4.swf] => .swf )

Dodatkowo Warning:
Cytat
getimagesize(files/rotate/2): failed to open stream: No such file or directory ... on line 78
erix
Hmm, a czy tu jest 78 linijek?

Bo ścieżki do plików (katalog) nijak się nie zgadzają z tym, co podałeś wcześniej.
will
Nie ma 78 linijek, bo podalem ostrzerzenie wyrzucone przez serwer, po wgraniu calego pliku (razem z html).
Cytat(erix @ 18.02.2007, 12:57:25 ) *
Bo ścieżki do plików (katalog) nijak się nie zgadzają z tym, co podałeś wcześniej.

Wlasnie o to chodzi. Po zmianie:
  1. <?php
  2. $filename = array_rand(array_keys($images));
  3. ?>

parser nie znajduje juz pilkow w katalogu files/rotate/ (ae1.swf, ae2.swf, etc.) tylko (jesli dobrze rozumiem) klucze 1,2,3...

PS. Jesli chodzi o PHP to jestem jak miejsce wskazuje przedszkolakiem.
erix
Cytat
  1. <?php
  2. $losowy = 'images/kartki';
  3. ?>

Tutaj było coś innego + inny numerek linijki, to dlatego pytam.

Czy ty masz zainstalowane GD?
Po walnąłem wszystko do siebie (PHP 5.2.1) i działa jak powinno (nawet bez tej mojej modyfikacji).
will
Czlowiek sie uczy cale zycie. Co to jest GD?

Folder images/kartki/ byl podany w kodzie @LBO. Ja oczywiscie zmienilem - sam umiesciem flashe w files/rotate/

Problem rozwiazalem przed chwila korzystajac z tego (klik) rozwiazania.

Mimo to dalej nie rozumiem, dlaczego u mnie serwer wywalal ten dziwny blad pokazujac poszczegolne pliki ze sciezki. Mam u siebie PHP 4.4.2.

Pozdr,
willi
erix
Rozszerzenie do generowania grafik, ale klikam szybciej niż myślę, bo wywaliło, że plik nie istnieje (a nie tak, jak pomyślałem, że GD nie ma). :X

Nie wpisywało całej ścieżki obrazka do parametru, nie wiem dlaczego...

Odpaliłem też na PHP4 (4.4.4) i efekt był ten sam - pięknie zwróciło wszystko, tak jak powinno...
LBO
Cytat(will @ 18.02.2007, 12:03:03 ) *
Kod @LBO zwraca pliki bannerow z podanej sciezki:

Wie ktos jak sie tego pozbyc?

Dzieki,
willi


Usuń
  1. <?php
  2. print_r($images);
  3. ?>

i po sprawie.

Nie wiem po co te zamiany nazw zmiennych, array_keys()" title="Zobacz w manualu PHP" target="_manual etc.
will
Rowniez dziala, dzieki!
erix
@LBO, to było do:
Cytat
Dodatkowo Warning:
Cytat
getimagesize(files/rotate/2): failed to open stream: No such file or directory ... on line 78
LBO
Cytat(erix @ 18.02.2007, 21:13:35 ) *
@LBO, to było do:

Heeh, ale sam namieszałeś tym array_keys" title="Zobacz w manualu PHP" target="_manual i właśnie z tego powodu powyższy błąd powstał.
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.