आपके ब्राउज़र में जावास्क्रिप्ट अवरुद्ध है. कृपया साइट को कार्यशील बनाने के लिए जावास्क्रिप्ट सक्षम करें!

सर्वर पर फ़ाइलें अपलोड करना

अपलोड में एक संक्षिप्त भ्रमण

अपलोड फ़ाइलें क्या हैं, या यह काम क्यों नहीं करतीं?
प्रतिलिपि ("c:\images\sample.jpg", "http://mysite.ru/uploads/sample.jpg")

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

यह फ़ाइल भेजें:

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

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

upload.php कैसा दिखना चाहिए?

$uploaddir = "/var/www/uploads/"; यदि (move_uploaded_file($_FILES["userfile"]["tmp_name"], $uploaddir. $_FILES["userfile"]["name"])) (प्रिंट करें "फ़ाइल मान्य है, और सफलतापूर्वक अपलोड की गई थी।"; ) अन्यथा (प्रिंट करें "कुछ त्रुटियाँ हैं!";)

स्क्रिप्ट लिखते समय, एक स्वाभाविक प्रश्न उठता है: डाउनलोड की गई फ़ाइल के बारे में जानकारी कैसे प्राप्त करें और फ़ाइल तक कैसे पहुँचें। यदि आप PHP संस्करण 4.1.0 या पुराने का उपयोग कर रहे हैं, तो आपका सबसे अच्छा दांव वैश्विक $_FILES सरणी तक पहुंचना है। प्रत्येक डाउनलोड की गई फ़ाइल के लिए, इसमें निम्नलिखित डेटा के साथ एक हैश सरणी शामिल है:

  • $_फ़ाइलें["उपयोगकर्ताफ़ाइल"]["नाम"]- मूल फ़ाइल नाम, जैसा उपयोगकर्ता ने फ़ाइल का चयन करते समय देखा था;
  • $_फ़ाइलें["उपयोगकर्ताफ़ाइल"]["प्रकार"]- फ़ाइल का माइम/प्रकार, उदाहरण के लिए, छवि/gif हो सकता है; यदि आप अपलोड की गई फ़ाइलों को डाउनलोड करने के लिए एक इंटरफ़ेस प्रदान करना चाहते हैं तो यह फ़ील्ड सहेजने के लिए उपयोगी है;
  • $_फ़ाइलें["उपयोगकर्ताफ़ाइल"]["आकार"]- डाउनलोड की गई फ़ाइल का आकार;
  • $_फ़ाइलें["उपयोगकर्ताफ़ाइल"]["tmp_name"]- डिस्क पर अस्थायी फ़ाइल का पूरा पथ;
  • $_फ़ाइलें["उपयोगकर्ताफ़ाइल"]["त्रुटि"]- चूंकि संस्करण 4.2.0 में एक त्रुटि कोड है जो ऑपरेशन सफल होने पर 0 के बराबर है।

4.1.0 से नीचे के PHP संस्करणों के लिए इस सरणी को $HTTP_POST_FILES कहा जाता है। यह न भूलें कि, $_FILES के विपरीत, यह सरणी सुपर-ग्लोबल नहीं है और इसे एक्सेस करते समय, उदाहरण के लिए, किसी फ़ंक्शन से, आपको स्पष्ट रूप से वैश्विक $HTTP_POST_FILES निर्दिष्ट करना होगा;

यदि आपके सर्वर सेटिंग्स में रजिस्टर_ग्लोबल्स=ऑन, अतिरिक्त वेरिएबल्स जैसे $userfile_name, $userfile_type, $userfile_size... यह ध्यान में रखते हुए, संस्करण 4.2.0 से शुरू होकर, डिफ़ॉल्ट सेटिंग्स रजिस्टर_ग्लोबल्स=ऑफ में, इन वेरिएबल्स के उपयोग की अनुशंसा नहीं की जाती है, भले ही उन्होंने परिभाषित किया हो। डाउनलोड की गई फ़ाइलों के बारे में जानकारी प्राप्त करने का सबसे अच्छा तरीका $_FILES सरणी का उपयोग करना है।

