Încarcă imagini pe server-ul la distanță

28 nov. 2012, 14:13:50
Vizualizări: 25.7K
Voturi: 14

Folosesc WordPress media uploader pentru a încărca imagini și mă întrebam dacă există vreo modalitate de a face ca acesta să încarce pe serverul meu la distanță în loc de serverul local? Exemplu: Blogul meu WordPress este găzduit pe Serverul A și vreau să folosesc media uploader pentru a încărca imagini pe Serverul B în loc de Serverul A.

Ambele servere rulează Ubuntu 10.04 LTS cu nginx ca server web și ambele suportă ftp și sftp.

4
Comentarii

Care sunt opțiunile tale de a te conecta la server? FTP, API sau SSH? pe serverul unde vrei să stochezi conținutul tău

Pontus Abrahamsson Pontus Abrahamsson
2 ian. 2013 15:35:08

Singurele mele opțiuni de conectare la server sunt FTP și SSH

Ruriko Ruriko
3 ian. 2013 02:56:48

Folosește pluginul hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/

saman m saman m
12 aug. 2018 22:10:19

Înțeleg că OP a menționat că accesul la API nu este o opțiune, însă pe majoritatea site-urilor accesibile, noul API WordPress este întotdeauna disponibil. Deoarece acesta este un thread vechi, am crezut că merită menționat pentru alți vizitatori. De exemplu, dacă poți accesa site-ul web, de obicei poți accesa și API-ul. Exemple legate de media: https://developer.wordpress.org/rest-api/reference/media/

ryanm ryanm
2 oct. 2018 19:00:02
Toate răspunsurile la întrebare 4
2
16

Tocmai am construit un plugin care face acest lucru. Nu este perfect, dar își face treaba.

Îl puteți găsi pe Github-ul meu: https://github.com/pontusab/wp-ftp-media-library

Deci, trebuie să schimbați câteva lucruri în fișier la linia 28:

/**
     * Schimbați aceste setări pentru a se potrivi cu serverul dumneavoastră
     * Trebuie să modificați doar cele marcate cu (*)
     * Dacă sunt marcate cu (-) sunt opționale
     */

    $settings = array(
        'host'    =>    'ip sau hostname',           // * hostname-ul serverului FTP
        'user'    =>    'username',                 // * utilizatorul FTP
        'pass'    =>    'password',                 // * parola FTP
        'cdn'     =>    'cdn.example.com',          // * Trebuie să fie un domeniu sau subdomeniu care indică spre root-ul upload-urilor
        'path'    =>    '/',                        // - calea FTP, implicit este root (/). Modificați aici și adăugați directorul pe serverul FTP,
        'base'    =>    $upload_dir['basedir']      // Directorul de bază pe mașina locală
    );

Ceea ce face acest plugin este să schimbe structura de încărcare din /an/lună pentru a încărca doar pe mașina locală, în cazul nostru Serverul A. Apoi folosește php pentru a se conecta la FTP prin: ftp_connect. Funcția este declanșată când wp_generate_attachment_metadata rulează. Apoi face o verificare în folderul de upload pentru a vedea dacă există imagini, iar dacă da, le va încărca pe toate pe serverul FTP prin ftp_put. După ce încărcarea este finalizată, fișierele vor fi șterse de pe mașina locală folosind funcția unlink.

Apoi, plugin-ul schimbă URL-ul imaginilor la adresa IP "publică" sau hostname-ul care indică spre serverul FTP. Vă sugerez să folosiți ceva de genul static.mydomain.com sau cdn.mydomai.com. Acestea trebuie să indice spre serverul FTP (Serverul B), ceea ce vă permite să încărcați imaginile de pe serverul FTP.

După cum spun și alți membri, nu ar trebui să folosiți un server FTP pentru asta, este mai bine cu un CDN real, montat prin fuse sau ceva de genul Amazon S3.

3 ian. 2013 19:15:36
Comentarii

a funcționat perfect, încărcarea este ok dar am primit o eroare: Warning: ftp_put() [function.ftp-put]: Could not create file. in /home/xxx..../plugin_file.php la linia 99

Fatih Toprak Fatih Toprak
23 iun. 2013 13:12:10

@Pontus Abrahamsson, Mulțumesc pentru această soluție excelentă. Totuși, cum pot dezactiva funcționalitatea ca să trimită fiecare fișier media de pe server pe celălalt server? Vreau doar ca fișierele nou încărcate să fie transferate prin FTP.

user3605780 user3605780
17 aug. 2016 11:58:11
1

Se pare că dorești să folosești un CDN. Modul în care funcționează majoritatea CDN-urilor este să încarci imaginile local, iar acestea sunt oglindite la locația CDN. Apoi configurezi un domeniu care să indice conținutul CDN și rescrii URL-urile imaginilor pentru a utiliza acel domeniu în loc de URL-ul normal.

Există mai multe plugin-uri și servicii bune, deși eu am experiență doar cu W3TC și Cloudfront.

3 ian. 2013 22:35:05
Comentarii

Da, este similar cu CDN, cu excepția faptului că nu am suficient spațiu pe Serverul A deoarece are doar 5GB în timp ce Serverul B are 1TB de spațiu.

Ruriko Ruriko
4 ian. 2013 02:34:10
0

Trebuie să înțelegeți cum încarcă WP un fișier. O cerere POST trimite fișierul pe server, unde va fi stocat într-un folder temporar. După aceea, WP va testa fișierul încărcat, îl va copia în directorul de conținut și va șterge fișierul temporar.

Acesta este un proces foarte complex. Pentru imagini, puteți folosi hook-ul 'media_upload_file', apoi verificați dacă este o imagine. Dacă este o imagine, copiați-o cu WP_Filesystem pe serverul extern (folosiți metoda ftpext și furnizați credentialele FTP în opțiuni), altfel lăsați WP să gestioneze încărcarea cu wp_handle_upload(). În cazul copierii fișierului pe un server extern, trebuie să furnizați URL-ul și alte informații WP, astfel încât WP să poată configura datele (de exemplu, pentru postările de tip attachment).

Această sarcină nu se rezolvă cu doar câteva linii de cod. Dacă nu sunteți dezvoltator, este mai bine să angajați unul. Sau căutați un plugin care să facă asta pentru dumneavoastră.

4 ian. 2013 03:48:47
2
-1

Puteți utiliza SSHFS sau FTPFS pentru a monta un director de pe serverul remote în directorul de încărcări. În acest fel, nu va fi necesar să schimbați nimic în WordPress.

Dezavantajul este că fiecare acces la fișierul încărcat va fi mai lent, în funcție de locația serverului B.

3 ian. 2013 07:08:31
Comentarii

Nu pot folosi SSHFS sau FTPFS pentru că gazda mea nu suportă FUSE

Ruriko Ruriko
3 ian. 2013 07:34:01

Atunci schimbă gazda. Cea mai mare problemă în implementarea cererii tale nu este partea de încărcare pe celălalt server (doar copiază codul din plugin-urile care încarcă pe CDN), ci modul în care să le preiei de acolo pentru a le servi. Fără acces la nivel de sistem de fișiere pe serverul B, Apache nu va putea servi fișierele, așa că va trebui să faci serverul B accesibil pe web, dar atunci poți pur și simplu să muți WordPress-ul acolo. Chiar nu ai oferit suficiente detalii despre situația ta. Te rog să actualizezi întrebarea cu toate detaliile relevante dacă vrei să ai o șansă să primești un răspuns.

Mark Kaplun Mark Kaplun
3 ian. 2013 09:34:19