Bueno voy a tratar de responderte, por que aunque se algo sobre PHP, espero que mi lógica pueda ser compatible con tu código. ... xD. Te lo describiré por pasos:
1. creas una variable array, para guardar un identificador de los datos que no quieres que se dupliquen.
2. Una vez extraes el dato del archivo CSV, utilizas la función str_replace, para quitar los espacios en blanco de cada dato en el array $data
3. Una vez sin espacios blancos, comparas el dato identificador del registro actual que tienes en $data, con los datos guardados en el primer array
4. Si el dato no existe, lo guardas en el array y procedes a imprimirlo con el echo y a guardarlo en la base de datos. Es seguro que imprimes la línea con el echo solo por depuración, pero te recomiendo utilizar un debugger para esto, si no es así, no importa, de todos modos con el echo, sabes que datos se estan guardando.
El código sería algo como el siguiente, si algo no te funciona, solo me avisas, ya que lo estoy haciendo sin interprete de php, mirando solo el manual en línea y con base en tu código:
Código PHP:
Ver original<?php
/* Cuando el archivo contiene solo script de php, se recomienda utilizar solo la
etiqueta de apertura completa */
include('conectar.php');
$row = 1;
/* Declaramos e inicializamos el array para guardar los ids.
Práctica totalmente recomendada para evitar que se filtren datos basura
Uno nunca sabe */
$fp = fopen ('lista.csv','r'); while ($data = fgetcsv ($fp, 1000, ";")) {
/* Supongo que la variable $num la sacaste del ejemplo, por que no veo que la uses acá
si no la necesitas para algo, puedes eliminarla */
echo "$row- ".$data[0].$data[1].$data[2].$data[3].$data[4].$data[5].$data[6].$data[7];
print " <br>";
$row++;
// Ahora revisamos todos los campos de $data y les quitamos los espacios en blanco
foreach ($data as $pos=>$dato) {
}
/*Una vez removidos todos los espacios en blanco, pasamos a buscar si el dato
identificador ya existe en el array $ids, si ya existe, no lo procesamos, suponiendo que
el dato identificador es $data[0] */
// Como esta función devuelve true, si el valor existe en el array, necesitamos que el
// valor retornado sea igual a false, por que esto significa que el dato no existe y podemos
// guardarlo en la base de datos, por eso pongo el ! antes de la función
// !in_array($data[0],$ids) es lo mismo que in_array($data[0],$ids) == false
// Guardamos el dato identificador en el array y procedemos con el resto
$ids[] = $data[0];
$insertar="INSERT INTO producto (id_articulo,cod_categoria,categoria,cod_linea,linea,descripcion,precio,unidad) VALUES ('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]','$data[5]','$data[6]','$data[7]')";
}
}
//no utilizamos la etiqueta de cierre '?>' si el archivo solo contiene script php
Listo, así es como yo lo haría, intenta probarlo y cualquier cosa que no entiendas avisas. Aquí están los links de las funciones
http://php.net/manual/es/function.str-replace.php
http://co.php.net/manual/es/function.in-array.php
Exitos