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 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
// 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.