Использование file_exists для проверки файла в папке Uploads

2 июн. 2013 г., 02:08:32
Просмотры: 32.7K
Голосов: 3

Контекст: Для изображений сайта, используемых в определенном разделе, каждый пост опирается на базовое имя, помещенное в метаданные, которое затем используется с автоматическими расширениями для создания больших изображений, миниатюр галереи и миниатюры для индексной страницы.

Например, если Example_Name является базовым именем, тогда:
Example_Name_2-LG.jpg - это второе большое изображение в серии
Example_Name_2_SM.jpg - это соответствующая вторая миниатюра галереи
Example_Name_IN.jpg - это индексная миниатюра, выбранная для представления набора

Используя метаданные и условные операторы PHP, клиенту нужно только один раз ввести базовое имя и загрузить правильно названные изображения в папку Uploads, а шаблон страницы заполнит остальное.

Всё это работает хорошо, с одним исключением. Есть семь слотов для миниатюр, и страница отображает все div-ы миниатюр, даже если в папке Uploads меньше семи изображений миниатюр.

Я хотел бы обернуть каждый div миниатюры условием, которое использует file_exists для проверки существования миниатюр, фактически находящихся в папке Uploads, чтобы если названного изображения не существует по указанному пути, соответствующий пустой div (и его гиперссылка) не появлялись.

Я пробовал создавать абсолютные пути, используя функцию wp_uploads_dir, а также bloginfo('template_directory') и даже устаревший TEMPLATEPATH, но добился только PHP ошибок. Я предполагаю, что это проблема с путём или что-то особенное, чего я не понимаю о PHP функции file_exists.

Пример кода, вызывающий ошибку, с использованием wp_upload_dir:

<?php 
    $upload_dir = wp_upload_dir(); 
    if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg') ) {
?>
    <div id="thumb7" class="thumb">  <!-- Должен появляться только когда Example_Name_7_SM.jpg существует -->
        ...
    </div>

<?php } ?>

Буду благодарен за любые предложения.

1
Комментарии

Прежде всего, вы проверили документацию PHP для этой функции? Как и Codex, это важный справочный материал.

brasofilo brasofilo
2 июн. 2013 г. 03:13:20
Все ответы на вопрос 4
0

Нельзя использовать URL файла в функции file_exists() таким образом:

file_exists( "http://example.com/wp-content/uploads/Example_Name_2_SM.jpg" );

Вместо этого следует использовать абсолютный путь к файлу, например:

file_exists( "/absolute/path/to/wp-content/uploads/Example_Name_2_SM.jpg" );

Затем можно попробовать такой вариант:

$meta = get_post_meta( $post->ID, '_meta_example_name', true );
$file = $upload_basedir . '/' . $meta . '_7_SM.jpg';
if ( file_exists( $file ) ) {
   //...
}

где

$upload_basedir = WP_CONTENT_DIR . '/uploads';

или

$upload_dir = wp_upload_dir();
$upload_basedir = $upload_dir['basedir'];
2 июн. 2013 г. 08:13:00
0

В этой строке...

if ( file_exists( echo $upload_dir['baseurl'] . '/' . echo get_post_meta($post->ID, '_meta_example_name', true) . '_7_SM.jpg')` )

... вам не нужны все эти echo. Вы не пытаетесь ничего выводить. У вас даже echo перемешаны с конкатенацией строк. Уберите их все.

if ( 
  file_exists( $upload_dir['baseurl'].'/'.get_post_meta($post->ID,'_meta_example_name',true).'_7_SM.jpg') 
)

Я бы, вероятно, проверил метаданные записи заранее и пропустил вызов file_exists, если мета-ключ пуст.

$upload_dir = wp_upload_dir();
$meta_name = get_post_meta($post->ID,'_meta_example_name',true);
if (
  !empty($meta_name)
  && file_exists( $upload_dir['baseurl'].'/' . $meta_name.'_7_SM.jpg') 
) {
  // ваш HTML-код
}
2 июн. 2013 г. 07:56:24
0

Вам следует использовать __DIR__. Предполагая, что проверка происходит внутри файла functions.php, это будет выглядеть так:

if(file_exists(__DIR__ . '/../../uploads/Example_Name_2_SM.jpg')){
    // Сделать что-то ...
}
22 мар. 2019 г. 19:59:00
0

Если вам нужно проверить файл в теме, вы можете использовать мою функцию

function file_checker($file){
    //http://localhost/wordpress/wp-content/themes/ИМЯТемы
    $location = get_template_directory_uri();// вы можете изменить это <=
    $location = str_replace("http://","",$location);
    $location = str_replace("https://","",$location);
    $location = str_replace($_SERVER['HTTP_HOST'],"",$location);
    $location = $_SERVER['DOCUMENT_ROOT'].$location;
    $filename = $location.$file;
    return (file_exists($filename));

}

использование

if(file_checker("/style.css")){
    echo "Файл существует";
}else{
    echo "Ошибка расположения, проверьте ваш код";
}
9 июл. 2020 г. 17:46:31