Archive

Archives pour 05/2010

Exécuter du PHP dans du code 4D ?

15/05/2010 Comments off

4DLe terminal de Mac OS enferme de nombreux outils vraiment utiles, voir indispensable aux développeurs. Par exemple, il est possible à partir d’une commande du terminal d’exécuter du PHP.
Par exemple, vous avez besoin de calculer un MD5 ou évaluer une expression.

Allez dans le terminal, tapez la ligne qui suit et Ho Miracle votre MD5 s’affiche.

$php -r "echo(md5('password'));"
5f4dcc3b5aa765d61d8327deb882cf99

Hum hum, cela me donne une idée d’utilisation dans 4D. En utilisant la commande LANCER PROCESS EXTERNE, je devrais donc pouvoir utiliser du PHP dans du code 4D ?

Hé bien testons :

$dbquote:=Caractère(34)
$stin:=""
$stout:=""
$err:=""
$password:="password"
LANCER PROCESS EXTERNE("php -r "+$dbquote+"echo(md5('"+$password+"'));"+$dbquote;$stin;$stout;$err)

Alerte($stout)

Euréka, j’ai bien une alerte contenant mon MD5…

Nous pouvons étendre cette utilisation en exécutant un fichier PHP avec l’option php -f … pour cela je vous laisse lire la doc en faisant man php dans le terminal.


Categories: 4D, Développement, Mac OS X, PHP Tags:

Gestion de documents et 4D

4DAyant besoin de réaliser une gestion documentaire dans 4D, je me suis penché sur la possibilité de récupérer le contenu de documents afin de stocker les textes dans des champs indexés mots clés.

L’idée était donc de convertir des fichiers .rtf, .doc, .docx, .pdf en texte simple de manière à stocker tout ça dans des champs 4D.

Ceci devant être réalisé sous Mac, le postulat était relativement simple, je vais expliquer la manière dont j’ai abordé la chose.

Il existe dans le terminal de Mac OS X une commande magique ‘textutil’ qui est installée en standard et qui permet de manipuler des fichiers d’origines variées telles que .doc, etc..
Le seul format qu’il ne connait pas étant le PDF, j’ai été contraint d’utiliser un tool unix ‘pdftotext’ que l’on peut télécharger ici.

Dans 4D j’utilise donc la fonction LANCER PROCESS EXTERNE pour exécuter ces deux tools unix afin d’obtenir un fichier texte que je place ensuite dans un champ 4D.

Le code 4D pour les fichiers doc, docx, rtf…
$stin:=""
$stout:=""
$err:=""
$FilePathSource:="mondisk/mondoc.docx"
$FilePathDest:="mondisk/mondoc.txt"
LANCER PROCESS EXTERNE("textutil -convert txt "+$FilePathSource+" "+$FilePathDest;$stin;$stout;$err)

Pour les fichiers PDF j’utilise le tool ‘pdftotext’ qui n’est pas installé en standard dans Mac OS. Il y a juste un petit souci si l’on tente de l’utiliser comme pour textutil à partir de 4D car le tool ne sera pas reconnu pour son exécution. Il faut préciser le chemin complet du tool pour que 4D puisse executer la commande.

Cela donne pour les fichiers PDF :
$stin:=""
$stout:=""
$err:=""
$FilePathSource:="mondisk/mondoc.docx"
$FilePathDest:="mondisk/mondoc.txt"
LANCER PROCESS EXTERNE("/usr/local/bin/pdftotext "+$FilePathSource+" "+$FilePathDest;$stin;$stout;$err)

Pour récupérer ensuite le contenu des fichiers textes, il suffit de l’ouvrir dans 4D avec la commande Ouvrir Document et de lire son contenu.

$montexte:=""
$doc:=Ouvrir Document("mondisk:mondoc.txt")
RECEVOIR PAQUET($doc;$montexte;0;
MAXLONGTEXTEAVANTV11)
[matable]monchamp:=$montexte

Voilà, le tour est joué. J’espère que ces quelques lignes vous seront utiles.


Categories: Développement, Mac OS X Tags: