2009-11-19 10 views
15

images/tipsというディレクトリが1つあります。PHPを使ってディレクトリから画像をランダムに取得する方法

このディレクトリには、変更できる画像がたくさんあります。

私は、PHPスクリプトがディレクトリを読んで、画像を見つけて、ランダムな画像を選ぶために見つかった画像から探して欲しいです。

これはどのように行うのですか?

答えて

53
$imagesDir = 'images/tips/'; 

$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); 

$randomImage = $images[array_rand($images)]; // See comments 

あなたは便利な場合は間違いなくあなたのためにそれを使用して、このコードに複数1.

+4

実際には、 $ randomImage = $ images [array_rand($ images)];を実行する必要があります。 マニュアルから: "array_rand()はランダムなエントリのキーを返します。" – JAL

+1

おかげさまで、完璧に働いてくれてありがとうございます このwebisteは助けを得るのに最適です。 コメントが投稿されたときや回答が与えられたときに3つの答えがあり、メールが届かなかったので通知ボックスをチェックしてもメールが届かないというオプションがありますか? –

+0

@ Mirror51 on meta.stackoverflow.com – alex

4
$images = glob('images/tips/*'); 
return $images[rand(0, count($images) - 1)]; 

ただし、同じ画像が連続して2回選択されないことは保証されません。

+4

保険を追加すると、ランダム性が損なわれます。バグを導入する可能性もあります。 – wallyk

+0

私はglob()関数が存在するという手がかりがありませんでした。ニース。 – keithjgrant

0

opendir()を使用すると、そのディレクトリのファイル名を読み込み、各ファイル名を配列に格納できます。その後、rand()に配列キーに対応する最小値と最大値を使用して、配列から項目を選択します。画像付き

-1

ロードフォルダは:ディレクトリからファイル/画像のうち

$folder = opendir(images/tips/); 

ビルドテーブル:

$i = 0; 
while(false !=($file = readdir($folder))){ 
if($file != "." && $file != ".."){ 
    $images[$i]= $file; 
    $i++; 
    } 
} 

ランダムピックアップ:

$random_img=rand(0,count($images)-1); 

表示をページ上:

echo '<img src="images/tips'.$images[$random_img].'" alt="" />'; 

希望すると助かります。もちろん<?php ?>に同封してください。

+1

2つの問題。 'ヒント 'の後に別のスラッシュは必要ないのですか? なぜ、 '$ images [] = $ file'だけでなく、カウンタを忘れるのですか? – mpen

1
<?php 
    foreach (glob("gallery/*") as $filename) { 
     echo '<li><a href="'.$filename.'" title=""><img src="'.$filename.'" alt="" /></a> </li>';  
     } 
?> 

外観を得るためにarray_rand()に第2引数を送信することができます。フォルダからすべてのファイルを読み込み、上記の形式で出力します。私はこのコードをライトボックスで使うようにしました。

0

シンプル:

$directory = "medias/photos/"; 
$img = glob($directory . "*.jpg"); 
shuffle($img); 
+2

簡単なものよりも? – alex

+0

問題は、これは 'jpg'イメージしか見つけられず、配列全体をシャッフルすることで多くの不必要な作業をします(フォルダ内にいくつのイメージがあるかによって問題はないかもしれません)。 – alex

1
function get_rand_img($dir) 
{ 
    $arr = array(); 
    $list = scandir($dir); 
    foreach($list as $file) 
    { 
     if(!isset($img)) 
     { 
      $img = ''; 
     } 
     if(is_file($dir . '/' . $file)) 
     { 
      $ext = end(explode('.', $file)); 
      if($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG') 
      { 
       array_push($arr, $file); 
       $img = $file; 
      } 
     } 
    } 
    if($img != '') 
    { 
     $img = array_rand($arr); 
     $img = $arr[$img]; 
    } 
    $img = str_replace("'", "\'", $img); 
    $img = str_replace(" ", "%20", $img); 
    return $img; 
} 


echo get_rand_img('images'); 

フォルダと '画像' を交換してください。

1

アレクサとの合意。 シンプルな機能を使用してください。

function RandImg($dir) 
{ 
$images = glob($dir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE); 

$randomImage = $images[array_rand($images)]; 
return $randomImage; 
} 

$the_image = RandImg('images/tips/'); 
echo $the_image; 
関連する問題