Problème script CRON qui parse un csv + injection mysql

Petit nouveau ! | 7 Messages

15 mars 2012, 15:58

Bonjour à tous,

J'ai créé un script qui se lance en CRON (via les tâches planifiées OVH). Ce script parse chaque ligne du csv (qui est au préalable, mais dans une autre tâche, téléchargé sur le serveur) et ce csv contien environ 8000 lignes. Avec chaque ligne il fait plusieurs injection dans une DB (pour ajouter des produits dans un CMS Prestashop). Donc ce script est assez lourd puisqu'il lit 8000 lignes d'un csv + 4 insert dans la DB, avec des manipulations de chaines et de prix. Jusque-là tout va bien, il injecte les 8000 produits. Seulement je remarque qu'il y a un souci avec les prix car il y a dans le CSV une dizaine d'article à + de 1000€ et quand je regarde par après il les a encodé du genre 2420,45 devient 2,42... Plutôt embêtant. Sans compter que lorsque je lance le script manuellement (mais avec un csv de 400 lignes sinon j'ai un timeout) il injecte correctement le prix. Avez vous une idée ? Croyez-vous que la tâches planifiée s'emmêle les pinceaux ? Car je ne remarque aucune erreur à part les 10 produits qui sont au dessus de 1000€

Voici le bout de script qui est dans la boucle qui parse le CSV :
      $champs12bis = str_replace(',','.',$champs12); //je remplace la virgule du csv par un point
      $champs13 = str_replace(',','.',$champs13); //pareil pour les taxes divers
      $champs14 = str_replace(',','.',$champs14); //pareil pour les taxes divers
      $champs15 = str_replace(',','.',$champs15); //pareil pour les taxes divers
      $champs16 = str_replace(',','.',$champs16); //pareil pour les taxes divers
      $price = $price+$champs13+$champs14+$champs15+$champs16; //j'additionne le prix et les taxes
      $price = $price*$marge; // j'ajoute ma marge supplementaire definie plus haut (du genre 1.0605)
      $price = round($price,2); // j'arrondis a 2 chiffres apres la virgule
Franchement je reste sans solution car si encore il buggait pour les prix en-dessous de 1000 mais rien ! :(

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 mars 2012, 16:26

salut,

aurais tu un exemple de donnée ?
quel est le type de champ pour le prix dans la table ?

@+
Il en faut peu pour être heureux ......

ViPHP
ViPHP | 2577 Messages

15 mars 2012, 16:51

Au pif :
2.420,45 devient 2.420.45 et finalement 2.42

Ceci suivant le même principe que 24P devient 24 en entier.

Petit nouveau ! | 7 Messages

15 mars 2012, 18:14

J'aurais pu y croire mais lorsque je fais l'update manuelle avec un CSV de juste la ligne avec l'objet de plus de 1000€ la il me l'enregistre bien au dessus de 1000 ! À rien y comprendre quoi

ViPHP
xTG
ViPHP | 7331 Messages

15 mars 2012, 18:36

Faut convertir les points en vide.
Car un point est une virgule. ;)

Donc 1.000 (mille) correspond en PHP à 1,000

Petit nouveau ! | 7 Messages

15 mars 2012, 21:30

Pareil en manuel (script lancé depuis une url via mon pc) ça fonctionne et sur les tâches planifiées de OVH ca ne fonctionne pas, vous croyez que ca peut venir d'une config du serveur qui lance le script ? ou la version PHP de la tâche planifiée car je peux la changer ?

Petit nouveau ! | 7 Messages

16 mars 2012, 08:35

Pas d'idée sur ce niveau par rapport à la différence entre le script lancé depuis mon Pc et le script lancé du server ovh en tâche planifiée ?

Je vois que ça mets comment le résoudre :-s

feboici
Invité n'ayant pas de compte PHPfrance

12 oct. 2012, 21:09

Salut, j'ai un import important à faire dans prestashop, ton script me serait d'une grande utilité ! serais tu ok pour le partager ? merci beaucoup