使用 php 随机 select 从目录中获取图像并将其文件名用于 mysql 查询

Randomly select image an from directory using php and use its filename for a mysql query

我有一个名为*.jpg 的图像目录,其中* 是MySQL table 中每条记录的ID。例如1394.jpg

我想做的是使用 PHP 从该目录中随机抽取 5 张图片,然后针对每张图片查询 MySQL table 的记录匹配该 ID / 图像文件名,这样我就可以显示每条记录的详细信息。

我正在寻找一些指导的部分是如何 a) 使用 php 随机选择 5 张图像,然后 b) 识别文件名。一旦我将文件名作为变量,我确信我应该能够编写 MySQL 查询。这是我正在努力解决的 PHP 元素。

谁能给点建议?

我会这样做,首先获取文件夹的所有图像

$files = glob("$dir/*.{jpg,jpeg}", GLOB_BRACE);

然后,我会使用 array_rand 随机得到一张(你可以做一个循环)图片,像这样

$file = array_rand($files); // You can check if is repeated or something too

最后,您可以 preg_replace 文件的名称以仅获取名称(不带扩展名)并使用该名称查询您的数据库...(也许还有其他方法,但这很简单和快速)

好的,我们将按以下步骤进行:

  1. 从所需目录获取文件名列表

Function : scandir() look for more details here

  1. 存储在数组中

  2. 获取随机5数据

Function array_rand() look for more details here

  1. 每个文件运行查询详情

Loop - Foreach() - Store MySQL-fetched-data in multi-dimensional Array

  1. 显示

如果数据库中的文件信息是关于文件系统中图像文件的最新信息,您可以直接从数据库中获取 5 个随机文件名 ID 以及其他信息:

$sql = 'SELECT * FROM image_files ORDER BY RAND() LIMIT 5';

这将 return 您将 ID 连同您在 table 中的其他信息一起归档。

编辑:显然文件系统中不存在数据库中的所有文件。所以下面是更新的答案:

// Get files info from db in random order
$sql = 'SELECT * FROM image_files ORDER BY RAND()';
$result = $conn->query($sql);

// Pick first 5 files that does exist in file system
$five_files=Array();
while($row = $result->fetch_assoc()) {
  $filepath = '/dir/images/'.$row['id'].'.jpg';
  if (is_file($filepath)) {
      $five_files[] = $row;
      if (count($five_files) == 5) break;
  } 
}

// This will have info on five randomly picked files from db that does exist
print_r($five_files);