Unggah gambar ke server jarak jauh

11

Saya menggunakan pengunggah media Wordpress untuk mengunggah gambar dan saya bertanya-tanya apakah ada cara untuk membuatnya mengunggah ke server jarak jauh saya alih-alih server lokal saya? Contoh: Blog wordpress saya di-host di Server A dan saya ingin menggunakan pengunggah media untuk mengunggah gambar ke Server B alih-alih Server A.

Kedua server menjalankan Ubuntu 10,04 LTS dengan nginx sebagai server web dan keduanya mendukung ftp & sftp.

Ruriko
sumber
Apa pilihan Anda tentang bagaimana terhubung ke server? FTP, API, atau ssh? di server tempat Anda ingin menyimpan konten Anda
Pontus Abrahamsson
Satu-satunya pilihan saya untuk terhubung ke server adalah FTP & SSH
Ruriko
Gunakan plugin hacklog-remote-attachment https://wordpress.org/plugins/hacklog-remote-attachment/
saman m
Saya memahami OP yang mengindikasikan bahwa akses API bukanlah suatu opsi, namun pada sebagian besar situs yang dapat diakses, API WordPress baru selalu tersedia. Karena ini adalah utas lama, saya pikir saya akan menyebutkan itu untuk pengunjung lain. Misalnya, jika Anda dapat mengakses situs web, Anda biasanya dapat mengakses API. Contoh tentang media: developer.wordpress.org/rest-api/reference/media
ryanm

Jawaban:

14

Saya baru saja membangun sebuah plugin yang melakukan ini. Itu tidak sempurna tetapi melakukan tugasnya.

Anda dapat menemukannya di Github saya: https://github.com/pontusab/wp-ftp-media-library

Jadi, Anda perlu mengubah beberapa hal di dalam file di baris 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 
    );

Apa plugin ini dilakukan adalah, perubahan upload structur dari / tahun / bulan hanya upload pada mesin lokal dalam kasus kami Server A . Kemudian ia menggunakan php untuk terhubung ke ftp melalui: ftp_connect . Fungsi menyala ketika wp_generate_attachment_metadata berjalan. Kemudian jalankan tanda centang di folder unggah untuk melihat apakah ada gambar , jika demikian akan mengunggah semuanya ke server-ftp melalui ftp_put . Ketika unggahan selesai, file akan dihapus dari mesin lokal menggunakan fungsi hapus tautan .

Kemudian plugin mengubah url gambar ke ip "publik" atau nama host yang diarahkan ke ftp-server. Saya sarankan menggunakan sesuatu seperti static.mydomain.com atau cdn.mydomai.com. Mereka perlu diarahkan ke ftp-server (Server B) ini memungkinkan Anda untuk memuat gambar dari ftp-server.

Seperti anggota lain mengatakan Anda harus menggunakan ftp-server untuk ini, lebih baik dengan cdn nyata, Dipasang oleh sekering atau sesuatu seperti Amazon S3.

Pontus Abrahamsson
sumber
yang berfungsi mengunggah hebat tidak masalah tetapi mendapat kesalahan Peringatan: ftp_put () [function.ftp-put]: Tidak dapat membuat file. di /home/xxx..../plugin_file.php on line 99
Fatih Toprak
@Pontus Abrahamsson, Terima kasih atas solusi hebat ini. Namun bagaimana saya bisa menonaktifkannya mulai mengirim setiap file media di server ke server lain? Saya hanya ingin file yang baru diunggah ditransfer melalui ftp.
user3605780
0

Hampir terdengar seperti Anda hanya ingin menggunakan CDN. Cara sebagian besar CDN bekerja adalah Anda memuat gambar Anda secara lokal, dan mereka dicerminkan di lokasi CDN. Kemudian Anda mengatur domain yang menunjuk ke konten CDN dan menulis ulang url gambar Anda untuk menggunakan domain itu daripada url normal Anda.

Ada beberapa plugin dan layanan yang bagus, walaupun saya hanya memiliki pengalaman dengan W3TC dan Cloudfront.

Ed Burns
sumber
Ya itu mirip dengan CDN kecuali saya tidak memiliki cukup ruang di Server A karena hanya memiliki 5GB sementara Server B memiliki ruang 1TB.
Ruriko
0

Anda harus memahami cara WP mengunggah file. Permintaan POST mengirim file ke server di mana ia akan disimpan dalam folder sementara. Setelah itu, WP akan menguji file yang diunggah, menyalinnya ke direktori konten dan menghapus file sementara.

Ini adalah proses yang sangat kompleks. Untuk gambar, Anda dapat menghubungkan ke 'media_upload_file', lalu periksa apakah itu adalah gambar. Jika ini adalah gambar, salinlah dengan WP_Filesystem ke server eksternal (gunakan metode ftpext dan berikan kredensial ftp Anda di dalam opsi), atau biarkan WP menangani unggahannya wp_handle_upload(). Dalam hal menyalin file ke server eksternal, Anda harus memberikan url dan seterusnya ke WP, sehingga WP dapat mengatur data (misalnya untuk posting lampiran).

Pekerjaan ini tidak dilakukan dengan tangan penuh kode. Jika Anda bukan pengembang, lebih baik sewa satu. Atau cari plugin yang akan melakukan ini untuk Anda.

Ralf912
sumber
-1

Anda dapat menggunakan SSHFS atau FTPFS untuk me-mount direktori pada server jauh untuk direktori upload Anda. Dengan cara ini Anda tidak perlu mengubah apa pun di WordPress itu sendiri.

Kekurangannya adalah bahwa setiap akses ke file yang diunggah akan lebih lambat tergantung di mana server B berada.

Mark Kaplun
sumber
Saya tidak dapat menggunakan SSHFS atau FTPFS karena tuan rumah saya tidak mendukung FUSE
Ruriko
Kemudian ganti host. Masalah terbesar dengan mengimplementasikan permintaan Anda bukanlah mengunggah ke bagian server lain (hanya menyalin kode dari pengaya yang mengunggah ke CDN), tetapi bagaimana cara mengambilnya dari sana untuk melayaninya. Tanpa akses tingkat sistem file ke server B apache tidak akan dapat melayani file, jadi Anda harus membuat server B dapat diakses oleh web, tetapi kemudian Anda bisa memindahkan WordPress Anda ke sana. Anda benar-benar tidak memberikan detail yang cukup tentang situasi Anda. Harap perbarui pertanyaan dengan semua perincian yang relevan jika Anda ingin mendapat jawaban.
Mark Kaplun