【问题标题】:file_exists returning false in all casesfile_exists 在所有情况下都返回 false
【发布时间】:2013-12-12 09:10:30
【问题描述】:

我目前正在使用 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,而且它是正确的,但是当它进入 file_exists 时,它返回 $img = 'no_img.jpg',尽管该文件存在于目录中.... 什么我做错了吗??

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

【问题讨论】:

  • file_exists 适用于文件路径,而不是 url。
  • “直接 URI”实际上是相对的还是绝对的?您可能假设了错误的 工作目录
  • 你应该尝试使用getimagesize
  • @Liza,不,文件完整路径的 url 将类似于 /home/user/workspace/folder/users/imp.pngC://path/to/folder/img.png 如果您使用 Windows
  • @Liza 您必须使用路径,而不是 URI,例如 wp-content/uploads/users/file.jpg 如果您从 WP 根目录使用 file_exists

标签: php wordpress


【解决方案1】:

尝试使用:

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

另请参阅文档getimagesize

【讨论】:

  • 感谢您的回答 +1
【解决方案2】:

你可以使用

$fullPath=$upload_dir['baseurl'].'/users/'.$img_tmp; 

if(@fopen($fullPath,"r")){
     ........
 }

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 感谢您的回答 +1
    • 这似乎是一种不好的做法。提醒我使用 CURLand trim 修复 WP RSS 提要,顶部有换行符(由于插件不好)(实际上发生了)
    【解决方案4】:

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

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

    【讨论】:

    • 感谢您的回答!为它 +1
    • 太棒了..希望对您有所帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 2012-09-02
    • 2020-04-19
    • 2012-02-23
    • 1970-01-01
    相关资源
    最近更新 更多