我想从目录中随机加载图像,并在某处有一个刷新整个页面的按钮。这是我现在拥有的当前代码:
<?php $a = array(); $dir = '../public/wp-content/uploads/2012/01'; if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if (preg_match("/\.png$/", $file)) $a[] = $file; elseif (preg_match("/\.jpg$/", $file)) $a[] = $file; elseif (preg_match("/\.jpeg$/", $file)) $a[] = $file; } closedir($handle); } foreach ($a as $i) { echo "<img src='" . $dir . '/' . $i . "' />"; } ?>
问题在于它一次加载了所有40万张图像。我只想加载30个。目录中的30张随机图像。我尝试查找一些代码,例如将上面的内容修改为:
<?php $a = array(); $dir = '../public/wp-content/uploads/2012/01'; if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if (preg_match("/\.png$/", $file)) $a[] = $file; elseif (preg_match("/\.jpg$/", $file)) $a[] = $file; elseif (preg_match("/\.jpeg$/", $file)) $a[] = $file; } closedir($handle); } foreach ($a as $i) { echo "<img src='" . $dir . '/' . $i . "' />"; if (++$i == 2) break; } ?>
但是,它似乎绝对没有任何作用。因此,如果有人可以帮助我从该目录中获取30张随机照片进行加载,并具有某种类型的重新加载按钮,那将是非常有用的。
先感谢您
这是我的缓存解决方案:
<?php define('CACHE_FILE', 'mycache.tmp'); define('CACHE_TIME', 20); // 20 seconds (for testing!) define('IMG_COUNT', 30); define('IMG_DIR', '../public/wp-content/uploads/2012/01'); /** * Loads the list (an array) from the cache * Returns FALSE if the file couldn't be opened or the cache was expired, otherwise the list (as an array) will be returned. */ function LoadListFromCache($cacheFile, $cacheTime) { if ( file_exists($cacheFile) ) { $fileHandle = fopen($cacheFile, 'r'); if ( !$fileHandle ) return false; // Read timestamp (separated by "\n" from the content) $timestamp = intval( fgets($fileHandle) ); fclose($fileHandle); // Expired? if ( $timestamp+$cacheTime > time() ) return false; else { // Unserialize the content! $content = file_get_contents($cacheFile); $content = substr( $content, strpos($content, "\n") ); $list = unserialize($content); return $list; } } return false; } /** * Caches the passed array * Returns FALSE if the file couldn't be opened, otherwise TRUE. */ function SaveListToCache($cacheFile, $list) { $fileHandle = fopen($cacheFile, 'w'); if ( $fileHandle === FALSE ) return false; fwrite($fileHandle, time()); fwrite($fileHandle, "\n"); fwrite($fileHandle, serialize($list)); fclose($fileHandle); return true; } /** * Generates the list of all image files (png, jpg, jpeg) and caches it. * Returns the list as an array. */ function GenerateList() { $a = array(); $dir = IMG_DIR; if ($handle = opendir($dir)) { while (false !== ($file = readdir($handle))) { if (preg_match("/\.png$/", $file)) $a[] = $file; elseif (preg_match("/\.jpg$/", $file)) $a[] = $file; elseif (preg_match("/\.jpeg$/", $file)) $a[] = $file; } closedir($handle); } SaveListToCache(CACHE_FILE, $a); return $a; } function GetRandomImages($list, $count) { $listCount = count($list); $randomEntries = array(); for ($i=0; $i<$count; $i++) { $randomEntries[] = $list[ rand(0, $listCount) ]; } return $randomEntries; } // This code will execute the other functions! $list = LoadListFromCache(CACHE_FILE, CACHE_TIME); if ( $list === FALSE ) { $list = GenerateList(); } $images = GetRandomImages($list, IMG_COUNT); foreach ($images as $image) { echo '<img src="', IMG_DIR.DIRECTORY_SEPARATOR.$image, '" />'; }