Lancer un script PHP avec 4D

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

PHP avec 4D, c'est possible. Notament l'exécution de scripts PHP par une méthode 4D.

Par exemple, vérifier si une adresse email et son domaine sont valides.

C'est PHP 5.2.5 qui a été installé ainsi que WampServer 2.0.


Le code 4D qui exécute le script PHP et retourne le résultat :

code 4D
Sélectionnez
$email_a_valider:=Demander("Email à valider :")
FIXER VARIABLE ENVIRONNEMENT("texte";$email_a_valider)

  `on récupère les infos plateforme (fait généralement l'objet d'une méthode à part)
C_ENTIER LONG(<>Platform;<>System;<>Machine)
PROPRIETES PLATE FORME(<>Platform;<>System;<>Machine)

Si (<>Platform=Windows )
	
	C_TEXTE($script;$cmd)
	` chemin_structure est une méthode qui retourne le chemin du dossier de la base
	` voir article http://4d.developpez.com/tips/2005/recuperer-chemin-dossier-structure/
	$script:=chemin_structure (Fichier structure;*)+"check_mail.php"
	$cmd:="C:\\wamp\\php\\php.exe -q "+Caractere(Guillemets )+$script+Caractere(Guillemets )
	
	FIXER VARIABLE ENVIRONNEMENT("_4D_OPTION_HIDE_CONSOLE";"true")
	
	C_TEXTE($error)
	C_BLOB($in;$out)
	FIXER TAILLE BLOB($in;0)
	
	LANCER PROCESS EXTERNE($cmd;$in;$out;$error)
	
	Au cas ou 
		: (OK=1)
			C_TEXTE($resultat)
			$resultat:=BLOB vers texte($out;Texte sans longueur )
			ALERTE($resultat)
		Sinon 
			ALERTE($error)
	Fin de cas 
	
Fin de si

Et le script PHP exécuté :

 
Sélectionnez
<?php
// Codes trouvés sur différentes sources citées ci-dessous
// adaptés par Stephanie Tirtiat pour cet exemple - 22/01/2008

// Trouvé dans la NT 4D "Lancer process externe", par Frank Chang
// http://4d.developpez.com/notes-techniques/2004/Process-externe/
//in par var d'environnement
//$email=$_ENV['texte']; variable ne marche pas -> getenv 
$formMail=getenv('texte');

// Vérifier que le domaine existe
// (trouvé sur http://www.sitepoint.com/article/users-email-address-php)
// remplace checkdnsrr qui ne fonctionne pas sur Windows
function myCheckDNSRR($hostName, $recType = '') {
	if(!empty($hostName)) {
		if( $recType == '' ) $recType = "MX";
		exec("nslookup -type=$recType $hostName", $result);
   		// check each line to find the one that starts with the host
   		// name. If it exists then the function succeeded.
   		foreach ($result as $line) {
     			if(eregi("^$hostName",$line)) {
       			return true;
     			}
   		}
   		// otherwise there was no mail handler for the domain
   		return false;
 	}
	return false;
}

// verification mail
function check_mail($formMail) {
	if( (preg_match('/(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/', $formMail)) ||
	(preg_match('/^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/',$formMail)) ) {
		$host = explode('@', $formMail);
		if(myCheckDNSRR($host[1].'.', 'MX') ) return true;
		if(myCheckDNSRR($host[1].'.', 'A') ) return true;
		if(myCheckDNSRR($host[1].'.', 'CNAME') ) return true;
	}
	return false;
}

// echo resultat
if ($formMail == ""){
	echo("Pas d'email à vérifier...");
}
else {
	if (check_mail($formMail)) {
		echo("L'adresse e-mail est valide.");
	}
	else {
		echo("L'adresse e-mail n'est pas valide.");
	}
}

?>

Notes :
· La variable $_ENV ne reçoit aucune valeur de 4D. Il faut utiliser getenv (merci à Christophe Keromen).
· La fonction PHP checkdnsrr ne fonctionne pas sur Windows. Il faut créer sa propre fonction.
Voir les codes ci-dessus pour les applications de ces remarques.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.