免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5112 | 回复: 7
打印 上一主题 下一主题

Freebsd7.2,Ecshop下lib_time.php中gmtime()出错 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-07-10 22:37 |只看该作者 |倒序浏览
运行环境:
Freebsd7.2  apache-2.2.11_7  mysql-server-5.0.83  php5-5.2.10  php5-extensions-1.3

出错信息:
#cat /var/log/httpd_error.log
[Fri Jul 10 17:07:04 2009] [error] [client 192.168.0.23] PHP Fatal error:  Cannot redeclare gmtime() (previously declared in /wwwroot/includes/lib_time.php:2 in /wwwroot/includes/lib_time.php on line 29, referer: http://192.168.0.254/index.php

#cat /wwwroot/includes/lib_time.php
26-29行输出的文件是这样的:

26    function gmtime()
27    {
28    return (time() - date('z') );
29    }
我的理解是在lib_time.php文件29行中不能重新声明函数gmtime(),因为它在28行已经预声明过了。指向首页文件?但不知道哪里出了错?可能不是程序本身的问题?是哪个软件配置文件没设置对?或者是后台某个选项没有开或关掉?

请高手指点一下!

论坛徽章:
0
2 [报告]
发表于 2009-07-12 18:16 |只看该作者
没有人知道吗?

论坛徽章:
0
3 [报告]
发表于 2009-07-12 20:08 |只看该作者
难不成又是 PHP 版本的问题?

Hack 一下可以解决一时的问题,但毕竟不是推荐的方法.

论坛徽章:
0
4 [报告]
发表于 2009-07-13 20:53 |只看该作者
有懂PHP的高手啊?服务器问题?

论坛徽章:
0
5 [报告]
发表于 2009-07-15 10:47 |只看该作者
有高手说:可能是编码的问题,可以把gtime() copy一遍到另外一个导入的文件内。
但是我不懂得怎么去操作,Ecshop程序的编码Utf-8,会有什么影响呢???
懂PHP的高手支个招啊?帮忙看一下在哪里出了问题:
#cat lib_time.php

<?php

/**
* ECSHOP 时间函数
* ============================================================================
* 版权所有 2005-2008 上海商派网络科技有限公司,并保留所有权利。
* 网站地址: http://www.ecshop.com
* ----------------------------------------------------------------------------
* 这不是一个自由软件!您只能在不用于商业目的的前提下对程序代码进行修改和
* 使用;不允许对程序代码以任何形式任何目的的再发布。
* ============================================================================
* $Author: testyang $
* $Id: lib_time.php 15013 2008-10-23 09:31:42Z testyang $
*/

if (!defined('IN_ECS'))
{
    die('Hacking attempt');
}

/**
* 获得当前格林威治时间的时间戳
*
* @return  integer
*/
function gmtime()
{
    return (time() - date('Z'));
}

/**
* 获得服务器的时区
*
* @return  integer
*/
function server_timezone()
{
    if (function_exists('date_default_timezone_get'))
    {
        return date_default_timezone_get();
    }
    else
    {
        return date('Z') / 3600;
    }
}


/**
*  生成一个用户自定义时区日期的GMT时间戳
*
* @access  public
* @param   int     $hour
* @param   int     $minute
* @param   int     $second
* @param   int     $month
* @param   int     $day
* @param   int     $year
*
* @return void
*/
function local_mktime($hour = NULL , $minute= NULL, $second = NULL,  $month = NULL,  $day = NULL,  $year = NULL)
{
    $timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone'];

    /**
    * $time = mktime($hour, $minute, $second, $month, $day, $year) - date('Z') + (date('Z') - $timezone * 3600)
    * 先用mktime生成时间戳,再减去date('Z')转换为GMT时间,然后修正为用户自定义时间。以下是化简后结果
    **/
    $time = mktime($hour, $minute, $second, $month, $day, $year) - $timezone * 3600;

    return $time;
}


/**
* 将GMT时间戳格式化为用户自定义时区日期
*
* @param  string       $format
* @param  integer      $time       该参数必须是一个GMT的时间戳
*
* @return  string
*/

function local_date($format, $time = NULL)
{
    $timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone'];

    if ($time === NULL)
    {
        $time = gmtime();
    }
    elseif ($time <= 0)
    {
        return '';
    }

    $time += ($timezone * 3600);

    return date($format, $time);
}


/**
* 转换字符串形式的时间表达式为GMT时间戳
*
* @param   string  $str
*
* @return  integer
*/
function gmstr2time($str)
{
    $time = strtotime($str);

    if ($time > 0)
    {
        $time -= date('Z');
    }

    return $time;
}

/**
*  将一个用户自定义时区的日期转为GMT时间戳
*
* @access  public
* @param   string      $str
*
* @return  integer
*/
function local_strtotime($str)
{
    $timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone'];

    /**
    * $time = mktime($hour, $minute, $second, $month, $day, $year) - date('Z') + (date('Z') - $timezone * 3600)
    * 先用mktime生成时间戳,再减去date('Z')转换为GMT时间,然后修正为用户自定义时间。以下是化简后结果
    **/
    $time = strtotime($str) - $timezone * 3600;

    return $time;

}

/**
* 获得用户所在时区指定的时间戳
*
* @param   $timestamp  integer     该时间戳必须是一个服务器本地的时间戳
*
* @return  array
*/
function local_gettime($timestamp = NULL)
{
    $tmp = local_getdate($timestamp);
    return $tmp[0];
}

/**
* 获得用户所在时区指定的日期和时间信息
*
* @param   $timestamp  integer     该时间戳必须是一个服务器本地的时间戳
*
* @return  array
*/
function local_getdate($timestamp = NULL)
{
    $timezone = isset($_SESSION['timezone']) ? $_SESSION['timezone'] : $GLOBALS['_CFG']['timezone'];

    /* 如果时间戳为空,则获得服务器的当前时间 */
    if ($timestamp === NULL)
    {
        $timestamp = time();
    }

    $gmt        = $timestamp - date('Z');       // 得到该时间的格林威治时间
    $local_time = $gmt + ($timezone * 3600);    // 转换为用户所在时区的时间戳

    return getdate($local_time);
}

?>

论坛徽章:
0
6 [报告]
发表于 2009-07-15 10:52 |只看该作者
同样的程序在另外一台虚拟机上安装之后就没有这个错误。
奇怪了,会不会是服务器哪个配置文件有问题???
Php.ini???httpd.conf???my.cnf???
数据库编码问题???

论坛徽章:
0
7 [报告]
发表于 2009-07-15 11:59 |只看该作者
你自己比较一下两台服务器的差异不就知道了。

论坛徽章:
0
8 [报告]
发表于 2009-07-19 23:12 |只看该作者
犯规天
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP