如果从服务器丢失,将图像添加到foreach?

时间:2015-08-01 23:14:44

标签: php mysql foreach

我有以下代码,我想要的是,如果该图像不在服务器中存档,那么显示alt图像...

foreach ($result as $data) {
    echo' 
    <tr style="background-color:#690b06;"> 
    <td id"key" style="font-size:18px; color:#f0cb01;">'.$data["Product #"].'</td> 
    <td id"bl" style="font-size:18px;color:#f0cb01;"><a target="_blank" href="https://www.google.com/search?q='.$data["Name"].'">'.$data["Name"].'</td> 

    <td id"bl" style="font-size:18px;color:#f0cb01;">
    <img src="http://example.com/search/images/'.$data["Name"].'.jpg" width="75" height="100" class="image">           
    </td>

    <td id"ph" style="font-size:18px;color:#f0cb01;">'.$data["UPC"].'</td> 
    <td id"ph" style="font-size:18px;color:#f0cb01;">'.$data["Case Pack"].'</td> 
    <td id"ph" style="font-size:18px;color:#f0cb01;">'.$data["Item Ounces"].'</td> 
    <td id"reason" style="font-size:18px;color:#f0cb01;">'.$data["Suggested Retail"].'</td>';

}
echo "</tr></table>";

我的文件结构如下 / seach / images /“item of item.jpg”

项目的名称是从数据库中提取的,照片也是带有.jpg ext的名称。有些物品没有图像。它是我的工作的搜索功能,我搜索一个项目,它返回结果......如果可能的话,一些与图片。但有些没有图像,只显示空占位符。

3 个答案:

答案 0 :(得分:2)

Use file_exists()

if(file_exists('/search/images/'.$data["Name"].'.jpg')) {
    echo '<img src="http://example.com/search/images/'.$data["Name"].'.jpg" width="75" height="100" class="image">'
} else {
    //echo out alt image
}

答案 1 :(得分:2)

如果您的应用可以将网址映射到文件位置,事情会变得更轻松:

<?php

$url_root = 'http://example.com/search/images';
$doc_root = $_SERVER['DOCUMENT_ROOT'].'/search/images';
$default_image = 'http://example.com/images/default.jpg';

foreach ($result as $data) {

    $image_url = $default_image;

    if (file_exists( $doc_root.'/'.$data['Name'].'.jpg' )) {
        $image_url = $url_root.'/'.$data['Name'].'.jpg';
    }

    // output the image tag
    echo '<img src="'.$image_url.'" width="75" height="100" class="image" />';

}
?>

答案 2 :(得分:0)

您可以使用PHP函数file_exists,正如其他人所指出的那样。但请注意,如果您正在谈论存储在其他服务器file_exists上的图像,即使没有文件存在,有时也会返回肯定的结果。

一种解决方案是使用getimagesize,例如:

$img_arr = @getimagesize($filename);

您需要@,因为如果文件不存在,getimagesize将返回错误。然后,您将测试$img_arr是否实际上是一个数组:

if (is_array($img_arr)) { ... }

getimagesize将用于存储在远程服务器上的文件。