Carica immagini sul server remoto


11

Sto usando l'uploader multimediale di Wordpress per caricare immagini e mi chiedevo se c'è un modo per farlo caricare sul mio server remoto invece che sul mio server locale? Esempio: il mio blog wordpress è ospitato sul server A e desidero utilizzare l'Uploader multimediale per caricare immagini sul server B anziché sul server A.

Entrambi i server eseguono Ubuntu 10.04 LTS con nginx come server Web ed entrambi supportano ftp e sftp.


Quali sono le opzioni su come connettersi al server? FTP, API o ssh? sul server in cui si desidera archiviare i contenuti
Pontus Abrahamsson,

Le mie uniche opzioni per connettermi al server sono FTP e SSH
Ruriko

Utilizza il plug-in hacklog-remote-allegato https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

Comprendo che l'OP ha indicato che l'accesso all'API non è un'opzione, tuttavia sulla maggior parte dei siti accessibili la nuova API di WordPress è sempre disponibile. Dal momento che questo è un vecchio thread, ho pensato di menzionarlo per gli altri visitatori. Ad esempio, se è possibile accedere al sito Web, in genere è possibile accedere all'API. Esempi riguardanti i media: developer.wordpress.org/rest-api/reference/media
ryanm

Risposte:


14

Ho appena creato un plugin che fa questo. Non è perfetto ma fa il suo lavoro.

Puoi trovarlo nel mio Github: https://github.com/pontusab/wp-ftp-media-library

Quindi è necessario modificare alcune cose all'interno del file nella riga 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 
    );

Ciò che questo plugin fa è, cambia lo structur di upload da / anno / mese solo caricati sulla macchina locale nel nostro caso Server A . Quindi utilizza php per connettersi a ftp tramite: ftp_connect . La funzione viene attivata quando wp_generate_attachment_metadata viene eseguito. Quindi esegue un controllo nella cartella di caricamento per vedere se ci sono immagini , in tal caso le caricherà tutte sul server ftp tramite ftp_put . Al termine del caricamento, i file verranno rimossi dal computer locale utilizzando la funzione unlink .

Quindi il plugin cambia l'URL delle immagini in ip "pubblico" o nome host puntato al server ftp. Suggerisco di usare qualcosa come static.mydomain.com o cdn.mydomai.com. Devono essere indirizzati al server ftp (Server B), ciò consente di caricare le immagini dal server ftp.

Come dicono gli altri membri, dovresti usare un ftp-server per questo, è meglio con un vero cdn, montato da miccia o qualcosa come Amazon S3.


che ha funzionato benissimo il caricamento è ok ma ha ricevuto un errore Avviso: ftp_put () [function.ftp-put]: Impossibile creare il file. in /home/xxx..../plugin_file.php sulla linea 99
Fatih Toprak il

@Pontus Abrahamsson, grazie per questa ottima soluzione. Tuttavia, come posso disabilitare che inizi a inviare tutti i file multimediali sul server all'altro server? Voglio solo trasferire un file appena caricato tramite ftp.
user3605780,

0

Sembra quasi che tu voglia semplicemente usare un CDN. Il modo in cui funziona la maggior parte delle CDN è caricare le immagini localmente e vengono specchiate nella posizione della CDN. Quindi imposta un dominio che punta al contenuto della CDN e riscrivi gli URL delle immagini per utilizzare quel dominio anziché il tuo normale URL.

Esistono diversi buoni plug-in e servizi, anche se ho solo esperienza con W3TC e Cloudfront.


Sì, è simile a CDN, tranne per il fatto che non ho abbastanza spazio sul server A perché ha solo 5 GB mentre il server B ha 1 TB di spazio.
Ruriko,

0

Devi capire come WP carica un file. Una richiesta POST invia il file al server dove verrà archiviato in una cartella temporanea. Successivamente, WP testerà il file caricato, lo copierà nella directory dei contenuti ed eliminerà il file temporaneo.

Questo è un processo molto complesso. Per le immagini, puoi collegarti a 'media_upload_file', quindi controllare se si tratta di un'immagine. Se si tratta di un'immagine, copiarla con WP_Filesystem sul server esterno (utilizzare il metodo ftpext e fornire le credenziali ftp all'interno delle opzioni), altrimenti lasciare che WP gestisca il caricamento wp_handle_upload(). In caso di copia del file su un server esterno, è necessario fornire l'URL e così via a WP, in modo che WP possa impostare i dati (ad es. Per i post degli allegati).

Questo lavoro non viene svolto con una mano piena di codice. Se non sei uno sviluppatore, meglio assumerne uno. Oppure cerca un plugin che lo farà per te.


-1

Puoi utilizzare SSHFS o FTPFS per montare una directory sul server remoto per la tua directory di upload. In questo modo non dovrai cambiare nulla in WordPress stesso.

Lo svantaggio è che ogni accesso al file caricato sarà più lento a seconda di dove risiede il server B.


Non riesco a utilizzare SSHFS o FTPFS perché il mio host non supporta FUSE
Ruriko

Quindi cambia host. Il problema più grande con l'implementazione della tua richiesta non è il caricamento nell'altra parte del server (basta copiare il codice dai plugin che caricano su CDN), ma come recuperarlo da lì per servirlo. Senza l'accesso a livello di file system al server B apache non sarà in grado di servire i file, quindi dovrai rendere il server B accessibile al web, ma poi puoi semplicemente spostare WordPress lì. Non hai dato abbastanza dettagli sulla tua situazione. Aggiorna la domanda con tutti i dettagli pertinenti se desideri avere la possibilità di ottenere una risposta.
Mark Kaplun,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.