Bonjour et merci pour votre réponse. Oui je manque de précision.
Voilà là le script complet originel qui semble ne plus être compatible avec PHP 7. Il s'agit d'une fonction d'automatisation d'import de commandes par tâches CRON. En import manuel l'import fonctionne parfaitement. Les erreurs que j'ai sur le log sont toutes liées à ce script (ce que je n'avais pas en PHP 5.
Code : Tout sélectionner<?PHP
// Test if batch mode
$sapi_type = php_sapi_name();
$script_file=__FILE__;
if (eregi('([^\\\/]+)$',$script_file,$reg)) $script_file=$reg[1];
$path=eregi_replace($script_file,'',$_SERVER["PHP_SELF"]);
if (substr($sapi_type, 0, 3) == 'cgi') {
echo "Erreur: Vous utilisez l'interpreteur PHP pour le mode CGI. Pour executer $script_file en ligne de commande, vous devez utiliser l'interpreteur PHP pour le mode CLI.\n";
exit;
}
// Include Dolibarr environment
if (strstr($path, '/amnestyinternational')) $incpath = '/home/amnestyinternational/dolibarr';
else $incpath = $path.'../../htdocs/';
require_once ($incpath."/master.inc.php");
// After this $db is a defined handler to database.
dol_include_once('/ecommerce/common_functions.php');
dol_include_once('/ecommerce/class/ecom_site.class.php');
dol_include_once('/ecommerce/class/ecom_order.class.php');
dol_include_once('/ecommerce/class/E_product.class.php');
dol_include_once('/ecommerce/class/E_order.class.php');
dol_include_once('/ecommerce/class/ecom_log.class.php');
dol_include_once('/product/class/product.class.php');
//includes
dol_include_once('/ecommerce/includes/orders.inc.php');
dol_include_once('/ecommerce/includes/products.inc.php');
dol_include_once('/ecommerce/includes/prospects.inc.php');
// Main
$version='$Revision: 1.1.4.5 $';
@set_time_limit(0);
$error=0;
// sinon la langue est forcé à en_US dans translate
$conflang = (version_compare(DOL_VERSION, '3.5') >= 0)?$conf->global->MAIN_INFO_SOCIETE_COUNTRY:$conf->global->MAIN_INFO_SOCIETE_PAYS;
$l = explode(":", $conflang);
$lc = strtolower($l[1]).'_'.$l[1];
$langs->setDefaultLang($lc);
$langs->load("main");
$langs->load("ecommerce@ecommerce");
$user->fetch('',ECOM_BATCH_USER, '');
//Chargement des droits
print "user ".ECOM_BATCH_USER." langue ".$lc."\n";
//Chargement des droits
$user->getrights('');
// -------------------- START OF YOUR CODE HERE --------------------
// Check parameters
if (! isset($argv[1])) {
print "Usage: $script_file order/product/prospect siteid ...\n";
return -1;
}
if ($argv[1] != 'ecomstock' && ! isset($argv[2]) ) {
print "il faut spécifier le siteid\n";
return -1;
}
$siteid=$argv[2];
// lecture du site
if ($siteid)
{
// get site_parameters
$site_params = new Ecom_site($db);
if ($site_params->fetch($siteid) < 0)
{
print "erreur lecture site ".$site_params->error;
return -2;
}
}
switch ($action = $argv[1])
{
case 'order':
print "traitement des commandes\n";
if ($res = get_orders($siteid, $db, $user) > 0) print "traitement des commandes réussi $res\n";
else print "Erreur traitement des commandes \n";
$res = import_orders($siteid, $db, $user);
if ($res < 0) print "Erreur import des commandes"."\n";
elseif ($res == 0) print "aucune commande à traiter"."\n";
else print $res." commandes importées"."\n";
break;
case 'product':
print "traitement des produits"."\n";
print "étape 1 liste des nouveaux produits"."\n";
// traitement de la limite
if (! isset($argv[3])) $limit = 0;
elseif ($argv[3] > 0 ) $limit = $argv[3];
else $limit = 100; // on limite
// pour ne pas re-traiter les produits en erreur
$sql = "SELECT max(ecom_product) last FROM ".MAIN_DB_PREFIX."ecom_product ep ";
$sql .= "WHERE ep.siteid = '".$siteid."' ";
dol_syslog("products.inc.php::get_new_products $sql", LOG_DEBUG);
$resql=$db->query($sql);
if ($resql)
{
$obj = $db->fetch_object($resql);
if ($obj)
$last = $obj->last;
else
{
dol_syslog("products.inc.php::get_new_products rien � faire", LOG_DEBUG);
$last = 0;
}
}
else
{
dol_syslog("products.inc.php::get_new_products erreur ".$sql, LOG_DEBUG);
return -1;
}
// 1. recherche des nouveaux porduits
if ($res = get_new_products($siteid,$db, $user, $limit) < 0) print "Erreur traitement des produits étape 1"."\n";
else print "fin étape 1 début étape 2"."\n";
// on fait les deux traitements syst�matiquement
if ($res = get_products($siteid, $db, $user, $limit, $last)) print "traitement produit réussi $last $limit"." \n";
else print "Erreur traitement des produits $last $limit"."\n";
break;
case 'prospect':
print "traitement des prospects\n";
// traitement de la limite
if (! isset($argv[3])) $limit = 0;
elseif ($argv[3] > 0 ) $limit = $argv[3];
else $limit = 100; // on limite
// pour ne pas re-traiter les prospects
$sql = "SELECT max(ecom_customer) last FROM ".MAIN_DB_PREFIX."ecom_customer ec ";
$sql .= "WHERE ec.siteid = '".$siteid."' AND ec.site_cust_status = 'P'";
dol_syslog("ws_import.inc.php::import_prospects $sql", LOG_DEBUG);
$resql=$db->query($sql);
if ($resql)
{
$obj = $db->fetch_object($resql);
if ($obj)
$last = $obj->last;
else
{
dol_syslog("ws_import::aucun nouveau propect", LOG_DEBUG);
$last = 0;
}
}
else
{
dol_syslog("ws_import::import prospects erreur ".$sql, LOG_ERR);
return -1;
}
if ($res = get_new_prospects($siteid,$db, $user, $limit) < 0) print "Erreur traitement des prospects étape 1"."\n";
else print "fin étape 1 début étape 2"."\n";
// on fait les deux traitements systématiquement
if ($res = import_prospects($siteid, $db, $user, $limit, $last)) print "traitement des prospects réussi $last $limit"." \n";
else print "Erreur traitement des prospects $last $limit"."\n";
break;
case 'ecomstock':
print "maj qte en vente sur tous les sites \n";
send_stock_update($db, $user);
break;
case 'init_site' :
// initialiser les paramètres du site
ecom_init_param($siteid, 'batch');
break;
default :
print "commande inconnue : ".$argv[1]."\n";
$error = -1;
}
// -------------------- END OF YOUR CODE --------------------
return $error;
?>
Et ici les erreurs sur le fichier log si je garde le script originel :
Code : Tout sélectionner[22-Mar-2018 22:30:05 Europe/Paris] PHP Fatal error: Uncaught Error: Call to undefined function eregi() in /home/xxxxxxxx/public_html/scripts/ecommerce/ws_import.php:32
Stack trace:
#0 {main}