Als file niet bestaat dan andere foto weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Kees Mulder

Kees Mulder

27/03/2013 11:45:15
Quote Anchor link
Ik heb in mijn tabel een foto staan. Als hij deze niet kan vinden op de website dan moet hij een standaard foto laten zien alleen doet hij dat niet.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$filename
= "http://".$_SERVER['SERVER_NAME']."/img-nieuws/thumb/".$row['nieuws_foto']."";
    
if (!file_exists($filename)) {
        echo '<img src="http://".$_SERVER['SERVER_NAME']."img-nieuws/thumb/nieuws_foto.png">';
}

    else{
            echo "<img src=\"".$filename."\" alt=\"test\">";

    }

?>

Gewijzigd op 27/03/2013 11:45:42 door Kees Mulder
 
PHP hulp

PHP hulp

21/11/2024 21:26:16
 
- Mark -

- Mark -

27/03/2013 12:17:30
Quote Anchor link
Dat komt door regel 5.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

    $filename
= 'http://'.$_SERVER['SERVER_NAME'].'/img-nieuws/thumb/'.$row['nieuws_foto'];
    
    if (!file_exists($filename)) {

        echo '<img src="http://'.$_SERVER['SERVER_NAME'].'img-nieuws/thumb/nieuws_foto.png">';
    }

    else{

        echo '<img src="'.$filename.'" alt="test">';
    }

?>
 
Kees Mulder

Kees Mulder

27/03/2013 12:27:32
Quote Anchor link
Ik heb je script overgenomen maar hij blijft de foto niet vinden op de server ondanks dat ze er wel staan. Waar kan het nog anders aan liggen? Zou het evt. kunnen omdat het een png is ipv van jpg file.
Gewijzigd op 27/03/2013 12:28:11 door Kees Mulder
 
Ward van der Put
Moderator

Ward van der Put

27/03/2013 12:33:44
Quote Anchor link
Er ontbreekt een slash na de hostnaam in:

$_SERVER['SERVER_NAME'].'img-nieuws/thumb/nieuws_foto.png"
 
Kees Mulder

Kees Mulder

27/03/2013 12:36:09
Quote Anchor link
Die heb ik ook al aangepast maar dat geeft niet de oplossing. Het lijkt dat hier ergens wat fout zit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
    $filename
= 'http://'.$_SERVER['SERVER_NAME'].'/img-nieuws/thumb/'.$row['nieuws_foto'];
    
    if (!file_exists($filename))
?>
 
Ward van der Put
Moderator

Ward van der Put

27/03/2013 12:41:52
Quote Anchor link
Klopt: je controleert nu met file_exists() een URL in $filename. Dit moet een lokaal pad worden.

Je kunt het overigens ook aan de webserver overlaten door een 404 af te vangen met een aparte afbeelding.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
# In .htaccess voor Apache
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteRule \.(gif|jpe?g|png) /img-nieuws/thumb/nieuws_foto.png [NC,L]
 
Kees Mulder

Kees Mulder

27/03/2013 12:51:38
Quote Anchor link
Ik probeer nu het volgende om het te testen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo file_exists("http://www.website.nl/img-nieuws/thumb/nieuws_foto.png") ? "true" : "false";
?>


En dan geeft hij aan "falsche". Als ik de regel in chrome invul staat de foto er gewoon...
Gewijzigd op 27/03/2013 12:53:28 door Kees Mulder
 
Ozzie PHP

Ozzie PHP

27/03/2013 14:39:04
Quote Anchor link
Het is niet "falsche" maar false.

De functie file_exists verwacht een lokaal pad en niet een URL (http://www. ...). Jij moet dus in plaats van een URL het lokale pad van de afbeelding gebruiken. Ik weet niet of je op een eigen server of shared host draait, maar een lokaal pad is zoiets als "/home/kees/public_html/img-nieuws/thumb/nieuws_foto.png".

Ik kan vanuit hier het pad natuurlijk niet zien, maar de document root kun je achterhalen met $_SERVER['DOCUMENT_ROOT']. Je zou dit eens kunnen proberen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo file_exists($_SERVER['DOCUMENT_ROOT'] . '/img-nieuws/thumb/nieuws_foto.png') ? 'true' : 'false';
?>
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.