Jump to content

Problème lancement de script avec cron


Recommended Posts

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

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 by Vinum (see edit history)
Link to comment
Share on other sites

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

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 by FreeMykl (see edit history)
Link to comment
Share on other sites

  • 5 months later...
  • 3 months later...

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...