Sprawdzamy czy obrazek istnieje przy pomocy DOM

Dom replace image if not exists

Przykład PHP2014-03-07 stopień trudności: łatwy

Ostatnio wynikł mi banalny problem gdy użytkownik usunął pliki zdjęć, przez co CMS w wielu wpisach wyświetlał znaczki erroru. Najprostszym sposobem jest oczywiście stosowanie w img parametru onerror, ale mało kto to robi.


Innym sposobem jest wykorzystanie obiektowego modelu dokumentu (Document Object Model, DOM), który pozwala nam łatwo wejść w strukturę wpisu html.

Dzięki niemu podmienimy niestniejące obrazki na zastępcze:


<?php
//przykładowy tekst
$html 'Lorem ipsum dolor sit amet, <img src="star/star_full.png" alt="star.png" /> consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse <img alt="mrgreen.png" src="cms_demo/star/mrgreen.png" /> cillum dolore eu fugiat nulla pariatur. <img alt="mrgreen.png" src="cms_demo/star/mrgreen.png" /> Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum';

$doc = new DOMDocument();
$doc->loadHTML($html);

$tags $doc->getElementsByTagName('img');

foreach (
$tags as $tag) {
//pobieramy atrybut src
$src $tag->getAttribute('src');

//i sprawdzamy czy fotka istnieje w naszych zbiorach
if(file_exists($src)){
echo
"plik $src istnieje<br/>";
}
else {
echo
"plik $src nie istnieje<br/>";

//tu możemy użyć dowolnego obrazka np. "zdjęcie usunięte" etc... ja użyłem tego który akurat istnieje
$html str_replace($src'star/star_full.png'$html);
}

}

echo 
"<br/>".$html ;
?>


 
close
Strona korzysta z plików cookies. Zastosowane pliki cookie służą jedynie do prowadzenia ogólnych statystyk pozwalających na określenie popularności serwisu.