Subir imágenes al servidor remoto

11

Estoy usando el cargador de medios de Wordpress para cargar imágenes y me preguntaba si hay una manera de hacerlo cargar en mi servidor remoto en lugar de en mi servidor local. Ejemplo: Mi blog de WordPress está alojado en el Servidor A y quiero usar el cargador de medios para cargar imágenes en el Servidor B en lugar del Servidor A.

Ambos servidores ejecutan Ubuntu 10.04 LTS con nginx como servidor web y ambos admiten ftp y sftp.

Ruriko
fuente
¿Cuáles son sus opciones de cómo conectarse al servidor? FTP, API o ssh? en el servidor donde desea almacenar su contenido
Pontus Abrahamsson
Mis únicas opciones para conectarme al servidor son FTP y SSH
Ruriko
Use el complemento hacklog-remote-attach plugin https://wordpress.org/plugins/hacklog-remote-attachment/
saman m
Entiendo que el OP indicó que el acceso a la API no es una opción, sin embargo, en los sitios más accesibles, la nueva API de WordPress siempre está disponible. Dado que este es un hilo viejo, pensé que lo mencionaría para otros visitantes. Por ejemplo, si puede acceder al sitio web, normalmente puede acceder a la API. Ejemplos relacionados con los medios: developer.wordpress.org/rest-api/reference/media
ryanm

Respuestas:

14

Acabo de construir un complemento que hace esto. No es perfecto pero hace su trabajo.

Puedes encontrarlo en mi Github: https://github.com/pontusab/wp-ftp-media-library

Por lo tanto, debe cambiar algunas cosas dentro del archivo en la fila 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 
    );

Lo que hace este plugin es, cambia la estructuración de carga / año / mes para que solo suba en la máquina local en nuestro caso el servidor A . Luego usa php para conectarse al ftp a través de: ftp_connect . La función se activa cuando se ejecuta wp_generate_attachment_metadata. Luego ejecuta una comprobación en la carpeta de carga para ver si hay imágenes , de ser así, las cargará todas al servidor ftp a través de ftp_put . Cuando se complete la carga, los archivos se eliminarán de la máquina local utilizando la función desvincular .

Luego, el complemento cambia la url de las imágenes a la IP "pública" o al nombre de host que apunta al servidor ftp. Sugiero usar algo como static.mydomain.com o cdn.mydomai.com. Deben apuntar al servidor ftp (Servidor B), esto le permite cargar las imágenes desde el servidor ftp.

Como los otros miembros dicen que debe usar un servidor ftp para esto, es mejor con un cdn real, montado con fusible o algo así como Amazon S3.

Pontus Abrahamsson
fuente
funcionó muy bien, la carga está bien pero recibió 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
Fatih Toprak
@ Pontus Abrahamsson, gracias por esta gran solución. Sin embargo, ¿cómo puedo desactivar que empiece a enviar todos los archivos multimedia del servidor al otro servidor? Solo quiero que un archivo recién cargado se transfiera a través de ftp.
user3605780
0

Casi parece que solo quieres usar un CDN. La forma en que funcionan la mayoría de las CDN es que carga sus imágenes localmente, y se reflejan en la ubicación de la CDN. Luego configura un dominio que apunta al contenido de CDN y reescribe las URL de sus imágenes para usar ese dominio en lugar de su URL normal.

Hay varios buenos complementos y servicios, aunque solo tengo experiencia con W3TC y Cloudfront.

Ed Burns
fuente
Sí, es similar a CDN, excepto que no tengo suficiente espacio en el servidor A porque solo tiene 5 GB, mientras que el servidor B tiene 1 TB de espacio.
Ruriko
0

Tienes que entender cómo WP sube un archivo. Una solicitud POST envía el archivo al servidor donde se almacenará en una carpeta temporal. Después de eso, WP probará el archivo cargado, lo copiará en el directorio de contenido y eliminará el archivo temporal.

Este es un proceso muy complejo. Para las imágenes, puede conectarlo a 'media_upload_file' y luego verificar si es una imagen. Si es una imagen, cópiela con WP_Filesystem en el servidor externo (use el método ftpext y proporcione sus credenciales ftp dentro de las opciones), de lo contrario deje que WP se encargue de la carga wp_handle_upload(). En caso de copiar el archivo a un servidor externo, debe proporcionar la URL y así sucesivamente a WP, para que WP pueda configurar los datos (por ejemplo, para publicaciones adjuntas).

Este trabajo no se hace con una mano llena de código. Si no eres desarrollador, mejor contrata uno. O busque un complemento que lo haga por usted.

Ralf912
fuente
-1

Puede usar SSHFS o FTPFS para montar un directorio en el servidor remoto para su directorio de cargas. De esta manera, no necesitará cambiar nada en WordPress.

El inconveniente es que cada acceso al archivo cargado será más lento dependiendo de dónde resida el servidor B.

Mark Kaplun
fuente
No puedo usar SSHFS o FTPFS porque mi host no admite FUSE
Ruriko
Luego cambie de host. El mayor problema con la implementación de su solicitud no es la carga a la otra parte del servidor (solo copie el código de los complementos que se cargan a CDN), sino cómo obtenerlo desde allí para servirlo. Sin el acceso a nivel del sistema de archivos al servidor B, apache no podrá servir los archivos, por lo que tendrá que hacer que el servidor B sea accesible a la web, pero luego puede mover su WordPress allí. Realmente no dio suficientes detalles sobre su situación. Actualice la pregunta con todos los detalles relevantes si desea tener la oportunidad de obtener una respuesta.
Mark Kaplun