2009-10-31 6 views
0

J'ai un petit script et je veux détecter la version du script depuis le pied d'admin. Sur l'admin footer.php je mets ce code.PHP - Comment vérifier une version de script

<?php 
    define('VERSION', '1.0'); 
    $fp = fopen("http://v.domain.com/version.txt", "r"); 
    while ($line = fgets($fp)) { 
     $line; 
     if (VERSION != $line) { 
?> 
<div id="upgrade"> 
<a href="http://domain.com/download/" target="_blank">Download a new version [<?php echo $line; ?>]</a> 
</div> 
<?php 
     } 
    } 
?> 

Dans le version.txt ont seulement 1.0.1 et fonctionne bien pour comparer la version.

Problème ici, le site client devient lent. Comment régler ce problème?

Répondre

5

La raison pour laquelle il est lent parce que le serveur exécutant votre code PHP doit frapper v.domain. com sur HTTP et téléchargez une copie de version.txt. Pendant ce temps, le PHP reste là à attendre.

Pourquoi est-ce que cela rend votre page entière lente même si elle est dans le pied de page? Parce qu'Apache va mettre en cache la sortie de la page PHP avant de la cracher dans le navigateur. Et même si vous videz le tampon de sortie, parfois le navigateur le fait et c'est quelque chose sur lequel vous n'avez aucun contrôle.

Il semble que vous vouliez libérer un outil basé sur PHP, et avoir une vérification de version automatique dans le pied de page, correct?

Si oui, il y a des problèmes de couple avec faire la façon dont vous le faites:

  1. Il n'y a pas besoin de vérifier la version chaque fois que votre page se charge. Enregistrez la dernière date que vous avez vérifiée quelque part, et vérifiez seulement encore ___ jours plus tard. (J'espère que vous le faites déjà et que vous le coupez simplement de l'exemple pour plus de simplicité)

  2. Lire le fichier comme ceci à partir d'un autre serveur est une mauvaise idée. Comme vous le savez maintenant, cela peut provoquer un ralentissement si v.domain.com est occupé. Si elle tombe en panne, alors votre PHP prendra encore plus de temps car il attend un timeout.

Une meilleure façon de le faire serait de passer par Javascript. Une fois votre page chargée, vous disposez d'une fonction javascript qui utilise AJAX. Si vous n'êtes pas familier avec Javascript, il pourrait y avoir une courbe d'apprentissage, mais c'est la façon idéale de gérer votre situation.

+1

Je voudrais aller télécharger le fichier seulement à l'occasion (tous les «x» jours, comme dit DOOManiac). Cela évite de s'appuyer sur JavaScript, car, contrairement à ce que l'on pourrait penser, de nombreux clients n'auront pas de JavaScript (téléphones mobiles, navigateurs de texte (oui, ils sont toujours utilisés), outils automatisés). Et seulement faire le téléchargement dans un travail planifié de sorte qu'il n'a pas d'impact sur l'utilisateur. –

+0

accepté. Je fais juste appel une fois et stocker à DB pour la version actuelle, puis le comparer tous les x jours. :) – wow

2

Si le fichier est juste le numéro de version alors je suggère d'essayer:

file_get_contents()

$version = file_get_contents('http://wwww.example.com'); 
if (VERSION != trim($version)) { 
} 
+0

Je préfère aussi file_get_contents. – ChronoFish

+0

Mais ce n'est pas pourquoi ça va lentement. –

+0

ouais .. beaucoup simple .. – wow

Questions connexes