अपलोड की गई फ़ाइलों के साथ काम करने के लिए, अंतर्निहित फ़ंक्शन is_uploaded_file() और move_uploaded_file() का उपयोग करना सबसे अच्छा है, जो जांचते हैं कि फ़ाइल अपलोड की गई है या नहीं और इसे तदनुसार निर्दिष्ट फ़ोल्डर में रखें। अधिक विस्तृत जानकारी मैनुअल पेजों पर पाई जा सकती है। आपको पहिये को दोबारा नहीं बनाना चाहिए और अस्थायी फ़ाइलों के साथ स्वयं काम नहीं करना चाहिए, उन्हें कॉपी नहीं करना चाहिए, उन्हें हटा देना चाहिए। यह आपसे पहले और आपके लिए पहले ही किया जा चुका है।

सर्वर ट्यूनिंग

मैंने सब कुछ ठीक किया, लेकिन कुछ मेरे लिए काम नहीं कर रहा है। शायद मेरा सर्वर गलत तरीके से कॉन्फ़िगर किया गया है?

यदि आपने "सब कुछ ठीक किया", लेकिन आपका कोड काम नहीं करता है, या सही ढंग से काम नहीं करता है, तो निराशा में न पड़ें। शायद समस्या आपके हाथ में नहीं है, बल्कि गलत सर्वर सेटिंग्स में है। यहां उन निर्देशों की सूची दी गई है जो फ़ाइल अपलोडिंग से संबंधित हैं:

Php.ini फ़ाइल में:

  • यदि आप यह जानना चाहते हैं कि आपका php.ini कहाँ स्थित है, तो चलाएँ
  • फ़ाइल_अपलोड- सामान्य रूप से फ़ाइल डाउनलोड को प्रतिबंधित करने या अनुमति देने की क्षमता। डिफ़ॉल्ट चालू है.
  • upload_max_filesize- अधिकतम फ़ाइल आकार जिसे अपलोड किया जा सकता है। यदि आपको बड़ी फ़ाइलों के साथ काम करने की आवश्यकता है, तो इस सेटिंग को बदलें। डिफ़ॉल्ट 2M है. पोस्ट_मैक्स_साइज़ बदलना न भूलें.
  • पोस्ट_अधिकतम_आकार- POST अनुरोध में प्रेषित डेटा के आकार पर सामान्य ऊपरी सीमा। यदि आपको बड़ी फ़ाइलों के साथ काम करने, या एक ही समय में एकाधिक फ़ाइलें स्थानांतरित करने की आवश्यकता है, तो इस सेटिंग को बदलें। डिफ़ॉल्ट मान 8M है.
  • upload_tmp_dir- सर्वर पर एक अस्थायी निर्देशिका जिसमें सभी डाउनलोड की गई फ़ाइलें रखी जाएंगी। जांचें कि इसे क्या अधिकार दिए गए हैं (यदि आपको इस स्तर पर कोई कठिनाई है, तो लेख के अंत में स्पष्टीकरण देखें)। ऐसी निर्देशिका मौजूद होनी चाहिए और जिस उपयोगकर्ता के अंतर्गत अपाचे चल रहा है उसके पास इस निर्देशिका को लिखने की अनुमति भी होनी चाहिए। यदि आप open_आधारित प्रतिबंध सक्षम के साथ काम कर रहे हैं, तो अस्थायी निर्देशिका अंदर होनी चाहिए। आपको इसे साफ करने या नामों को अद्वितीय बनाने के बारे में चिंता करने की ज़रूरत नहीं है, PHP आपके लिए इस समस्या का समाधान करता है।

