2011-02-23 26 views
1

私は、rand()関数を使ってリストからランダムイメージを選ぶPHP上に単純イメージランダマイザを書きました。コードは完璧に動作し、htmlに画像として含めるとランダムな画像が生成されます。PHPイメージランダマイザーを再利用

同じhtmlに2度挿入しようとすると問題が発生します。ランダムなイメージが生成され、それを含めた両方の時間に表示されますが、同じイメージになります。言い換えれば、私は自分のページに繰り返しランダムな画像を取得します。

これを簡単に解決するには、randomizer.phpをコピーして新しい名前を付け、両方のイメージをHTMLに組み込むだけです。私がこれをやりたくない理由は、私の最終的なHTMLには約25枚の写真があるからです。これを行うにはもっと良い方法があるはずです。私のファイルは別のサーバーでホストされており、HTMLサーバーはPHPをサポートしていないので、PHP関数を自分のHTMLに追加することはできません。

randomizer.phpファイルの25個のコピーを作成する(またはそれを含む25個の異なるファイルを作成する)以外にも、より良い修正方法がある場合は、教えてください。私はあなたの意見を最も高く評価します!

ありがとう、非常に!ここで

は、コードの抜粋です:

if (count($fileList) > 0) { 
    do { //do-while loop will get a new random image until that image has not been used yet in this session 
     $imageNumber = rand(0 , (count($fileList) - 1)); //get random image from fileList 
     $iterations++; 
    } while(!(empty($_SESSION['img' . $imageNumber])) && iterations < 200); 

    $_SESSION['img' . $imageNumber] = True; //this image number has been displayed 

    $_SESSION['shown']++; //increments the number of shown pictures in this signature 

    $img = $folder.$fileList[$imageNumber]; 
} 
+0

私たちはどこから始めるのですか? – fazo

答えて

2

ブラウザが同じ画像であると判断してキャッシュしている可能性があります。イメージの名前を設定してください(コンテンツの配置/ファイル名IIRCのヘッダーを発行してください)。イメージ名はランダムな文字列(例:image.jpg?e0.6613725793930488

+0

ありがとう!私のURLの末尾に?1?2?3などを追加すると、ブラウザのキャッシングが妨げられました!どうもありがとうございます! :) – Sebolains

0

私の推測では、ランド()を再シードしていない、または同じ値が播種されるかということです。 mt_srand()とmt_rand()のsrand()または "乱数ジェネレータ"の組み合わせを呼び出したことがありますか?

+0

私はsrand()を呼び出そうとしましたが、実際には違いはありませんでした。私の考えは、ブラウザが画像をファイル名に関連付けると、すべての関数が再び呼び出されることはなく、したがってrandom関数は呼び出されないということです。 – Sebolains

+0

スタティックイメージを読み込むためにスクリプトがイメージ(content-type:image/jpeg)またはファイル名を返しますか?私はfazoに同意する、我々はちょうど推測している、もう少し情報が必要です。 – KDrewiske

+0

イメージが返されます。元の質問にコードのスニペットを追加しました:) – Sebolains