रिमोट सर्वर पर चित्र अपलोड करें


11

मैं छवियों को अपलोड करने के लिए वर्डप्रेस मीडिया अपलोडर का उपयोग कर रहा हूं और मैं सोच रहा था कि क्या मेरे स्थानीय सर्वर के बजाय इसे अपने दूरस्थ सर्वर पर अपलोड करने का कोई तरीका है? उदाहरण: मेरा वर्डप्रेस ब्लॉग सर्वर ए पर होस्ट किया गया है और मैं सर्वर ए के बजाय सर्वर बी में चित्र अपलोड करने के लिए मीडिया अपलोडर का उपयोग करना चाहता हूं।

दोनों सर्वर वेबसर्वर के रूप में nginx के साथ Ubuntu 10.04 LTS चलाते हैं और दोनों ftp और sftp को सपोर्ट करते हैं।


सर्वर से कनेक्ट करने के आपके विकल्प क्या हैं? एफ़टीपी, एपीआई या ssh? सर्वर पर जहां आप अपनी सामग्री को स्टोर करना चाहते हैं
पोंटस अब्राहमसन

सर्वर से कनेक्ट करने के लिए मेरा एकमात्र विकल्प एफ़टीपी और एसएसएच
रुरिको

हैकलॉग-रिमोट-अटैचमेंट प्लगइन https://wordpress.org/plugins/hacklog-remote-attachment/
saman m

मैं समझता हूं कि ओपी ने संकेत दिया है कि एपीआई एक्सेस एक विकल्प नहीं है, हालांकि अधिकांश सुलभ साइटों पर नया वर्डप्रेस एपीआई हमेशा उपलब्ध है। चूंकि यह एक पुराना धागा है, इसलिए मैंने सोचा कि अन्य आगंतुकों के लिए इसका उल्लेख करूंगा। उदाहरण के लिए, यदि आप वेबसाइट तक पहुंच सकते हैं, तो आप आमतौर पर एपीआई का उपयोग कर सकते हैं। मीडिया के बारे में उदाहरण: developer.wordpress.org/rest-api/reference/media
ryanm

जवाबों:


14

मैंने अभी एक प्लगइन बनाया है जो ऐसा करता है। यह सही नहीं है लेकिन यह अपना काम करता है।

आप इसे मेरे गितुब में पा सकते हैं: 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 
    );

यह प्लगइन क्या है, यह हमारे मामले सर्वर ए में केवल स्थानीय मशीन पर अपलोड करने के लिए / वर्ष / माह से अपलोड संरचना को बदलता है । फिर यह ftp से कनेक्ट करने के लिए php का उपयोग करता है: ftp_connect । जब wp_generate_attachment_metadata चलता है तो फ़ंक्शन फ़ायर हो जाता है। इसके बाद चला लिए कि क्या कोई छवियों Areu देखने के लिए अपलोड फ़ोल्डर में जांच , यदि ऐसा है तो यह के माध्यम से एफ़टीपी सर्वर करने के लिए उन सब को अपलोड करेंगे ftp_put । जब अपलोड पूरा हो जाता है, तो फंक्शन को अनलिंक करने के लिए लोकल मशीन से फाइलें हटा दी जाएंगी ।

फिर प्लगइन छवियों के url को "पब्लिक" आईपी या होस्टनाम में बदल देता है, जिसे FTP-सर्वर को इंगित किया गया है। मैं static.mydomain.com या cdn.mydomai.com जैसी किसी चीज़ का उपयोग करने का सुझाव देता हूं। उन्हें ftp-server (Server B) को इंगित करने की आवश्यकता है यह आपको FTP-सर्वर से छवियों को लोड करने में सक्षम बनाता है।

जैसा कि अन्य सदस्यों का कहना है कि आपको इसके लिए एक ftp- सर्वर का उपयोग करना चाहिए, यह एक असली सीडीएन के साथ बेहतर है, फ्यूज द्वारा माउंट किया गया है या अमेज़ॅन एस 3 जैसा कुछ है।


काम किया महान अपलोडिंग ठीक है, लेकिन एक त्रुटि मिली चेतावनी: ftp_put () [function.ftp-put]: फ़ाइल नहीं बना सका। in / home/xxx..../plugin_file.php लाइन 99 पर
फतिह

