file_exists在所有情况下都返回false


file_exists returning false in all cases

我目前正在开发Wordpress,尽管听起来很简单,但我正在尝试检查目录中是否有图像,如果没有,那么它将显示标准的无图像。

我的问题是file_exists返回false,尽管里面的url是正确的,并且可以通过浏览器访问,所以这不是权限问题,也许我做错了,下面是代码;

$img = 'no_img.jpg';
if($val->has_prop('user_image')){
$img_tmp = $val->get( 'user_image' );
        if(file_exists($upload_dir['baseurl'].'/users/'.$img_tmp)){
$img = $val->get( 'user_image' );
    }
}

如果我执行var_dump($upload_dir['baseurl'].'/users/'.$img_tmp);,它将显示文件的确切直接URL,这是正确的URL,但当它进入file_exists时,它返回$img = 'no_img.jpg',尽管文件存在于目录中。。。。我做错了什么??

我还尝试在file_exists之前添加clearstatcache();,但也没有成功。有什么想法吗?

尝试使用:

if( getimagesize($upload_dir['baseurl'].'/users/'.$img_tmp) !== false ){
    $img = $val->get( 'user_image' );
}
else {
    $img = $val->get( 'no_image' );
}

另请参阅文档getimagesize

您可以使用

$fullPath=$upload_dir['baseurl'].'/users/'.$img_tmp; 
if(@fopen($fullPath,"r")){
     ........
 }

或者如注释中所述,尝试嗅探:

if (@file_get_contents($upload_dir['baseurl'].'/users/'.$img_tmp, null, null, 0, 1)) {
    //ok
}

如果使用$upload_dir=wp_upload_dir(),则需要使用$upload_dir['basedir']而不是baseurl来确定WP安装的上传路径。

或者,您可以使用file_get_contents、cURL或fopen来探查url是否存在图像。