2009-10-31 68 views
0

我有一个小脚本,并希望从管理页脚中检测脚本版本。在管理footer.php我把这个代码。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和工作正常来比较版本。

问题来了,客户端网站会变慢。如何解决这个问题?

回答

5

它之所以慢是因为服务器上运行PHP代码有打v.domain。 com通过HTTP并下载version.txt的副本。发生这种情况时,PHP正坐在那里等着它。

为什么这会让您的整个页面变慢,即使它在页脚中?因为Apache在把它吐出到浏览器之前会缓存PHP页面的输出。即使你刷新输出缓冲区,有时浏览器也会这样做,这是你无法控制的。

这听起来像是你想发布一些基于PHP的工具,并且在页脚中有一个自动版本检查,对吗?

如果是这样,有几个问题做你正在做的方式:

  1. 有没有需要检查每一次你的页面加载的版本。保存您在某处查看的最后日期,并且仅在___天后再次检查。 (希望你已经这样做了,只是为了简单而从示例中删除它)

  2. 从另一台服务器上这样读取文件是个坏主意。正如您现在遇到的情况,如果您的v.domain.com变得忙碌,它可能会导致速度放慢。如果发生故障,那么您的PHP将花费更长时间,因为它正在等待超时。

更好的方法是通过Javascript。加载页面后,您将拥有一个使用AJAX的JavaScript函数。如果您对Javascript不熟悉,但可能有一点学习曲线,但这是处理您的情况的理想方式。

+1

我只会偶尔下载文件(每个'x'天,正如DOOManiac所说的)。这样可以避免依赖于JavaScript,因为尽管你可能会想,但许多客户端不会拥有JavaScript(手机,文本浏览器(是的,它们仍然被使用),自动化工具)。而且只能在预定作业中下载,以免影响用户。 – 2009-10-31 03:41:37

+0

已被接受。我只是打电话一次,并存储到当前版本的数据库,然后每隔x天比较一次。 :) – wow 2009-10-31 20:55:51

2

如果该文件只是版本号,那么我会建议尝试:

file_get_contents()

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

我更喜欢file_get_contents。 – ChronoFish 2009-10-31 02:37:01

+0

但这并不是它发展缓慢的原因。 – 2009-10-31 03:36:56

+0

是的..很简单.. – wow 2009-10-31 20:54:21