আপনার বর্ণিত ত্রুটি বার্তার ব্যতিক্রমটি ঠিক এক জায়গায় চালিত হয়েছে (পাঠযোগ্যতার জন্য কোডটি কিছুটা কাটা):
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
সেট করা হয় "
।
ইস্যুটি পুনরুত্পাদন করার চেষ্টা করার জন্য, যদি আমি আপনার প্রশ্ন থেকে সিএসভি এক্সট্রাক্টটি টেস্ট কোডএসভি নামে একটি ফাইলটিতে অনুলিপি করি এবং নীচের কোডটি চালান:
$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
এর অর্থ, আপনার সিএসভি ফাইলটি মূলত ঠিক আছে। পার্থক্য অবশ্যই অন্য কোথাও হওয়া উচিত।
কীভাবে array_unique
কাজ করে তা দেখে পিএইচপি 5.2.9 এ অ্যারে উপাদানগুলির হ্যান্ডলিং কীভাবে পরিবর্তিত হয়েছে তা এখানে একটি নোট রয়েছে: http://php.net/manual/en/function.array-unique.php#refsect1-function.array-unique -changelog
ইস্যুটি পুনরুত্পাদন করার জন্য, আমি SORT_REGULAR
বিকল্প টেস্টের সাথে আমার পরীক্ষা-স্ক্রিপ্টটি পুনরায় চালিয়েছি , তবে এটি এখনও একই ফলাফল দেয় (যা যৌক্তিক, যেহেতু কোনও ফাইল পড়া কেবল স্ট্রিংয়ের মান দিতে পারে)।
এই মুহুর্তে আমি বিশ্বাস করি যে পার্থক্যটি আপনি ব্যবহার করছেন সিএসভি ফাইলের মধ্যে থাকতে হবে। ইউনিক্স এবং Windows সম্পর্কে newline অক্ষর ( \n
এবং \r\n
) উভয় দ্বারা স্বীকৃত হয় fgetcsv()
কমান্ড কিন্তু পুরানো MacOS এর শৈলী newline অক্ষর ( \r
) প্রকৃতপক্ষে আচরণ আপনি সম্মুখীন হচ্ছি হতে হবে।
আপনি কেন সমস্যাটি ভোগ করছেন সে কারণেই আমি তা জানতে পারি না তবে আমি আপনাকে সিএসভি ফাইল (আবার) পরীক্ষা করে দেখার পরামর্শ দিই। আপনি যদি অবিশোধিত ফাইলে (কোনও পেস্টবিন নেই) কোথাও ডাউনলোড লিঙ্ক সরবরাহ করেন তবে এটি কোনও মুদ্রণযোগ্য অক্ষর সংরক্ষণ করা হবে না।
আপনি যদি ব্যবহার করছেন পিএইচপি সংস্করণটি পোস্ট করেন তবে এটিও সহায়তা করতে পারে।