Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

[PHP] Exécution d'une application windows assez lourde.


Messages recommandés

Invité dac0w
Posté(e)

Bonjour,

 

Dans le cadre d'un projet je travaille avec Zoomifyer (edition entreprise).

Cette application permet la conversion d'image HD et est fournis avec un exécutable autorisant sont lancement en ligne de commande.

 

Le projet consiste en une page avec la liste des images découpée. Elle est séparé en deux parties. La partie supérieure qui affiche la liste des images en cours de conversion et la seconde avec les images déjà converties et prêtes à être mise en ligne. Le contenu s'auto-rafraichis automatiquement toutes les minutes.

 

D'un autre côté j'ai la partis conversion qui me pose soucis.

 

Ce qu'il me faut c'est une fonction php qui fouille le dossier à la recherche de nouveau contenus, une autre pour lancer la conversion du nouveau contenus, une autre qui affiche ce qui est fini et ce qui ne l'est pas.

 

Pour la recherche de nouveau contenus c'est pas trop compliquer (je reste ouvert à toutes idées/solution pour le faire proprement).

 

Pour la conversion il faut savoir que les images peuvent n'avoir aucune limite de taille, et vu que c'est de la HD il n'est pas rare de tomber sur des images de plus de 2Gio. Modifier le timeout php est hors de question (temps de traitement dépendant de la taille de l'image, utilisation du processeur dépendant de l'utilisation du serveur, plusieurs images peuvent être convertis en une seule ligne de commande...).

 

Pour afficher ce qui est fini ou pas le fichier log de sortie est inutile lors de la conversion de plusieurs fichiers d'un coup (en une seule ligne de commande).

 

Je préfère évité au maximum les connexions SQL (mais je ne l'occulte pas, si ya une autre solution (propre) ca me va).

 

Précision importante: le serveur tourne sous Windows Serveur/IIS.

 

Merci!

Invité dac0w
Posté(e)
Euh... OK... Mais... C'est quoi, la question, exactement ?

Très bonne question! :P

 

Je souhaiterais savoir comment il est possible de lancer un programme (dans le cas présent Zommifier) sans risque de timeout et ce en pouvant définir si oui ou non il est encore en exécution.

Par la même occasion: qu'elle serait la solution la plus propre et simple pour vérifié si de nouveau contenus se trouvent dans un dossier et être capable des les identifiés.

Posté(e)
Je souhaiterais savoir comment il est possible de lancer un programme (dans le cas présent Zommifier) sans risque de timeout et ce en pouvant définir si oui ou non il est encore en exécution.
En local ou en distant ?

Tu peux programmer une tâche qui va exécuter tes redimensionnements (en utilisant un ou plusieurs threads / processus), par exemple, et qui te permettra de savoir si c'est en cours ou non.

Au niveau du timeout, ça se configure ;-)

 

Par la même occasion: qu'elle serait la solution la plus propre et simple pour vérifié si de nouveau contenus se trouvent dans un dossier et être capable des les identifiés.
Scanner le répertoire "à la demande" (dès qu'il y a une requête, ou bien - si les accès sont très fréquents - si le dernière requête date de plus de <délai à régler toi-même>) à la recherche de contenus non répertoriés ?

En utilisant un "index" des contenus, rafraîchi à chaque ajout de contenu et permettant de ne pas avoir à scanner tout le répertoire (juste une ouverture de fichier... ou mieux : juste une consultation de la date de dernière modification du fichier) ?

Posté(e) (modifié)
En local ou en distant ?

Tu peux programmer une tâche qui va exécuter tes redimensionnements (en utilisant un ou plusieurs threads / processus), par exemple, et qui te permettra de savoir si c'est en cours ou non.

Au niveau du timeout, ça se configure :P

Oublions la tâche...

 

Scanner le répertoire "à la demande" (dès qu'il y a une requête, ou bien - si les accès sont très fréquents - si le dernière requête date de plus de <délai à régler toi-même>) à la recherche de contenus non répertoriés ?

En utilisant un "index" des contenus, rafraîchi à chaque ajout de contenu et permettant de ne pas avoir à scanner tout le répertoire (juste une ouverture de fichier... ou mieux : juste une consultation de la date de dernière modification du fichier) ?

Le scan se fait à l'ouverture d'une page listant les images... et finalement la solution qui consiste à utiliser la base de donnée semble la plus logique.

 

J'ai réfléchis un peu, j'ai relus le cahier des charges et j'en suis là:

 

Zoomifyer ne propose qu'un exécutable pour tuiler les images. Le fichier log donne ça:

-------------Zoomifyer Launched-------------,Tue May 12 15:49:46 2009

Conversion of 4 file(s) started,Tue May 12 15:49:46 2009

c:\Users\*\Pictures\zoom\chat_079.jpg,Tue May 12 15:49:46 2009

c:\Users\*\Pictures\zoom\chat1.bmp,Tue May 12 15:49:46 2009

C:\wamp\www\MooZifier\SF_HD.jpg,Tue May 12 15:49:46 2009

C:\Users\*\Pictures\zoom\chat.jpg,Tue May 12 15:49:46 2009

Idle Done,Tue May 12 15:50:07 2009

Zoomifyer Complete,Tue May 12 15:50:07 2009

Si on regarde les heures, il met d'un bloc ce qu'il va faire, puis la phrase "Idle Done" quand il a fini... donc pas moyen de convertir plusieurs images d'un coup.

 

Concernant le timeout, j'ai expliquer pourquoi il est impossible (enfin, surtout suicidaire) de le modifier:

Sur mon pc, une image de 40Mio prend 17 secondes à tuilé... ça donne 28 minutes pour 4Gio et des images de 4Gio il va y en avoir.

Mais si un utilisateur décide d'uploader une image de 100Gio, ou même 1Tio ? L'envoi de ces images n'a aucune limite autre que la barrière matérielle.

 

On va donc partir sur l'idée suivante:

  • La page qui liste toutes les images vérifie (toutes les X secondes via AJAX) dans la base de donnée si "conv" est sur 0 (normal), 1 (en cours de conversion) ou 2 (image convertie).
  • L'utilisateur lance la conversion, les images sont convertis image par image (apparament le moyen le plus simple pour surveiller chaque image) et à la fin de la conversion d'une image il enregistre ca dans la base.
  • Plusieurs utilisateurs peuvent convertir des images en même temps. Donc un processus par utilisateur et ce sans que cela pose un soucis de surveillance de thread.

 

Ce sur quoi je bloque:

Le moyen pour lancer un processus tout en surveillant en direct sa fermeture...

Être sûr que c'est bien le bon processus dans le cas ou plusieurs utilisateurs lance une conversion en même temps.

Tout ça en évitant à tout prix un timeout.

 

Je me demande si surveillé les log ne serait pas la solution la plus simple, mais quel coût cela aurait? Je ne suis même pas sûr d'avoir accès au CLI de PHP sur ce serveur.

 

Merci de ton aide!

 

Petit edit: Suite à la lecture attentive de la FAQ de Zoomifyer il semblerait qu'une image soit créé en dernièr et toujours dans le même sous-dossier... Reste le problème du lancement de l'application de manière indépendante à PHP pour évité le timeout... ce à quoi j'ai peut être une solution que demande à être testée.

N'hésitez pas à me proposer des solutions.

Modifié par meuhlavache

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...