Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


Lancer un script PHP avec 4D

Date de publication : 23/01/2008

Par Support Technique 4D
 



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

$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é :

<?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.");
	}
}

?>
info 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.



Valid XHTML 1.1!Valid CSS!

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.
Contacter le responsable de la rubrique 4D