IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Optimisation creation d'image php


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut Optimisation creation d'image php
    Bonjour à tous,
    Je viens vers vous pour obtenir quelques conseils quant à la création d'image en code php.
    En effet, j'ai un site qui se met à jour automatiquement en fonction d'un fichier envoyé par un logiciel.
    Je dois pour cela créer des images d'une largeur de :
    1 - 700px
    2 - 341px
    3 - 201px
    4 - 88px
    pour mes différents niveau d'affichage.

    Je suis sur un hébergement mut ovh.
    Lorsqu'il n'y a pas beaucoup de photo, mes codes fonctionnent, mais je dois gérer près de 200 images pour poser la base de travail, et là forcément, le serveur arrête les scripts, j'avais donc indiqué dans mon fichier php set_time_limit(0) pour que cela ne coupe pas.
    Sur mon serveur local de test, cela fonctionne, mais sur le serveur mut, ca coupe encore, certes pas au bout de 30 secondes, mais, mon script est toujours arrêté.
    Je me suis donc dit, si mon script de base met trop de temps pour créer les images, je vais traiter par exemple 5 biens (contenant 3 images max) et à l'aide de Curl, appelé un autres fichiers en lui envoyant les informations nécessaire pour terminé la création avant de passer à l'étape suivante, ce qui permettra d'éviter l'arrêt par le serveur.
    De même sur le serveur local, lorsque j'arrête le navigateur lorsque je vois que les photos des 5 premiers biens sont réalisé, je peux voir sur le HDD que l’ensemble des rappelles Curl fonctionnent et toutes mes images sont traitées, sur le serveur, Curl ne continu pas.
    J'ai 3 fichiers, un pour la création des images en 700, et un autre pour la création des 3 autres formats, le serveur coupe durant l’exécution du premier fichier.
    Pourriez vous me donner quelques conseils pour optimiser la créations de ces images sans que le serveur ne coupe l’exécution du script ?

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Comme ça va être difficile de paralléliser les scripts sur un serveur mutualisé, j'opterai pour un contrôle du séquencement de la pile de fichiers à traiter par JavaScript & Ajax (client side donc).

    L'idée c'est d'avoir un script coté client qui dépile les fichiers à traiter et envoie des XHR pour déclencher leurs traitements par PHP (un appel par traitement par exemple).

    L'avantage, c'est que tu peux fournir un instantané du flux de traitement.

    Je vais te faire un exemple...

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Merci, j'attends de voir ton exemple pour mieux comprendre ta pensée.
    L'utilisation de javascript et Ajax ne ressemble pas au principe que j'ai utilisé avec Curl ?

    Pour moi, lorsque je lance un appel vers un fichier Curl, c'est comme si j'ouvrais avec le navigateur l'url demandé, et donc je pensais perdre la contrainte de la restriction de temps d’exécution.

    Voici ce que j’avais mis en place avec curl pour mieux comprendre :

    -1 lancement du fichier qui lit le XML et met à jour la bdd
    -2 Curl vers fichier de création d'image 700, lecture du XML + création d'un tableau contenant le minimum d'informations pour traiter, je boucle et supprime du tableau les lignes traitées, si j'ai créé les images de 5 biens, je stoppe la boucle, je lance via Curl le "fichier creation 700 suite" en envoyant le reste du tableau
    -3 lecture du tableau reçu, je boucle pour traité 5 biens, je stoppe la boucle, je rappel le même fichier via Curl jusqu'à ce que le tableau soit vide, si vide, j'appelle le fichier créant les miniatures
    -4 lecteur XML et création tableau à nouveau, boucle pour traité les images de 5 biens et créer les miniatures (341, 201, 88) via une fonction, si 5 biens traités (donc supprimé du tableau), je stoppe la boucle, j'appelle le fichier créant le restant des images en envoyant le restant du tableau
    -5 lecture du tableau reçu, création des minis jusqu'à ce que le tableau soit vide, ensuite appel du fichier créant les filigranes sur les images
    -6 lecture XML, création tableau, boucle pour traité 5 biens, puis appelle fichier pour terminer les filigranes
    -7 lecture tableau et finissions des filigranes + suppression des fichiers temporaire.

    Je pensais qu'avec ce genre d'enchainement, cela aurait fonctionné, en effet, en local, si j'arrête le script lancé sur le navigateur, toutes mes images sont créées (je n'ai du coup pas l'affichage de toutes mes étapes retourner par les Curl), mais sur le server ovh, ca s’arrête tout simplement au bout d'un temps aléatoire, le script peu créer 70 images comme il peut en créer 150 (en taille 700), c'est ou je ne comprend pas trop.
    et surtout pourquoi l'enchainement Curl est il arrété sur le serveur contrairement au local?

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Souvent, les hébergements mutualisés mettent des limitation contraignantes sur l'usage de CURL. Disons simplement qu'ils tentent au maximum de limiter les traitements lourds et ne permettent généralement pas la parallélisation des process.

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 244
    Points
    20 244
    Par défaut
    Pour moi, lorsque je lance un appel vers un fichier Curl, c'est comme si j'ouvrais avec le navigateur l'url demandé
    A mon avis le premier script ne se termine que lorsque que Curl à reçu la réponse du second script. Donc du coup à moins qu'il soit possible de lancer une requête curl dans le vent sans attendre de retour, ça ne sert à rien.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 99
    Points : 45
    Points
    45
    Par défaut
    Donc du coup à moins qu'il soit possible de lancer une requête curl dans le vent sans attendre de retour, ça ne sert à rien.
    Il faut savoir que cette maj est lancé automatiquement via une tache planifiée durant la nuit, ce qu'elle retourne m'importe peu, j'ai juste placé sur mon dernier fichier un mail me récapitulant l'ensemble du processus pour que je puisse voir rapidement si la maj s'est correctement effectué.

    L'affichage du Curl n'est là que pour effectuer mes tests ou voir où le script s'arrête lorsque je le démarre manuellement...

    A mon avis le premier script ne se termine que lorsque que Curl à reçu la réponse du second script.
    J'ai essayé de lancer le fichier créant que les images 700 sans lancer la suite via Curl, mais le serveur arrête le script aléatoirement.

Discussions similaires

  1. [EasyPHP] EasyPHP 1.8 et creation d'images avec php
    Par 12monkeys dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 19/12/2007, 13h09
  2. [Upload] Upload images php
    Par lls dans le forum Langage
    Réponses: 15
    Dernier message: 19/07/2007, 19h23
  3. [Images] créations d' Histogrammes PHP
    Par friiitz dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 08/06/2006, 11h51
  4. Réponses: 2
    Dernier message: 27/09/2005, 13h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo