在不知道文件扩展名的情况下获取文件的目录


getting directory of a file without knowing its extension

我希望能够展示用户的照片。该用户可以是Doctor、Nurse或Patient类型,并且属于这些类型中的每一个的每个人都具有识别他的不同ID。我将每种类型用户的照片分在目录/images/user_upload/内的三个文件夹中,给定的用户可能有照片,也可能没有照片。如果他有一张照片,我想给他一个和他的身份证相同的名字(注意,我不知道这个文件的扩展名,只知道名字)。如果他不这样做,我想呈现一个默认的图像。为此,我有一个名为printUserPhoto的函数。

function printUserPhoto()
{
    $path = '/images/user_upload/' .ucfirst($_SESSION['listtype']). '/' .$_SESSION['id']. '.*';
    $source = glob($path);  
    if(empty($source))
        echo '<img src="images/default_profile_img.png" />';
    else
        echo '<img src="',$source[0],'" />'; 
}

尽管如此,我总是在变量$source中得到一个空数组,即使图像存在。我做错了什么?

通过这种方式使用glob

function printUserPhoto()
{
    $pathToDocumentRoot = $_SERVER['DOCUMENT_ROOT'];
    $path = $pathToDocumentRoot . '/images/user_upload/' .ucfirst($_SESSION['listtype']). '/' .$_SESSION['id']. '.*';
    $source = glob($path);  
    if(empty($source)){
        echo '<img src="images/default_profile_img.png" />';
    } else {
        echo '<img src="',$source[0],'" />'; 
    }
}

可能会限制用户可以上传的文件类型。有了它,你可以做这样的事情:

function printUserPhoto()
{
    $pathToDocumentRoot = $_SERVER['DOCUMENT_ROOT'];
    $path = $pathToDocumentRoot . '/images/user_upload/' .ucfirst($_SESSION['listtype']). '/' .$_SESSION['id'];
    $file = "images/default_profile_img.png";
    if(file_exists($path . '.jpg')){
        $file = $path . '.jpg';
    }else if(file_exists($path . '.png')){
        $file = $path . '.png';
    }else if(file_exists($path . '.gif')){
        $file = $path . '.gif';
    }
    echo '<img src="' . $file . '" />';
}

正如@Phil所说,您现在指的是文件系统根/是相对于文档根的绝对路径。