Prześlij obrazy na zdalny serwer

11

Używam programu do przesyłania multimediów Wordpress do przesyłania zdjęć i zastanawiałem się, czy istnieje sposób, aby przesłać je na mój zdalny serwer zamiast na serwer lokalny? Przykład: Mój blog wordpress jest hostowany na serwerze A i chcę użyć programu do przesyłania multimediów do przesyłania obrazów na serwer B zamiast na serwer A.

Na obu serwerach działa Ubuntu 10.04 LTS z nginx jako serwerem WWW i oba obsługują ftp i sftp.

Ruriko
źródło
Jakie masz opcje połączenia z serwerem? FTP, API czy ssh? na serwerze, na którym chcesz przechowywać swoje treści
Pontus Abrahamsson
Moje jedyne opcje połączenia z serwerem to FTP i SSH
Ruriko
Użyj wtyczki hacklog-remote-załącznik https://wordpress.org/plugins/hacklog-remote-attachment/
saman m
Rozumiem, że PO wskazało, że dostęp do interfejsu API nie jest opcją, jednak w większości dostępnych witryn nowy interfejs API WordPress jest zawsze dostępny. Ponieważ jest to stary wątek, pomyślałem, że wspomnę o tym innym użytkownikom. Na przykład, jeśli masz dostęp do strony internetowej, zazwyczaj możesz uzyskać dostęp do interfejsu API. Przykłady dotyczące mediów: developer.wordpress.org/rest-api/reference/media
ryanm

Odpowiedzi:

14

Właśnie zbudowałem wtyczkę, która to robi. Nie jest idealny, ale spełnia swoje zadanie.

Możesz go znaleźć w moim Githubie: https://github.com/pontusab/wp-ftp-media-library

Musisz więc zmienić niektóre rzeczy w pliku w wierszu 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 
    );

Co to jest plugin robi, zmienia structur przesyłania z / rok / miesiąc do przesłać tylko na lokalnym komputerze w naszym przypadku Serwer . Następnie używa php, aby połączyć się z ftp przez: ftp_connect . Funkcja jest uruchamiana po uruchomieniu wp_generate_attachment_metadata. Następnie uruchom sprawdzanie w folderze przesyłania, aby sprawdzić, czy są jakieś obrazy , jeśli tak, prześle je wszystkie na serwer ftp przez ftp_put . Po zakończeniu przesyłania pliki zostaną usunięte z komputera lokalnego za pomocą funkcji unlink .

Następnie wtyczka zmienia adres URL obrazów na „publiczny” adres IP lub nazwę hosta wskazaną na serwer ftp. Sugeruję użycie czegoś takiego jak static.mydomain.com lub cdn.mydomai.com. Należy je wskazać na serwer ftp (serwer B), co umożliwia ładowanie obrazów z serwera ftp.

Jak mówią inni członkowie, powinieneś użyć do tego serwera ftp, lepiej z prawdziwym cdn, montowanym przez bezpiecznik lub coś w rodzaju Amazon S3.

Pontus Abrahamsson
źródło
dobrze działało przesyłanie jest w porządku, ale wystąpił błąd Ostrzeżenie: ftp_put () [function.ftp-put]: Nie można utworzyć pliku. w /home/xxx..../plugin_file.php na linii 99
Fatih Toprak
@Pontus Abrahamsson, Dzięki za to świetne rozwiązanie. Jak jednak mogę wyłączyć, aby zaczął wysyłać każdy plik multimedialny z serwera na inny serwer? Chcę tylko, aby nowo przesłany plik był przesyłany przez ftp.
user3605780,
0

Brzmi prawie tak, jakbyś chciał po prostu użyć CDN. Większość sieci CDN działa w ten sposób, że ładujesz obrazy lokalnie i są one dublowane w lokalizacji CDN. Następnie skonfigurujesz domenę wskazującą na zawartość CDN i przepisz adresy URL obrazów, aby używać tej domeny zamiast normalnego adresu URL.

Istnieje kilka dobrych wtyczek i usług, chociaż mam tylko doświadczenie z W3TC i Cloudfront.

Ed Burns
źródło
Tak, jest podobny do CDN, z tym wyjątkiem, że nie mam wystarczającej ilości miejsca na serwerze A, ponieważ ma on tylko 5 GB, podczas gdy serwer B ma 1 TB miejsca.
Ruriko
0

Musisz zrozumieć, w jaki sposób WP przesyła plik. Żądanie POST wysyła plik na serwer, gdzie będzie przechowywany w folderze tymczasowym. Następnie WP przetestuje przesłany plik, skopiuje go do katalogu zawartości i usunie plik tymczasowy.

To bardzo złożony proces. W przypadku obrazów możesz podłączyć się do pliku „media_upload_file”, a następnie sprawdzić, czy jest to obraz. Jeśli jest to obraz, skopiuj go z WP_Filesystem na zewnętrzny serwer (użyj metody ftpext i podaj poświadczenia ftp w ramach opcji), w przeciwnym razie pozwól WP obsłużyć przesyłanie wp_handle_upload(). W przypadku skopiowania pliku na zewnętrzny serwer, musisz podać adres URL i tak dalej do WP, aby WP mógł skonfigurować dane (np. Dla postów załączników).

Ta praca nie jest wykonywana przy pomocy ręki pełnej kodu. Jeśli nie jesteś programistą, lepiej go wynająć. Lub poszukaj wtyczki, która zrobi to za Ciebie.

Ralf912
źródło
-1

Możesz użyć SSHFS lub FTPFS, aby zamontować katalog na zdalnym serwerze dla swojego katalogu przesyłania. W ten sposób nie będziesz musiał niczego zmieniać w samym WordPressie.

Wadą jest to, że każdy dostęp do przesłanego pliku będzie wolniejszy w zależności od tego, gdzie znajduje się serwer B.

Mark Kaplun
źródło
Nie mogę używać SSHFS ani FTPFS, ponieważ mój host nie obsługuje FUSE
Ruriko,
Następnie zmień hosty. Największym problemem związanym z realizacją twojego żądania nie jest przesłanie go do innej części serwera (wystarczy skopiować kod z wtyczek, które przesyłają do CDN), ale jak pobrać go stamtąd, aby go obsłużyć. Bez poziomu systemu plików dostęp do serwera B Apache nie będzie w stanie obsłużyć plików, więc będziesz musiał udostępnić serwer B sieci, ale wtedy możesz po prostu przenieść tam WordPress. Naprawdę nie podałeś wystarczająco dużo szczegółów na temat swojej sytuacji. Zaktualizuj pytanie ze wszystkimi istotnymi szczegółami, jeśli chcesz mieć szansę na uzyskanie odpowiedzi.
Mark Kaplun