我的图像生成器包括
- 使用select语句从数据库的图像表中提取的图像名称数组
- 随机数生成器,
- 和为所选文件构建正确路径名的字符串。
选择要显示的图像之一,我生成一个介于1和的长度之间的随机数数组。
虽然生成器正常工作,但我注意到其中一个随机数抛出了这个错误:
警告:getimagesize(images/): failed to open stream:
对数组的检查显示了2个数组元素(代表我的图像数量),但其中一个数组元素为NULL(横幅表中的第一个条目
)图像生成器脚本
require_once('connection.inc.php');
$sql = 'SELECT `filename` FROM banner';
$result = $mysqli->query($sql, MYSQLI_STORE_RESULT) or die(mysqli_error());
$row = $result->fetch_array(MYSQLI_ASSOC);//an array of image names
$count = $result->num_rows;
for ($i = 1; $i <= $count; ++$i)
{
$row[$i] = $result->fetch_array(MYSQLI_ASSOC);
}
$i = rand(1, $count); //a random number generator,
//The random number is used in the final line to build the correct pathname for the selected file.
$selectedImage = "images/{$row[$i]['filename']}";
if (file_exists($selectedImage) && is_readable($selectedImage))
{
$imageSize = getimagesize($selectedImage);
}
var_dump(行)
array (size=1)
'filename' => string 'ginsomin2.jpg' (length=13)
null
随机图像显示
<div id="banner" class="wrapper clearfix">
<img src="<?php echo $selectedImage; ?>" alt="banner">
</div>
你知道我该怎么做吗?
谢谢。
我使用ORDER BY RAND()来选择一个随机文件名。这与LIMIT相结合,对于从一组行中选择随机样本很有用。list()函数用于从图像表的结果行集合中分配一个随机值(图像文件名)给变量($bannerImage)。
$sql = 'SELECT `filename` FROM banner ORDER BY RAND() LIMIT 1';
$result = $mysqli->query($sql) or die(mysqli_error());
$ok =$result->fetch_row();
list($chosenFilename) = $ok;
$bannerImage = "images/$chosenFilename";
if (file_exists($selectedImage) && is_readable($selectedImage))
{
$imageSize = getimagesize($selectedImage);
}
因此使用的$bannerImage
<div id="banner">
<img src="<?php echo $bannerImage ; ?>" alt="banner">
</div>
输出所需的结果。