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
$formMail=getenv('texte');
function myCheckDNSRR($hostName, $recType = '') {
if(!empty($hostName)) {
if( $recType == '' ) $recType = "MX";
exec("nslookup -type=$recType $hostName", $result);
foreach ($result as $line) {
if(eregi("^$hostName",$line)) {
return true;
}
}
return false;
}
return false;
}
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;
}
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.
|


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.