PHP - Как проверить версию скрипта - PullRequest
0 голосов
/ 31 октября 2009

У меня небольшой скрипт, и я хочу определить версию скрипта из нижнего колонтитула администратора. В админ footer.php я поставил этот код.

<?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
      }
  }
?>

В version.txt есть только 1.0.1 и работает нормально для сравнения версии.

Проблема здесь, сайт клиента будет работать медленно. Как решить эту проблему?

Ответы [ 2 ]

5 голосов
/ 31 октября 2009

Причина, по которой он работает медленно, заключается в том, что сервер, на котором выполняется ваш код PHP, должен обратиться к v.domain.com через HTTP и загрузить копию version.txt. Пока это происходит, PHP сидит там и ждет его.

Почему это замедляет всю страницу, даже если она находится в нижнем колонтитуле? Потому что Apache будет некоторое время кэшировать вывод страницы PHP, прежде чем выложить ее в браузер. И даже если вы очищаете выходной буфер, иногда это делает браузер, и это то, что вы не можете контролировать.

Звучит так, как будто вы хотите выпустить какой-нибудь инструмент на основе PHP, и в нижнем колонтитуле есть автоматическая проверка версий, верно?

Если это так, есть пара проблем с тем, как вы это делаете:

  1. Нет необходимости проверять версию каждый раз, когда загружается ваша страница. Сохраните последнюю дату, которую вы где-то проверяли, и проверяйте только снова ___ дней спустя. (Надеюсь, вы уже делаете это и просто вырезали это из примера для простоты)

  2. Чтение такого файла с другого сервера - плохая идея. Как вы видите сейчас, это может вызвать замедление, если ваш v.domain.com будет занят. Если он выйдет из строя, то ваш PHP займет еще больше времени, потому что он ожидает по таймауту.

Лучший способ сделать это - использовать Javascript. После загрузки вашей страницы у вас будет функция javascript, использующая AJAX. Если вы не знакомы с Javascript, хотя может быть что-то вроде кривой обучения, но это идеальный способ справиться с вашей ситуацией.

2 голосов
/ 31 октября 2009

Если файл просто номер версии, я бы предложил:

file_get_contents ()

$version = file_get_contents('http://wwww.example.com');
if (VERSION != trim($version)) {
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...