检查文件是否存在

时间:2013-05-02 22:28:37

标签: php

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

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

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

$user_image内容为http://localhost:8888/mvc/images/users/1.jpg

其中一些功能不需要?

有什么想法吗? 破碎的代码或更好的方法(有效!)?

2 个答案:

答案 0 :(得分:2)

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

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

请注意,dirname()会在结尾处返回目录而不是 a /

答案 1 :(得分: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
}

L.E: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
}

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