FreeMykl Posted July 8, 2013 Share Posted July 8, 2013 Bonjour à tous, J'utilise la version 1.5.4 de prestashop et l'hébergement est chez OVH (serveur mutualisé offre "pro"). J'ai créé un script PHP qui exporte les commandes de la veille. Si j'appelle ce script via son URL aucun problème tout fonctionne correctement. En revanche si je le lance depuis la console (CLI) où si j'utilise le planificateur de tâches dans le manager OVH plus rien ne fonctionne. Avec le planificateur de tâches j'ai un statut "302 Moved Temporarily". Avec la console j'ai l'erreur suivante : "PHP Fatal error: Class 'Context' not found in ..........monscript.php on line 3". Ci-dessous les ligne 1 à 6 du script : <?php $site_base_path = "../"; include($site_base_path . 'config/config.inc.php'); require_once($site_base_path . 'init.php'); require_once($site_base_path . 'classes/Link.php'); require_once($site_base_path . 'classes/Product.php'); Je vous remercie par avance de vos réponses. Link to comment Share on other sites More sharing options...
Vinum Posted July 8, 2013 Share Posted July 8, 2013 (edited) Bonjour, cette erreur est normal car comme tu lances une tache cron, tu n'es dans aucun context. Donc soit il te faut en initialiser un. Soit tu crées simplement les valeurs dont tu as besoin et qui se trouve normalement dans un context. Dans ton cas, tu as surement besoin d'un id_employee, d'un id_lang etc... Edited July 8, 2013 by Vinum (see edit history) Link to comment Share on other sites More sharing options...
FreeMykl Posted July 8, 2013 Author Share Posted July 8, 2013 Merci pour ton aide. Je ne suis pas trop familier avec cette notion de context sous Prestashop... Je pensais que si j'appelais les fichiers config.inc.php et init.php cela suffisait pour initialiser le context. Du coup je ne sais pas comment faire ! Link to comment Share on other sites More sharing options...
Vinum Posted July 8, 2013 Share Posted July 8, 2013 Il faudrait que tu en montres plus sur ton script pour te dire quoi modifier. Link to comment Share on other sites More sharing options...
FreeMykl Posted July 9, 2013 Author Share Posted July 9, 2013 (edited) Merci de prendre le temps de m'aider. Ci-dessous le script : <?php $site_base_path = "../"; include($site_base_path . 'config/config.inc.php'); require_once($site_base_path . 'init.php'); require_once($site_base_path . 'classes/Link.php'); require_once($site_base_path . 'classes/Product.php'); // Paramètres de connexion BDD. $hostname = "localhost"; $database = "prestashop"; $username = "root"; $password = ""; try { $bdd = new PDO("mysql:host=".$hostname.";dbname=".$database, $username, $password); } catch (Exception $e) { die('Erreur : '.$e->getMessage()); } $reponse = $bdd->query('SELECT id_order, id_customer FROM ps_orders WHERE (SELECT LEFT(date_add, 10)) LIKE (CURDATE() - INTERVAL 1 DAY)'); $donnees = $reponse->fetch(); //Récupération de la date du jour. $datetime = new DateTime(); $suffixe_fichier = $datetime->format('Y-m-d_H-i-s'); //Ouverture d'un fichier. $nom_fichier_commandes = "commandes_".$suffixe_fichier.".txt"; $fp = fopen($nom_fichier_commandes, "wb"); while ($donnees = $reponse->fetch()) { //Récupération de la commande. $commande = new OrderCore($donnees['id_order']); //Récupération du client. $client = new CustomerCore($donnees['id_customer']); //Traitement statuts juridiques. $genre = $client->id_gender; switch ($genre) { case 1: $statut_juridique = "MR"; break; case 2: $statut_juridique = "MME"; break; case 3: $statut_juridique = "MLLE"; break; } //Adresse de livraison. $adresse_livraison = new AddressCore($commande->id_address_delivery); //Adresse de facturation. $adresse_facturation = new AddressCore($commande->id_address_invoice); //Pays pour le code ISO. $pays = new CountryCore($adresse_facturation->id_country); //Traitement de la date. $date_commande = substr($commande->date_add, 0, 10); //Traitement du mode de règlement. $moyen_paiement = '1'; //Ligne 1. $ligne_entete = "E\t".$commande->reference."\t\t".$statut_juridique."\t".$client->lastname."\t".$client->firstname."\t" .$adresse_facturation->address1."\t".$adresse_facturation->address2."\t\t\t" .$adresse_facturation->postcode."\t".$adresse_facturation->city."\tF\t" .$adresse_facturation->phone."\t".$adresse_facturation->phone_mobile."\t\t" .$client->email."\t".$date_commande."\t".$commande->total_paid_tax_incl."\t".$moyen_paiement."\t\t".$statut_juridique."\t" .$client->lastname."\t".$client->firstname."\t" .$adresse_livraison->address1."\t".$adresse_livraison->address2."\t\t\t" .$adresse_livraison->postcode."\t".$adresse_livraison->city."\tF\t01\t0\r\n"; $contenu_fichier.= $ligne_entete; //Récupération de la liste des produits commandés par rapport à l'ID de la commande. $detail_commande = new OrderDetailCore($donnees['id_order']); $frais_de_port_ht = $commande->total_shipping_tax_excl; $frais_de_port_ttc = $commande->total_shipping_tax_incl; $liste_produits = $detail_commande->getList($donnees['id_order']); // Traitement de chaque tableau. foreach( $liste_produits as $tableau ) { //Ligne 2. $ligne_produit = "L\t".$commande->reference."\t".mb_strtoupper($tableau['product_reference'])."\t".$tableau['product_name']."\t" .$tableau['product_quantity']."\t2\t".$tableau['product_price']."\t".$tableau['reduction_percent']."\t".$tableau['unit_price_tax_excl']."\t".$tableau['unit_price_tax_incl']."\t\r\n"; $contenu_fichier.= $ligne_produit; } // Traitement des frais de port. $ligne_frais_port = $ligne_produit = "L\t".$commande->reference."\t"."PORT"."\tFrais de port\t1\t2\t".$frais_de_port_ht."\t0.0\t".$frais_de_port_ht."\t".$frais_de_port_ttc."\t\r\n"; $contenu_fichier.= $ligne_frais_port; } // Convertir la chaine de caractères de UTF-8 à ANSI. $contenu_fichier = iconv("UTF-8", "WINDOWS-1252", $contenu_fichier); // Ecriture dans le fichier. fwrite($fp, $contenu_fichier); // Fermeture du fichier de commande. fclose($fp); // Fermeture de la connexion. $reponse->closeCursor(); ?> Edited July 9, 2013 by FreeMykl (see edit history) Link to comment Share on other sites More sharing options...
K-meo Posted December 13, 2013 Share Posted December 13, 2013 As tu trouvé une solution? Link to comment Share on other sites More sharing options...
FreeMykl Posted December 13, 2013 Author Share Posted December 13, 2013 Nous avons trouvé une solution "bidouille" : sur l'un de nos serveurs dédiés nous avons une tâche CRON qui appelle la page... Link to comment Share on other sites More sharing options...
Juliano957 Posted March 19, 2014 Share Posted March 19, 2014 Bonjour, Quelle est cette solution "bidouille" ?, j'ai exploré tous les forums, personne n'a de solution miracle à ce sujet. Qui à mon avis est un problème pour tout le monde. Utilisation de CURL ? de filegetcontents? Cette solution fonctionne uniquement sur dédié ? ou mutu aussi ? quelles sont au final les temps d'execution maximales ? Merci de ton aide. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now