2011-12-19 13 views
11

में बचाने मैं 64 एनकोड अपलोड की गई फ़ाइल तो आधार MySQL डेटाबेस में एक मेज के ब्लॉब प्रकार स्तंभ में इस सहेजना चाहते हैं।बेस 64 एन्कोड अपलोड की गई फ़ाइल तो डेटाबेस

मैंने फ़ाइल चर के साथ PHP फ़ंक्शन बेस 64_encode में निर्मित करने का प्रयास किया है लेकिन यह काम नहीं कर रहा है।

वहाँ एक तरह से हम यह कर सकते हैं है?

कारण यह है कि मैं moveuploaded फ़ाइल को किसी फ़ोल्डर में उपयोग नहीं करना चाहता हूं।

धन्यवाद।

+1

आपको ब्लॉब में संग्रहीत करने से पहले फ़ाइल को 6464 कोड करने की आवश्यकता नहीं है। – Sjoerd

+0

फिर आप किसी तालिका में कैसे सहेजते हैं? –

+1

आप बस अपने ब्लॉब फ़ील्ड में फ़ाइल डेटा डाल सकते हैं। – Arfeen

उत्तर

19

@Sjoerd और @zerkms सही तरीके से इंगित करते हैं, आपको ऐसा करने की आवश्यकता नहीं है - कच्चे बाइनरी डेटा को स्टोर करने के लिए ब्लॉब कॉलम का उपयोग किया जाता है, ताकि आप बेस 64 प्रक्रिया को बाईपास कर सकें और फ़ाइल के कच्चे डेटा को सम्मिलित कर सकें।

यदि आप किसी डेटाबेस में छवियों को स्टोर करना चाहते हैं (जिस तरह से, मैं व्यक्तिगत रूप से करना पसंद नहीं करता) कच्चे डेटा को स्टोर करना बेहतर होता है - बेस 64 एन्कोडिंग डेटा को बड़ा बनाता है, और इसका मतलब है कि यह छवि प्रस्तुत करने से पहले डीकोड किया जाना चाहिए, जो प्रोसेसिंग ओवरहेड जोड़ता है।

$data = file_get_contents($_FILES['name_of_control']['tmp_name']); 
$data = mysql_real_escape_string($data); 

$query = " 
    INSERT INTO table 
    (`blob_column`) 
    VALUES 
    ('$data') 
"; 

mysql_query($query); 

तुम सच में Base64 करना चाहते हैं यदि यह सांकेतिक शब्दों में बदलना (इस स्थिति में यह सिर्फ एक varchar में संग्रहित किया जा सकता है):

यह आपको कच्चे बाइनरी डेटा (MySQL विस्तार कल्पना करते हुए) सम्मिलित कर सकते हैं कि कैसे है , बस एक base64_encode() कॉल जोड़ें:

$data = file_get_contents($_FILES['name_of_control']['tmp_name']); 
$data = base64_encode($data); 

// There is an argument that this is unnecessary with base64 encoded data, but 
// better safe than sorry :) 
$data = mysql_real_escape_string($data); 

$query = " 
    INSERT INTO table 
    (`varchar_column`) 
    VALUES 
    ('$data') 
"; 

mysql_query($query); 
+0

एक सवाल, डेव है। लेकिन यह इंजेक्शन के लिए अतिसंवेदनशील नहीं है? और यदि आप mysql_real_escape_string का उपयोग करते हैं, तो ऐसा लगता है कि कुछ सामान्य फ़ाइल प्रकार जैसे पीडीएफ जैसे भ्रष्ट (अपरिवर्तनीय रूप से) भ्रष्ट हैं। मेरी धारणा अब तक है कि बेस 64_encode फ़ाइल से बचने का एकमात्र तरीका है, और सटीक सामग्री को संरक्षित करता है ...? –

+0

से @ टोफरहंट: तैयार बयान का उपयोग करें। तब सब सुरक्षित है! – JDuarteDJ

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