如何使用php查看文件中的第一张图片


How to view first picture in a file using php?

嗨,我正在想办法显示用户上传的相册中的第一张图像。我有一个网站,允许用户将图像上传到相册,现在我想将相册中的第一张图片显示为相册封面,现在当用户点击相册页面时,显示的只是相册信息,如名称、描述等。我使用相册名称作为链接来查看相册中的图像,我想要的是相册中第一张显示为该相册链接的图像。我有很多事情要做,但我会尽力提供一切,让你更容易理解。这是我的相册页面代码:

$albums = get_albums();
if(empty($albums)){
echo 'No Albums';
}else{
foreach($albums as $album){
    echo '<p><a href="view_album.php?album_id=', $album['id'] ,'">', $album['name'],'</a>(', $album['count'], ' images) <br />
    ', $album['description'], '...<br />
    <a href="edit_album.php?album_id=', $album['id'] , '">Edit</a> / <a href="delete_album.php?album_id=', $album['id'] , '">Delete</a>
    </p>';
}
}

以下是我的函数php文件中的函数,包括在这个文件中:

function get_albums(){
$albums = array();
$albums_query = mysql_query("
SELECT `albums`.`album_id`, `albums`.`timestamp`, `albums`.`name`, LEFT(`albums`.`description`, 50) as `description`, COUNT(`images`.`image_id`) as `image_count`
FROM `albums`
LEFT JOIN `images`
ON `albums`.`album_id` = `images`.`album_id`
WHERE `albums`.`user_id` = " . $_SESSION['user_id'] . "
GROUP BY `albums`.`album_id`
");
while($albums_row = mysql_fetch_assoc($albums_query)){
    $albums[] = array(
        'id'            => $albums_row['album_id'],
        'timestamp'     => $albums_row['timestamp'],
        'name'          => $albums_row['name'],
        'description'   => $albums_row['description'],
        'count'         => $albums_row['image_count']
    );
}
return $albums;
}

现在,我有点迷失和困惑,不知道该采取什么途径将打开相册的链接从相册名称更改为相册中的第一个图像。如果相册中没有任何图片,我计划使用一个简单的If语句来显示一个通用的空文件夹图像。我的数据库使用两个表上传图片,第一个是相册表,第二个是图片表。我还有一个插入图像上传时间戳的时间戳字段,所以我可以返回该相册中的图像和时间戳最低的图像,以便返回上传到相册的第一张图像吗?是否有SELECT语句来返回此项?此外,我确实创建了一个文件夹,将这些图像存储在相应的相册中,我可以返回该相册中的第一个图像吗?实现这一点最简单的方法是什么?

以下是我如何获得图像路径:

function get_images($album_id){
$album_id = (int)$album_id;
$images = array();
$image_query = mysql_query("SELECT `image_id`, `album_id`, `timestamp`, `ext` FROM `images` WHERE `album_id` = $album_id AND `user_id` = ". $_SESSION['user_id']);
while($images_row = mysql_fetch_assoc($image_query)){
    $images[] = array(
        'id'            => $images_row['image_id'],
        'album'         => $images_row['album_id'],
        'timestamp'     => $images_row['timestamp'],
        'ext'           => $images_row['ext']
    );
}
return $images;
}

这是我的view_album.php文件:

if(!isset($_GET['album_id']) || empty($_GET['album_id']) || album_check($_GET['album_id']) === false){
header('Location: albums.php');
exit();
}
$album_id = $_GET['album_id'];
$album_data = album_data($album_id, 'name');
echo '<h1 class="logo2">', $album_data['name'], '</h1>';
include 'includes/menu_album.php';
$images = get_images($album_id);
if(empty($images)){
echo 'No images.';
}else{
foreach($images as $image){
    echo '<a href="uploads/', $image['album'], '/', $image['id'], '.',     $image['ext'], '"><img src="uploads/thumbs/', $image['album'], '/', $image['id'], '.', $image['ext'], '" title="Uploaded ', date('D M Y', $image['timestamp']), '"></a> [<a       href="delete_image.php?image_id=', $image['id'], '">x</a>] ';
}
}

实际上,您已经非常接近于使用现有查询获得第一个图像。您所需要做的就是将图像名称或路径添加到SELECT,将图像时间戳添加到ORDER BY,以确保获得最早的图像:

   $albums_query = mysql_query("
        SELECT 
          `albums`.`album_id`, 
          `albums`.`timestamp`, 
          `albums`.`name`, 
          LEFT(`albums`.`description`, 50) as `description`, 
          COUNT(`images`.`image_id`) as `image_count`, 
          CONCAT(`images`.`image_id`, '.', `images`.`ext`) AS `first_image`
        FROM `albums`
        LEFT JOIN `images`
        ON `albums`.`album_id` = `images`.`album_id`
        WHERE `albums`.`user_id` = " . $_SESSION['user_id'] . "
        GROUP BY `albums`.`album_id`
        ORDER BY `albums`.`timestamp` ASC, `images`.`timestamp` ASC
    ");
    if (!$albums_query) {
      die('Invalid query: ' . mysql_error());
    }
    while($albums_row = mysql_fetch_assoc($albums_query)){
        $albums[] = array(
            'id'            => $albums_row['album_id'],
            'timestamp'     => $albums_row['timestamp'],
            'name'          => $albums_row['name'],
            'description'   => $albums_row['description'],
            'count'         => $albums_row['image_count'],
            'image'         => $albums_row['first_image']
        );
    }

然后,您可以更新您的输出以包括图像:

foreach($albums as $album){
    if (empty($album['image'])) {
        $album['image'] = 'default.jpg';
    }
    echo '<p>
      <a href="view_album.php?album_id=', $album['id'] ,'">
        <img src="uploads/thumbs/', $album['id'] ,'/', $album['image'] ,'" />', $album['name'],'
      </a>(', $album['count'], ' images) <br />
      ', $album['description'], '...<br />
      <a href="edit_album.php?album_id=', $album['id'] , '">Edit</a> / <a href="delete_album.php?album_id=', $album['id'] , '">Delete</a>
    </p>';
}