我有一个小脚本,想要从管理页脚检测脚本版本。在admin 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
并且可以正常比较版本。
问题在这里,客户端网站会变慢。如何解决这个问题?
答案 0 :(得分:5)
它很慢的原因是因为运行PHP代码的服务器必须通过HTTP访问v.domain.com并下载version.txt的副本。在发生这种情况时,PHP正坐在那里等待它。
为什么这会使整个页面变慢,即使它在页脚中?因为Apache会在将PHP页面输出到浏览器之前缓存PHP页面的输出。即使你刷新输出缓冲区,有时浏览器也会这样做,这是你无法控制的东西。
听起来你想要发布一些基于PHP的工具,并在页脚中进行自动版本检查,对吗?
如果是这样,那么按照你的方式做这件事有几个问题:
每次加载页面时都无需检查版本。保存您在某处检查的最后日期,并且仅在___天之后再次检查。 (希望你已经这样做了,为了简单起见,只是从示例中删除它)
从另一台服务器读取这样的文件是个坏主意。正如您现在遇到的那样,如果您的v.domain.com忙碌,可能会导致速度减慢。如果它发生故障,那么你的PHP将花费更长的时间,因为它正在等待超时。
更好的方法是通过Javascript。加载页面后,您将拥有一个使用AJAX的javascript函数。如果您不熟悉Javascript,虽然可能会有一些学习曲线,但这是处理您情况的理想方式。
答案 1 :(得分:2)
如果文件只是版本号,那么我建议尝试:
$version = file_get_contents('http://wwww.example.com');
if (VERSION != trim($version)) {
}