Subir imágenes a servidor remoto
Estoy usando el cargador de medios de WordPress para subir imágenes y me preguntaba si hay alguna manera de hacer que suba al servidor remoto en lugar de mi servidor local. Por ejemplo: Mi blog de WordPress está alojado en el Servidor A y quiero usar el cargador de medios para subir imágenes al Servidor B en lugar del Servidor A.
Ambos servidores ejecutan Ubuntu 10.04 LTS con nginx como servidor web y ambos soportan FTP y SFTP.

Acabo de construir un plugin que hace esto. No es perfecto pero cumple su función.
Puedes encontrarlo en mi Github: https://github.com/pontusab/wp-ftp-media-library
Así que necesitas cambiar algunas cosas dentro del archivo en la línea 28:
/**
* Cambia esto para que coincida con tu servidor
* Solo necesitas cambiar los marcados con (*)
* Si están marcados con (-) son opcionales
*/
$settings = array(
'host' => 'ip o nombre del host', // * el nombre del host del servidor ftp
'user' => 'usuario', // * usuario ftp
'pass' => 'contraseña', // * contraseña ftp
'cdn' => 'cdn.ejemplo.com', // * Esto tiene que ser un dominio o subdominio apuntado a la raíz de las subidas
'path' => '/', // - ruta ftp, por defecto es raíz (/). Cambia aquí y añade el directorio en el servidor ftp,
'base' => $upload_dir['basedir'] // Directorio base local
);
Lo que hace este plugin es cambiar la estructura de subida de /año/mes para solo subir localmente en nuestra máquina, en este caso Servidor A. Luego usa php para conectarse al ftp mediante: ftp_connect. La función se ejecuta cuando wp_generate_attachment_metadata corre. Luego realiza una comprobación en la carpeta de subidas para ver si hay imágenes, si es así las subirá todas al servidor ftp mediante ftp_put. Cuando la subida se completa, los archivos se eliminan de la máquina local usando la función unlink.
Luego el plugin cambia la url de las imágenes a la ip "pública" o nombre del host apuntando al servidor ftp. Sugiero usar algo como static.midominio.com o cdn.midominio.com. Necesitan estar apuntados al servidor ftp (Servidor B) esto te permite cargar las imágenes desde el servidor ftp.
Como dicen otros miembros, no deberías usar un servidor ftp para esto, es mejor con un CDN real, montado por fuse o algo como Amazon S3.

eso funcionó genial, la carga está bien pero obtuve un error Advertencia: ftp_put() [function.ftp-put]: No se pudo crear el archivo. en /home/xxx..../plugin_file.php en la línea 99

Suena casi como si solo quisieras usar una CDN. La forma en que funcionan la mayoría de las CDN es que cargas tus imágenes localmente, y estas se reflejan en la ubicación de la CDN. Luego configuras un dominio que apunta al contenido de la CDN y reescribes las URLs de tus imágenes para usar ese dominio en lugar de tu URL normal.
Existen varios buenos plugins y servicios, aunque solo tengo experiencia con W3TC y Cloudfront.

Debes entender cómo WordPress sube un archivo. Una solicitud POST envía el archivo al servidor donde se almacenará en una carpeta temporal. Después de eso, WordPress verificará el archivo subido, lo copiará en el directorio de contenido y eliminará el archivo temporal.
Este es un proceso muy complejo. Para imágenes, puedes engancharte al hook 'media_upload_file', luego verificar si es una imagen. Si es una imagen, cópiala con WP_Filesystem al servidor externo (usa el método ftpext y proporciona tus credenciales FTP dentro de las opciones), de lo contrario deja que WordPress maneje la subida con wp_handle_upload()
.
En caso de copiar el archivo a un servidor externo, debes proporcionar la URL y demás a WordPress, para que pueda configurar los datos (por ejemplo, para posts de adjuntos).
Este trabajo no se hace con un puñado de código. Si no eres desarrollador, mejor contrata a uno. O busca un plugin que haga esto por ti.


Entonces cambia de host. El mayor problema con implementar tu solicitud no es la parte de subida al otro servidor (solo copia código de plugins que suben a CDN), sino cómo obtener los archivos desde allí para servirlos. Sin acceso a nivel de sistema de archivos al servidor B, Apache no podrá servir los archivos, por lo que tendrás que hacer que el servidor B sea accesible desde la web, pero entonces podrías simplemente mover tu WordPress allí. Realmente no proporcionaste suficientes detalles sobre tu situación. Por favor actualiza la pregunta con todos los detalles relevantes si quieres tener la oportunidad de obtener una respuesta.
