PHP में CSV के साथ कार्य: पूर्ण गाइड
\n\nCSV (Comma-Separated Values) — तालिका डेटा के आदान-प्रदान के लिए सबसे लोकप्रिय प्रारूपों में से एक है। PHP में CSV के साथ कार्य करने के लिए अंतर्निहित फ़ंक्शन के साथ-साथ शक्तिशाली तृतीय-पक्ष लाइब्रेरी भी हैं। इस लेख में, हम PHP में CSV फ़ाइलों को पढ़ने, लिखने और प्रसंस्करण के सभी बुनियादी तरीकों पर चर्चा करेंगे।
\n\nCSV के साथ कार्य करने के लिए अंतर्निहित PHP फ़ंक्शन
\n\nPHP कई अंतर्निहित फ़ंक्शन प्रदान करता है जो अतिरिक्त लाइब्रेरी स्थापित किए बिना CSV फ़ाइलों के साथ कार्य करने की अनुमति देते हैं। इनमें से मुख्य हैं:
\n\n- \n
fgetcsv()— फ़ाइल से एक पंक्ति पढ़ना और उसे एक सरणी में पार्स करना \n fputcsv() — एक सरणी को CSV प्रारूप में फ़ाइल में लिखना
str_getcsv()— CSV स्ट्रिंग को सरणी में पार्स करना
fgetcsv का उपयोग करके CSV फ़ाइल पढ़ना
\n\nफ़ंक्शन fgetcsv() खुली फ़ाइल से एक पंक्ति पढ़ता है और इसे एक सरणी के रूप में लौटाता है। पूरी फ़ाइल पढ़ने का उदाहरण:
<?php\n$filename = 'data.csv';\n\nif (($handle = fopen($filename, 'r')) !== false) {\n while (($data = fgetcsv($handle, 1000, ',')) !== false) {\n // $data — पंक्ति डेटा वाली सरणी\n echo implode(' | ', $data) . "\\n";\n }\n fclose($handle);\n}\n?>\n\nफ़ंक्शन fgetcsv() के पैरामीटर:
- \n
handle— फ़ाइल डिस्क्रिप्टर \n length— पंक्ति की अधिकतम लंबाई (आमतौर पर 0 या 1000) \n separator— फ़ील्ड विभाजक (डिफ़ॉल्ट रूप से अल्पविराम) \n enclosure— फ़ील्ड संलग्नक वर्ण (डिफ़ॉल्ट रूप से दोहरा उद्धरण चिह्न) \n escape— एस्केप वर्ण (डिफ़ॉल्ट रूप से बैकस्लैश) \n
CSV फ़ाइल में डेटा लिखना
\n\nलिखने के लिए फ़ंक्शन fputcsv() का उपयोग किया जाता है। यह एक सरणी लेता है और इसे CSV स्ट्रिंग में परिवर्तित करता है:
<?php\n$data = [\n ['नाम', 'आयु', 'शहर'],\n ['इवान', 25, 'मॉस्को'],\n ['मारिया', 30, 'सेंट पीटर्सबर्ग'],\n];\n\n$filename = 'output.csv';\n$handle = fopen($filename, 'w');\n\nforeach ($data as $row) {\n fputcsv($handle, $row, ';', '"');\n}\n\nfclose($handle);\necho "फ़ाइल $filename सफलतापूर्वक बनाई गई!";\n?>\n\nइस उदाहरण में, हम विभाजक के रूप में अर्धविराम (;) का उपयोग कर रहे हैं, जो अक्सर रूसी भाषा की CSV फ़ाइलों में पाया जाता है।
बड़ी CSV फ़ाइलों का प्रसंस्करण
\n\nबड़ी फ़ाइलों (सैकड़ों हजारों पंक्तियों) के साथ काम करते समय, पूरी फ़ाइल को मेमोरी में लोड न करना महत्वपूर्ण है। पंक्ति-दर-पंक्ति पढ़ने का उपयोग करें:
\n\n<?php\nfunction processLargeCSV($filename) {\n $handle = fopen($filename, 'r');\n \n // यदि है तो हेडर छोड़ें\n $header = fgetcsv($handle);\n \n while (($row = fgetcsv($handle)) !== false) {\n // प्रत्येक पंक्ति को प्रोसेस करें\n $processed = array_map('trim', $row);\n // यहाँ आपका प्रसंस्करण तर्क हो सकता है\n yield $processed; // जनरेटर का उपयोग करें\n }\n \n fclose($handle);\n}\n\n// उपयोग\nforeach (processLargeCSV('bigdata.csv') as $row) {\n // प्रत्येक पंक्ति के साथ अलग-अलग काम करें\n echo "प्रोसेस की गई पंक्ति: " . implode(',', $row) . "\\n";\n}\n?>\n\nजनरेटर (yield) का उपयोग करने से मेमोरी ओवरफ्लो के बिना किसी भी आकार की फ़ाइलों को प्रोसेस करने की अनुमति मिलती है।
उन्नत कार्य के लिए League\\Csv लाइब्रेरी
\n\nअधिक जटिल कार्यों के लिए, league/csv लाइब्रेरी का उपयोग करने की अनुशंसा की जाती है। यह एक सुविधाजनक ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस और कई अतिरिक्त क्षमताएं प्रदान करता है।
Composer के माध्यम से स्थापना:
\ncomposer require league/csv\n\nउपयोग का उदाहरण:
\n\n<?php\nrequire 'vendor/autoload.php';\n\nuse League\\Csv\\Reader;\nuse League\\Csv\\Writer;\n\n// CSV पढ़ना\n$csv = Reader::createFromPath('data.csv', 'r');\n$csv->setHeaderOffset(0); // पहली पंक्ति — हेडर\n\n// सभी रिकॉर्ड को एसोसिएटिव के रूप में प्राप्त करना