FORUM D’ENTRAIDE INFORMATIQUE (FEI)
Site d’assistance et de sécurité informatique

Entraide pour le programmation en général (tous langages).
Règles du forum : Entraide concernant la programmation informatique en général, tous langages : recherche ou correction d'un code ou d'une fonction, aide à la réalisation d'un projet...
Pour la programmation web (HTML, CSS, PHP, MySQL...), il est conseillé de s'orienter dans le forum Webmastering.
Merci de lire et de respecter la charte générale du forum.
  • Avatar du membre
#189815
Bonsoir, je ne suis pas développeur mais ecommerçant et je rencontre une galère sur un script PHP.

Si j'en crois ce que j'ai pu glaner comme information la fonction eregi est dépréciée depuis un moment hors le site vient de passer en PHP 7 et évidement des erreurs apparaissent et un import automatique ne fonctionne plus.

La fonction d'origine est :
Code : Tout sélectionner
if (eregi('([^\\\/]+)$',$script_file,$reg)) $script_file=$reg[1];
$path=eregi_replace($script_file,'',$_SERVER["PHP_SELF"]);
mais cela génère ces erreurs :
Code : Tout sélectionner
thrown in /home/web160gestiondol/public_html/scripts/ecommerce/ws_import.php on line 32
[23-Mar-2018 16:50:03 Europe/Paris] PHP Fatal error:  Uncaught Error: Call to undefined function eregi() in /home/..........
Stack trace:
#0 {main}
Hors j'ai donc vu que cette fonction est à remplacer par preg_match, j'ai donc remplacé par :
Code : Tout sélectionner
if (preg_match('/([^\\\/]+)$/i',$script_file,$reg)) $script_file=$reg[1];
$path=preg_replace($script_file,'',$_SERVER["PHP_SELF"]);
Mais cela ne fonctionne toujours pas, et à mon sens c'est surement lié à un séparateur mal placé... Ou pas :cry:

Si une âme charitable pouvait m'aiguiller... d'avance merci.
#189824
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}
Modifié en dernier par stef83 le sam. 24 mars 2018 10:54, modifié 1 fois.
#189826
Aucune erreur en front. il ne s'agit pas d'un site (vitrine ou ecommerce) mais d'une gestion commerciale.

Il n'y a aucune erreur qui apparait sur les pages. C'est en fouillant que j'ai trouvé ces erreurs dans le log qui n'existaient pas avant.
#189827
Et cette gestion commerciale hébergée est donc synchronisée sur 2 sites ecommerces. Aucune erreur sur ces 2 sites non plus.

En manuel les imports des commandes/fiches clients dans la gestion commerciale se fait sans problème/ C'est vraiment lié à l'import/synchronisation automatique et des dépréciation entre PHP5 et PHP7 et j'ai omis de dire que nous utilisions PHP-FPM
#189831
Salut,

Ici sur ce site remplacer la fonction eregi
Sur ta ligne qui est :
Code : Tout sélectionner
if (eregi('([^\\\/]+)$',$script_file,$reg))  $script_file=$reg[1];$path=eregi_replace($script_file,'',$_SERVER["PHP_SELF"]);
qui va être remplacer comme ceci si tu l'as déjà testé :
Code : Tout sélectionner
if (preg_match('/([^\\\/]+)$/',$script_file,$reg)) $script_file=$reg[1];
$path=preg_replace($script_file,'',$_SERVER["PHP_SELF"]);
Je ne sais pas si cela va t'aider à trouvé mais il faut chercher car même si tu remplace " eregi "
et l'erreur persite alors c'est plus haut dans le code.
et donc tenter d'afficher les erreurs sous PHP -> https://openclassrooms.com/courses/conc ... es-erreurs

Sur cette page " Affichage des erreurs PHP "

Un ligne de code qui permet l'Import synchronisation automatique dans ce paragraphe sous une seule ligne.

Elevate your online presence with our expert wiki […]

Message d'erreur

Bonjour, Je viens de reconditionner un PC portable[…]

C'est formidable que l'édition gratuite de […]

La pharmacie en ligne Panda.Healthcare semble simp[…]