Вопрос

У меня небольшой скрипт, и я хочу определить версию скрипта из нижнего колонтитула администратора. На админском 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 и он отлично работает для сравнения версии.

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

Это было полезно?

Решение

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

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

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

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

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

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

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

    Другие советы

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

    file_get_contents ()

    $version = file_get_contents('http://wwww.example.com');
    if (VERSION != trim($version)) {
    }
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top