Функция download_url()
в WordPress предназначена для скачивания файла по URL-адресу и сохранения его во временном каталоге на сервере. Она полезна при автоматизации загрузок файлов на сервер, таких как скачивание изображений, документов или других медиафайлов, чтобы затем переместить их в постоянное хранилище.
download_url( string $url, int $timeout = 300, bool $signature_verification = false ): string|WP_Error
Параметры
$url
(обязательно): URL файла для скачивания.$timeout
(опционально): время ожидания завершения запроса в секундах. По умолчанию 300.$signature_verification
(опционально): проверять ли подпись загружаемого файла (доступно с WordPress 5.2). По умолчаниюfalse
.
Возвращаемое значение
- Путь к временно сохраненному файлу в случае успеха.
- Объект
WP_Error
в случае ошибки.
Важные моменты использования
- Функция требует подключения файла
wp-admin/includes/file.php
. - После обработки файл нужно удалить из временного хранилища с помощью
unlink()
илиwp_delete_file()
.
Пример 1: Простая загрузка изображения и перемещение в постоянное хранилище
Загрузим логотип WordPress во временное хранилище, проверим на ошибки, а затем перенесем файл в каталог загрузок.
<?php
// Подключаем необходимые функции, если они еще не доступны
if ( ! function_exists( 'download_url' ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
$file_url = 'https://s.w.org/style/images/wp-header-logo.png';
$tmp_file = download_url( $file_url );
// Проверяем на ошибки загрузки
if ( is_wp_error( $tmp_file ) ) {
echo "Ошибка загрузки: " . $tmp_file->get_error_message();
} else {
$dest_path = wp_upload_dir()['basedir'] . '/wp-header-logo.png';
// Копируем файл в каталог загрузок и удаляем временный файл
copy( $tmp_file, $dest_path );
echo "Файл сохранен в: $dest_path";
@unlink( $tmp_file ); // Удаляем временный файл
}
Пример 2: Использование с проверкой подписи файла
Загрузим файл с включенной проверкой подписи для дополнительной безопасности. Для этого установим третий параметр $signature_verification
в true
. Подпись будет проверяться, если файл загружается с доверенных источников (например, wordpress.org
).
<?php
require_once ABSPATH . 'wp-admin/includes/file.php';
$file_url = 'https://downloads.wordpress.org/plugin/example-plugin.zip';
$tmp_file = download_url( $file_url, 300, true );
if ( is_wp_error( $tmp_file ) ) {
echo "Ошибка загрузки: " . $tmp_file->get_error_message();
} else {
$dest_path = wp_upload_dir()['basedir'] . '/example-plugin.zip';
copy( $tmp_file, $dest_path );
echo "Файл загружен в: $dest_path";
@unlink( $tmp_file );
}
Пример 3: Условное скачивание и обработка файла
Если нужно загружать файл только при определенных условиях, например, в зависимости от существования файла в постоянном хранилище, можно использовать условие с проверкой наличия файла.
<?php
if ( ! function_exists( 'download_url' ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
$file_url = 'https://example.com/data-file.csv';
$dest_path = wp_upload_dir()['basedir'] . '/data-file.csv';
// Проверяем, существует ли файл, чтобы не загружать его повторно
if ( ! file_exists( $dest_path ) ) {
$tmp_file = download_url( $file_url );
if ( is_wp_error( $tmp_file ) ) {
echo "Ошибка загрузки: " . $tmp_file->get_error_message();
} else {
copy( $tmp_file, $dest_path );
echo "Файл успешно загружен и сохранен: $dest_path";
@unlink( $tmp_file );
}
} else {
echo "Файл уже существует по пути: $dest_path";
}
Пример 4: Использование wp_delete_file()
вместо unlink()
Для удаления временного файла рекомендуется использовать функцию wp_delete_file()
, чтобы обеспечить более безопасное удаление.
<?php
if ( ! function_exists( 'download_url' ) ) {
require_once ABSPATH . 'wp-admin/includes/file.php';
}
$file_url = 'https://example.com/sample-image.jpg';
$tmp_file = download_url( $file_url );
if ( is_wp_error( $tmp_file ) ) {
echo "Ошибка загрузки: " . $tmp_file->get_error_message();
} else {
$dest_path = wp_upload_dir()['basedir'] . '/sample-image.jpg';
copy( $tmp_file, $dest_path );
echo "Файл успешно перемещен: $dest_path";
// Удаляем временный файл с помощью wp_delete_file()
wp_delete_file( $tmp_file );
}
Заключение
Функция download_url()
предоставляет гибкий и простой способ загрузки файлов из внешних источников, особенно полезна для интеграции с API, загрузки медиафайлов или других ресурсов в WordPress.