PHP: Как отобразить изображение по умолчанию, если указанный не существует?

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

– QUERY–

$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 Я не профессионал, если этот вопрос кажется глупым!

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

 <?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> 

Disk Access = slow

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

 $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'; 

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

Лучшая идея …

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

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

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

пытаться

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

have holderthumbnail.jpg в вашем каталоге 'artist'

Код:

 <?php if(file_exists("$your_image.jpg")) $filename = "$your_image.jpg"; else $filename = "default.jpg"; echo "<img src='$filename'/>"; ?> 
 <img id="currentPhoto" src="SomeImage.jpg" onerror="this.src='Default.jpg'" width="100" height="120">