Завантажте зображення на віддалений сервер


11

Я використовую програму завантаження медіа Wordpress для завантаження зображень, і мені було цікаво, чи є спосіб зробити це завантаження на мій віддалений сервер замість мого локального сервера? Приклад: Мій блог WordPress розміщений на сервері A, і я хочу використовувати медіа-завантажувач для завантаження зображень на сервер B замість сервера А.

Обидва сервери працюють Ubuntu 10.04 LTS з nginx як веб-сервер і обидва підтримують ftp & sftp.


Які ваші варіанти того, як підключитися до сервера? FTP, API або ssh? на сервері, де ви хочете зберігати свій вміст
Pontus Abrahamsson

Мої єдині варіанти підключення до сервера - це FTP & SSH
Ruriko

Використовуйте плагін hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

Я розумію, що в ОЗ вказано, що доступ до API не є можливим, однак на більшості доступних сайтів новий WordPress API завжди доступний. Оскільки це стара тема, я подумав, що це потрібно згадати для інших відвідувачів. Наприклад, якщо ви можете отримати доступ до веб-сайту, зазвичай ви можете отримати доступ до 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 . Після завершення завантаження файли будуть видалені з локальної машини за допомогою функції від’єднання .

Тоді плагін змінює URL-адресу зображень на "public" 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 ТБ місця.
Рюрико

0

Ви повинні зрозуміти, як WP завантажує файл. Запит POST надсилає файл на сервер, де він буде зберігатися у тимчасовій папці. Після цього WP перевірить завантажений файл, скопіює його у каталог вмісту та видалить тимчасовий файл.

Це дуже складний процес. Для зображень ви можете підключити до "media_upload_file", а потім перевірити, чи це зображення. Якщо це зображення, скопіюйте його за допомогою WP_Filesystem на зовнішній сервер (використовуйте метод ftpext та надайте свої ftp облікові дані в межах параметрів), інакше нехай WP обробляє завантаження wp_handle_upload(). У разі копіювання файлу на зовнішній сервер ви повинні надати URL-адресу та інше на WP, щоб WP змогла налаштувати дані (наприклад, для вкладень).

Ця робота не виконується рукою, повної коду. Якщо ви не розробник, краще найміть його. Або шукайте плагін, який зробить це за вас.


-1

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

Недолік полягає в тому, що кожен доступ до завантаженого файлу буде повільнішим, залежно від місця перебування сервера B.


Я не можу використовувати SSHFS або FTPFS, оскільки мій хост не підтримує FUSE
Ruriko

Потім переключіть хости. Найбільшою проблемою при здійсненні вашого запиту є не завантаження на іншу частину сервера (просто скопіюйте код із плагінів, які завантажують у CDN), а як отримати його звідти для його обслуговування. Без доступу на рівні файлової системи до сервера B apache не зможе обслуговувати файли, тому вам доведеться зробити сервер B доступним для Інтернету, але тоді ви можете просто перемістити туди свою WordPress. Ви дійсно не дали достатньо детальних даних про свою ситуацію. Будь ласка, оновіть питання з усіма відповідними деталями, якщо ви хочете мати можливість отримати відповідь.
Марк Каплун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.