आपके द्वारा बताए गए त्रुटि संदेश के अपवाद को एक ही स्थान पर ट्रिगर किया गया है (पठनीयता के लिए थोड़ा छोटा कोड)
final public function __construct($source)
{
$this->_source = $source;
$this->_init();
// validate column names consistency
if (is_array($this->_colNames) && !empty($this->_colNames)) {
$this->_colQuantity = count($this->_colNames);
if (count(array_unique($this->_colNames)) != $this->_colQuantity) {
Mage::throwException(Mage::helper('importexport')->__('Column names have duplicates'));
}
}
}
इसका मतलब है, के count(array_unique($this->_colNames))
लिए असमान होना चाहिए$this->_colQuantity
$_colNames
सरणी में सेट किया गया है Mage_ImportExport_Model_Import_Adapter_Csv::rewind()
(जिसके दौरान कहा जाता है _init()
।
एक बार फिर, कोड थोड़ा पठनीयता के लिए काट दिया गया है:
public function rewind()
{
// rewind resource, reset column names, read first row as current
rewind($this->_fileHandler);
$this->_colNames = fgetcsv($this->_fileHandler, null, $this->_delimiter, $this->_enclosure);
}
के $_delimiter
लिए सेट है ,
, के $_enclosure
लिए सेट है "
।
समस्या को पुन: उत्पन्न करने का प्रयास करने के लिए, यदि मैं आपके प्रश्न से CSV एक्सट्रैक्शन को test.csv नामक फाइल में कॉपी करता हूं और निम्नलिखित कोड चलाता हूं :
$f = fopen('test.csv', 'r');
$names = fgetcsv($f, null, ',', '"');
$qty = count($names);
$uniqueQty = count(array_unique($names));
printf("%d records, %d unique records\n", $qty, $uniqueQty);
यह निम्नलिखित उत्पादन का उत्पादन करता है:
29 records, 29 unique records
इसका मतलब है, आपकी CSV फ़ाइल मूलभूत रूप से ठीक है। अंतर कहीं और होना चाहिए।
कैसे array_unique
काम करता है, इसको देखते हुए एक नोट है कि कैसे PHP 5.2.9 में सरणी तत्वों के प्रकार को बदलना: http://php.net/manual/en/function.array-unique.php#refsect1-function.array-unique -changelog
समस्या को पुन: उत्पन्न करने के लिए, मैंने SORT_REGULAR
विकल्प सेट के साथ अपनी टेस्ट-स्क्रिप्ट को फिर से चलाया , लेकिन यह अभी भी वही परिणाम देता है (जो तर्कसंगत है, क्योंकि एक फ़ाइल को पढ़ने से केवल स्ट्रिंग मान दे सकते हैं)।
इस समय मेरा मानना है कि आपके द्वारा उपयोग किए जा रहे CSV फ़ाइल में अंतर होना चाहिए। यूनिक्स और विंडोज न्यूलाइन वर्ण ( \n
और \r\n
) दोनों को fgetcsv()
कमांड द्वारा मान्यता प्राप्त है , लेकिन पुराने मैकओएस स्टाइल न्यूलाइन कैरेक्टर ( \r
) वास्तव में आपके द्वारा अनुभव किए जा रहे व्यवहार की ओर ले जाएंगे।
मुझे नहीं पता कि क्या यही कारण है कि आप इस मुद्दे का अनुभव कर रहे हैं, लेकिन मेरा सुझाव है कि आप CSV फ़ाइल (फिर से) की जाँच करें। यदि आप अनमॉडिफाइड फ़ाइल (कोई पास्टबिन) को डाउनलोड लिंक प्रदान करते हैं, तो यह भी मदद कर सकता है, इसलिए किसी भी गैर-मुद्रण योग्य वर्ण संरक्षित हैं।
यदि आप उपयोग किए जा रहे PHP संस्करण को पोस्ट करते हैं तो यह भी मदद कर सकता है।