Bonjour à tous !
Dans le cadre d'un stage, j'ai développé une interface permettant de faire un début de liaison entre le logiciel de gestion EBP et un site crée avec Prestashop. Sous EBP, après avoir exporté la liste de ses produits au format .xml, mon interface se charge de "convertir" le fichier en .csv, de sorte à ce qu'il soit compatible avec le module d'import intégré à Prestashop (l'interface gère l'ordre et les noms des colonnes, les types des champs, ...).
Je ne serai pas le principal utilisateur de cette interface, le but est donc d'économiser un maximum d'étapes entre EBP et Prestashop. Elle sera utilisée toutes les semaines. La suppression des produits avant l'import est activée, et tous les produits sont replacés en BDD (ainsi, les mises à jour effectuées sur les produits existants sur EBP dans la semaine sont répercutées à la mise à jour de Prestashop).
Je dispose d'une première liste de 101 articles pour mes tests. Plus tard, la liste comportera 1400 produits.
J'ai effectué tous les tests en local, l'interface fonctionne, et l'import se fait sans accroc (les 101 produits sont importés en moins de deux minutes, tous les champs sont à leurs places).
Mais voilà maintenant une semaine que je me bats contre le serveur du site afin de faire fonctionner le tout. Mon interface fonctionne, mais une erreur 500 m'est renvoyée après la confirmation de l'import, et seuls 75 produits sont importés ... environ.
Tout le cœur du problème se base sur ce mot, environ. Effectivement, en mesurant le temps d'exécution de l'envoi avec Firebug, je constate que la durée d'envoi n'est jamais fixe, et que le nombre de produits ne l'est pas non plus. Voici quelques exemples pour illustrer :
- Fichier de 70 articles (13 Ko) : importé avec succès en 53 secondes.
- Fichier de 76 articles (14 Ko) (on prend ce fichier pour référence pour les essais suivants, aucun changement n'y est appliqué) : 73,5 articles importés en 52 secondes (le .5 signifie que seule la moitié des champs a été importée), puis erreur 500.
- Deuxième essai, 74 articles sont importés avec succès en 48 secondes, puis erreur 500.
- Troisième essai, 74,5 articles importés en 48 secondes puis erreur 500.
- Quatrième essai, 73 articles importés en 49 secondes puis erreur 500.
- Fichier de 101 articles (18 Ko) : 72,5 produits importés en une minute, puis 74 produits importés en 52 secondes, ...
Parfois, le champ peut aussi être importé partiellement, auquel cas une erreur m'est renvoyée (ici, ça doit venir du fait que mon fichier d'articles contient les liens absolus des images des produits, et que le lien est tronqué) :
Autre phénomène amusant : impossible d'obtenir un quelconque message d'erreur.Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg, libjpeg: recoverable error: Premature end of JPEG file in /chemin_absolu/classes/ImageManager.php on line 365
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: '/chemin_absolu/img/p/7/6/76.jpg' is not a valid JPEG file in /chemin_absolu/classes/ImageManager.php on line 365
Warning: imagecopyresampled(): supplied argument is not a valid Image resource in /chemin_absolu/classes/ImageManager.php on line 190
- L'hébergement est chez 1&1. Version de PHP de développement activée, affichage des erreurs activé.
- Mode de développement activé dans les fichiers Prestashop (toutes erreurs affichées).
- 1&1 autorise les modifications du php.ini et fournit même un script pour permettre d'appliquer les changements plus rapidement. J'ai donc crée un php.ini perso avec ces paramètres :
- La page d'erreur 500 renvoyée ne comporte aucune autre indication concernant l'origine de l'erreur. J'ai juste le "Oops, something went wrong." de Prestashop 1.5.4.1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 allow_url_fopen = On error_log = /chemin_absolu/.../error.log log_errors = On default_socket_timeout = 600 max_execution_time = 600 max_input_time = 600 mysql.connect_timeout = 600 upload_max_filesize = 64M
- Le log d'erreurs que je génère dans mon php.ini reste désespérément vide. Il m'affiche toutes les autres erreurs n'ayant pas de rapport avec l'import (que je corrige ensuite), mais pas moyen de savoir ce qui plante.
J'ai déjà posté mon problème sur les forums de Prestashop, les solutions données n'ont pour l'instant pas changé grand chose (si ce n'est que j'ai mis à jour la version de Prestashop, en passant de la 1.3 à la 1.5).
Existe-il une solution à laquelle je n'aie pas pensé, ou que j'aie loupé sur le net, ou dois-je modifier mon interface pour la rendre plus contraignante côté utilisateur (subdiviser le .csv général en plusieurs dizaines de petits .csv passant à l'import ; effectuer la mise à jour de la BDD Prestashop en local, puis importer cette BDD sur le serveur ; ...) ?
Merci d'avance !
EDIT : Je dispose désormais d'un fichier de 910 articles (147 Ko). Même diagnostic. Passage réussi en 12 minutes en local, erreur 500 sur le serveur après 53 secondes et 74 articles importés.
Partager