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 :

Forcer l'attente de la fin du script


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut Forcer l'attente de la fin du script
    Bonjour,

    J'ai fait un script php qui permet de charger un dump dans mySql. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    set_time_limit(0);
    $db_charset = "latin1"; /* mettre utf8 ou latin1 */
    $db_server         = '***********';
    $db_name           = '***********';
    $db_username       = '***********';
    $db_password       = '***********';
    $cmd_mysql = "mysql";
    $archive_GZIP      = "MyOzeLocal.sql.gz";
    echo " Restauration OK";
     
    $CR_exec = system($commande);
    ?>
    J'ai mis l'instruction suivante qui permet (enfin je crois) de fixer le temps d'attente Max à l'infini :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    set_time_limit(0);
    Seulement, apres 16 secondes, le process s'arrete.

    Avez vous une idée?

    Merci

    Julien

  2. #2
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2010
    Messages : 89
    Points : 82
    Points
    82
    Par défaut
    Il faudrait régler la variable set_time_out du serveur apache/php et je ne crois pas que ce soit possible via une fonction php.
    J'ai souvent ce genre de manip a faire et pour cela j'utilise un .bat (oui je suis sous windows...).
    en ligne de commande, php n'est pas sujet au timeout et quelques soit le temps que cela prend, le script sera exécuter jusqu’à la fin (ou jusqu’à la première erreur).

    lancer un script php via un .bat, ca donne quelques chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\wamp\bin\php\php5.3.0\php.exe C:\wamp\www\tools\calcul.php
    Luke, j'ai bien connu ta mère!

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne pense pas que la limite d'execution de ton serveur soit de 16 secondes de toute façon.
    Si tu n'as pas d'erreur, c'est que tu n'as pas atteind la limite de temps.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Merci pour vos réponses.

    En fait, mon appli est hébergée chez OVH en mutualisée, et ma base de données est chez OVH_SqlPrivé.

    Je n'ai à priori pas de message d'erreur. Si il y en a, il s'affichera bien sur ma page?

    Quand je charge le même dump via l'interface de SQL_Privé, le chargement s'effectue en entier! Etrange???

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si il y en a, il s'affichera bien sur ma page?
    ça dépend de la configuration php.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Je viens de voir ce fichier (my.cnf) à ma dispo chez SqlPrive :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
     
    [mysqld]
     
    tmp_table_size=5M
    query_cache_size=10M
    thread_cache_size=5
    max_connections=75
    open_files_limit=900
     
     
    skip-locking
    key_buffer_size = 10M
    max_allowed_packet = 1M
    table_cache = 300
    sort_buffer_size = 1M
    join_buffer_size = 1M
    read_buffer_size = 512K
    read_rnd_buffer_size = 256K
    net_buffer_length = 2K
    thread_stack = 128K
     
    max_binlog_cache_size = 1M
    max_join_size = 12M
    max_seeks_for_key = 2M
    max_write_lock_count = 512K
    myisam_max_sort_file_size = 1M
     
    ########################
    ##Configuration Innodb##
    ##Uncomment the next line to disable Innodb
     
    #skip-innodb
     
    innodb_buffer_pool_size         = 16M
    innodb_additional_mem_pool_size = 2M
     
    innodb_log_file_size            = 10M
    innodb_log_buffer_size          = 4M
     
    innodb_flush_log_at_trx_commit=1
     
    skip-name-resolve
    C'est surement ici que je peux faire mes réglages, mais je ne suis pas expert, loin de la!

    Quelqu'un a une idée?

    Merci

    Julien

  7. #7
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    Bonjour,
    Je ne vois pas $commande ("mysql param1 param 2") dans le code ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    system($commande, $valeurRetour); 
    print_r( $valeurRetour) ); // voir le resultat de la commande
    $moi= ( !== ) ? : ;

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Oups, désolé, voici mon code entier en tenant compte de ta remarque :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?php
    set_time_limit(0);
    error_reporting(E_ALL); // Activer le rapport d'erreurs PHP
     
    $db_charset = "latin1"; /* mettre utf8 ou latin1 */
    $db_server         = '***';
    $db_name           = '***';
    $db_username       = '***';
    $db_password       = '***';
    $cmd_mysql = "mysql";
    $archive_GZIP      = "MyOzeLocal.sql.gz";
     
    $commande = "gzip -d < ".$archive_GZIP." | ".$cmd_mysql." --host=".$db_server."  --user=".$db_username." --password=".$db_password." ".$db_name;
     
    system($commande, $valeurRetour); 
    print_r( $valeurRetour); // voir le resultat de la commande
    ?>
    Je viens de l'exécuter, il me renvoie 137. Une idée?

  9. #9
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    D'ou vient cette commande ?
    il faudrait faire un echo de $commande, pour voir si elle est logique

    Le but n'est pas de faire un mysqldump ? oops mal lu
    $moi= ( !== ) ? : ;

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    La commande fonctionne car il me charge 1/5eme de la BD

    Et quand je fais ca en local, la BD est bien chargée

    => Donc je suis sur que mon dump et ma commande sont OK

  11. #11
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    si 1/5, se ne serait pas un problème sql ?
    si le .gz vient de local, une version non compatible ? encodage ?

    -------------
    edit : erreur 137, je pense que cela vient pas d'apache ou php mais du système

    trouvé ca pour mysql : http://major.io/2007/08/09/mysql-error-codes/
    $moi= ( !== ) ? : ;

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    J'ai chargé un petit dump = petit.dump.sql => Code Retour = 0; Chargement Dans BD OK

    J'ai chargé un gros dump = gros.dump.sql => Code Retour = 137; Chargement Dans BD Partiel ; Arret au bout de 15 secondes

    J'ai chargé un gros dump compressé = gros.dump.sql.gz => Code Retour = 137; Chargement Dans BD Partiel ; Arret au bout de 15 secondes

    Qq1 connait la signification du code retour 137? Il vient de PHP ou MySql?

    Merci a vous

  13. #13
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 103
    Points : 4 449
    Points
    4 449
    Par défaut
    la fonction exec affiche sans + d'infos

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec($commande, $valeurRetour); 
    print_r( $valeurRetour) ); // voir le resultat de la commande
    $moi= ( !== ) ? : ;

  14. #14
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 28
    Points : 24
    Points
    24
    Par défaut
    Cela m'affiche seulement :

    Array ( )


    :-(

  15. #15
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 104
    Points : 85
    Points
    85
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exec($commande . " 2>&1", $valeurRetour);
    et là tu as qqchose dans ton print_r?

Discussions similaires

  1. Attente de la fin d'un parmis plusieurs threads
    Par barbug dans le forum Multithreading
    Réponses: 12
    Dernier message: 13/02/2009, 07h46
  2. Réponses: 0
    Dernier message: 27/08/2007, 13h16
  3. Appeler une fonction en fin de script
    Par Oprichnik dans le forum Langage
    Réponses: 4
    Dernier message: 26/08/2007, 23h42
  4. [AJAX] page d'attente là 'aide d'un script javascript
    Par babalastar dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/03/2007, 21h12

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