我在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
使用的协议)。
嗨,有人可以解释为什么这会返回“数组由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。 参考方案 您仍然可以使用它,但是您必须像这里一样重新定义…