Невозможно проверить, существует ли изображение, загруженное редактором изображений wp, с помощью функции file exists


Я разрабатываю тему подкаста, в которой у меня есть форма, позволяющая пользователю загружать свои обложки подкастов. Размер обложки подкаста должен быть меньше 1400×1400 и 3000×3000, поскольку мы следуем правилам iTune.

Поскольку такие большие файлы будут влиять на скорость загрузки страниц сайта, я хочу изменить размер загруженного изображения до меньшего размера, скажем, 250×250, чтобы мы могли использовать его для отображения на наших веб-страницах.

Я использовал функцию WP_Image_Editor::resize, чтобы измените размер загруженного изображения и функцию WP_Image_Editor::save, чтобы сохранить его. Это действительно сработало. Теперь у меня есть два разных изображения с двумя разными измерениями. Поскольку многие наши пользователи уже опубликовали свой подкаст с увеличенными изображениями, я просто не могу показывать исключительно сжатую версию. Вместо этого я хочу проверить, существует ли сжатая версия или нет, и показать изображение соответствующим образом.

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

file_exists('path/to/original_image'); = true
file_exists('path/to/compressed_image'); = false

Я использовал wp_handle_upload для загрузки исходного изображения, но wp_image_editor класс для изменения размера и сохранения сжатого изображения. Таким образом, в этих двух функциях должно быть что-то другое, что вызывает эту проблему.

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

У вас, ребята, есть какие-нибудь идеи, как я могу это пережить? Любая помощь будет очень признательна.

Заранее благодарю.

РЕДАКТИРОВАТЬ - ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

Это код, который я использую на самом деле,

if ( isset( $_FILES ) && isset( $_FILES['podcast_cover'] ) ) {
    
    // Validating the file extension first,
  
    // And then the Image Mime Type

    $image = wp_get_image_editor( $_FILES['podcast_cover']['tmp_name'] );
    $size = $image->get_size();

    // Validating the size ...
    if ( $size['width'] < 1400 ) {
        global $registration_errors;
        $registration_errors->add( 'podcast_cover', 'The image should be atleast 1400x1400 in size.' );
        return $this->redirect_back_to_form();
    } elseif ($size['width'] > 3000) {
        global $registration_errors;
        $registration_errors->add( 'podcast_cover', 'The image should not be over 3000x3000 in size.' );
        return $this->redirect_back_to_form();
    }

    // Uploading the main one,
    $override = ['test_form' => false];
    $uploaded = wp_handle_upload( $_FILES['podcast_cover'], $override );

    // Now compressing and saving the alternative one
    $pathinfo = pathinfo( $uploaded['url'] );
    $image = wp_get_image_editor( $uploaded['url'] );
    $image->resize( 250, 250 );
    $image->save( $pathinfo['dirname'] . '/' . $pathinfo['filename'] . '-300x300.' . $pathinfo['extension'] );

}

На самом деле я имею в виду именно эти изображения

Original Image : https://torontopodcaststudio.com/wp-content/uploads/2020/08/my-podcast-cover.jpg

Compressed Image : https://torontopodcaststudio.com/wp-content/uploads/2020/08/my-podcast-cover-300x300.jpg

ftp screenshot

Author: Rahul K, 2020-08-27

1 answers

Когда я использовал ваш точный код на локальном тестовом сайте, мне не удалось сохранить изображение с измененным размером. Это происходит потому, что вы передаете URL-адрес wp_get_image_editor() вместо пути. Вы также передаете URL-адрес в pathinfo(), для которого также требуется путь.

$pathinfo = pathinfo( $uploaded['url'] );
$image = wp_get_image_editor( $uploaded['url'] );

Вышеуказанные строки должны быть:

$pathinfo = pathinfo( $uploaded['file'] );
$image = wp_get_image_editor( $uploaded['file'] );

Это связано с тем, что ключ file массива, возвращаемый wp_handle_upload(), содержит путь к файлу, что требуется для каждой функции выше.

Я не могу объяснить, почему ты можешь однако получите доступ к версии 300x300 в браузере. Этого не случилось со мной, когда я тестировал. Это может быть что-то специфическое для WordPress.com среда размещения.

 0
Author: Jacob Peattie, 2020-08-27 12:11:45