कंप्यूटरफ़ाइल प्रकारों

पीएचपी: सर्वर से फाइल अपलोड

पीएचपी के माध्यम से फ़ाइलों को डाउनलोड - एक बहुत ही दिलचस्प मामला है, जो बहुत सावधानी से संपर्क किया जाना चाहिए करने के लिए। इंटरनेट पर आप फाइल अपलोड के कार्यान्वयन के कई उदाहरण मिल सकते हैं, लेकिन उन सभी को नहीं अच्छे हैं और सुरक्षा नियमों को पूरा।

इस तरह की बातें एक निष्कर्ष पर लाने के लिए, भले ही यह एक लंबा समय लगता की जरूरत है। आप कोड में एक अंतराल छोड़ देते हैं, तो अपने पूरे सर्वर समझौता किया जा सकता।

सुरक्षा

पीएचपी के साथ फाइल को अपलोड करने के लिए सर्वर काफी आसानी से किया जाता है। कोड बहुत ही कम और सरल है। बस लाइनों के एक जोड़े। हालांकि, इस विधि खतरनाक है। बहुत अधिक समय और सुरक्षा के लिए दूर कोड की लाइनें।

खतरा यह है कि, अगर आप निरीक्षण नहीं करते हैं, किसी भी हमलावर को अपने सर्वर पर उनके स्क्रिप्ट अपलोड कर सकते हैं है। इस मामले में, यह पूर्ण पहुंच होगी। वह क्या कर सकते हैं जो कुछ भी वह चाहता है:

  • डेटाबेस को हटाने;
  • फ़ाइलों साइटों को हटाना;
  • फ़ाइलों साइटों को संशोधित;
  • अपनी वेबसाइट पर अपने विज्ञापन जोड़ने;
  • डाउनलोड वायरस;
  • अपनी साइटों पर सभी उपयोगकर्ताओं अनुप्रेषित;
  • और कई अन्य चीजें हैं जो आने हमलावर मन में।

आपको हमेशा यह सुनिश्चित करना चाहिए कि उपयोगकर्ता के लिए एक फ़ाइल डाउनलोड करने के लिए प्रयास करता है। उदाहरण के लिए, आप केवल छवियों को अपलोड करते हैं, यह आवश्यक सत्यापित करें कि फ़ाइल एक छवि सही ढंग से है। अन्यथा, आप कुछ भी डाउनलोड करेगा।

वास्तव में कैसे सत्यापन लागू करने के लिए है, यह प्रत्यक्ष परीक्षा स्क्रिप्ट फ़ाइलों को अपलोड करने के साथ, दिखाया जाएगा।

एक PHP प्रपत्र बनाना

फ़ाइल अपलोड प्रपत्र बहुत सरल है। ब्राउज़ बटन और अपलोड बटन गायब।

बनाने का तरीका रूपों नहीं होगा, यह आसान है क्योंकि वर्णन करता है। इसके अलावा निर्देश मानते हैं आप पहले से ही एचटीएमएल की बुनियादी अवधारणाओं (अन्यथा आप PHP पर डाउनलोड करने के बारे में जानकारी की तलाश नहीं किया जाएगा) है।

लेकिन ध्यान दें कि रूप में डेटा आप enctype विशेषता जोड़ने की जरूरत है।

अन्यथा, फ़ाइल हैंडलर पर डेटा संचारित नहीं किया जाएगा।

यह कैसे काम करना चाहिए?

आप ब्राउज़ बटन पर क्लिक करते हैं तो आप एक बॉक्स है, जहां एक फ़ाइल चुनने के लिए कहा देखना चाहिए।

उसके बाद यह एक पथ जहाँ फ़ाइल स्थित है प्राप्त करने के लिए आवश्यक हो जाएगा।

पथ प्रकट नहीं होता है, तो कार्रवाई फिर से प्रदर्शन करते हैं।

डाउनलोड फ़ाइल हैंडलर पर क्लिक करने के बाद किसी भी जानकारी दे सकते हैं।

