Caricamento immagini su server remoto

28 nov 2012, 14:13:50
Visualizzazioni: 25.7K
Voti: 14

Sto utilizzando l'uploader dei media di WordPress per caricare le immagini e mi chiedevo se ci fosse un modo per farle caricare sul mio server remoto invece che sul server locale. Esempio: Il mio blog WordPress è ospitato sul Server A e voglio utilizzare l'uploader dei media per caricare le immagini sul Server B invece che sul Server A.

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

4
Commenti

Quali sono le tue opzioni per connetterti al server? FTP, API o SSH? sul server dove vuoi archiviare i tuoi contenuti

Pontus Abrahamsson Pontus Abrahamsson
2 gen 2013 15:35:08

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

Ruriko Ruriko
3 gen 2013 02:56:48

Usa il plugin hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/

saman m saman m
12 ago 2018 22:10:19

Capisco che l'OP abbia indicato che l'accesso all'API non è un'opzione, tuttavia sulla maggior parte dei siti accessibili la nuova API di WordPress è sempre disponibile. Poiché questo è un thread vecchio, ho pensato di menzionarlo per altri visitatori. Ad esempio, se puoi accedere al sito web, in genere puoi accedere all'API. Esempi relativi ai media: https://developer.wordpress.org/rest-api/reference/media/

ryanm ryanm
2 ott 2018 19:00:02
Tutte le risposte alla domanda 4
2
16

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

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

Devi modificare alcune cose all'interno del file alla riga 28:

/**
     * Cambia questi valori per adattarli al tuo server
     * Devi modificare solo quelli contrassegnati con (*)
     * Se contrassegnati con (-) sono opzionali
     */

    $settings = array(
        'host'    =>    'ip o hostname',            // * hostname del server ftp
        'user'    =>    'username',                 // * utente ftp
        'pass'    =>    'password',                 // * password ftp
        'cdn'     =>    'cdn.example.com',         // * Deve essere un dominio o sottodominio puntato alla root degli uploads
        'path'    =>    '/',                       // - percorso ftp, di default è root (/). Modifica qui e aggiungi la directory sul server ftp,
        'base'    =>    $upload_dir['basedir']     // Basedir locale
    );

Questo plugin modifica la struttura di upload da /anno/mese per caricare solo sulla macchina locale nel nostro caso Server A. Poi usa php per connettersi all'ftp tramite: ftp_connect. La funzione viene attivata quando viene eseguito wp_generate_attachment_metadata. Esegue poi un controllo nella cartella di upload per verificare la presenza di immagini, se presenti le carica tutte sul server ftp tramite ftp_put. Al termine del caricamento i file vengono rimossi dalla macchina locale usando la funzione unlink.

Successivamente il plugin cambia l'url delle immagini con l'ip "pubblico" o l'hostname puntato al server ftp. Suggerisco di usare qualcosa come static.miodominio.com o cdn.miodominio.com. Devono essere puntati al server ftp (Server B) per permettere il caricamento delle immagini dal server ftp.

Come dicono altri membri, non dovresti usare un server ftp per questo, è meglio un vero CDN, montato via fuse o qualcosa come Amazon S3.

3 gen 2013 19:15:36
Commenti

ha funzionato benissimo, il caricamento va bene ma ho ricevuto un errore: Avviso: ftp_put() [function.ftp-put]: Impossibile creare il file. in /home/xxx..../plugin_file.php alla riga 99

Fatih Toprak Fatih Toprak
23 giu 2013 13:12:10

@Pontus Abrahamsson, Grazie per questa ottima soluzione. Tuttavia, come posso disabilitare l'invio di ogni file multimediale sul server all'altro server? Vorrei solo che i file appena caricati vengano trasferiti via FTP.

user3605780 user3605780
17 ago 2016 11:58:11
1

Sembra quasi che tu voglia semplicemente utilizzare una CDN. Il modo in cui funziona la maggior parte delle CDN è che carichi le immagini localmente e queste vengono replicate nella posizione della CDN. Poi configuri un dominio che punta ai contenuti della CDN e riscrivi gli URL delle tue immagini per utilizzare quel dominio invece del tuo URL normale.

Esistono diversi plugin e servizi validi, anche se ho esperienza solo con W3TC e Cloudfront.

3 gen 2013 22:35:05
Commenti

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

Ruriko Ruriko
4 gen 2013 02:34:10
0

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

Questo è un processo molto complesso. Per le immagini, puoi agganciarti a 'media_upload_file', poi verificare se si tratta di un'immagine. Se è un'immagine, copiala con WP_Filesystem sul server esterno (usa il metodo ftpext e fornisci le credenziali FTP all'interno delle opzioni), altrimenti lascia che WordPress gestisca il caricamento con wp_handle_upload(). Nel caso in cui il file venga copiato su un server esterno, devi fornire l'URL e così via a WordPress, in modo che possa impostare i dati (ad esempio per i post di tipo attachment).

Questo lavoro non si fa con poche righe di codice. Se non sei uno sviluppatore, è meglio assumerne uno. Oppure cerca un plugin che faccia questo per te.

4 gen 2013 03:48:47
2
-1

Puoi utilizzare SSHFS o FTPFS per montare una directory sul server remoto come directory degli upload. In questo modo non dovrai modificare nulla in WordPress stesso.

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

3 gen 2013 07:08:31
Commenti

Non posso usare SSHFS o FTPFS perché il mio host non supporta FUSE

Ruriko Ruriko
3 gen 2013 07:34:01

Allora cambia host. Il problema principale nell'implementare la tua richiesta non è la parte di upload sull'altro server (basta copiare il codice dai plugin che caricano su CDN), ma come recuperare i file da lì per servirli. Senza 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 a quel punto potresti semplicemente spostarci il tuo WordPress. Non hai davvero fornito abbastanza dettagli sulla tua situazione. Per favore aggiorna la domanda con tutti i dettagli rilevanti se vuoi avere una possibilità di ottenere una risposta.

Mark Kaplun Mark Kaplun
3 gen 2013 09:34:19