Verifier en "temps reel" l'apparition d'un fichier dans un dossier donné

Bonsoir,

Voila j’ai une logiciel de fax qui est sous Linux (hylafax pour ne pas le nommé)

Dans un changement d’organisation j’ai besoin de controler en temps reel (du moins au plus pres) l’arrivée d’un fichier image (tif) dans le dossier d’arrivée des fax pour ainsi activer un script et faire ainsi un certain nombre de chose (OCR + transfert fichier via reseau + reconnaissance de mot dans le fichu issu de la reconnaissance de caractère + requetes dans base mysql + envoi de mail)

es ce possible?
De plus es ce plus envisageable sous linux ou windows (les 2 sont possibles)?

En vous remerciant d’avance pour vos precieux conseils

Entre nous, je sais que des logiciels sont capables de le faire, mais je ne sais pas trop comment.

www.delphifr.com…
www.codeproject.com…

Maintenant tu as pas 36 choix : tu cherches l’équivalent PHP (si c’est ce que tu veux), et tu joues avec. Sinon, ben tu codes ça vite fait en C sous Windows ? :smiley: Et passe par la commande system() ou exec() dans une thread pour appeler php, ça ira plus vite que de t’amuser à faire tout en C. Genre :

char buffer[4096] = {0};
strcat(buffer, "php -f foobar.php -- \"");
strcat(buffer, filepath);
strcat(buffer, "\"");
system(buffer);

où filepath est le chemin du fichier ajouté/etc.
Edité le 18/01/2009 à 22:55

Si tu as un script sous Linux, tu peux le mettre dans le cron, et lui faire vérifier un sous répertoire donné.
Après tout dépend du contexte : si une fois traité tes fichiers disparaissent, il suffit de tester l’existence d’un fichier, sinon, du explores la liste et tu agis en fonction de sa date d’arrivée ; ou encore tu le renommes avant action (ou après)

Me souviens d’enseignements où on me définissait le temps réel comme “fournir l’information au moement où on en a besoin”. Donc, comme l’a dit gcc, je déclencherai l’action par un Cron, le script/appicatif explorerai le répertoire et pour chaque fichier trouvé qui correspond à ton critère (fichier tiff), notterai nom et taille. Disons 10 secondes après, il recommence. Tous les fichiers répertoriés qui ont la même taille lors des 2 scrutations seraient traités. Petite ruse sioux pour éviter de traiter un fichier en cours d’écriture (d’arrivée dans le répertoire).

Voila voila.

Je vous remercie pour vos réponses.

Après des essais avec le logiciel OCR, il sera maintenant clair que je serais sous linux (sous windows c’est trop tordu de le faire fonctionner)

Je suis entrain de reflechir a la creation d’un fichier batch qu’effectivement je lancerais avec le cron dans ce cas qui aura 6 choses a faire:

  • lire le dossier X
  • traiter le ou les fichiers du dossier X et les envoyer dans le logiciel OCR
  • recupérer le resultat de l’OCR et l’analyser avec des mots clé recupérer d’une base de données distante (mais presente sur le reseau local)
  • en fonction du resultat des mot clé effectuer une(ou plusieurs) requetes d’insertion dans la base de données distance (le même que precedement) et envoyer le fichier X sur un autre ordinateur via reseau dans un dossier partagé masqué
  • envoyer un mail a l’utilisateur (ou les utilisateurs) ou les mots clés correspondent
  • supprimer les fichiers traités au fur et a mesure

mesure en cas de problème: avant le traitement du fichier, tester le serveur contenant la bdd et ou le fichier doit être déplacé est disponible, sinon on arrete tout et on attend qu il le soit (quitte a faire un petit envoi de mail a l’administrateur pour dire qu il y a un pb)

Même si je sais que le batch de linux est puissant, je ne suis pas sur qu il sache tout faire.
A votre avis faut il que je cree un fichier php qui contiennent ce que je veux faire et je le fais executer dans le cron, ou c’est tout faisable en batch?

merci d’avance

Par définition, un Batch n’est rien d’autre qu’un “traitement par lots”. Sous Linux, il est commun d’écrire les batchs en Shell (Bash la plupart des cas). Mais en fait, n’importe quel langage fait très bien l’affaire. Tu peux même mixer le tout (écrire des scripts plus unitaires, et les lancer avec un script shell). C’est donc à toi de voir.

Devant la problématique qui est la tienne, je m’orienterai vers un mix Shell et Python et/ou Perl (pour la lecture du resultat OCR, la connexion à la BDD, la gestion du mail…). A mon sens, Php est un très mauvais choix pour ce genre de traitements.

Ah oui, l’intérêt de Perl ou Python, c’est qu’ils sont portables (si tu te rends compte que finalement le traitement serait meilleur sous Windows, il ne t’en coûtera que l’installation de l’interpréteur) et peuvent être appelés dans certains langages (Java avec sa JSR 223) ce qui peut te permettre d’éviter de réécrire du code.

Voila voila.

aie ca va pas etre facile étant donné que le python ou le perl ne sont pas des langages que je connais…

mais il est vrai qu’il serait un atout qu il soit portable pour la simple et bonne raison qu il se pourrait bien qu’on jour le serveur de fax ne soit plus un rôle de notre serveur linux et revienne sur notre serveur windows (avec pour objectif de centraliser les fax et notre base de données sur le même ordinateur)