उदाहरण के लिए, आप लाइन है कि कहा गया है कि फाइल "तो और इसलिए" नाम सफलतापूर्वक "इस तरह के और इस तरह के" फ़ोल्डर में अपलोड किया गया है लिख सकते हैं। बेशक, फ़ाइल नाम हमेशा अलग दिया जाएगा।

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

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

समायोजन

सर्वर से PHP फ़ाइल अपलोड करने में कुछ सेटिंग है, जो php.ini फ़ाइल में किया जाना चाहिए की आवश्यकता है। इस फ़ाइल में सेटिंग्स की एक बहुत कुछ शामिल है। वे सब हम जरूरत नहीं है। file_uploads, upload_tmp_dir और upload_max_filesize: हम तीन लाइनों में रुचि रखते हैं।

कृपया ध्यान दें कि इन सेटिंग्स अपनी सभी साइटों के सर्वर पर ही नहीं, किसी भी एक को प्रभावित करेगा,। इसलिए, तथ्य यह है कि आप उपयोगकर्ताओं को लोड करना होगा के आधार पर अधिकतम आकार निर्धारित करने के लिए। ये बहुत बड़ा सेट करने के लिए अनुशंसित नहीं है।

एक बार जब आप इन मानकों में मान बदलते हैं, आप सर्वर को पुनः आरंभ करने की जरूरत है। अन्यथा सेटिंग्स प्रभावी नहीं होगा, जैसा कि वे सर्वर लोड के समय में पढ़ सकते हैं।

आप सर्वर के लिए SSH के माध्यम से जोड़ने के द्वारा कंसोल में ऐसा कर सकते हैं। सीधे शब्दों में आदेश सेवा httpd पुनः आरंभ दर्ज करें और फिर सेटिंग प्रभावी हो जाएंगे।

एक अन्य विधि - आईएसपी-कक्ष के माध्यम से या बिलिंग पैनल प्रदाता के माध्यम से पुन: प्रारंभ करने।

सरणी फ़ाइल

PHP में फाइल अपलोड सरणी $ _FILES द्वारा किया जाता है। यह फ़ाइलों है कि हम डाउनलोड के बारे में सभी जानकारी शामिल है।

कौन-सी जानकारी देता है, निम्न फ़ाइल हैंडलर में लिखने के लिए पर्याप्त में निहित है देखने के लिए।

किसी भी फ़ाइल का चयन करें और क्लिक करें "अपलोड करें।" हैंडलर पृष्ठ पर जानकारी है कि $ _FILES में संग्रहित है प्रदर्शित करेगा। चर पूरी तरह से बड़े अक्षरों के साथ लिखा है। पीएचपी - एक भाषा के प्रति संवेदनशील।

आप देख सकते हैं, इस सरणी में क्षेत्रों का एक बहुत है। वे सब के सब हमारे लिए महत्वपूर्ण हैं। पहले क्षेत्र है जिसमें यह आपके कंप्यूटर पर प्रयोग किया जाता है में फ़ाइल नाम शामिल हैं।

प्रकार स्तंभ फ़ाइल प्रकार निर्दिष्ट। Tmp_name क्षेत्र अस्थायी फ़ाइल का नाम से मेल खाती है। स्क्रिप्ट के अंत के बाद हटा दिया जाएगा।

त्रुटि क्षेत्र एक त्रुटि कोड होता है। यह थोड़ा और आगे था। आकार - बाइट में आकार।

त्रुटियों

PHP फ़ाइल अपलोड के माध्यम से किया हमेशा एक त्रुटि कोड के साथ है। एक त्रुटि संदेश "त्रुटि" में प्रवेश किया। स्क्रीनशॉट त्रुटि शून्य है।

सभी त्रुटियों का मूल्य पर विचार करें:

यह पैरामीटर कि हमेशा की तरह HTML में निर्दिष्ट किया जा सकता के बारे में ऊपर कहा गया था।

यहाँ फ़ाइल है, जो अपलोड की गई फ़ाइल की राशि की सीमा को इंगित करता है डाउनलोड करने के लिए एक नमूना रूप है।

