Belirttiğiniz hata mesajının istisnası tam olarak bir yerde tetiklenir (kod okunabilirlik için biraz kesilir):
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'));
}
}
}
Bu araçlar, count(array_unique($this->_colNames))eşit olmayan olmalıdır$this->_colQuantity
$_colNamesDizi ayarlanır Mage_ImportExport_Model_Import_Adapter_Csv::rewind()sırasında denir ( _init().
Bir kez daha, kod biraz okunabilirlik için konur:
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);
}
$_delimiterAyarlandığında ,, $_enclosureayarlandığında ".
Sorunu yeniden oluşturmayı denemek için, sorunuzdan CSV ayıklamasını test.csv adlı bir dosyaya kopyalar ve aşağıdaki kodu çalıştırırsam:
$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);
aşağıdaki çıktıyı üretir:
29 records, 29 unique records
Bu, CSV dosyanızın temelde uygun olduğu anlamına gelir. Aradaki fark başka bir yerde olmalı.
Nasıl array_uniqueçalıştığına bakıldığında, PHP 5.2.9'da dizi öğelerinin tür işlemesinin nasıl değiştiğine dair bir not vardır: http://php.net/manual/en/function.array-unique.php#refsect1-function.array-unique -changelog
Sorunu yeniden oluşturmak için, test komut dosyamı SORT_REGULARseçenek kümesi ile yeniden çalıştırdım , ancak bu yine de aynı sonucu veriyor (bu mantıklı, çünkü bir dosyayı okumak yalnızca dize değerleri verebilir).
Şu anda farkın kullandığınız CSV dosyasında olması gerektiğine inanıyorum. Unix ve Windows yeni satır karakterlerinin ( \nve \r\n) ikisi de fgetcsv()komut tarafından tanınır , ancak eski MacOS stili yeni satır karakteri ( \r) aslında yaşadığınız davranışa yol açar.
Sorunu yaşamanızın sebebinin bu olup olmadığını bilmiyorum, ancak CSV dosyasını kontrol etmenizi öneririm (tekrar). Değiştirilmemiş dosyaya bir indirme bağlantısı sağlarsanız (macun yok), yazdırılamayan karakterler korunur.
Kullandığınız PHP sürümünü yüklerseniz de yardımcı olabilir.