2011-05-05 7 views
7

मैं अपने सर्वर पर एकाधिक फ़ाइलों का अपलोड करने के लिए प्लूपलोड का उपयोग कर रहा हूं। इसका उपयोग करते हुए, पैरामीटर 'url:' upload.php 'है। upload.php फ़ाइलों को प्राप्त करने के रूप में पकड़ता है, और अगर वे चकित हो जाते हैं तो उन्हें पुनः संयोजित कर सकते हैं। एक बार पूर्ण फ़ाइल प्राप्त हो जाने के बाद, यह एक हरे रंग के चेकबॉक्स आइकन को प्रदर्शित करते हुए मूल पृष्ठ पर प्रतिक्रिया भेजता है।php नाम बदलें() मेरी फ़ाइल को दूषित क्यों कर रहा है?

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

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

//get the original file info 
$filepath = $_SERVER['DOCUMENT_ROOT'].'/uploads/'; 
$filepathinfo = pathinfo($filepath.$fileName);//fileName is used previously in the file 

//rename original file to a unique name 
$finding_id = 'xyz'; 
$file_name_new = uniqid($client_id . '-' . $finding_id . '-', true); //doesn't include extension 
//rename($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 
//copy($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 

के रूप में है, मैं अपने एक फ़ाइल मिलता है, या कैसे कभी कई मैं अपलोड किया है, बाइट आकार मूल सटीक मेल खाता है, और नाम ही रहता है (कुछ वर्णों को हटाने के लिए छोड़कर)।

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

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

कोई विचार? ऐसा लगता है कि यह बहुत सरल होना चाहिए।

+1

क्या प्रक्रिया अपलोड की गई गई प्रक्रिया पूरी हुई? फाइल डिस्क्रिप्टर बंद था? सभी बफर फ्लेश किए गए थे? – Konerak

+0

इस समाधान के अनुसार: http://stackoverflow.com/questions/3159431/php-change-file-extension, प्रतिलिपि प्रतिलिपि का उपयोग करना है। फिर भी, ऐसा नहीं करना चाहिए। – Horus

+0

@ होरस - मैंने प्रतिलिपि की कोशिश की, लेकिन परिणाम के अजीब के रूप में मिला। इस प्लूपलोडर के साथ कुछ चलना चाहिए, जिसका मैंने पहले कभी उपयोग नहीं किया है। – Bob

उत्तर

2

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

0

क्या आप स्वयं फ़ाइल को लिख रहे हैं? यदि ऐसा है, तो समस्या यह हो सकती है कि आप fflush या fclose पर कॉल खो रहे हैं। (फ़ाइल का आखिरी हिस्सा लिखे नहीं जा रहा है और जब PHP इसे लिखने के लिए गोल हो जाता है तो फाइल नहीं रहती है। ऐसा नहीं होना चाहिए यदि आप लिनक्स या कुछ अन्य यूनिक्स का उपयोग कर रहे हैं, लेकिन मैं इसे विंडोज पर देख सकता हूं।)

+0

नहीं, खुद की फाइल में कोई भी लेखन नहीं कर रहा है। बस प्लूपलोड हैंडल को देना। जहां तक ​​मैं कह सकता हूं कि फ़ाइल उचित रूप से fclose का उपयोग कर रही है। – Bob

4
  1. यदि फ़ाइल अभी HTTP POST द्वारा अपलोड किया गया था move_uploaded_file
  2. उपयोग करें यदि आप fopen() इस अनुरोध में कहीं एक ही फाइल fclose कॉल करने के लिए सुनिश्चित करें कि()
संबंधित मुद्दे