PHP数字格式化

下面看一下ecshop一个数字格式化为金额的函数(小数点保留二位)

 
/**
 * 格式化商品价格
 *
 * @access  public
 * @param   float   $price  商品价格
 * @return  string
 */
function price_format($price, $change_price = true)
{
    if ($change_price && defined('ECS_ADMIN') === false)
    {
        switch ($GLOBALS['_CFG']['price_format'])
        {
            case 0:
                $price = number_format($price, 2, '.', '');
                break;
            case 1: // 保留不为 0 的尾数
                $price = preg_replace('/(.*)(\\.)([0-9]*?)0+$/', '\1\2\3', number_format($price, 2, '.', ''));
 
                if (substr($price, -1) == '.')
                {
                    $price = substr($price, 0, -1);
                }
                break;
            case 2: // 不四舍五入,保留1位
                $price = substr(number_format($price, 2, '.', ''), 0, -1);
                break;
            case 3: // 直接取整
                $price = intval($price);
                break;
            case 4: // 四舍五入,保留 1 位
                $price = number_format($price, 1, '.', '');
                break;
            case 5: // 先四舍五入,不保留小数
                $price = round($price);
                break;
        }
    }
    else
    {
        $price = number_format(floatval($price), 2, '.', '');
    }
 
    return sprintf($GLOBALS['_CFG']['currency_format'], $price);
}
 
// 函数测试
$price = 123.333;
echo price_format($price);
// 打印出来的结果是:¥123.33

继续阅读

解决ECSHOP“购物车为空”的问题

有时候正常操作,把商品增加到购物车的时候

再到结算的时候,竟然会提示“您的购物车中没有商品!”

或者什么购物车为空的错误提示

其它出现这种情况一般可能是cookies或者session的问题

下面有两个操作还算是有效。

  1. cookies问题
    清除客户端浏览器cookies和历史记录
  2. session问题
    /includes/cls_session.php 注释82行的代码,有可以是获取IP出现问题
    ecshop_session

继续阅读

PHP获取服务器真实IP

昨天写了获敢PHP获取用户真实IP
所以为了配合上一个,今天就写一个获取服务器的真实IP

/**
 * 获取服务器的ip
 *
 * @access      public
 *
 * @return string
 **/
function real_server_ip()
{
    static $serverip = NULL;
 
    if ($serverip !== NULL)
    {
        return $serverip;
    }
 
    if (isset($_SERVER))
    {
        if (isset($_SERVER['SERVER_ADDR']))
        {
            $serverip = $_SERVER['SERVER_ADDR'];
        }
        else
        {
            $serverip = '0.0.0.0';
        }
    }
    else
    {
        $serverip = getenv('SERVER_ADDR');
    }
 
    return $serverip;
}

使用方法同样很简单,直接 echo real_server_ip(); 就可以输出服务器的IP

继续阅读

PHP获取用户真实IP

贴一个获取用户真实IP的PHP函数,
这个函数是ECSHOP里面的类库(includes/lib_base.php)

/**
 * 获得用户的真实IP地址
 *
 * @access  public
 * @return  string
 */
function real_ip()
{
    static $realip = NULL;
 
    if ($realip !== NULL)
    {
        return $realip;
    }
 
    if (isset($_SERVER))
    {
        if (isset($_SERVER['HTTP_X_FORWARDED_FOR']))
        {
            $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
 
            /* 取X-Forwarded-For中第一个非unknown的有效IP字符串 */
            foreach ($arr AS $ip)
            {
                $ip = trim($ip);
 
                if ($ip != 'unknown')
                {
                    $realip = $ip;
 
                    break;
                }
            }
        }
        elseif (isset($_SERVER['HTTP_CLIENT_IP']))
        {
            $realip = $_SERVER['HTTP_CLIENT_IP'];
        }
        else
        {
            if (isset($_SERVER['REMOTE_ADDR']))
            {
                $realip = $_SERVER['REMOTE_ADDR'];
            }
            else
            {
                $realip = '0.0.0.0';
            }
        }
    }
    else
    {
        if (getenv('HTTP_X_FORWARDED_FOR'))
        {
            $realip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('HTTP_CLIENT_IP'))
        {
            $realip = getenv('HTTP_CLIENT_IP');
        }
        else
        {
            $realip = getenv('REMOTE_ADDR');
        }
    }
 
    preg_match("/[\d\.]{7,15}/", $realip, $onlineip);
    $realip = !empty($onlineip[0]) ? $onlineip[0] : '0.0.0.0';
 
    return $realip;
}

