使用file_exists()来检查wordpress uploads文件夹

时间:2015-01-09 16:40:03

标签: php wordpress file-exists

我在Wordpress uploads文件夹中创建了一个目录,供最终用户通过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; ?>

2 个答案:

答案 0 :(得分:4)

PHP file_exists函数主要是expects an internal server path to the file to be tested。使用example显而易见。

幸运的是,我们发现wp_upload_dir()为我们提供了几个有用的值:

  
      
  • 'path' - 基目录和子目录或上传目录的完整路径。
  •   
  • 'url' - 基本网址和子目录或上传目录的绝对网址。
  •   
  • 'subdir' - 子目录,如果上传使用年/月文件夹选项已启用。
  •   
  • 'basedir' - 不带子目录的路径。
  •   
  • 'baseurl' - 没有子网址的网址路径。
  •   
  • 'error' - 设置为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;

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

注意

与关于PHP&gt; = 5.0.0的PHP说明一样,您是can indeed use file_exists with some URLs,但http://协议是not supported for the stat() functionfile_exists使用的是{。}}。

答案 1 :(得分:1)

您必须使用内部路径来检查文件是否存在。 因此,请使用$upload_dir['path']代替$upload_dir['baseurl']

  

[path] - 基目录和子目录或上传的完整路径   。目录

http://codex.wordpress.org/Function_Reference/wp_upload_dir