reivaj01 Posted July 16, 2012 Share Posted July 16, 2012 (edited) Buenos días Estoy tratando de corregir un fallo, y mi cerebro no da para más. Estoy haciendo una prueba con un fiichero CSV con 2 líneas (actualización de 2 productos) y el primero no se carga bien,. No es problema de datos, ya que si intercambio las líneas, el problema se reproduce en la primera línea. Si pongo una línea de encabezado, y cambio skip = 1, las dos líneas se procesan bien, el problema es que el CSV no puede generarse con una fila de encabezado (limitación del ERP del que procede) He puesto unos mensajes en AdminImport.php (linea 530) para ver que ocurre: for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++) { if (Tools::getValue('convert')) $this->utf8_encode_array($line); $info = self::getMaskedRow($line); //echo "<br> antes de line: " . print_r($line,true); //echo "<br> antes de info: " . print_r($info,true); echo "<br>"; $info['id'] = $line[0]; echo "<br> antes de if info['id']: " . $info['id']; if (array_key_exists('id', $info) ) { echo "<br>1"; } else { echo "<br>2"; } echo "<br> con gettype : ".gettype ($info['id']); echo "<br> con intval: " . intval($info['id']); echo "<br> sin intval: " . $info['id']; if (intval($info['id']) ) { echo "<br>3"; } else { echo "<br>4"; } echo "<br> existsInDatabase: ".Product::existsInDatabase(intval($info['id'])); if (Product::existsInDatabase(intval($info['id']))) { echo "<br>5"; } else { echo "<br>6"; } if (array_key_exists('id', $info) AND intval($info['id']) AND Product::existsInDatabase(intval($info['id']))) { echo "<br> en 1"; y el resultado de su ejecución es: antes de if info['id']: 7055 1 con gettype : string con intval: 0 sin intval: 7055 4 existsInDatabase: 6 antes de if info['id']: 7056 1 con gettype : string con intval: 7056 sin intval: 7056 3 existsInDatabase: 1 5 en 1 Es decir, es como si fallara la función intval de PHP. No entiendo nada, y ya van muchas horas con este problema. ¿Alguien ha sufrido este problema, o sabe que puede estar pasando? Muchas gracias y saludos Edited July 16, 2012 by reivaj01 (see edit history) Link to comment Share on other sites More sharing options...
reivaj01 Posted July 16, 2012 Author Share Posted July 16, 2012 Al final, todo se trataba del BOM de utf-8. No sé porqué, pero tal y como está en el fichero, no funciona (en mi servidor, al menos): if ($bom != '\xEF\xBB\xBF'){ lo he cambiado por: if ($bom != chr(239).chr(187).chr(191)){ y ahora detecta el BOM sin problemas y todo funciona bien. Saludos Link to comment Share on other sites More sharing options...
Recommended Posts