Uzak sunucuya görüntü yükleyin


11

Görüntüleri yüklemek için Wordpress medya yükleyicisini kullanıyorum ve yerel sunucum yerine uzak sunucuma yüklemesini sağlamanın bir yolu olup olmadığını merak ediyordum? Örnek: Wordpress blogum Sunucu A'da barındırılıyor ve görüntüleri Sunucu A yerine Sunucu B'ye yüklemek için medya yükleyiciyi kullanmak istiyorum.

Her iki sunucu da web sunucusu olarak nginx ile Ubuntu 10.04 LTS çalıştırıyor ve her ikisi de ftp & sftp'yi destekliyor.


Sunucuya bağlanma seçenekleriniz nelerdir? FTP, API veya ssh? içeriğinizi saklamak istediğiniz sunucuda
Pontus Abrahamsson

Sunucuya bağlanmak için tek seçeneğim FTP ve SSH
Ruriko

Hacklog-remote-attachment eklentisini kullanın https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

OP'nin API erişiminin bir seçenek olmadığını belirtti, ancak çoğu erişilebilir sitede yeni WordPress API'sı her zaman kullanılabilir. Bu eski bir iş parçacığı olduğundan, diğer ziyaretçiler için bundan söz edeceğini düşündüm. Örneğin, web sitesine erişebiliyorsanız, genellikle API'ya erişebilirsiniz. Medya ile ilgili örnekler: developer.wordpress.org/rest-api/reference/media
ryanm

Yanıtlar:


14

Bunu yapan bir eklenti oluşturdum. Mükemmel değil ama işini yapıyor.

Bunu Github'ımda bulabilirsiniz: https://github.com/pontusab/wp-ftp-media-library

Bu nedenle, satır 28'deki dosyadaki bazı şeyleri değiştirmeniz gerekir:

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

Bu eklentinin yaptığı, sunucu A sunucumuzda yalnızca yerel makineye yüklemek için yükleme yapısını / yıl / ay olarak değiştirmektir . Sonra ftp'ye ftp_connect ile bağlanmak için php kullanır . Wp_generate_attachment_metadata çalıştırıldığında işlev tetiklenir. Daha sonra herhangi bir görüntü olup olmadığını görmek için yükleme klasöründe bir kontrol gerçekleştirir , eğer öyleyse hepsini ftp_put aracılığıyla ftp sunucusuna yükler . Yükleme tamamlandığında dosyalar bağlantıyı kaldırma işlevi kullanılarak yerel makineden kaldırılır .

Daha sonra eklenti, görüntülerin url'sini ftp sunucusuna işaret eden "public" ip veya ana bilgisayar adına değiştirir. Static.mydomain.com veya cdn.mydomai.com gibi bir şey kullanmanızı öneririm. Görüntüleri ftp sunucusundan yüklemenizi sağlayan ftp sunucusuna (Sunucu B) yönlendirilmesi gerekir.

Diğer üyelerin bunun için bir ftp sunucusu kullanmanız gerektiğini söylediği gibi, gerçek bir cdn ile daha iyidir, Sigorta veya Amazon S3 gibi bir şey ile monte edilir.


yükleme harika çalıştı ama bir hata var Uyarı: ftp_put () [function.ftp-put]: Dosya oluşturulamadı. 99. satırdaki /home/xxx..../plugin_file.php adresinde
Fatih Toprak

@Pontus Abrahamsson, Bu harika çözüm için teşekkürler. Ancak, sunucudaki her medya dosyasını diğer sunucuya göndermeye başlamasını nasıl devre dışı bırakabilirim? Sadece yeni yüklenen bir dosyanın ftp ile aktarılmasını istiyorum.
user3605780

0

Neredeyse bir CDN kullanmak istediğiniz gibi geliyor. Çoğu CDN'nin çalışma şekli, görüntülerinizi yerel olarak yüklemeniz ve CDN konumuna yansıtılmalarıdır. Ardından, CDN içeriğine işaret eden bir alan oluşturursunuz ve resim URL'lerinizi normal URL'niz yerine bu alan adını kullanacak şekilde yeniden yazarsınız.

Sadece W3TC ve Cloudfront ile deneyimim olmasına rağmen, birkaç iyi eklenti ve hizmet var.


Evet, Sunucu A'da yeterli alanım olmadığı için CDN'ye benzer, çünkü Sunucu B'de 1 TB alan varsa sadece 5GB vardır.
Ruriko

0

WP'nin bir dosyayı nasıl yüklediğini anlamalısınız. Bir POST isteği dosyayı geçici bir klasörde saklanacağı sunucuya gönderir. Bundan sonra, WP yüklenen dosyayı test eder, içerik dizinine kopyalar ve geçici dosyayı siler.

Bu çok karmaşık bir süreç. Görüntüler için 'media_upload_file' içine bağlanabilir, ardından bir görüntü olup olmadığını kontrol edebilirsiniz. Bir görüntü ise, WP_Filesystem ile harici sunucuya kopyalayın (ftpext yöntemini kullanın ve seçenekler içinde ftp kimlik bilgilerinizi sağlayın), aksi takdirde WP'nin yüklemeyi işlemesine izin verin wp_handle_upload(). Dosyayı harici bir sunucuya kopyalamak durumunda, URL'yi WP'ye vermeniz gerekir, böylece WP verileri ayarlayabilir (örn. Ek postaları için).

Bu iş kod dolu bir el ile yapılmaz. Bir geliştirici değilseniz, daha iyi bir işe alın. Veya bunu sizin için yapacak bir eklenti arayın.


-1

Yüklemeler dizininiz için uzak sunucuya bir dizin bağlamak için SSHFS veya FTPFS kullanabilirsiniz . Bu şekilde WordPress'in kendisinde hiçbir şeyi değiştirmenize gerek kalmayacak.

Dezavantajı, yüklenen dosyaya her erişimin B sunucusunun bulunduğu yere bağlı olarak daha yavaş olmasıdır.


SSHFS veya FTPFS'yi kullanamıyorum çünkü sunucum FUSE özelliğini desteklemiyor
Ruriko

Ardından ana bilgisayarları değiştirin. İsteğinizi yerine getirmeyle ilgili en büyük sorun, diğer sunucu bölümüne yükleme değil (yalnızca CDN'ye yüklenen eklentilerden kodu kopyalayın), ancak onu sunmak için oradan nasıl getireceğinizdir. Dosya sistemi düzeyinde sunucu B'ye erişim olmadan apache dosyaları sunamaz, bu nedenle sunucu B'yi web için erişilebilir hale getirmeniz gerekir, ancak daha sonra WordPress'inizi oraya taşıyabilirsiniz. Durumunuz hakkında gerçekten yeterince ayrıntı vermediniz. Yanıt alma şansınız varsa lütfen soruyu ilgili tüm ayrıntılarla güncelleyin.
Mark Kaplun
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.