使用方法很简单,直接 echo real_ip(); 就可以输出用户端的IP

继续阅读

记录一段代码(把数组分为每天两个)

$sql = "SELECT brand_id, brand_name FROM " . $GLOBALS['ecs']->table('brand') . " ORDER BY brand_id ASC";
	$brand_arr = $GLOBALS['db']->getAll($sql);
	$start = local_mktime(0, 0 , 0, 11, 26, 2010);  // 开始的日期
	$i = 1;
	$now = gmtime();            //当前时间
	foreach ($brand_arr as $key=>$val) {
		$brand_arr[$key]['date'] = $start;
		if ($i < 2) {  // 一天执行两个品牌
			$i++;
		} else {
			$i = 1;
			$start += 86400;
		}
	}
	foreach ($brand_arr as $key=>$val) {  // 找出今天要更新品牌
		if (($val['date'] < $now) && ($val['date'] > $now - 86400)) {
			$update_arr[] = $val;
		}
	}

继续阅读

ECSHOP 下一个截取中文字符串无乱码的函数 (sub_str)

此函数位于includes/lib_base.php文件

< ?php
 
/**
 * 截取UTF-8编码下字符串的函数
 *
 * @param   string      $str        被截取的字符串
 * @param   int         $length     截取的长度
 * @param   bool        $append     是否附加省略号
 *
 * @return  string
 */
 
define('EC_CHARSET', 'utf-8');
function sub_str($str, $length = 0, $append = true)
{
    $str = trim($str);
    $strlength = strlen($str);
 
    if ($length == 0 || $length >= $strlength)
    {
        return $str;
    }
    elseif ($length < 0)
    {
        $length = $strlength + $length;
        if ($length < 0)
        {
            $length = $strlength;
        }
    }
 
    if (function_exists('mb_substr'))
    {
        $newstr = mb_substr($str, 0, $length, EC_CHARSET);
    }
    elseif (function_exists('iconv_substr'))
    {
        $newstr = iconv_substr($str, 0, $length, EC_CHARSET);
    }
    else
    {
        //$newstr = trim_right(substr($str, 0, $length));
        $newstr = substr($str, 0, $length);
    }
 
    if ($append && $str != $newstr)
    {
        $newstr .= '...';
    }
 
    return $newstr;
}
 
 
//例子:
$str = "我是中文字符串,请分割我吧!我是中文字符串,请分割我吧!我是中文字符串,请分割我吧!";
 
echo sub_str($str, 10, true);
 
?>

OUTPUT:我是中文字符串,请分割我…

继续阅读

ecshop 函数列表详解

lib_time.php
gmtime()
P: 获得当前格林威治时间的时间戳 /$0
server_timezone()
P: 获得服务器的时区 /$0
local_mktime($hour = NULL , $minute= NULL, $second = NULL, $month = NULL, $day = NULL, $year = NULL)
P: 生成一个用户自定义时区日期的GMT时间戳
local_date($format, $time = NULL)
P: 将GMT时间戳格式化为用户自定义时区日期
gmstr2time($str)
P: 转换字符串形式的时间表达式为GMT时间戳
local_strtotime($str)
P: 将一个用户自定义时区的日期转为GMT时间戳
local_gettime($timestamp = NULL)
P: 获得用户所在时区指定的时间戳
local_getdate($timestamp = NULL)
P: 获得用户所在时区指定的日期和时间信息

继续阅读