อัพโหลดภาพไปยังเซิร์ฟเวอร์ระยะไกล


11

ฉันใช้เครื่องมืออัพโหลดสื่อ Wordpress เพื่ออัพโหลดภาพและฉันสงสัยว่ามีวิธีที่จะทำให้อัปโหลดไปยังเซิร์ฟเวอร์ระยะไกลของฉันแทนที่จะเป็นเซิร์ฟเวอร์ในพื้นที่ของฉันหรือไม่ ตัวอย่าง: บล็อก wordpress ของฉันโฮสต์บนเซิร์ฟเวอร์ A และฉันต้องการใช้โปรแกรมอัพโหลดสื่อเพื่ออัพโหลดรูปภาพไปยังเซิร์ฟเวอร์ B แทนที่จะเป็นเซิร์ฟเวอร์ A

เซิร์ฟเวอร์ทั้งสองใช้งาน Ubuntu 10.04 LTS โดยมี nginx เป็นเว็บเซิร์ฟเวอร์และรองรับทั้ง ftp & sftp


คุณมีวิธีการเชื่อมต่อกับเซิร์ฟเวอร์อย่างไร FTP, API หรือ ssh? บนเซิร์ฟเวอร์ที่คุณต้องการจัดเก็บเนื้อหาของคุณ
Pontus Abrahamsson

ตัวเลือกเดียวของฉันในการเชื่อมต่อกับเซิร์ฟเวอร์คือ FTP & SSH
Ruriko

ใช้โปรแกรมเสริมของ Hacklog-remote-attach https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

ฉันเข้าใจว่า OP ระบุว่าการเข้าถึง API ไม่ใช่ตัวเลือก แต่ในเว็บไซต์ที่เข้าถึงได้ง่ายที่สุด WordPress API ใหม่พร้อมใช้งานเสมอ เนื่องจากนี่เป็นหัวข้อเก่าฉันคิดว่าฉันจะพูดถึงเรื่องนี้สำหรับผู้เข้าชมคนอื่น ๆ ตัวอย่างเช่นหากคุณสามารถเข้าถึงเว็บไซต์ได้โดยทั่วไปคุณสามารถเข้าถึง API ได้ ตัวอย่างเกี่ยวกับสื่อ: developer.wordpress.org/rest-api/reference/media
ryanm

คำตอบ:


14

ฉันเพิ่งสร้างปลั๊กอินที่ทำสิ่งนี้ มันไม่สมบูรณ์แบบ แต่มันทำงาน

คุณสามารถค้นหาได้ใน Github ของฉัน: https://github.com/pontusab/wp-ftp-media-library

ดังนั้นคุณต้องเปลี่ยนบางสิ่งในไฟล์ในแถวที่ 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 
    );

อะไรปลั๊กอินนี้จะเป็นมันเปลี่ยนแปลง structur อัปโหลดจาก / ปี / เดือนเพื่ออัปโหลดเฉพาะบนเครื่องท้องถิ่นในกรณีของเราเซิร์ฟเวอร์ จากนั้นก็จะใช้ PHP เพื่อเชื่อมต่อกับ FTP ผ่าน: ftp_connect ฟังก์ชันนี้เริ่มทำงานเมื่อ wp_generate_attachment_metadata ทำงาน จากนั้นก็ใช้การตรวจสอบในโฟลเดอร์ที่อัปโหลดเพื่อดูว่ามีอาร์รูภาพใด ๆถ้าเป็นเช่นนั้นก็จะอัปโหลดพวกเขาทั้งหมดเพื่อ FTP เซิร์ฟเวอร์ผ่านftp_put เมื่ออัปโหลดเสร็จสมบูรณ์ไฟล์จะถูกลบออกจากเครื่องท้องถิ่นโดยใช้ฟังก์ชั่นยกเลิกการเชื่อมโยง

จากนั้นปลั๊กอินจะเปลี่ยน URL ของรูปภาพเป็น ip "สาธารณะ" หรือชื่อโฮสต์ที่ชี้ไปยังเซิร์ฟเวอร์ ftp ฉันแนะนำให้ใช้บางอย่างเช่น static.mydomain.com หรือ cdn.mydomai.com พวกเขาจำเป็นต้องชี้ไปที่ ftp-server (Server B) สิ่งนี้ช่วยให้คุณสามารถโหลดรูปภาพจาก ftp-server

ในฐานะสมาชิกคนอื่น ๆ บอกว่าคุณควรใช้ ftp-server เพื่อมันจะดีกว่าด้วย cdn จริง, ติดตั้งโดยฟิวส์หรืออะไรอย่าง Amazon S3


การอัปโหลดที่ใช้งานได้ดีนั้นใช้ได้ แต่มีข้อผิดพลาดคำเตือน: ftp_put () [function.ftp-put]: ไม่สามารถสร้างไฟล์ ใน /home/xxx..../plugin_file.php ในบรรทัดที่ 99
Fatih Toprak

