PHP: Как отобразить изображение по умолчанию, если указанное не существует? - PullRequest
1 голос
/ 23 марта 2012

Я работаю над небольшим проектом, и мне нужно отобразить изображение автора для каждого автора в моей базе данных.взгляните на код ниже:

- ЗАПРОС -

$getboth_sql = mysql_query(

"SELECT lyrics.lyrics_id, lyrics.lyrics_title, lyrics.lyrics_text,artists.artist_nane,artists.artist_id
FROM lyrics,artists
WHERE lyrics.artist_id = artists.artist_id
ORDER BY lyrics.lyrics_title");

while ($both = mysql_fetch_assoc($getboth_sql)) {

    $lyrics_id = $both[lyrics_id];
    $lyrics_title = $both[lyrics_title];
    $lyrics_text = $both[lyrics_text];
    $artist_name = $both[artist_nane];
    $artist_id = $both[artist_id];

    ?>
    <div class="artimg"><img src="images/artists/<?php echo $artist_name;?>.jpg"  height="50px" width="50px"/></div>        



    <?php
}//END While

Вышеприведенный код работает, но если я не сохранил изображение в каталоге 'Artist'для этого исполнителя не отображается изображение.

<div class="artimg"><img src="images/artists/<?php echo $artist_name;?>.jpg"  height="50px" width="50px"/></div>

ВОПРОС: Какой ЛУЧШИЙ способ отобразить изображение по умолчанию, если указанное значение не найдено?

Я играл спустой и файл существует функции, но я не понял это правильно.Пожалуйста помоги.

PS Я не профессионал, если этот вопрос кажется глупым!

Ответы [ 5 ]

7 голосов
/ 23 марта 2012

Есть много способов сделать это.

<?php

if(file_exists("images/artists/$artist_name.jpg"))
    $fileName = "$artist_name.jpg";
else
    $fileName = "default.jpg";
?>

<div class="artimg"><img src="images/artists/<?php echo $fileName;?>"  height="50px" width="50px"/></div>
1 голос
/ 23 марта 2012

доступ к диску = медленно

У вас есть несколько вариантов. Один из них - проверять, существует ли файл каждый раз, когда вам нужно его отобразить. К сожалению, это далеко не идеально, потому что чтение с диска может стать узким местом для производительности. Это ненадежное решение, если вы загружаете сотни страниц в минуту. В высокопроизводительных средах вы хотите избегать как можно большего числа файловых статистик:

$img_dir = '/path/to/artist/images';
$expected_file = $img_dir . '/' . $artist_name . '.jpg';
$img = file_exists($expected_file) ? $artist_name : 'default';

Зашифруйте имена в вашем коде

Другой, если у вас есть небольшое количество художников, чьи изображения вам нужно отобразить, это жестко закодировать названия ваших изображений:

$authors = array('Bill Shakespeare', 'Douglas Adams', 'Ralph Ellison');
$img = in_array($artist_name, $authors) ? $artist_name : 'default';

Конечно, это не особенно полезно, потому что тогда вам нужно будет редактировать ваш код каждый раз, когда меняется ваш каталог изображений артистов.

Лучшая идея ...

В этом случае предпочтительным вариантом будет:

Поскольку вы уже нажимаете на базу данных, чтобы получить записи об исполнителе, сохраните соответствующее имя файла изображения в столбце базы данных таблицы исполнителей. Таким образом, вы можете избежать лишнего доступа к диску.

Этот метод позволяет вам получить имя файла из базы данных с вашим исходным запросом. Если поле пустое, вы будете знать, что вместо этого будет отображаться изображение по умолчанию.

0 голосов
/ 14 апреля 2016
<img id="currentPhoto" src="SomeImage.jpg" onerror="this.src='Default.jpg'" width="100" height="120">
0 голосов
/ 23 марта 2012

Код:

<?php
     if(file_exists("$your_image.jpg")) $filename = "$your_image.jpg";
     else $filename = "default.jpg";

     echo "<img src='$filename'/>";
?>
0 голосов
/ 23 марта 2012

попробуй

if ( !file_exists( 'images/artists/' . $filename ) ) {
   $artist_name = 'holderthumbnail';
}

имейте holderthumbnail.jpg в каталоге 'художников'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...