फाइल मैं httpd.conf:

  • सबसे पहले, सुनिश्चित करें कि आप Apache 1.3 वेब सर्वर का उपयोग कर रहे हैं (लेखन के समय नवीनतम संस्करण 1.3.27 है)। यदि आप अपाचे 2.0 का उपयोग कर रहे हैं, तो आपको दस्तावेज़ से निम्नलिखित अंश पढ़ना चाहिए:

    Apache 2.0 और PHP का उपयोग उत्पादन परिवेश में न तो यूनिक्स और न ही विंडोज़ पर न करें।

  • यदि आपको "पोस्ट विधि की अनुमति नहीं है" संदेश प्राप्त होता है, तो इसका मतलब है कि आपको निम्नलिखित निर्देशों के समान कुछ देखना चाहिए, और अनुमति कीवर्ड का उपयोग करना चाहिए: आदेश दें अनुमति दें, अस्वीकार करें सभी से अनुमति दें
  • बाइनरी फ़ाइलें डाउनलोड करने में समस्याएँ - क्लासिक प्रश्न "अपलोड करते समय फ़ाइलें क्रैश क्यों हो जाती हैं"। यहां दीमा बोरोडिन (http://php.spb.ru) द्वारा प्रस्तावित एक समाधान है: उस निर्देशिका में जहां स्क्रिप्ट स्थित है, एक .htaccess फ़ाइल बनाएं जिसमें हम लिखते हैं: चारसेट डिसेबल ऑन टू फाइल httpd.confपंक्तियाँ जोड़ें: चारसेटरेकोडमल्टीपार्टफॉर्म बंद

इस नुस्खे के लिए कुछ स्पष्टीकरण: ऊपर वर्णित समस्या, जब सर्वर पर अपलोड किए गए अभिलेख अनपैक नहीं किए जाते हैं और चित्र प्रदर्शित नहीं होते हैं, इस तथ्य के कारण हो सकता है कि रूसी अपाचे वेब सर्वर का उपयोग किया जाता है। चारसेटडिसेबल निर्देश चारसेट-प्रोसेसिंग मॉड्यूल को अक्षम कर देता है, अर्थात। इस फ़ोल्डर में स्थित फ़ाइलों को डाउनलोड करते समय कोई रीकोडिंग नहीं होगी। charsetRecodeMultipartForms निर्देश सामग्री-प्रकार: मल्टीपार्ट/फॉर्म-डेटा हेडर के साथ POST विधि के माध्यम से प्रेषित डेटा की रीकोडिंग को अक्षम कर देता है। वे। इस सेटिंग के साथ प्रेषित बाइनरी डेटा को उसके मूल रूप में छोड़ दिया जाएगा, और अन्य सभी साइट सामग्री को वर्तमान सर्वर सेटिंग्स के अनुसार रिकोड किया जाएगा।

लेकिन जटिलताएँ उत्पन्न हो सकती हैं: इस तथ्य के लिए तैयार रहें कि कुछ मामलों में आपको अनुरोधों के पाठ भागों को स्वयं ही दोबारा कोड करना होगा। दस्तावेज़ इस बारे में क्या कहता है:

charsetRecodeMultipartForms निर्देश का उपयोग करें, जिसे PL23 में पेश किया गया था, लेकिन आपको अभी भी अनुरोधों के टेक्स्ट भागों को मैन्युअल रूप से रीकोड करना होगा। ऐसा करने के लिए, आप अन्य मॉड्यूल में उपलब्ध रूसी अपाचे एपीआई या mod_perl से उपलब्ध रूसी अपाचे पर्ल एपीआई का उपयोग कर सकते हैं।

एन्कोडिंग निर्धारित करने का एक उदाहरण यहां पाया जा सकता है: http://tony2001.phpclub.net/detect_charset/detect.phps

रूसी अपाचे के लिए नवीनतम दस्तावेज़ इसकी आधिकारिक वेबसाइट: http://apache.lexa.ru/ पर स्थित है।

यह न भूलें कि किसी भी कॉन्फ़िगरेशन परिवर्तन के बाद, आपको अपना वेब सर्वर पुनरारंभ करना होगा।

.htaccess का उपयोग करके Apach सेटिंग्स को कॉन्फ़िगर करना भी संभव है:

Php_value upload_max_filesize 50M php_value post_max_size 50M

अतिरिक्त सुविधाओं

एक साथ कई फ़ाइलें अपलोड करना

एकाधिक फ़ाइल अपलोड फ़ॉर्म का उदाहरण:

ये फ़ाइलें भेजें:


और बढ़ाना न भूलें पोस्ट_अधिकतम_आकार, यदि कई फ़ाइलें अपेक्षित हैं

सर्वर पर स्वचालित रूप से फ़ाइलें अपलोड करें

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

MySQL डेटाबेस में फ़ाइलें संग्रहीत करना

यदि आप डाउनलोड की गई फ़ाइलों को डेटाबेस में संग्रहीत करने की योजना बना रहे हैं, तो आपको निम्नलिखित बातें याद रखनी होंगी:

  • आपको BLOB फ़ील्ड का उपयोग करना होगा
  • इसे डेटाबेस में डालने से पहले, स्ट्रिंग पर mysql_escape_string() लगाना न भूलें
  • फ़ाइल प्रदर्शित करते समय, आपको सामग्री/प्रकार शीर्षलेख निर्दिष्ट करना होगा

याद रखें कि जो स्क्रिप्ट आपका HTML प्रदर्शित करती है उसका उस स्क्रिप्ट से कोई लेना-देना नहीं है जो छवि प्रदर्शित करती है। ये दो अलग-अलग अनुप्रयोग होने चाहिए.

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

छवि गुण प्राप्त करना.

यदि आपको सर्वर पर फ़ाइल अपलोड करने से पहले किसी छवि के प्रकार या आकार की जांच करने के कार्य का सामना करना पड़ता है, तो आपको getimagesize() फ़ंक्शन की आवश्यकता होगी। यह डिस्क पर एक फ़ाइल का नाम एक तर्क के रूप में लेता है और एक सरणी लौटाता है जिसके पहले दो तत्व क्रमशः चौड़ाई और ऊंचाई हैं, और तीसरा छवि प्रकार है। यदि निर्दिष्ट फ़ाइल से सही छवि को पढ़ना असंभव है, तो फ़ंक्शन गलत रिटर्न देता है।

रूसी भाषा के नामों वाली फ़ाइलें अपलोड करना

सर्वर पर फ़ाइलें अपलोड करते समय, आपको "गैर-मानक" वर्णों (उदाहरण के लिए, रूसी अक्षर) की उपस्थिति के लिए उनके मूल नामों की जांच करनी चाहिए। यदि वे मौजूद हैं, तो उन्हें प्रतिस्थापित किया जाना चाहिए। मूल फ़ाइल नाम $_FILES["userfile"]["name"] वेरिएबल में पाया जा सकता है। रूसी भाषा की स्ट्रिंग को लिप्यंतरण में कैसे रिकोड किया जाए, यह PHP उदाहरणों में पाया जा सकता है।

डाउनलोड स्थिति प्रदर्शित करना (प्रगति पट्टी)

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

फ़ाइल अनुमतियाँ

सर्वर पर अधिकारों के साथ समस्याएँ (upload_tmp_dir)

यूनिक्स जैसे ऑपरेटिंग सिस्टम में, प्रत्येक फ़ोल्डर, फ़ाइल और लिंक के पास संबंधित एक्सेस अधिकार होते हैं। वे rwx-rw-r- या संख्या 754 जैसे दिख सकते हैं।

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

स्वामी समूह अन्य (यू) (जी) (ओ) आरडब्ल्यूएक्स आरडब्ल्यूएक्स आरडब्ल्यूएक्स

यहां, मालिक, समूह के सदस्यों और अन्य सभी उपयोगकर्ताओं के पास फ़ाइल को पढ़ने, लिखने और निष्पादित करने का अधिकार है। अधिकार निम्नलिखित अक्षरों का कोई सार्थक संयोजन हैं:

आर पढ़ने का अधिकार. (4)
w अनुमति लिखें. (2)
x दाएँ निष्पादित करें (कैटलॉग खोज)। (1)

  • निर्देशिका के स्वामी को उस उपयोगकर्ता पर सेट करें जिसके विशेषाधिकारों के साथ अपाचे चल रहा है। आप इसे httpd.conf फ़ाइल से या सर्वर पर प्रक्रियाओं की सूची देखकर पता लगा सकते हैं। निर्देशिका अधिकार 700 (rwx------) होने चाहिए।
  • भले ही निर्देशिका का स्वामी कोई भी हो, अनुमतियाँ 777 (rwxrwxrwx) पर सेट करें।

    सर्वर पर चित्र अपलोड करने के कार्यान्वयन का एक उदाहरण।

    $max_image_width = 380; $max_image_height = 600; $max_image_size = 64 * 1024; $valid_types = array("gif","jpg", "png", "jpeg"); यदि (isset($_FILES["userfile"])) ( यदि (is_uploaded_file($_FILES["userfile"]["tmp_name"])) ( $filename = $_FILES["userfile"]["tmp_name"]; $ ext = सबस्ट्र($_FILES["userfile"]["name"], 1 + strrpos($_FILES["userfile"]["name"], ".")); if (filesize($filename) > $max_image_size ) ( इको "त्रुटि: फ़ाइल का आकार > 64K"; ) अन्यथा (!in_array($ext, $valid_types)) ( इको "त्रुटि: अमान्य फ़ाइल प्रकार।"; ) अन्यथा ( $आकार = GetImageSize($फ़ाइल नाम); यदि (($आकार) && ($आकार< $max_image_width) && ($size < $max_image_height)) { if (@move_uploaded_file($filename, "/www/htdocs/upload/")) { echo "File successful uploaded."; } else { echo "Error: moving fie failed."; } } else { echo "Error: invalid image properties."; } } } else { echo "Error: empty file."; } } else { echo "
    यह फ़ाइल भेजें:
    "; }

    मूल लेख PHP क्लब वेबसाइट पर है


    सर्वर से फ़ाइल कैसे डाउनलोड करें?
  • किसी चित्र या किसी अन्य फ़ाइल को सर्वर पर अपलोड करने के लिए एक सिस्टम बनाने के लिए, इस फॉर्म द्वारा भेजे गए डेटा को संसाधित करने के लिए एक HTML फॉर्म और एक PHP स्क्रिप्ट का उपयोग किया जाता है। यह इस प्रकार है कि सर्वर पर फ़ाइलें अपलोड करने का समर्थन करने वाली विभिन्न सेवाएँ कार्यान्वित की जाती हैं। इसे सर्वर पर डेटा भेजने के सामान्य रूप के समान ही लागू किया जाता है।

    HTML फ़ाइल सबमिशन फॉर्म

    फ़ाइल अपलोड का सबसे सरल रूप है:





    परिणामस्वरूप, हमें एक फॉर्म मिलता है जिसमें फ़ाइल चुनने के लिए एक फ़ील्ड और एक बटन होता है जो सर्वर पर फॉर्म डेटा भेजता है:

    पैरामीटर entypeइस फॉर्म में मल्टीपार्ट/फॉर्म-डेटा मान प्राप्त होता है, जो यह निर्धारित करता है कि बाइनरी डेटा इस फॉर्म में भेजा जाएगा, यानी। फ़ाइल। यदि यह मान निर्दिष्ट नहीं है, तो फॉर्म टेक्स्ट जानकारी सबमिट करने में डिफ़ॉल्ट हो जाएगा।

    पैरामीटर MAX_FILE_SIZE, प्रपत्र में निर्दिष्ट बाइट्स में निर्दिष्ट अधिकतम फ़ाइल आकार निर्धारित करता है। डिफ़ॉल्ट रूप से, यह आकार सर्वर सेटिंग्स द्वारा निर्धारित किया जाता है।

    डाउनलोड की गई फ़ाइल टैग को इंगित करने के लिए इसमें "फ़ाइल" प्रकार होना चाहिए, और PHP स्क्रिप्ट के आगे के संचालन के लिए मान "नाम" भी निर्दिष्ट किया जाना चाहिए।

    फॉर्म डेटा सबमिट करना टैग के साथ किया जाता है "सबमिट" प्रकार के साथ। यह एक नियमित बटन के साथ प्रदर्शित होता है।

    PHP फ़ाइल सेविंग कोड

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

    प्राप्त कोड में, फ़ाइल डेटा सुपरग्लोबल सरणी $_FILES में समाहित है। तदनुसार, आप फ़ॉर्म से भेजी गई फ़ाइल के बारे में जानकारी $_FILES["my_file"] में देख सकते हैं। ऐसी सारणी में निम्नलिखित जानकारी होती है:

    सर्वर पर यह जानकारी प्राप्त करने के बाद, फ़ाइल को एक स्थायी निर्देशिका में कॉपी किया जाना चाहिए, क्योंकि स्क्रिप्ट पूरी होने पर अस्थायी फ़ाइल स्वचालित रूप से हटा दी जाएगी।

    प्रतिलिपि प्रतिलिपि() फ़ंक्शन द्वारा की जाती है, जिसके पैरामीटर स्रोत फ़ाइल का नाम हैं (इस मामले में, अस्थायी फ़ाइल का नाम $_FILES["my_file"]["tmp_name"] है) और का नाम है गंतव्य फ़ाइल.

    परिणाम निम्नलिखित कोड होना चाहिए:

    // सर्वर पर नई फ़ाइल की निर्देशिका और नाम निर्दिष्ट करना
    $new_file = "/upload_files/" .$_FILES["uploadfile" ]["name" ];

    // फ़ाइल को कॉपी करें
    अगर (कॉपी($_FILES["अपलोडफ़ाइल" ]["tmp_name" ], $new_file)) (
    गूंज "फ़ाइल सर्वर पर अपलोड कर दी गई है";
    } अन्य(
    गूंज "फ़ाइल लोड करने में त्रुटि";
    ?>

    किसी फ़ाइल की प्रतिलिपि सर्वर पर मौजूदा फ़ोल्डर में फ़ाइलें बनाने के मौजूदा अधिकारों के साथ की जानी चाहिए।

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

    यदि कॉपी सफल होती है तो कॉपी() फ़ंक्शन सत्य लौटाता है और यदि प्रतिलिपि प्रक्रिया के दौरान कोई त्रुटि होती है तो गलत लौटाता है।

    यदि प्रतिलिपि सफल होती है, तो आप सर्वर पर अपलोड की गई फ़ाइल के साथ कोई भी आवश्यक कार्रवाई कर सकते हैं।

    क्षमा करें... मैं सभी स्पैम से नहीं निपट सकता, इसलिए जब तक मुझे मंचों के लिए कोई बेहतर समाधान नहीं मिल जाता, मैं उन्हें बंद कर रहा हूं। अभी के लिए कृपया सामुदायिक सहायता के लिए stackoverflow.com जैसी अद्भुत सेवाओं का उपयोग करें। धन्यवाद।

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

      मैंने uploadify.php स्क्रिप्ट में विभिन्न स्थानों पर str_replace फ़ंक्शन का उपयोग करने का प्रयास किया, लेकिन सफलता नहीं मिली, इसने या तो अपलोड करना जारी रखा लेकिन रिक्त स्थान नहीं बदला। या फिर यह बिल्कुल भी अपलोड नहीं हुआ, हालाँकि ऐसा लग रहा था जैसे कि यह अपलोड हुआ हो...

      इसे कैसे/कहां लागू किया जाएगा?

      आम तौर पर ऐसा ही होता है

      $str = "यह एक परीक्षण है";
      $गिनती = 1;
      जबकि($गिनती)
      $str = str_replace(" ","", $str, $count);
      प्रतिध्वनि $str;
      ?>

      लेकिन शायद फ़ाइल नाम से सभी ख़राब चीज़ों को साफ़ करने के लिए preg_replace बेहतर विकल्प है

      $fname='फ़ाइल'ame 1\/23;''''''la\l[a]*(/.jpg';
      $प्रतिस्थापन='_';
      $पैटर्न='/[^a-zA-Z0-9\.]/';
      $fname=preg_replace($पैटर्न,$रिप्लेस,$fname);
      $fname=str_replace($replace,"",$fname);
      प्रतिध्वनि"
      ".$fनाम;

      यह मेरा अंतिम php है, जो फ़ाइल नाम को रिक्त स्थान और अन्य समस्याग्रस्त वर्णों से साफ़ करता है,
      बाद में फ़ाइल नाम को यादृच्छिक बनाता है और इसे बैकएंड पर वापस भेजता है:

      यदि (!खाली($_FILES)) (
      $प्रतिस्थापन='_';
      $newfile= $_FILES["फ़ाइलडेटा"]["नाम"] ;
      $ext = पदार्थ($newfile,-4); //फ़ाइल नाम को अव्यवस्थित न करने के लिए टिप्पणी करें
      $pre = mb_split($ext,$newfile); //फ़ाइल नाम को अव्यवस्थित न करने के लिए टिप्पणी करें
      $randoms = Base_convert(mt_rand(0x1679616, 0x39AA3FF), 10, 36); //फ़ाइल नाम को अव्यवस्थित न करने के लिए टिप्पणी करें
      $newfile = $pre.$randoms.$ext; //फ़ाइल नाम को अव्यवस्थित न करने के लिए टिप्पणी करें
      $पैटर्न='/[^a-zA-Z0-9\.]/';
      $नईफ़ाइल = preg_replace($पैटर्न,$प्रतिस्थापन,$नईफ़ाइल);
      $tempFile = $_FILES["फ़ाइलडेटा"]["tmp_name"];
      $targetPath = $_SERVER["DOCUMENT_ROOT"]। $_REQUEST["फ़ोल्डर"] . "/";
      $targetFile = str_replace("//","/",$targetPath) . $नईफ़ाइल;
      move_uploaded_file($tempFile,$targetFile);
      chmod($targetFile,0777);
      प्रतिध्वनि $नईफ़ाइल; // मैक ओएसएक्स पर ऑनकंप्लीट फ़ंक्शन को ट्रिगर करने के लिए आवश्यक है (लिनक्स और विंडोज़ के लिए भी ऐसा ही लगता है)
      //और uploadify में "रिस्पॉन्स" वेरिएबल पर नया फ़ाइल नाम वापस भेजने के लिए
      }
      अन्यथा ( // मैक ओएसएक्स पर ऑनकंप्लीट फ़ंक्शन को ट्रिगर करने के लिए आवश्यक है
      प्रतिध्वनि "त्रुटि!";
      }
      ?>

      यह बहुत अच्छा है, लेकिन मैंने देखा है कि अब चेकिंग स्क्रिप्ट बिल्कुल ठीक से काम नहीं करती है। check.php यह देखना चाहता है कि क्या किसी भिन्न नाम वाली फ़ाइलें हैं, लेकिन जो फ़ाइल हम अपलोड कर रहे हैं उसका नाम बदल जाएगा, चेक स्क्रिप्ट, किसी अन्य str_replace में उसका हिसाब कैसे रखें?

      हम उसे कैसे लिखें?

      असल में मैं चेक स्क्रिप्ट का उपयोग नहीं करता हूं। मेरे मामले में मुझे सैकड़ों छवियां अपलोड करनी होती हैं और इसलिए मुझे उपयोगकर्ता को फ़ाइल नाम के बारे में चिंता किए बिना फ़ाइलें अपलोड करने की संभावना देनी होगी क्योंकि वह लोगो नामक फ़ाइल अपलोड करना चाह सकता है विभिन्न डेटासेट के लिए .gif शायद दस बार।
      इसीलिए मैंने फ़ाइल नाम में एक यादृच्छिक भाग जोड़ा है। $randoms संभवतः कभी भी एक ही परिणाम दो बार नहीं देता है।
      मुझे लगता है कि आप समान नियमों का पालन करने के लिए check.php को बदल नहीं सकते हैं, क्योंकि $randoms समान फाइननेम के लिए भी भिन्न होंगे, हालाँकि

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

      $fileArray = सरणी();
      $प्रतिस्थापन='_';
      $पैटर्न='/[^a-zA-Z0-9\.]/';
      foreach ($_POST $key => $value के रूप में) (
      अगर ($कुंजी != "फ़ोल्डर") (
      $मूल्य= preg_replace($पैटर्न,$प्रतिस्थापन,$मूल्य);
      यदि (file_exists($_SERVER["DOCUMENT_ROOT"] . $_POST["फ़ोल्डर"] . "/" . $value)) (
      $fileArray[$key] = $मूल्य;
      }
      }
      }
      इको json_encode($fileArray);

      यह केवल एक त्वरित अनुमान है, यदि यह काम करता है तो प्रयास करें।
      और upload.php में जो पंक्तियाँ इंगित की गई हैं उन पर टिप्पणी करें।


    बंद करना