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 :

microtime : délais étonnant


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 52
    Points : 17
    Points
    17
    Par défaut microtime : délais étonnant
    Bonjour,

    J'ai créé une page php qui génère l'affichage d'un script (j'ai également essayé avec une simple iframe) avec dans l'url un paramètre comportant le timestamp actuel.
    Dans la page ouverte en script(ou iframe), je calcul la différence entre le timestamp actuel et celui transmis dans l'url... J'avais donc prévu un temps de 3s max sinon je log une erreur. Et finalement je m’aperçois avoir énormément "d'erreurs" j'ai augmenté le temps a 20s et j'ai beaucoup de log encore, j'ai des difference de 4-5min voir plus, j'ai (très peu mais y'en a), des différences de 1h 3h voir 6h... ( qui apparaissent bien entendu plusieurs heures après.... sachant que je ne laisse pas le script sur la première page, je fais juste des tests de quelques minutes)...
    Comment cela peut s'expliquer ? J'ai pensé à un cache de la première page ( sachant que j'ai défini des header pour empécher cela), mais dans les logs les microtimes qui ressortent en erreur sont tous différents.... donc ça m'étonnerais que cela soit ça..
    Donc je ne comprend vraiment pas ce qui peut se passer et engendrer cela, avez vous une idée ?

  2. #2
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Etonnant que le serveur ne tombe pas après 6h de moulinette.

    Comment utilises-tu ton microtime() ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $start = microtime(true);
    // mon traitement
    $end = microtime(true);
     
    $period = number_format($end-$start,3).'s';

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    salut,

    je penses que tu n'a pas compris je ne fais pas une différence dans le même script php
    J'ai une page php qui génére dans le code une iframe avec pour src: http://monsite.com/page2.php?var=<?php echo round(microtime(true) * 1000); ?>
    et c'est donc sur la page2 qui elle prend un nouveau round(microtime(true) * 1000); et compare celui transmis dans l'url et l'actuel.
    Comme c'est une iframe ouverte directement dans la page1 la différence des deux timestamp devrait selon la connexion du visiteurs être de quelques seconde maximum..

  4. #4
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Pourquoi * 1000 ?
    Remplace
    round(microtime(true) * 1000)
    Par
    round(microtime(true))
    Malheureusement, le round va fausser ton calcul de période. Mais peut-être que tu n'as pas besoin d'être aussi précis.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    je multiplie par 1000 car c'est un nombre a virgule... et oui j'ai pas besoin d'etre plus précis car c'est du microseconde et mon soucis est de l'ordre des minutes...

  6. #6
    Membre actif Avatar de Trehinos
    Homme Profil pro
    Analyste développeur PHP
    Inscrit en
    Novembre 2012
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyste développeur PHP
    Secteur : Distribution

    Informations forums :
    Inscription : Novembre 2012
    Messages : 99
    Points : 228
    Points
    228
    Par défaut
    Attention : microtime(true) renvoie un nombre en secondes avec les microsecondes (les chiffres après la virgule, donc). Mais ce sont bien des secondes.

    En multipliant par 1000, vous travaillez avec des millisecondes (10^ -3).

    Si vous voulez un affichage en minutes, divisez par 60.

    round(microtime(true)) est probablement équivalent à time().

  7. #7
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    J'imagine que dans ta page 2, tu as un
    Qui est la valeur envoyée dans l'url de ta page 1

    Et que tu compares bien avec la variable microtime(true) assignée dans ta page 2 ?

    Est-ce que les 2 pages sont sur le même serveur ?

  8. #8
    Membre confirmé Avatar de ma5t3r
    Homme Profil pro
    Développeur freelance
    Inscrit en
    Mai 2015
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 320
    Points : 492
    Points
    492
    Par défaut
    Qu'est-ce que ça donne ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $start = microtime(true);
    $page = file_get_contents('http://monsite.com/page2.php');
    $end = microtime(true);
    echo number_format($end-$start,3).'s';

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 52
    Points : 17
    Points
    17
    Par défaut
    oui c'est sur le même serveur et ça marche très bien quand moi je visite la page.
    Mais pour une partie des visiteurs ils ouvrent apparemment l'iframe plusieurs secondes voir minutes après la page1 qui l'inclue...
    Je penses que je vais me logué les navigateurs et OS pour voir si ça le fait sur les mêmes...

Discussions similaires

  1. Délai d'expiration des cookies
    Par Sylvain James dans le forum XMLRAD
    Réponses: 40
    Dernier message: 22/03/2006, 10h22
  2. expiration du délai pour une page
    Par yahia dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 21/06/2004, 12h03
  3. Connexion ADO et SQL Server : délai d'execution expiré.
    Par denrette dans le forum Bases de données
    Réponses: 2
    Dernier message: 24/02/2004, 09h00
  4. [CDD] Renouvellement Délai de carence
    Par seb.49 dans le forum Droit du travail
    Réponses: 4
    Dernier message: 11/02/2004, 08h32
  5. Délai d'attente expiré
    Par amiral thrawn dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 15/04/2003, 12h04

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