पीएचपी: फाइल अपलोड स्क्रिप्ट

सभी अभ्यास में किए गए के रूप में? PHP में फाइल अपलोड प्रतिलिपि आदेश होता है। स्रोत फ़ाइल और गंतव्य फ़ाइल - आप कैसे एक फ़ाइल डाउनलोड करने के सवाल में रुचि रखते हैं, इस सवाल का जवाब आसान copy- है, जो दो पैरामीटर का उपयोग करता है।

लेकिन, जैसा कि ऊपर कहा गया है, है ना सुरक्षा की दृष्टि से सीमित हो सकता है। उदाहरण के लिए, बाहर की जाँच फ़ाइल हम किस तरह जहाज, आप सरणी $ _FILES में क्षेत्र प्रकार का उपयोग कर सकते हैं। सबसे पहले, के निरीक्षण के साथ सौदा है, और फिर पूरी स्क्रिप्ट पर चलते चलो

मान लीजिए कि आप उपयोगकर्ताओं को केवल GIF, JPEG या PNG के एक संकल्प के साथ एक तस्वीर अपलोड करने की अनुमति चाहते हैं। संकेत मिलता है तो वह ऐसा हो सकता है।

अगर ($ _ फ़ाइलें [ 'file_upload'] [ 'प्रकार']! = "छवि / gif") {
गूंज "क्षमा करें, हम केवल Gif-फ़ाइलें डाउनलोड करने का समर्थन";
बाहर निकलने के;
}

आप सभी 3 प्रकार के जहाज चाहते हैं, बस छवि के अन्य प्रकार के लिए एक अतिरिक्त शर्त जोड़ने।

प्रति (छवि 1, छवि 2): प्रतिलिपि बनाई जा रही इस तरह से किया जाता है।

हमारे मामले में, जब काम सर्वर से पीसी से डाउनलोड कर रहा है, तो आप ऐसा कर सकते हैं

प्रति ($ _ फ़ाइलें [ 'file_upload'] [ "tmp_name"], "1.jpg")

यही कारण है, फ़ाइल नाम 1.jpg साथ प्रतिलिपि बनाई जाएगी। यह पूरी तरह से सही नहीं है। इस मामले में, यह केवल एक उदाहरण है। फ़ाइल नाम हमेशा फ़ाइल के आधार पर अलग निर्दिष्ट करने के लिए, और निर्दिष्ट विस्तार, आवश्यक है।

निर्धारित विस्तार अलग अलग तरीकों से हो सकता है। यह सब ज्ञान के डेवलपर पर निर्भर करता है। (सेकंड के दसवां का अंतर) विस्तार निर्धारित करने के लिए सबसे तेजी से तरीकों में से एक - यह अगले कोड है।

$ PATH_INFO = pathinfo ($ _ फ़ाइलें [ 'photo1'] [ "नाम"]);

$ Ext = $ PATH_INFO [ 'विस्तार'];

चर $ ext हम वांछित विस्तार स्टोर करेगा। एक फ़ाइल नाम यादृच्छिक md5 का उपयोग कर पर सेट किया जा सकता है। आप फ़ाइलों का एक बहुत डाउनलोड करने के लिए योजना बना रहे हैं, यह उन्हें विभिन्न फ़ोल्डर के जहाज के लिए बेहतर है। तो यह और अधिक सुविधाजनक हो जाएगा। विशेष रूप से, आप शुद्ध करने के लिए चाहते हैं।

कोड इस प्रकार होगी डाउनलोड करने के लिए।

/// तस्वीर के साथ

अगर ($ _FILES [ 'photo1'] [ 'tmp_name'] == नल)