@Pontus Abrahamsson, इस महान समाधान के लिए धन्यवाद। हालाँकि मैं कैसे अक्षम कर सकता हूं कि यह सर्वर पर हर मीडिया फ़ाइल को दूसरे सर्वर पर भेजना शुरू कर दे? मैं बस एक नई अपलोड की गई फ़ाइल को ftp के माध्यम से स्थानांतरित करना चाहता हूं।
user3605780

0

यह लगभग लगता है जैसे आप सिर्फ एक सीडीएन का उपयोग करना चाहते हैं। जिस तरह से अधिकांश CDN काम करते हैं, आप अपनी छवियों को स्थानीय रूप से लोड करते हैं, और वे CDN स्थान पर प्रतिबिंबित होते हैं। फिर आप एक डोमेन सेट करते हैं जो सीडीएन सामग्री की ओर इशारा करता है और आपकी छवि के यूआरएल को आपके सामान्य यूआरएल के बजाय उस डोमेन का उपयोग करने के लिए फिर से लिखता है।

कई अच्छे प्लगइन्स और सेवाएं हैं, हालांकि मुझे केवल W3TC और क्लाउडफ्रंट के साथ अनुभव है।


हाँ यह CDN के समान है सिवाय इसके कि मेरे पास सर्वर A पर पर्याप्त जगह नहीं है क्योंकि इसमें केवल 5GB है जबकि सर्वर B में 1TB स्थान है।
रुरिको

0

आपको समझना होगा कि WP किसी फाइल को कैसे अपलोड करता है। एक POST अनुरोध फ़ाइल को सर्वर पर भेजता है जहां इसे एक अस्थायी फ़ोल्डर में संग्रहीत किया जाएगा। उसके बाद, WP अपलोड की गई फ़ाइल का परीक्षण करेगा, इसे सामग्री निर्देशिका में कॉपी करेगा और अस्थायी फ़ाइल को हटा देगा।

यह एक बहुत ही जटिल प्रक्रिया है। छवियों के लिए, आप 'media_upload_file' में हुक कर सकते हैं, फिर जांचें कि क्या यह एक छवि है। यदि यह एक छवि है, तो इसे WP_Filesystem के साथ बाहरी सर्वर पर कॉपी करें (विधि ftpext का उपयोग करें और विकल्पों के भीतर अपने ftp क्रेडेंशियल्स प्रदान करें), और WP को अपलोड को संभालने देंwp_handle_upload() । फ़ाइल को किसी बाहरी सर्वर पर कॉपी करने के मामले में, आपको WP और इतने पर WP प्रदान करना होगा, इसलिए WP डेटा सेटअप कर सकता है (जैसे अटैचमेंट पोस्ट के लिए)।

यह काम कोड से भरे हाथ से नहीं किया जाता है। यदि आप एक डेवलपर नहीं हैं, तो बेहतर किराया लें। या एक प्लगइन की खोज करें जो आपके लिए यह करेगा।


-1

आप उपयोग कर सकते हैं sshfs या FTPFS अपने अपलोड निर्देशिका के लिए दूरस्थ सर्वर पर एक निर्देशिका माउंट करने के लिए। इस तरह आपको वर्डप्रेस में कुछ भी बदलने की जरूरत नहीं होगी।

दोष यह है कि अपलोड की गई फ़ाइल तक हर पहुंच धीमी होगी जहां सर्वर बी निवास करता है।


मैं SSHFS या FTPFS का उपयोग नहीं कर सकता क्योंकि मेरा होस्ट FUSE का समर्थन नहीं करता है
Ruriko

फिर मेजबान को स्विच करें। आपके अनुरोध को लागू करने के साथ सबसे बड़ा मुद्दा अन्य सर्वर भाग पर अपलोड नहीं है (बस प्लग इन से कोड कॉपी करें जो सीडीएन पर अपलोड होता है), लेकिन इसे सेवा करने के लिए इसे कैसे प्राप्त करें। बिना फाइल सिस्टम लेवल एक्सेस के सर्वर B अपाचे फाइलों को सेवा नहीं दे पाएगा, इसलिए आपको सर्वर B को वेब तक पहुंच बनाना होगा, लेकिन तब आप अपने वर्डप्रेस को वहां स्थानांतरित कर सकते हैं। आपने वास्तव में अपनी स्थिति पर पर्याप्त विवरण नहीं दिया है। यदि आप उत्तर पाना चाहते हैं, तो कृपया सभी प्रासंगिक विवरणों के साथ प्रश्न को अपडेट करें।
मार्क कपलुन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.