Précédent   Forum des professionnels en informatique > PHP > Langage > Débuter
Débuter Forum d'entraide pour débuter en PHP. Avant de poster -> Cours PHP, FAQ PHP, Outils PHP, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/06/2011, 10h03   #1
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
Par défaut Lancer des scripts les uns après les autres

Bonjour,

Je suis sous 1and1 mutualisé sans SSH ni tâches CRON possibles.
J'ai un script qui créé des fichiers pdf (via html2pdf) mais ce script prend trop de mémoire sur le serveur et j'ai une erreur (memory limit). J'ai augmenté la mémoire via un php.ini au maximum autorisé. Cela ne suffit pas.

Je souhaite donc créer plusieurs script exécuté l'un après l'autre qui crééront chacun une page (pas de pb de mémoire pour une seule page).

L'utilisateur clic sur créér le pdf. Le premier script créé la page 1, libère la mémoire du serveur, passe la main au second script qui créé la page 2, libère la mémoire etc...

Je n'ai aucune idée de quelles fonctions utiliser.

Merci de votre aide
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 11h32   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Tu devrais faire ça avec Ajax, lancer les scripts de manière synchrone les uns après les autres ne va rien arranger.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 11h42   #3
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
As tu une piste pour l'ajax ? Car le faire en asynchrone (Ajax je crois) ne me diras pas quand le précédent script est terminé.

Comment s'y prendre en Ajax pour exécuter le script script.php toutes les minutes 20 fois (avec un paramètre passé) par exemples suite au clic d'un seul bouton ?
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 12h44   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
L'idée serait de générer le document page par page comme tu le suggère et de piloter ordonnancement des traitements avec JavaScript (quand une page est fini, on déclenche le trigger de la page suivante et ainsi de suite), on peut même afficher une barre de progression dans ce cas.

En revanche, ça me parait difficile d'émuler un cronjob de cette façon.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 14h32   #5
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
Tu dis: "Lancer les scripts de manière synchrone les uns après les autres ne va rien arranger." Peux tu m'expliquer cela ? La mémoire n'est pas libérée entre chaque script ?

Ta solution sous entend que la personne doit rester devant son ordi et sur le site pendant la génération des pages. C'est assez pénalisant car si la personne se déconnecte.
L'idéal serait que les pdfs soient générés puis de les envoyer par email.
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 14h45   #6
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Citation:
Tu dis: "Lancer les scripts de manière synchrone les uns après les autres ne va rien arranger." Peux tu m'expliquer cela ? La mémoire n'est pas libérée entre chaque script ?
Si en effet, en revanche les temps d'exécution seront identiques et le chargement de la page sera bloqué le temps de compléter la génération du document. Ce qui ne sera pas le cas avec Ajax.

En fait ton problème s'apparente à la création d'une queue de traitements en PHP capable d'être démarée de manière asynchrone. J'ai trouvé un article sur la question mais je doute que tu puisse le mettre en place techniquement car - comme beaucoup de solution de ce genre - il nécessite la mise en place de PCNTL...
Bref, tu peux toujours jeter un oeil: http://www.shapeshifter.se/2008/08/0...tion-with-php/
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 15h09   #7
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
Le problème ne vient pas du temps d’exécution mais des 32Mo de mémoire maximum.
Si je lance 20 script en Ajax l'un après l'autre directement sans attendre le retour du précédent, cela devrait passer (chaque script prend 10Mo mais je pense que la limite est de 32Mo par script et non sur le serveur ... ?
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 17h15   #8
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
A voir si tous les balancer d'un coup va fonctionner

Sinon, tu pourra toujours les lancer séquentiellement, même en Ajax: il suffit de mettre dans la callback "success" le lancement du suivant.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 17h47   #9
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
Et en mettant des unset() régulièrement dans ton script ?
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 17h57   #10
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
Ce n'est pas certain, unset ne libère pas immédiatement la mémoire, c'est le garbage collector qui s'en occupe (mais il n'est présent qu'a partir de PHP 5.3).

A lire sur le manuel:
Citation:
unset() does just what it's name says - unset a variable. It does not force immediate memory freeing. PHP's garbage collector will do it when it see fits - by intention as soon, as those CPU cycles aren't needed anyway, or as late as before the script would run out of memory, whatever occurs first.

If you are doing $whatever = null; then you are rewriting variable's data. You might get memory freed / shrunk faster, but it may steal CPU cycles from the code that truly needs them sooner, resulting in a longer overall execution time.
Mais il y a sans doute de la mémoire à gagner par ce biais.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 18h27   #11
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
Ok, merci de ces précisions intéressantes, mais est-ce que tu pourrais s'il te plais traduire précisément ce que tu as mis en anglais car j'ai peur de ne pas saisir toutes les finesses. Merci
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/06/2011, 18h41   #12
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 984
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 984
Points : 5 011
Points : 5 011
ça roule
Citation:
unset() does just what it's name says - unset a variable. It does not force immediate memory freeing. PHP's garbage collector will do it when it see fits - by intention as soon, as those CPU cycles aren't needed anyway, or as late as before the script would run out of memory, whatever occurs first.

If you are doing $whatever = null; then you are rewriting variable's data. You might get memory freed / shrunk faster, but it may steal CPU cycles from the code that truly needs them sooner, resulting in a longer overall execution time.
Citation:
unset() ne fait que ce que son nom suppose - il détruit une variable. Il ne force pas immédiatement une libération mémoire. Le ramasse-miettes (si si, c'est bien le nom français) de PHP le fera quand il pourra - aussitôt que les cycles CPU ne seront plus demandés ou tardivement quand le script n'aura plus beaucoup de mémoire, ou ce qui arrive en premier.

Si vous faites $peuimporte = null; alors vous réécrivez les données de la variable. Vous obtenez la libération mémoire plus vite mais cela prends des cycles CPU au code qui en à vraiment besoin et rallonge le temps d'exécution du script.
En clair:
- unset() > rapide mais libération mémoire aléatoire
- = null > lent mais libération mémoire immédiate
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 28/06/2011, 21h08   #13
Membre confirmé
 
Homme Vincent
Développeur informatique
Inscription : janvier 2009
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2009
Messages : 246
Points : 235
Points : 235
Merci
philodido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/06/2011, 00h27   #14
Membre à l'essai
 
Clémentine
Inscription : juin 2006
Messages : 128
Détails du profil
Informations personnelles :
Nom : Clémentine
Âge : 24

Informations forums :
Inscription : juin 2006
Messages : 128
Points : 21
Points : 21
J'utilise Ajax pour appeler les créations de pages une à une dès que la précédente est finie. Le serveur ne surcharge plus !

Et à la fin je concatène le fichier toujours en Ajax

Merci pour les informations
Mandarine est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h08.


 
 
 
 
Partenaires

Hébergement Web