@Pontus Abrahamsson ขอบคุณสำหรับวิธีแก้ปัญหาที่ยอดเยี่ยมนี้ อย่างไรก็ตามฉันจะปิดการใช้งานมันเริ่มส่งไฟล์สื่อทุกไฟล์บนเซิร์ฟเวอร์ไปยังเซิร์ฟเวอร์อื่นได้อย่างไร ฉันต้องการไฟล์ที่เพิ่งอัปโหลดใหม่ซึ่งกำลังถ่ายโอนผ่าน ftp
user3605780

0

ดูเหมือนว่าคุณแค่ต้องการใช้ CDN วิธีการทำงานของ CDN ส่วนใหญ่คือคุณโหลดภาพภายในเครื่องและจะถูกมิเรอร์ที่ตำแหน่ง CDN จากนั้นคุณตั้งค่าโดเมนที่ชี้ไปที่เนื้อหา CDN และเขียน URL รูปภาพของคุณเพื่อใช้โดเมนนั้นแทน URL ปกติของคุณ

มีปลั๊กอินและบริการที่ดีมากมายแม้ว่าฉันจะมีประสบการณ์กับ W3TC และ Cloudfront เท่านั้น


ใช่มันคล้ายกับ CDN ยกเว้นว่าฉันมีพื้นที่ไม่เพียงพอบนเซิร์ฟเวอร์ A เพราะมันมีเพียง 5GB ในขณะที่เซิร์ฟเวอร์ B มีพื้นที่ 1TB
Ruriko

0

คุณต้องเข้าใจว่า WP อัปโหลดไฟล์อย่างไร คำขอ POST ส่งไฟล์ไปยังเซิร์ฟเวอร์ที่จะถูกเก็บไว้ในโฟลเดอร์ชั่วคราว หลังจากนั้น WP จะทดสอบไฟล์ที่อัปโหลดคัดลอกลงในไดเรกทอรีเนื้อหาและลบไฟล์ชั่วคราว

นี่เป็นกระบวนการที่ซับซ้อนมาก สำหรับรูปภาพคุณสามารถขอ 'media_upload_file' จากนั้นตรวจสอบว่าเป็นรูปภาพหรือไม่ ถ้ามันเป็นภาพที่คัดลอกด้วย WP_Filesystem ไปยังเซิร์ฟเวอร์ภายนอก (ใช้วิธี ftpext และให้ข้อมูลประจำตัวของคุณภายใน FTP ตัวเลือก), อื่นให้ WP wp_handle_upload()จัดการอัปโหลดด้วย ในกรณีที่คัดลอกไฟล์ไปยังเซิร์ฟเวอร์ภายนอกคุณจะต้องระบุ URL และอื่น ๆ ไปยัง WP ดังนั้น WP สามารถตั้งค่าข้อมูล (เช่นสำหรับโพสต์ไฟล์แนบ)

งานนี้ไม่ได้ทำด้วยมือที่เต็มไปด้วยรหัส หากคุณไม่ได้เป็นนักพัฒนาให้จ้างที่ดีกว่า หรือค้นหาปลั๊กอินที่จะทำสิ่งนี้ให้คุณ


-1

คุณสามารถใช้SSHFSหรือFTPFSเพื่อติดตั้งไดเรกทอรีบนเซิร์ฟเวอร์ระยะไกลสำหรับไดเรกทอรีที่คุณอัปโหลด ด้วยวิธีนี้คุณไม่จำเป็นต้องเปลี่ยนอะไรใน WordPress เอง

ข้อเสียเปรียบคือทุกการเข้าถึงไฟล์ที่อัพโหลดจะช้าลงขึ้นอยู่กับที่เซิร์ฟเวอร์ B อยู่


ฉันไม่สามารถใช้ SSHFS หรือ FTPFS เนื่องจากโฮสต์ของฉันไม่สนับสนุน FUSE
Ruriko

จากนั้นสลับโฮสต์ ปัญหาที่ใหญ่ที่สุดในการดำเนินการตามคำขอของคุณไม่ใช่การอัปโหลดไปยังส่วนอื่น ๆ ของเซิร์ฟเวอร์ (เพียงคัดลอกโค้ดจากปลั๊กอินที่อัปโหลดไปยัง CDN) แต่วิธีดึงข้อมูลจากที่นั่นเพื่อให้บริการ หากไม่มีการเข้าถึงระดับระบบไฟล์ไปยังเซิร์ฟเวอร์ B apache จะไม่สามารถให้บริการไฟล์ได้ดังนั้นคุณจะต้องทำให้เซิร์ฟเวอร์ B สามารถเข้าถึงเว็บได้ แต่จากนั้นคุณสามารถย้าย WordPress ไปที่นั่นได้ คุณไม่ได้ให้รายละเอียดเพียงพอกับสถานการณ์ของคุณ โปรดอัปเดตคำถามพร้อมรายละเอียดที่เกี่ยวข้องทั้งหมดหากคุณต้องการมีโอกาสได้รับคำตอบ
Mark Kaplun
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.