Jump to content

[Solucionado] Problema al importar productos en 1.3.7


reivaj01

Recommended Posts

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 by reivaj01 (see edit history)
Link to comment
Share on other sites

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

Guest
This topic is now closed to further replies.
×
×
  • Create New...