{

गूंज ( "

अज्ञात फ़ाइल।

वापस ... ");

बाहर निकलने के;

}

///। सर्वर पर किसी भी परियोजना के लिए आप कहते हैं कि बड़ी फ़ाइलों (वीडियो) लोड करने के लिए अनुमति दी है, लेकिन वहाँ केवल तस्वीरें हैं, और उपयोगकर्ताओं को सीमित करने के लिए की जरूरत है

अगर (($ _FILES [ "photo1"] [ "आकार"]> 1024 * 1024 * 2)

{

?>

है, अधिकतम आकार 2 एमबी

वापस ...

बाहर निकलने के;

}

// फ़ोल्डर बना

// चालू माह की एक फ़ोल्डर बना

if (! file_exists ( "img /"। तिथि ( "एम")))

{

mkdir ( "img /" तिथि ( "एम")।);

}

// वर्तमान दिन के एक फ़ोल्डर बना

if (! file_exists ( "img /"। तिथि ( "एम")। "/"। तिथि ( "डी")))

{

mkdir ( "img /" तिथि ( "एम") "/" तिथि ( "d") ...);

}

/// फाइल एक्सटेंशन

$ PATH_INFO = pathinfo ($ _ फ़ाइलें [ 'photo1'] [ "नाम"]);

$ Ext = $ PATH_INFO [ 'विस्तार'];

/// फ़ाइल नाम उत्पन्न

$ Id = md5 (तिथि ( "YMd"));

अगर (कॉपी ($ _ फ़ाइलें [ 'photo1'] [ "tmp_name"], "img /"। तिथि ( "एम")। "/"। तिथि ( "d")। "/"। $ आईडी। $ ext) )

{

गूंज ( "सफलतापूर्वक अपलोड की गई फ़ाइल");

}

/// आगे कोई कार्रवाई (डेटाबेस में प्रवेश, और इतने पर। एन)

}

एक से अधिक फ़ाइलों

एक से अधिक फ़ाइलों (PHP) अपलोड कर रहा है के रूप में अतिरिक्त फ़ील्ड के माध्यम से होता है।

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

आदर्श विकल्प - यह एक एकल बटन दबाने से एक ही बार में फ़ाइलों की एक बड़ी संख्या का एक विकल्प है।

ऐसा करने के लिए इस कोड की तरह एक आकार बनाने के।

<फार्म विधि = "पोस्ट" कार्रवाई = "हैंडलर फाइल करने के लिए लिंक" नाम = "upload_form" enctype = "बहुखण्डीय / फार्म-डेटा">

<इनपुट वर्ग = "form_upload" type = "फाइल" नाम = "file1 []" एक से अधिक मूल्य = "सारांश">

<इनपुट वर्ग = "form_upload" प्रकार = "submit" नाम = "upldFile" मान = "जोड़ें" />

ध्यान दें कि शब्द के कई इसके अलावा, और नाम एक सरणी [] के रूप में दिया जाता है। इस मामले में, $ _FILES सरणी थोड़ा भिन्न होगा। आप सरणी की एक सरणी मिल जाएगा।

परीक्षण करने के लिए फिर से var_dump ($ _ फ़ाइलें) का उपयोग कर सकते हैं;

आपकी सभी फ़ाइलें इस तरह सरणी में रखा जाएगा:

  1. $ _FILES [ "file1"] [ "नाम"] [0]
  2. $ _FILES [ "file1"] [ "नाम"] [1]
  3. और इतने पर।

कोष्ठक में सरणी में फ़ाइल नंबर लिखा है। शून्य से गिनती। हम उन्हें एक ही तरह से व्यवहार करते हैं, बस चक्र पूछने के लिए और सूचकांक जोड़ने [$ i] के अंत में ऊपर-वर्णित कोड से संपर्क करके।

$ मैं = 0;

जबकि ($ _FILES [ "file1"] [ "नाम"] [$ i] <> '')

{

/// ऊपर कोड पेस्ट

}

इस प्रकार, आप, के रूप में आमतौर पर ऐसा करता है, तो आप (पिछले तस्वीर) फ़ाइलों की एक स्थिर संख्या के साथ संस्करण का उपयोग है कोड का अनावश्यक दोहराव के बिना एक चक्र में सर्वर के लिए एक PHP फ़ाइल अपलोड के माध्यम से होता है करना होगा।

Similar articles

 

 

 

 

Trending Now

 

 

 

 

Newest

Copyright © 2018 hi.birmiss.com. Theme powered by WordPress.