Загрузить изображения на удаленный сервер

11

Я использую WordPress Media Uploader для загрузки изображений, и мне было интересно, есть ли способ, чтобы загрузить его на мой удаленный сервер вместо моего локального сервера? Пример: мой блог WordPress размещен на сервере A, и я хочу использовать средство загрузки мультимедиа для загрузки изображений на сервер B вместо сервера A.

Оба сервера работают под управлением Ubuntu 10.04 LTS с nginx в качестве веб-сервера, и оба поддерживают ftp & sftp.

Ruriko
источник
Какие у вас есть варианты подключения к серверу? FTP, API или SSH? на сервере, где вы хотите хранить свой контент
Pontus Abrahamsson
Мои единственные варианты подключения к серверу - FTP и SSH
Ruriko
Используйте плагин hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/
saman m
Я понимаю, что ОП указала, что доступ к API не является опцией, однако на большинстве доступных сайтов всегда доступен новый API WordPress. Так как это старая ветка, подумал бы упомянуть об этом для других посетителей. Например, если вы можете получить доступ к веб-сайту, вы можете получить доступ к API. Примеры, касающиеся медиа: developer.wordpress.org/rest-api/reference/media
ryanm

Ответы:

14

Я только что создал плагин, который делает это. Это не идеально, но оно делает свою работу.

Вы можете найти его в моем Github: https://github.com/pontusab/wp-ftp-media-library

Поэтому вам нужно изменить некоторые вещи в файле в строке 28:

/**
     * Change this to match your server
     * You only need to change the those with (*)
     * If marked with (-) its optional 
     */

    $settings = array(
        'host'    =>    'ip or hostname',           // * the ftp-server hostname
        'user'    =>    'username',                 // * ftp-user
        'pass'    =>    'password',                 // * ftp-password
        'cdn'     =>    'cdn.example.com',          // * This have to be a pointed domain or subdomain to the root of the uploads
        'path'    =>    '/',                        // - ftp-path, default is root (/). Change here and add the dir on the ftp-server,
        'base'    =>    $upload_dir['basedir']      // Basedir on local 
    );

Что этот плагин делает, он изменяет Структуры загрузки с / года / месяц для загрузки только на локальном компьютере в нашем случае сервер A . Затем он использует php для подключения к ftp через: ftp_connect . Функция запускается при запуске wp_generate_attachment_metadata. Затем он запускает проверку в папке загрузки, чтобы увидеть, есть ли какие-либо изображения , и если это так, он загрузит их все на ftp-сервер через ftp_put . Когда загрузка будет завершена, файлы будут удалены с локального компьютера с помощью функции unlink .

Затем плагин изменяет URL изображений на «общедоступный» ip или имя хоста, указывающее на ftp-сервер. Я предлагаю использовать что-то вроде static.mydomain.com или cdn.mydomai.com. Их нужно указать на ftp-сервер (сервер B), это позволяет загружать образы с ftp-сервера.

Как говорят другие участники, вы должны использовать для этого ftp-сервер, лучше с настоящим cdn, монтируемым предохранителем или чем-то вроде Amazon S3.

Понт Абрахамссон
источник
загрузка прошла нормально, но получена ошибка Предупреждение: ftp_put () [function.ftp-put]: не удалось создать файл. в /home/xxx..../plugin_file.php в строке 99
Фатих Топрак
@Pontus Abrahamsson, Спасибо за это отличное решение. Однако, как я могу отключить, чтобы он начал посылать каждый медиафайл на сервере на другой сервер? Я просто хочу, чтобы недавно загруженный файл передавался по FTP.
user3605780
0

Похоже, вы просто хотите использовать CDN. Большинство CDN работают так, как будто вы загружаете свои изображения локально, а они отражаются в местоположении CDN. Затем вы настраиваете домен, который указывает на содержимое CDN, и переписываете URL-адреса своего изображения, чтобы использовать этот домен вместо обычного URL-адреса.

Есть несколько хороших плагинов и сервисов, хотя я имею опыт работы только с W3TC и Cloudfront.

Эд Бернс
источник
Да, он похож на CDN, за исключением того, что у меня недостаточно места на сервере А, потому что у него всего 5 ГБ, а на сервере Б - 1 ТБ.
Ruriko
0

Вы должны понимать, как WP загружает файл. Запрос POST отправляет файл на сервер, где он будет храниться во временной папке. После этого WP проверит загруженный файл, скопирует его в каталог содержимого и удалит временный файл.

Это очень сложный процесс. Для изображений вы можете подключиться к 'media_upload_file', а затем проверить, является ли это изображение. Если это изображение, скопируйте его с WP_Filesystem на внешний сервер (используйте метод ftpext и укажите свои параметры ftp в опциях), иначе позвольте WP обработать загрузку с помощью wp_handle_upload(). В случае копирования файла на внешний сервер, вы должны предоставить URL и т. Д. WP, чтобы WP мог настроить данные (например, для сообщений вложения).

Эта работа не сделана с рукой, полной кода. Если вы не разработчик, лучше нанять его. Или найдите плагин, который сделает это за вас.

Ralf912
источник
-1

Вы можете использовать SSHFS или FTPFS смонтировать каталог на удаленном сервере для директории загрузок. Таким образом, вам не нужно ничего менять в самом WordPress.

Недостатком является то, что каждый доступ к загруженному файлу будет медленнее в зависимости от того, где находится сервер B.

Марк Каплун
источник
Я не могу использовать SSHFS или FTPFS, потому что мой хост не поддерживает FUSE
Ruriko
Затем поменяйте хосты. Самой большой проблемой при реализации вашего запроса является не загрузка на другую серверную часть (просто скопируйте код из плагинов, которые загружаются в CDN), а как получить его оттуда, чтобы он обслуживал. Без доступа на уровне файловой системы к серверу B apache не сможет обслуживать файлы, поэтому вам придется сделать сервер B доступным для Интернета, но тогда вы можете просто переместить свой WordPress туда. Вы действительно не дали достаточно подробностей о вашей ситуации. Пожалуйста, обновите вопрос со всеми соответствующими деталями, если вы хотите получить ответ.
Марк Каплун