3

そのため、ディレクトリをスキャンし、背景として使用するランダムな画像を返すスクリプトを作成しようとしています。

php は次のようになります。

$dir = "views/img/bg/";
$dh  = opendir($dir);
while (false !== ($filename = readdir($dh))) {
    $files[] = $filename;
}

$random_key = array_rand($files, 1);

$random = $files[$random_key];

次に、単純なjqueryを使用して、画像を背景として添付しています。

<script>
$(document).ready(function(){

    $("body").css( "background" , "url(http://'.$url_root.'/views/img/bg/'.$random.'), center center" );

});
</script>

すべて正常に動作しますが、背景フォルダー内のすべての画像の配列が「.」のようなものを返しているようです。または '..' をイメージ名の代わりに時々使用します。何が起こっているのかわかりません - 何かアイデアはありますか?

4

4 に答える 4

7

glob()ファイルをフィルタリングできるように使用します。

$files = glob('views/img/bg/*.jpg');
$random = $files[array_rand($files)];

を指定しているため*.jpg、には JPG ファイルのみが含まれており、との項目$filesを削除する必要はありません。...

于 2012-06-15T09:34:47.990 に答える
6

「.」および '..' は、現在のディレクトリと親ディレクトリに対して返されます。それらをフィルタリングできます:

while (false !== ($filename = readdir($dh))) {
    if ($filename != '.' && $filename != '..')    
        $files[] = $filename;
}
于 2012-06-15T09:33:25.370 に答える
1

正規表現を使用しないのはなぜですか? そうすれば、任意の量の期間をキャプチャできます。(つまり、「.」、「..」、「...」など)

while (false !== ($filename = readdir($dh))) {
        if(!preg_match('/^\.*$/',$filename)){
            $files[] = $filename;
        }
于 2014-12-06T17:07:30.863 に答える
0
$dh = opendir("c:\");
while (false !== ($filename = readdir($dh))) {
    if ($filename != '.' && $filename != '..')    
       $files[] = $filename;
}
于 2013-10-28T11:04:16.873 に答える