Невозможно проверить, существует ли изображение, загруженное редактором изображений 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
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 среда размещения.