2011-04-14 22 views
5

Uno de mis clientes tiene toda su información del producto manejada por una fuente externa. Me lo han proporcionado en un archivo CSV que regularmente actualizarán y subirán a una carpeta ftp de mi especificación, por ejemplo, todas las semanas.Importación automática de archivos CSV y carga en la base de datos

Dentro de este archivo CSV se encuentra toda la información del producto; nombre del producto, especificaciones, ubicación de la imagen, etc.

El sitio que he creado para mi cliente está ejecutando una base de datos MySQL, que pensé que contendría toda la información del producto, y así se ha creado para manejar todos los datos del producto.

Mi pregunta es: ¿Cómo podría crear y ejecutar un script que encontraría un archivo CSV recién agregado de la carpeta FTP especificada, extraer los datos y reemplazar todos los datos dentro de la tabla MySQL relevante, todo hecho automáticamente?

¿Esto es posible?

Cualquier ayuda sería muy apreciada ya que no quiero usar la opción de marco flotante, S.

Respuesta

0

ha tenido un vistazo a fgetcsv? Probablemente tendrá que configurar un trabajo cron para verificar un nuevo archivo a intervalos regulares.

5

Puede simplemente hacer una secuencia de comandos que lea el archivo csv utilizando la función fread de php, extraer cada fila y formatearla en una matriz para insertarla en la base de datos.

$fileTemp = "path-of-the-file.csv"; 
$fp = fopen($fileTemp,'r'); 
$datas = array() 
while (($data = fgetcsv($fp)) !== FALSE) 
{ 
    $data['productName'] = trim($data[0]); 
    $data['spec'] = trim($data[1]); 
    $data['imageLocation'] = trim($data[2]); 
    $datas[] = $data; 
} 

Ahora se han preparado gama $datas que se puede insertar en la base de datos con iteraciones.

+1

y ejecute esto mediante cronjob ... – Tobias

3

debe ser bastante sencillo, dependiendo del archivo csv

algunos archivos CSV tienen comillas en el texto "", algunos no algunos tienen, coma en el interior del citado campo etc

dependiendo de nivel de conocimientos de PHP esto debe ser razonablemente fácil

se puede obtener una marca de tiempo modificado a partir del archivo para ver si es nuevo

http://nz.php.net/manual/en/function.lstat.php

abrir el archivo e importar los datos

http://php.net/manual/en/function.fgetcsv.php

inserción en la base de datos

http://nz.php.net/manual/en/function.mysql-query.php

Si la CSV es difícil de analizar con fgetcsv la que podría intentar algo como proyecto PHPExcel que tiene capacidades de lectura csv

http://phpexcel.codeplex.com

0

Todo lo que necesita es:

  • tienda última de archivo mtime en alguna parte (digamos, por simplicidad, en otro archivo)
  • script que se ejecuta cada X minutos por cron

En este script simplemente mtime del archivo csv con valor almacenado. Si -mtime difiere, se ejecuta la consulta SQL que tiene este aspecto:

LOAD DATA LOCAL INFILE '/var/www/tmp/file.csv' REPLACE INTO TABLE mytable COLUMNS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\r\n' 

Opcionalmente, puede simplemente touch su archivo para saber cuando se ha realizado la última carga de datos. Si el archivo mtime del scv es mayor que su archivo "helper", debe tocarlo y realizar la consulta.

Documentación sobre carga de datos declaración INFILE SQL es here

Por supuesto, hay un espacio para consultas errores, pero espero que manejarlo (sólo tiene que estar seguro de los datos cargados correctamente y sólo en este caso del tacto archivar o escribir nuevo mtime).

Cuestiones relacionadas