Laden Sie Bilder auf den Remote-Server hoch


11

Ich verwende den Wordpress-Medien-Uploader zum Hochladen von Bildern und habe mich gefragt, ob es eine Möglichkeit gibt, diese auf meinen Remote-Server anstatt auf meinen lokalen Server hochzuladen. Beispiel: Mein WordPress-Blog wird auf Server A gehostet und ich möchte den Medien-Uploader verwenden, um Bilder anstelle von Server A auf Server B hochzuladen.

Beide Server führen Ubuntu 10.04 LTS mit nginx als Webserver aus und beide unterstützen ftp & sftp.


Welche Möglichkeiten haben Sie, um eine Verbindung zum Server herzustellen? FTP, API oder SSH? auf dem Server, auf dem Sie Ihre Inhalte speichern möchten
Pontus Abrahamsson

Meine einzige Möglichkeit, eine Verbindung zum Server
herzustellen,

Verwenden Sie das Hacklog-Remote-Anhangs-Plugin https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

Ich verstehe, dass das OP darauf hingewiesen hat, dass der API-Zugriff keine Option ist. Auf den meisten zugänglichen Websites ist die neue WordPress-API jedoch immer verfügbar. Da dies ein alter Thread ist, dachte ich, ich würde das für andere Besucher erwähnen. Wenn Sie beispielsweise auf die Website zugreifen können, können Sie normalerweise auf die API zugreifen. Beispiele für Medien: developer.wordpress.org/rest-api/reference/media
ryanm

Antworten:


14

Ich habe gerade ein Plugin erstellt, das dies tut. Es ist nicht perfekt, aber es macht seinen Job.

Sie finden es in meinem Github: https://github.com/pontusab/wp-ftp-media-library

Sie müssen also einige Dinge in der Datei in Zeile 28 ändern:

/**
     * 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 
    );

Dieses Plugin ändert die Upload-Struktur von / Jahr / Monat so, dass sie nur auf den lokalen Computer in unserem Fall Server A hochlädt . Dann verwendet es PHP, um eine Verbindung zum FTP herzustellen über: ftp_connect . Die Funktion wird ausgelöst, wenn wp_generate_attachment_metadata ausgeführt wird. Anschließend wird im Upload-Ordner überprüft , ob Bilder vorhanden sind. In diesem Fall werden alle Bilder über ftp_put auf den FTP-Server hochgeladen . Wenn der Upload abgeschlossen ist, werden die Dateien mithilfe der Funktion zum Aufheben der Verknüpfung vom lokalen Computer entfernt .

Dann ändert das Plugin die URL der Bilder in die "öffentliche" IP oder den Hostnamen, der auf den FTP-Server verweist. Ich schlage vor, etwas wie static.mydomain.com oder cdn.mydomai.com zu verwenden. Sie müssen auf den FTP-Server (Server B) verweisen, damit Sie die Bilder vom FTP-Server laden können.

Wie die anderen Mitglieder sagen, sollten Sie dafür keinen FTP-Server verwenden, es ist besser mit einem echten CDN, der durch eine Sicherung bereitgestellt wird oder so etwas wie Amazon S3.


Das Hochladen hat gut funktioniert, ist aber in Ordnung. Warnung: ftp_put () [function.ftp-put]: Datei konnte nicht erstellt werden. in /home/xxx..../plugin_file.php in Zeile 99
Fatih Toprak

@ Pontus Abrahamsson, Danke für diese großartige Lösung. Wie kann ich jedoch deaktivieren, dass jede Mediendatei auf dem Server an den anderen Server gesendet wird? Ich möchte nur, dass eine neu hochgeladene Datei über FTP übertragen wird.
user3605780

0

Es klingt fast so, als ob Sie nur ein CDN verwenden möchten. Die meisten CDNs funktionieren so, dass Sie Ihre Bilder lokal laden und sie am CDN-Speicherort gespiegelt werden. Anschließend richten Sie eine Domain ein, die auf den CDN-Inhalt verweist, und schreiben Ihre Bild-URLs neu, um diese Domain anstelle Ihrer normalen URL zu verwenden.

Es gibt mehrere gute Plugins und Dienste, obwohl ich nur Erfahrung mit W3TC und Cloudfront habe.


Ja, es ähnelt CDN, außer dass ich nicht genügend Speicherplatz auf Server A habe, da es nur 5 GB hat, während Server B 1 TB Speicherplatz hat.
Ruriko

0

Sie müssen verstehen, wie WP eine Datei hochlädt. Eine POST-Anforderung sendet die Datei an den Server, wo sie in einem temporären Ordner gespeichert wird. Danach testet WP die hochgeladene Datei, kopiert sie in das Inhaltsverzeichnis und löscht die temporäre Datei.

Dies ist ein sehr komplexer Prozess. Für Bilder können Sie sich in 'media_upload_file' einbinden und dann prüfen, ob es sich um ein Bild handelt. Wenn es sich um ein Image handelt, kopieren Sie es mit WP_Filesystem auf den externen Server (verwenden Sie die Methode ftpext und geben Sie Ihre FTP-Anmeldeinformationen innerhalb der Optionen an). Andernfalls kann WP den Upload mit ausführen wp_handle_upload(). Wenn Sie die Datei auf einen externen Server kopieren, müssen Sie die URL usw. an WP weitergeben, damit WP die Daten einrichten kann (z. B. für Anhangspostings).

Dieser Job wird nicht mit einer Hand voll Code erledigt. Wenn Sie kein Entwickler sind, sollten Sie einen einstellen. Oder suchen Sie nach einem Plugin, das dies für Sie erledigt.


-1

Sie können SSHFS oder FTPFS verwenden , um ein Verzeichnis auf dem Remote-Server für Ihr Upload-Verzeichnis bereitzustellen. Auf diese Weise müssen Sie in WordPress selbst nichts ändern.

Der Nachteil ist, dass jeder Zugriff auf die hochgeladene Datei langsamer ist, je nachdem, wo sich Server B befindet.


Ich kann SSHFS oder FTPFS nicht verwenden, da mein Host FUSE
Ruriko am

Dann wechseln Sie die Hosts. Das größte Problem bei der Implementierung Ihrer Anfrage ist nicht das Hochladen auf den anderen Serverteil (kopieren Sie einfach den Code von Plugins, die auf CDN hochgeladen werden), sondern wie Sie ihn von dort abrufen, um ihn zu bedienen. Ohne Dateisystemebene kann der Zugriff auf Server B Apache die Dateien nicht bereitstellen. Sie müssen also Server B für das Web zugänglich machen, aber dann können Sie einfach Ihr WordPress dorthin verschieben. Sie haben wirklich nicht genug Details zu Ihrer Situation angegeben. Bitte aktualisieren Sie die Frage mit allen relevanten Details, wenn Sie eine Antwort erhalten möchten.
Mark Kaplun
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.