Caricamento immagini su server remoto
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.

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.

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

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.

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.


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.
