- 论坛徽章:
- 1
|
[代码分析] phpSYsInfo无法正常使用时Uptime为何显示而且很大
问题的来源: http://bbs.chinaunix.net/viewthread.php?tid=638346&extra=page%3D1
问题的图片: http://bsdroot.dns0755.net/images/phpsysinfo.gif
首先,我们来看: uptime为13083天9分钟
我们简单计算: 13083/365= 35.84年
1970 + 35.84 = 2005.84年
0.84*12 = 10.08
当然我这是非常粗俗的计算而已。
实际的原因呢?
以下以FreeBSD为例子:
如果你会php,而且你研究过phpSysInfo的实现,那么,我们开始:
打开1: /path/to/phpsysinfo/includes/os/class.BSD.common.inc.php
打开2: /path/to/phpsysinfo/includes/os/class.FreeBSD.inc.php
从1的uptime部分的定义:
- function uptime () {
- $sys_ticks = $this->get_sys_ticks();
复制代码
我们回到2查看get_sys_ticks的定义:
- function get_sys_ticks () {
- $s = explode(' ', $this->grab_key('kern.boottime'));
- $a = ereg_replace('{ ', '', $s[3]);
- $sys_ticks = time() - $a;
- return $sys_ticks;
- }
复制代码
我们再回到1查看grab_key的定义:
- // grabs a key from sysctl(8)
- function grab_key ($key) {
- return execute_program('sysctl', "-n $key");
- }
-
复制代码
很明显,如果无权操作sysctl或者权限不够,那么必然grab_key返回无效的数据。
get_sys_ticks里面返回的uptime的timestamp就为:time()
显然:uptime 返回的就为当前的time()了
而这个time是从1970年开始计算的。
到此,我想,大家都明白为什么了吧。
问题的图片:![]()
[ 本帖最后由 HonestQiao 于 2005-11-1 10:11 编辑 ] |
|