1

我有一段代码检查文件系统中是否存在图像,如果存在,则显示它。

if (file_exists(realpath(dirname(__FILE__) . $user_image))) {
    echo '<img src="'.$user_image.'" />';
} 
else {
    echo "no image set";    
}

如果我回$user_image显,将链接复制并粘贴到浏览器中,图像就在那里。但是,在这里,总是会达到“无图像集”。

内容$user_imagehttp://localhost:8888/mvc/images/users/1.jpg

其中一些功能不需要?

有任何想法吗?损坏的代码或更好的方法(有效!)?

4

2 回答 2

2

您错过了/路径和文件名之间的目录分隔符。添加它:

if (file_exists(realpath(dirname(__FILE__) . '/' . $user_image))) {

请注意,这dirname()将返回最后没有a的目录/

于 2013-05-02T22:33:29.633 回答
2

除了我认为正确的@hek2mgl 答案之外,我还认为您应该切换到is_file()而不是file_exists(). 此外,您可以更进一步,例如:

if(is_file(dirname(__FILE__). '/' . $user_image) && false !== @getimagesize(dirname(__FILE__) . '/'. $user_image)) {
   // image is fine
} else {
   // it isn't
}

LE:1
哦,太好了,现在你告诉我们 $user_image 包含什么?你不能从一开始就这样做,对吗?所以你必须:

$userImagePath = parse_url($user_image, PHP_URL_PATH);
$fullPath = dirname(__FILE__) . ' / ' . $userImagePath;
if($userImagePath && is_file($fullPath) && false !== @getimagesize($fullPath)) {
   // is valid
}else {
   // it isn't
}

LE: 2 另外,存储整个 url 不是一个好习惯,当你切换域名时会发生什么?尝试仅存储相对路径,例如/blah/images/image.png而不是http://locathost/blah/images/image.png

于 2013-05-02T22:38:22.617 回答