PHP avec 4D, c'est possible. Notamment 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 :
$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 https://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 siEt 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
// https://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.


