使用 file_exists() 检查 WordPress 上传文件夹

the*_*ant 2 php wordpress file-exists

我在 WordPress 上传文件夹中创建了一个目录,供最终用户通过 ftp 批量上传照片。图像编号为 1.jpg、2.jpg...等。我已成功生成图像网址,但现在我想测试空网址 - 即如果“8.jpg”不存在,则显示占位符图像而是从主题的图像文件夹中。

我正在尝试使用 file_exists(),但这每次都会返回 false 并且始终显示占位符图像。任何建议,将不胜感激。

<?php while ( have_posts() ) : the_post();
    // create url to image in wordpress 'uploads/catalogue_images/$sale' folder
    $upload_dir = wp_upload_dir();                          
    $sub_dir = $wp_query->queried_object;
    $image = get_field('file_number');
    $image_url = $upload_dir['baseurl'] . "/catalogue_images/" . $sub_dir->name . "/" . $image . ".JPG"; ?>

    <?php if(file_exists($image_url)){
        echo '<img src="' . $image_url . '" alt="" />';
    } else {
        //placeholder
        echo '<img src="' . get_bloginfo("template_url") . '/images/photo_unavailable.jpg" alt="" />';
    } ?>                                
<?php endwhile; ?>
Run Code Online (Sandbox Code Playgroud)

sja*_*agr 6

PHPfile_exists函数主要需要待测试文件的内部服务器路径。通过示例可以清楚地看出这一点。

幸运的是,我们看到这wp_upload_dir()给了我们几个有用的价值:

  • 'path' - 基本目录和子目录或上传目录的完整路径。
  • 'url' - 基本 url 和子目录或上传目录的绝对 URL。
  • 'subdir' - 如果上传使用年/月文件夹选项打开,则为子目录。
  • 'basedir' -没有子目录的路径。
  • 'baseurl' -不带子目录的 URL 路径。
  • '错误' - 设置为 false。

我已经将我们想要使用的内容加粗了。使用这两个值,您必须生成两个变量,一个用于外部 URL,另一个用于内部文件路径:

$image_relative_path = "/catalogue_images/" . $sub_dir->name . "/" . $image . ".JPG";
$image_path = $upload_dir['basedir'] . $image_relative_path;
$image_url = $upload_dir['baseurl'] . $image_relative_path;
Run Code Online (Sandbox Code Playgroud)

然后使用file_exists($image_path)代替file_exists($image_url).

笔记

与 PHP >= 5.0.0 上的 PHP 注释一样,您确实可以使用file_exists某些 URL,但是该http://函数不支持该stat()协议(这就是file_exists使用的。)