使用file_exists()检查wordpress上传文件夹 - php

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

我正在尝试使用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; ?>

参考方案

PHP file_exists函数主要是expects an internal server path to the file to be tested。使用example可以使这一点变得显而易见。
幸运的是,我们看到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;

然后使用file_exists($image_path)代替file_exists($image_url)
注意
与PHP> = 5.0.0上的PHP注释一样,您can indeed use file_exists with some URLs,但是http://协议是not supported for the stat() function(file_exists使用的协议)。

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

PHP:从函数返回值并直接回显它? - php

这可能是一个愚蠢的问题,但是……的PHPfunction get_info() { $something = "test"; return $something; } html<div class="test"><?php echo get_info(); ?></div> 有没有办…

PHP:将数据从二维数组复制到一维数组的最快方法 - php

我有一个巨大的二维PHP数组,带有500万行。$t = [ [ "id" => 1, "name" => "foo" ], [ "id" => 2, "name" => "bar" ] ]; 现在,我必须将此数组的I…

php-printf和sprintf具有不同的输出 - php

我编写了以下微型php程序来测试printf和sprintf:<?php $str_1 = printf("%x%x%x", 65, 127, 245); $str_2 = sprintf("%x%x%x", 65, 127, 245); echo $str_1 . "\n"; echo $s…

PHP getallheaders替代 - php

我正在尝试从服务器上的apache切换到nginx。唯一的问题是我在PHP脚本中使用的getallheaders()函数,该函数不适用于Nginx。我已经尝试过用户在getallheaders函数上的php站点上提供的注释,但这并不返回所有请求标头。请告诉我如何解决这个问题。我真的想切换到Nginx。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…