2011-08-19 17 views
6

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

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

या दो सर्वर का उपयोग केवल स्थिर छवि सामग्री जैसे छवियों के लिए किया जा सकता है।

धन्यवाद

+0

द्वितीयक सर्वर पर किस प्रकार की फाइलें संग्रहीत की जा रही हैं? – ExtremeCoder

+0

अधिक जानकारी की आवश्यकता है। सर्वर किस तरह के ओएस चल रहे हैं, क्या आपके पास व्यवस्थापक पहुंच है .... –

+0

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

उत्तर

13

सबसे अच्छा विचार है कि "स्टोरेज सर्वर" पर वेबसाइट फ़ाइलों सहित सभी फाइलें हों। असल में आप जो करते हैं वह "साझा फ़ोल्डर" को माउंट करता है, इसका मतलब है कि वेबसाइट फ़ाइलों और अन्य फ़ाइलों की आपको आवश्यकता होगी। (अधिकांश बार आपके पास स्टोरेज सर्वर पर एक/var/www-local/फ़ोल्डर होता है, जिसे आप वेबसर्वर पर/var/www/में आरोहित करते हैं)।

सुनिश्चित करें कि आप इसे एनएसएफ का उपयोग कर वेबसर्वर पर/etc/fstab फ़ाइल में जोड़कर इसे माउंट करें। (More info on NFS)

इस विचार का लाभ यह है कि जब आप का विस्तार करना चाहते, यह एक सॉफ्टवेयर loadbalancer (HAProxy) की तरह डाल ज्यादा वेबसर्वर के रूप में जोड़कर आसानी से संभव है के रूप में आप की तरह है और आप सिंक में अपने डेटा को होगा ।

+0

इसका मतलब है कि दो सर्वर होंगे। दूसरा सर्वर मुख्य सर्वर में आरोहित किया जाएगा और इस एप्लिकेशन को करने से किसी अन्य सर्वर के बारे में सोचने की आवश्यकता नहीं है। इसे दूसरे सर्वर के लिए एक सिस्टम के रूप में अन्य यूआरएल के रूप में माना जाएगा। – phpian

+0

यह केवल प्रश्न का हिस्सा उत्तर देता है, क्योंकि आप समर्पित सामग्री वितरण नेटवर्क जैसी बाहरी जगह का उपयोग नहीं कर पाएंगे। – Lars

4

क्या आप अपलोड निर्देशिका को अपने वेब सर्वर पर माउंट कर सकते हैं। Linux NFS

3

यह नहीं पता कि यह सबसे अच्छा तरीका है, लेकिन फ़ाइल सर्वर को एक अलग सबडोमेन क्यों नहीं है? इस तरह यह सभी फ़ाइल डाउनलोड minutia को संभाल सकता है और आप इसे मुख्य सर्वर से एफ़टीपी या एसएफटीपी के माध्यम से कनेक्ट कर सकते हैं।

  1. प्वाइंट द्वितीयक सर्वर पर अपने उप डोमेन:

    असल में, यहाँ एक प्रक्रिया आप इस्तेमाल कर सकते हैं है। मुझे उस here पर कुछ जानकारी मिली।

  2. अपने मुख्य सर्वर पर एक अपलोड फॉर्म है जो फ़ाइल को संसाधित और मान्य करता है।
  3. जब फ़ाइल स्वीकार्य समझा जाता है, तो इसे अन्य सर्वर पर एफ़टीपी या एसएफटीपी के माध्यम से भेजें। यदि आप इसके लिए काम कर रहे PHP उपकरण नहीं प्राप्त कर सकते हैं, तो phpseclib मदद कर सकता है। आप इस चरण को बहु-थ्रेडेड बनाना चाहते हैं।
+0

यह होने के कारण यह मुख्य सर्वर पर अधिभारित होगा क्योंकि एप्लिकेशन के माध्यम से अपलोड की गई सभी फाइलें अन्य सर्वर पर एफ़टीपी होंगी। अंतिम उपयोगकर्ता अतिरिक्त देरी को अलगाव देगा क्योंकि फ़ाइल उसके द्वारा अपलोड की जाएगी, पहले मुख्य सर्वर पर जाती है (वह डेटाबेस प्रविष्टि करेगा) तो यह सर्वर को फ़ाइल करने के लिए एफ़टीपी होगा। – phpian

0

यदि आपके एप्लिकेशन को फ़ाइल सर्वर को गहन पढ़ने/लिखने की आवश्यकता है, तो मुझे लगता है कि इसे अलग करना एक बुरा विचार है। शायद आप विलंबता को कम करने के लिए अपने मुख्य वेब सर्वर पर एनएफएस को दर्पण कर सकते हैं!

