PHP fputcsv () दृष्टिकोण संपर्क में आयात करने के लिए एक CSV बनाने के लिए

मैं डेटाबेस से मूल्य प्राप्त कर रहा हूं और उन्हें एक सीएसवी फ़ाइल डाउनलोड करने और Outlook में आयात करने के लिए जानकारी डाल रहा हूं।

मैं इस कोड का उपयोग कर रहा हूँ

// output headers so that the file is downloaded rather than displayed
$today = date("m.d.y");
header('Content-Type: text/csv;');
header('Content-Disposition: attachment; filename='.$today.'-allowners.csv');

// create a file pointer connected to the output stream
$output = fopen('php://output', 'w');

// output the column headings
fputcsv($output, array('firstname', 'lastname', 'email'));

// fetch the data
$rows = mysql_query('SELECT first_name, last_name, email FROM owners');

// loop over the rows, outputting them
while ($row = mysql_fetch_assoc($rows)) fputcsv($output, $row);

और मुझे अजीब परिणाम मिल रहे हैं, पहले कॉलम खिताब में डिलीमीटर नहीं है, दूसरी बात डेटाबेस से सभी फ़ील्ड '' 'के साथ सीमित नहीं हैं। आउटपुट इस तरह जाता है:

firstname,lastname,email
" aaaaa"," bbbbb",0000
" aaaaa"," bbbbb"," 0000"
"aaaaa ",bbbbb,[email protected]
 aaaaa,bbbbb,[email protected]
" aaaaa"," bbbbb"," [email protected]"
" aaaaa"," bbbbb"," [email protected]"

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

---------------उपाय---------------

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

अन्य प्रश्न के उत्तर के निम्नलिखित यूआरएल में समाधान पाया जा सकता है।

http://stackoverflow.com/a/12723639/2633609
0
कॉलम शीर्षक do में एक डिलीमीटर होता है, उनके पास एक , है जो delimiter के रूप में होता है, जो fputcsv() के लिए डिफ़ॉल्ट है
जोड़ा लेखक Mark Baker, स्रोत
हां मैंने इसे किसी अन्य फ़ाइल, अन्य कार्यालय संस्करणों, अन्य विंडोज संस्करणों में चिपकाने का प्रयास किया है, लेकिन अभी भी कोई भाग्य नहीं है कि त्रुटि निम्न बताती है - अनुवादक अल्पविरामित मूल्यों (विंडोज़) में एक फ़ाइल त्रुटि आई है (अनुवादक को प्रारंभ करने के दौरान एक फ़ील्ड मैप बनाएं) मान। आउटलुक डेटा फ़ाइल "सी: \ .... \ mailling.csv" नहीं मिल सका। अगर आपके पास इसे खोलने की अनुमति है, तो जांचें कि आपके पास सही फ़ाइल है, और यदि वह किसी अन्य कार्यक्रम में खुला नहीं है।
जोड़ा लेखक flynn, स्रोत
समाधान मिला, ऐसा इसलिए है क्योंकि लाइनरक्स को लिनक्स से खिड़कियों से अलग किया जाता है, इसलिए एक रूपांतरण किया जाना है, मैं समाधान के साथ सवाल फिर से संपादित कर दूंगा।
जोड़ा लेखक flynn, स्रोत
ऐसा लगता है कि आपके पास मौजूद आउटपुट अमान्य है। उद्धरण उन क्षेत्रों से गुम हैं जिन्हें उद्धरण की आवश्यकता नहीं है, लेकिन सभी डिलीमीटर (') वहां हैं। क्या यह संभव है कि फाइल अंत में बंद न हो?
जोड़ा लेखक Rob Baillie, स्रोत
दस्तावेज एक उदाहरण प्रदान करता है जिसमें कहा गया है कि बाड़ों (उद्धरण) केवल तभी लागू किए जाएंगे जहां उनकी आवश्यकता है। php.net/manual/en/function.fputcsv.php
जोड़ा लेखक Rob Baillie, स्रोत
प्रदान किया गया उदाहरण आउटपुट Excel 2003 में सही ढंग से लोड हो जाता है
जोड़ा लेखक Rob Baillie, स्रोत
क्या आपने आउटपुट फ़ाइल को टेक्स्ट एडिटर में खोलने की कोशिश की है, इसे एक नई फाइल में चिपकाया है और देख रहा है कि क्या यह खुलता है? मुझे पता है कि यह एक लंबा शॉट है, लेकिन क्या आप वास्तविक आउटपुट प्रदान कर सकते हैं?
जोड़ा लेखक Rob Baillie, स्रोत

2 उत्तर

बाड़ों को जोड़ा नहीं जाता है क्योंकि उनकी आवश्यकता नहीं होती है। संलग्न सभी मूल्य समान गुण साझा करते हैं: उनके पास अग्रणी स्थान है।

ध्यान रखें कि सीएसवी बहुत खराब परिभाषित प्रारूप है। बस कुछ भी सीएसवी हो सकता है। Delimiters, बाड़ों और भागने के पात्र अच्छी तरह से परिभाषित नहीं हैं।

आपको जो त्रुटि मिल रही है, उसके लिए। शायद एक्सेल सेमी-कोलन अलग फाइल चाहता है? अलग-अलग टैब भी कभी-कभी काम करता प्रतीत होता है। यह आपकी भाषा/क्षेत्रीय सेटिंग्स पर निर्भर करता है।

0
जोड़ा

उदाहरण आउटपुट में आपने प्रदान किया है कि आपके पास कोई प्रारूपण समस्या नहीं है:

  • जिन क्षेत्रों को बाड़ों की आवश्यकता नहीं है (डबल-कोट्स) में डबल-कोट नहीं हैं
  • जिन क्षेत्रों को बाड़ों की आवश्यकता है, उन्हें
  • है
  • सभी पंक्तियों के सभी फ़ील्ड में आवश्यक डिलीमीटर (अल्पविराम)
  • है

दिया गया उदाहरण एक वैध सीएसवी आउटपुट है और यहां दस्तावेज़ के साथ लाइन में है: php.net/manual/en/function.fputcsv.php

सबसे मजबूत संदेह यह है कि फ़ाइल आपकी स्क्रिप्ट के अंत में एक फ्लेक्स के साथ ठीक से बंद नहीं है।

0
जोड़ा
जब PHP समाप्त होता है तो सभी खुले संसाधन स्वचालित रूप से बंद हो जाते हैं।
जोड़ा लेखक Halcyon, स्रोत
हा, उचित बिंदु। मुझे नहीं लगता कि मैंने इस विंडोज बग के बारे में सुना है, लेकिन शायद आपके पास है? :)
जोड़ा लेखक Halcyon, स्रोत
हम्म, मुझे यकीन नहीं है कि मुझे विश्वास होगा कि विंडोज बॉक्स पर यह मामला है।
जोड़ा लेखक Rob Baillie, स्रोत