2017-02-07 4 views
1

以下のPHPコードは、ページの読み込み時にヘッダーイメージをランダム化しています。特定のディレクトリにテキストを含む特定のファイルを対象としていますか?

<?php 
function displayBackground() { 
global $site; 
global $dirimgpth; 

$dir = 'uploads/product-images/' .$dirimgpth. ''; 
$cnt = 0; 
$bgArray= array(); 

if ($handle = opendir($dir)) { 

    while (false !== ($entry = readdir($handle))) { 

    $pathToFile = $dir.$entry; 
    if(is_file($pathToFile)) 
    { 
     if(getimagesize($pathToFile)!=FALSE) 
     { 
      $bgArray[$cnt]= $pathToFile; 
      $cnt = $cnt+1; 
     } 
    } 
} 
$myRand = rand(0,($cnt-1)); 
$val = $bgArray[$myRand]; 

} 

closedir($handle); 

echo($val); 
} 
?> 

これはすべてうまく動作しますが、画像を取得するディレクトリにはサムネイルと大きな画像を含む数百の画像ファイルがあります。

上記のコードを変更して、ディレクトリフォルダをターゲットにしたいのですが、ファイル名に "-header.jpg"という特定のテキストの画像ファイルのみを取得します。

  1. doors.jpg
  2. windows.jpg
  3. アルミ-thumb.jpg
  4. ウィンドウ-header.jpg
  5. コンサバトリーヘッダー:

    ディレクトリのフォルダには、次のようなファイルが含まれています.jpg

  6. tiled-thumb.jpg
  7. roof-header.jpg

私が望む結果は、ランダムヘッダーが上記のリストから画像「4,5,7」のみを出力するためです。

答えて

0

$ entryがファイル名の場合、名前に "-header"が含まれているかどうかを確認できます。

while (false !== ($entry = readdir($handle))) { 
    if (strpos($entry, '-header') !== false) { 
    $pathToFile = $dir.$entry; 
    // follow with your code 
    } 
    } 
+0

多くのお返事をいただきありがとうございます大いに感謝します – Craig

+0

素晴らしい! @Marcin Orlowski氏によると、あなたが書いたコードは、あなたのフォルダ内のファイル数が増えるにつれ、パフォーマンス上のペナルティがあります。 – JoshulSharma

0

これはすべてうまく動作しますが、画像を取得するディレクトリにはサムネイルと大きな画像を含む数百の画像ファイルがあります。

上記のコードを変更して、ディレクトリフォルダをターゲットにしたいのですが、ファイル名に "-header.jpg"という特定のテキストの画像ファイルのみを取得します。

これらのJPGは私が想定しているほど頻繁に変更/追加/削除されないので、あなたが選んだすべてのファイル名を含む静的配列(画像の追加/削除時に更新されます)その配列からのエントリ。

ランダムなヘッダーは、上記のリストから「4,5,7」の画像しか出力しないようにしたいと思います。

あなたはglob()が必要ですが、これはパフォーマンス上のペナルティのために間違ったアプローチです。

さらに、現在のコードは、フォルダをスキャンするだけでなく、イメージのサイズを読み取るように見えるので、さらに苦労します。これは間違っています。なぜなら、あなたが選択したイメージに必要なのであって、すべてのイメージではないからです。

関連する問題