Pour l’instant il n’en est pas question mais c’est plus pour un problème du logiciel OCR qu’autre chose qui est trop tordu a installer. Sous linux juste une paquet a recuperer puis a installer et c’est fini.

Tu peux aussi lancer php avec un script en tâche cron si t’as pas envie de te faire chier… genre php -f XXX.php

C’est détourner le php de sa véritable fonction.

Moi je vois plutôt un programme tournant en tâche de fond qui scrute périodiquement le dossier de sortie. Dès qu’un fichier arrive dans le répertoire, le programme passe en traitement et effectue toutes les opérations requises. Une fois le traitement terminé, il se remet en scrutation, etc etc…

Niveau langage, je trouve le Java idéal, c’est portable et hormis 2 librairies (odbc + mail) tous est faisable avec les libraires standards.
Dans ma dernière mission, j’ai fait plusieurs prog java de ce type (scrutation + traitements)

C’est détourner le Java de sa véritable fonction (ie: faire ramer le PC)

Sérieusement, tu peux aussi bien utiliser PHP que Python ou autre. Certes, tu ne peux pas créer de Thread, mais ça n’a pas trop d’importance là.

si je comprends bien je dois preciser un petit point qui peut avoir son intérêt: l’ordinateur ou est installé le linux n’est pas de dernier fraicheur…il doit avoir approximativement 5/6ans au moins (Pentium3 avec 370Mo de RAM)

PHp c’est sur que le code je peux le faire facilement, java beaucoup moins

Attends, j’ai conseillé Perl ou Python car à mon sens plus adaptés. Maintenant, c’est toi qui voit avec tes possibilités :wink:

Pour la portabilité, c’est pas forcement un problème, tant que vous avez un Linux : le dossier est partagé, c’est la machine adéquat qui fait le boulot :wink:

Voila voila :slight_smile:

guymage
Sans-Nom

Oui, c’est détourner Php de sa fonction qui est de composer des pages HTML. Oui, Php est plus évolué que ça (connexion base de données, objet) mais la plus part des fonctionalités sont assez pourries (la notion d’objet est un gros patch bien contraigant) ou instables (renomage des bibliothèques Oracle entre PHP4 et PHP5 qui rendent la rétrocompatibilité impossible. Donc non, Php pour des actions de Batch, si on peut s’en passer, on évite au possible.

Bon… Après, si c’est le plus facile…

Java est un langage comme un autre, mais ici, de manière TRES simplifiée, il faut exécuter des logiciels les un après les autres en fonction de l’existance de fichiers. Sous Linux, un script Shell suffirait (sous windows, un script powerShell devrait aussi faire l’affaire). Cependant, à mon sens, il y a une “intelligence” à implémenter qui est assez pénible en Schell, donc un langage de script plus évolué me semble plus à propos, sans avoir à sortir l’artillerie Java (création d’objets complexes pour gérer une liste) ou C/C++ (se prendre la tête à gérer pointeurs et mémoire pour créer la même liste). Je passe sur passe sur la notion de faire ramer le Pc, ou alors il faut vraiment passer à un Pc à jour car mon téléphone ne rame pas avec tout le Java qui tourne dessus et il a une puissance bien inférieur à mon Pc…

C’était un troll ça hein :slight_smile: (je fais du Java en semaine, en théorie, et à moitié du C/C++ au boulot…) ceci dit, c’est lourd à lancer, et ça s’en ressentira dans le batch (et dans ce cas, autant faire le serveur directement en Java, un while (X) {Thread.sleep(Y);} peut faire l’affaire à la limite).

Pour PHP, Perl ou Python, tu sais ça dépend pas de savoir ce qu’il est prévu à la base (tu n’es pas forcé de sortir des pages html en php, …) mais plutôt tes compétences. Connaissant notre gus, je dirais que PHP est le meilleur choix :slight_smile:

heu c’est moi le gus :wink: ?

zut connu comme le loup blanc moi :wink:

Bah non, c’est pas un troll… Mais en effet, vu les traitements, le démarrage de l’application si en Java sera trop lourd.

Quand à savoir quoi utiliser, avoir une idée de ce pour quoi un langage est prévu au départ permet de comprendre les faiblesses de son évolution, et le risque d’utiliser Php est l’évolutivité difficile. Mais en effet, et je l’ai dit, il est plus efficace d’implanter avec ce que l’on connait que de tenter une implantation risquée en théorie plus robuste, mais réellement non car mal faite.

Si je recentre sur le sujet :

  • fichiers Tiff dans un répertoire.
  • lancer un script par un cron toutes les X minutes
  • le script écrit en Shell nunux ou PowerShell lance les différentes applications ou les différents scripts de traitement
    OU
  • le script écrit dans un langage de script lance les différentes applications ou les différents scripts de traitement

Voila voila

Ouais. Si t’es pas content, je t’appelle Machin et je demande à la Team de changer ton pseudo? Ca te va?

prend le pas comme ca, c’était pas méchant je t’assure

Il ne l’a pas mal pris, il parle tout le temps comme ça :smiley:

Ah désolé, j’ai encore oublié le mode “kikoo/lol” et les smileys :smiley: