Почему file_exists() возвращает false?
Я пытаюсь получить изображения для записей WP, которые хранятся в каталоге wp-uploads, используя if (file_exists()
но он не распознает путь к файлу.
Для каждого поста доступно до 8 изображений. Каждое изображение имеет буквы ag в конце имени файла (или ничего) и str_replace для замены определенных символов в именах файлов.
Мне нужно показать каждое изображение, если оно существует, а если нет, ничего не вернуть. Так что, если сообщение связано с изображениями с b, d и f в конце, оно просто показывает эти три.
Я тестировал без (file_exists())
и его можно подобрать изображения с простым эхо для каждого - но, кажется, $img
пути не распознаются.
Я немного фанатка, поэтому любая помощь будет оценена...
$uid = get_post_meta (get_the_ID(), 'Unique number', true);
$root ="/wp-content/uploads/2016/Collection/";
$path = str_replace(" ","_",$uid);
$path = str_replace(".","_",$path);
$path = str_replace(":","",$path);
$img = $root.$path.".jpg";
$imga = $root.$path."a.jpg";
$imgb = $root.$path."b.jpg";
$imgc = $root.$path."c.jpg";
$imgd = $root.$path."d.jpg";
$imge = $root.$path."e.jpg";
$imgf = $root.$path."f.jpg";
$imgg = $root.$path."g.jpg";
if (file_exists($img)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; }
if (file_exists($imga)) { echo "<img src='".$root.$path.".jpg' />"; } else { echo ""; }
if (file_exists($imgb)) { echo "<img src='".$root.$path."b.jpg' />"; } else { echo ""; }
if (file_exists($imgc)) { echo "<img src='".$root.$path."c.jpg' />"; } else { echo ""; }
if (file_exists($imgd)) { echo "<img src='".$root.$path."d.jpg' />"; } else { echo ""; }
if (file_exists($imge)) { echo "<img src='".$root.$path."e.jpg' />"; } else { echo ""; }
if (file_exists($imgf)) { echo "<img src='".$root.$path."f.jpg' />"; } else { echo ""; }
if (file_exists($imgg)) { echo "<img src='".$root.$path."g.jpg' />"; } else { echo ""; }`
3 ответа
Вам нужно изменить способ, которым вы говорите PHP для поиска адреса,
$root
это, вероятно, не ваш абсолютный корень пути к файлу (возможно, означает абсолютно), поэтому вместо этого используйте специальную супер переменную для этого, $_SERVER['DOCUMENT_ROOT']
который является корнем файлового пути, доступного через Интернет, поэтому у вас есть:
$img = $_SERVER['DOCUMENT_ROOT'].$root.path.".jpg"
//while retaining your current / at the start of $root
Это файловая структура, чтобы проверить, существует ли файл, а не файловая структура для ссылки в <img>
тег, который представляется правильным в ваших примерах выше.
Итак, ваша общая коррекция должна выглядеть так:
$root ="/wp-content/uploads/2016/Collection/";
$path = str_replace(" ","_",$uid);
$path = str_replace(".","_",$path);
$path = str_replace(":","",$path);
$img = $root.$path.".jpg";
...
if (file_exists($_SERVER['DOCUMENT_ROOT'].$img)){
....
}
Дополнительным примечанием является то, что результаты этой функции кэшируются, поэтому вы должны вызвать clearstatcache()
в начале этого файла, чтобы он мог сделать новые проверки на наличие изображений. В настоящее время без этого, даже если изображение существует, PHP будет использовать кэшированные - прошлые результаты, которые могут быть устаревшими.
Ты начинаешь $root
с /
поэтому он начинается с корневого каталога сервера. Удалить первый /
и повторите попытку.
$uid = get_post_meta (get_the_ID(), 'Unique number', true);
$path = str_replace(" ","_",$uid);
$path = str_replace(".","_",$path);
$path = str_replace(":","",$path);
$uploads = wp_upload_dir();
Получить базовый корневой каталог.
$root = $uploads['path'];
$imgDir = $root.$path.".jpg";
if (file_exists($imgDir)){
.......
}