2016-05-07 5 views
1

Я пытаюсь получить изображения для сообщений WP, которые хранятся в каталоге wp-uploads, используя if (file_exists(), но он не распознает путь к файлу.Почему file_exists() возвращает false?

Для каждого сообщения доступно до 8 изображений. Каждое изображение имеет буквы a-g в конце имени файла (или ничего) и имеет str_replace для замены определенных символов в именах файлов.

Мне нужно показать каждое изображение, если оно существует, а если нет, то ничего не вернуть. Поэтому, если сообщение связано с изображениями с b, d и f в конце, оно просто показывает эти три.

Я тестировал без (file_exists()) и его способность подбирать изображения с простым эхом для каждого - но кажется, что пути $img не распознаются.

Im немного PHP нуб так что любая помощь будет оценена ...

$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 ""; }` 

ответ

1

Вам нужно изменить так, как вы рассказываете PHP, чтобы найти адрес,

$root, вероятно, не ваш абсолютный корневой путь к файлу (вероятно означает абсолютно), поэтому вместо того, чтобы использовать специальный супер переменную для этого, $_SERVER['DOCUMENT_ROOT'], который является корнем веб доступной FilePath, поэтому вы затем:

$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 будет использовать результаты кэширования - прошлые результаты, которые могут быть неактуальными.

+0

Да, вы должны использовать полный или абсолютный путь к файлу. Если это не работает с вами, убедитесь, что он будет работать только тогда, когда [allow_url_fopen] (http://php.net/filesystem.configuration#ini.allow-url-fopen) активируется в вашей конфигурации PHP. –

+0

'$ _SERVER ['DOCUMENT_ROOT']' разрешил проблему для меня - спасибо. – Aitch

1

Вы начинаете $root с /, поэтому он, начиная с корневого каталога сервера. Удалите первый / и повторите попытку.

+0

Хотя это * а * решение, это не самое лучшее решение, потому что это делает очень широкое предположение о том, что путь к файлу изображения является дочерним PHP скрипт работает, поэтому, если PHP скрипт находится в папке '/ wp-content/admin /', например, это решение не найдет файл, указанный с помощью '$ root'. – Martin

+0

Вы правы, но у меня не было всей информации, поэтому я догадался, что корень документа лежит в основе WordPress. – Manhim

0
$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)){ 
....... 
} 
+0

что это делает? Почему это работает? – Martin

+0

Проверить с помощью C: \ development \ xampp \ htdocs \ example.com/content/uploads/2016/05 –

+0

Возможно, добавьте эти данные в свой ответ, чтобы сделать ваш ответ более полезным – Martin