在PHP中缺少替换图像时显示默认图像的正确方法

时间:2012-09-10 16:39:30

标签: php

我有以下代码,用于在显示信息时从数据库加载用户图像。

我试图以一种方式编写它,以便检查用户是否已在图像数据库中绑定了用户ID的图像,如果是这样,会使图像单独存在,如果没有,则会显示“缺失” .jpg“/默认用户图片。

我已经尝试了以下内容,但是现在看来代码覆盖了现有的图像并用missing.jpg图像替换它们,我不知道为什么。

我很感激有人看一看并告诉我为什么会这样。

    //Images
    $thisScript = $_SERVER["SCRIPT_FILENAME"];
    $dirName = dirname($thisScript);
    $relative_path = "images/headshots/".$this->id.".jpg";
    $missing_path = "images/headshots/missing.jpg";
    $full_path = $dirName . "/" . $relative_path;

    //if(file_exists($relative_path))
    //if(file_exists($_FILES['uploadedfile']['name']))
    if(basename( $_FILES['uploadedfile']['name']) != '' /*and (file_exists($_FILES['uploadedfile']['name']))*/)
    {
            $this->process_headshot_file($relative_path, $full_path);
    }
    else
    {
        //$this->process_headshot_file($missing_path, $full_path);
        $query = "UPDATE hraps SET headshot_filename = '".$_SESSION['missing_headshot_image']."' WHERE id = ".$this->id;
        $result = mydb::cxn()->query($query);
    }

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的if声明:

 if(basename( $_FILES['uploadedfile']['name']) != '')

仅在$_FILES

中存在某些内容时才会起作用

由于您表示您希望在显示信息时显示图像,因此可能不会经常触发图像,因此else将会关闭。

我认为你不需要做比这更复杂的事情:

$image = "images/headshots/missing.jpg";
if(file_exists($relative_path)) {
    $image = $relative_path;
}

$full_path = $dirName . "/" . $image;
$this->process_headshot_file($image, $full_path);