Загрузка изображений на удаленный сервер
Я использую WordPress Media Uploader для загрузки изображений и хотел бы узнать, есть ли способ настроить загрузку на мой удаленный сервер вместо локального? Пример: Мой блог WordPress размещен на Сервере A, и я хочу использовать медиа-загрузчик для загрузки изображений на Сервер B вместо Сервера A.
Оба сервера работают на Ubuntu 10.04 LTS с веб-сервером nginx, и оба поддерживают ftp и sftp.

Я только что создал плагин, который делает это. Он не идеален, но выполняет свою работу.
Вы можете найти его на моем Github: https://github.com/pontusab/wp-ftp-media-library
Вам нужно изменить некоторые параметры в файле на строке 28:
/**
* Измените эти параметры в соответствии с вашим сервером
* Вам нужно изменить только те, что помечены (*)
* Если помечено (-), это необязательно
*/
$settings = array(
'host' => 'ip или hostname', // * хост FTP-сервера
'user' => 'username', // * пользователь FTP
'pass' => 'password', // * пароль FTP
'cdn' => 'cdn.example.com', // * Это должно быть доменное имя или поддомен, указывающий на корень загрузок
'path' => '/', // - путь FTP, по умолчанию корень (/). Измените здесь и добавьте директорию на FTP-сервере,
'base' => $upload_dir['basedir'] // Базовая директория на локальной машине
);
Что делает этот плагин: он меняет структуру загрузки с /год/месяц на загрузку только на локальную машину, в нашем случае Сервер А. Затем он использует 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, подключенный через FUSE или что-то вроде Amazon S3.

это сработало отлично, загрузка проходит нормально, но появилась ошибка Warning: ftp_put() [function.ftp-put]: Не удалось создать файл. в /home/xxx..../plugin_file.php на строке 99

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

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

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

Я не могу использовать SSHFS или FTPFS, потому что мой хостинг не поддерживает FUSE

Тогда смените хостинг. Основная проблема с реализацией вашего запроса - не часть загрузки на другой сервер (можно просто скопировать код из плагинов, которые загружают на CDN), а как потом получать эти файлы для отдачи. Без доступа на уровне файловой системы к серверу B, Apache не сможет отдавать файлы, поэтому вам придется сделать сервер B доступным для веба, но тогда вы можете просто перенести WordPress туда. Вы действительно не предоставили достаточно деталей о вашей ситуации. Пожалуйста, обновите вопрос со всеми соответствующими деталями, если хотите получить ответ.