उपयोग nginx स्टैटिक फ़ाइलें करने के लिए सभी अनुरोध को पूरा करने (जैसे: सीएसएस, छवियों, जावास्क्रिप्ट)

5

मैं कुछ जो इस जैसी चीजों के लिए अनुमति देता है Gluster कहा जाता है का उपयोग किया है। जिस स्थिति में मैं इसका उपयोग करता हूं वह वैकल्पिक सामग्री वितरण की तुलना में भार संतुलन के लिए अधिक है।

इसके अलावा, स्टैक ओवरफ्लो जैसी साइटें Content Distribution Network सेवाओं को उनकी साइट पर जानकारी के कुछ टुकड़ों के लिए उपयोग करती हैं। इस तरह का एक समाधान वास्तव में एक नए नए सर्वर को खरीदने/स्थापित करने/बनाए रखने से अधिक लागत प्रभावी हो सकता है।

+0

जो एक बहुत ही रोचक परियोजना की तरह दिखता है, धन्यवाद! ग्लस्टर, महान समाधान के लिए – Lars

+0

+1। – ceejayoz

1

url wrapper का उपयोग करके, आप अपने डिफ़ॉल्ट move_uploaded_file() का उपयोग कर सकते हैं, यदि आपका FTP सर्वर इस कनेक्शन प्रकार को स्वीकार करता है। वैकल्पिक रूप से, आप सर्वर पर फ़ाइल अपलोड करने के लिए PHP के ftp functions, विशेष रूप से ftp_put() का उपयोग कर सकते हैं।

सामग्री वितरण के लिए, आप सामग्री वितरण सर्वर पर मूल यूआरएल हो और एचटीएमएल बहस में यूआरएल डाल करने के लिए एक डेटाबेस या अन्य साधनों की आवश्यकता है:

<img src="http://cdn1.example.com/images/68263483.png" /> 
<a href="http://cdn2.example.com/files/9872345.pdf">Download PDF</a> 

एक उदाहरण कोड को संभालने के लिए एक अपलोड की गई फ़ाइलों

<?php 
// ... 
$uploads_dir = 'images'; 
foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
     $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
     $name = $_FILES["pictures"]["name"][$key]; 
     move_uploaded_file($tmp_name, 
      "ftp://user:[email protected]/$uploads_dir/$name"); 

     // save url in your database for later retrieval ... 
    } 
} 

या ftp_put() साथ होगा:

<?php 
// ... 
$ftpCon = ftp_connect('cdn1.example.com') 
    or die('Could not connect to ftp server'); 
$uploads_dir = 'images'; 
foreach ($_FILES["pictures"]["error"] as $key => $error) { 
    if ($error == UPLOAD_ERR_OK) { 
     $tmp_name = $_FILES["pictures"]["tmp_name"][$key]; 
     $name = $_FILES["pictures"]["name"][$key]; 
     ftp_put($ftpCon, "$uploads_dir/$name", $tmp_name) 
      or die("could not upload $name to ftp server"); 
     // save url in your database for later retrieval ... 
    } 
} 
0
  1. फ़ाइल सर्वर पर एक फ़ाइल बनाएं जहां आप डाउनलोड करना और फ़ाइलें अपलोड करना चाहते हैं। यदि आप अलग फ़ोल्डर में टाईम रखने की योजना बनाते हैं तो दो शेयर।

  2. PHP कोड बेस के साथ वेब सर्वर पर फ़ोल्डर को मानचित्र करें। सुनिश्चित करें कि आप उस शेयर (एस) को समझने के लिए लॉगिन का उपयोग करें जो पहुंच को पढ़ और लिख लेगा।

  3. एक बार जब आप शेयर मैप किए गए हैं, तो साझा फ़ोल्डर में वेबसाइट पर वर्चुअल निर्देशिका बनाएं (यह सब आपके वेब सर्वर पर निर्भर करता है)।

  4. जांचें कि PHP आपके वेबसाइट पर साझा ड्राइव पर फ़ाइलों तक पहुंच कैसे संभालता है, आपके वेबसर्वर के आधार पर यह सामान्य रूप से फ़ाइलों को कैसे प्रबंधित करता है उससे अलग हो सकता है।

मुझे यह दृष्टिकोण पसंद है क्योंकि सर्वर ओएस फ़ाइल सर्वर से फ़ाइलों को स्थानांतरित करने के लिए संभालता है। PHP बस यह बताता है कि इसे कौन सी फाइलों की आवश्यकता है।

संबंधित मुद्दे