欢迎光临
我们一直在努力

伪静态URL中文乱码问题解决方法

悠然见南山阅读(543)评论(0)

在 ISAPI_Rewrite 1.3 版本时,只要对URL进行UrlEncode操作,就可以正常接收中文,但是换为 3.1版后, 采用GB2312 的接收页面就是乱码了。

换用了ISAPI_Rewrite 3.x后发现编码后的字符会变成乱码,如果直接使用中文不编码,则会被格式化为GBK字符串。解决方法是在RewriteRule 规则的最后添加 NU 参数即可恢复正常,关于ISAPI_Rewrite中文变乱码解决方法如下:

1、在传输URL时,对中文进行urlencode,这样是没错的。
2、如果是ISAPI_Rewrite 3.x 只需添加 NU 参数即可。

以下看两个伪静态含有中文字串的规则例子:

1、Discuz伪静态个人空间规则修改:

复制代码代码如下:
RewriteRule ^space-(username|uid)-(.+)\.html$ home.php?mod=space&$1=$2&%1 [NU]

2、ShopEx伪静态中中文字符搜索问题,修改规则如下:

复制代码代码如下:
RewriteRule ^(.*)$ index.php?$1 [QSA,NU,PT,L]

蓝色部分即为修改部分。

ShopEx前台网页打开速度优化

悠然见南山阅读(471)评论(0)

ShopEx的后台采用Ajax技术,因此使用起来不觉得非常慢,但前台相对而言的就慢多了,现将我的一些经验分享一下,欢迎各位补充!

  1. 启用CSS和JS的压缩功能:修改config/config.php文件,将以下两项前的斜杠去掉

    define (‘GZIP_CSS’,true);
    define (‘GZIP_JS’,true);

  2. 启用缓存:修改config/config.php文件,将以下两项前的斜杠去掉

    define(‘SECACHE_SIZE’,’1G’); //缓存大小,最大不能超过1G
    define(‘CACHE_METHOD’,’cachedir’);

  3. 优化header和footer,文件位置core/shop/view/common/。主要优化方法:减少http请求,采用其它次域名来放置CSS和JS等。
  4. 选择合适的统计系统:ShopEx内置cnzz统计系统,但作为电子商务网站,我个人推荐使用Google Analytics,关闭cnzz统计功能。
  5. 其它优化:如添加缓存有效期、添加预读取内容等,视实际使用情况而定。

mysql配置优化(windows下my.ini)

悠然见南山阅读(442)评论(0)

优化mysql数据库性能的十个参数(转)

(1)、max_connections:
允许的同时客户的数量。增加该值增加 mysqld 要求的文件描述符的数量。这个数字应该增加,否则,你将经常看到 too many connections 错误。 默认数值是100,我把它改为1024 。

(2)、record_buffer:
每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。如果你做很多顺序扫描,你可能想要增加该值。默认数值是131072(128k),我把它改为16773120 (16m)

(3)、key_buffer_size:
索引块是缓冲的并且被所有的线程共享。key_buffer_size是用于索引块的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。默认数值是8388600(8m),我的mysql主机有2gb内存,所以我把它改为 402649088(400mb)。

4)、back_log:
要求 mysql 能有的连接数量。当主要mysql线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
back_log 值指出在mysql暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。只有如果期望在一个短时间内有很多连接,你需要增加它,换句话说,这值对到来的tcp/ip连接的侦听队列的大小。你的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。
当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | null | connect | null | login | null 的待连接进程时,就要加大 back_log 的值了。默认数值是50,我把它改为500。

(5)、interactive_timeout:
服务器在关闭它前在一个交互连接上等待行动的秒数。一个交互的客户被定义为对 mysql_real_connect()使用 client_interactive 选项的客户。 默认数值是28800,我把它改为7200。

(6)、sort_buffer:
每个需要进行排序的线程分配该大小的一个缓冲区。增加这值加速order by或group by操作。默认数值是2097144(2m),我把它改为 16777208 (16m)。

(7)、table_cache:
为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。mysql对每个唯一打开的表需要2个文件描述符。默认数值是64,我把它改为512。

(8)、thread_cache_size:
可以复用的保存在中的线程的数量。如果有,新的线程从缓存中取得,当断开连接的时候如果有空间,客户的线置在缓存中。如果有很多新的线程,为了提高性能可以这个变量值。通过比较 connections 和 threads_created 状态的变量,可以看到这个变量的作用。我把它设置为 80。

(9)mysql的搜索功能
用mysql进行搜索,目的是能不分大小写,又能用中文进行搜索
只需起动mysqld时指定 –default-character-set=gb2312

(10)、wait_timeout:
服务器在关闭它之前在一个连接上等待行动的秒数。 默认数值是28800,我把它改为7200。

2G内存,针对站多,抗压型的设置,最佳:

table_cache=1024 物理内存越大,设置就越大.默认为2402,调到512-1024最佳
innodb_additional_mem_pool_size=4M   默认为2M
innodb_flush_log_at_trx_commit=1
(设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1)
innodb_log_buffer_size=2M             默认为1M
innodb_thread_concurrency=8       你的服务器CPU有几个就设置为几,建议用默认一般为8
key_buffer_size=256M                       默认为218       调到128最佳
tmp_table_size=64M                      默认为16M        调到64-256最挂
read_buffer_size=4M                       默认为64K
read_rnd_buffer_size=16M              默认为256K
sort_buffer_size=32M                   默认为256K
max_connections=1024                 默认为1210
thread_cache_size=120             默认为60
query_cache_size=64M

一般:
table_cache=512
innodb_additional_mem_pool_size=8M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=4M
innodb_thread_concurrency=8
key_buffer_size=128M
tmp_table_size=128M
read_buffer_size=4M
read_rnd_buffer_size=16M
sort_buffer_size=32M
max_connections=1024

 

DEDECMS安全设置

悠然见南山阅读(434)评论(0)

1、以下目录:data、templets、uploads、a设置可读写不可执行权限。其中a目录为文档HTML默认保存路径,可以在后台进行更改;

2、以下目录:include、member、plus、dede设置为可读可执行不可写入权限。其中后台管理目录(默认dede),可自行修改;

3、如果不需要使用会员、专题,可以直接删除member、special目录;

4、删除install安装目录;

5、管理员帐号密码尽量设置复杂,发布文章可以新建频道管理员,并且只给予相关权限;

6、Mysql数据库链接,不使用root用户,单独建立新用户,并给予:SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER、CREATE TEMPORARY TABLES权限;

7、定期进行备份网站目录和数据库,并在后台进行文件校验、病毒扫描、系统错误修复。

dedecms系统安全设置

悠然见南山阅读(404)评论(0)

相信对于很新手朋友来说,都喜欢使用dedecms来做网站,因为简单方便,一下就能搞定,从我用dede建站到现在已经两个月了,一直听说dede系统在安全防护这方面较差,哪时一直我心里一直存在一种想法,就是以后再慢慢改,两个月过去了也没发生什么事。就在今天我的网站被挂马了,哪真的是叫后悔莫急啊。所以在这里提醒一下使用dede建站的朋友,在安全防护方面请尽早改善,否则你很有可能会像我这样。下面介绍几种常用的安全防护,真的很有必要。

1、保持DEDE更新,及时打补丁。

2、安装的时候数据库的表前缀,最好改一下,不用dedecms默认的前缀dede_,可以改成ljs_,随便一个名称即可。

2、装好DEDE后及时把install文件夹删除

3、后台登录开启验证码功能,将默认管理员admin删除,改成一个自己专用的,复杂点的账号。

4、管理目录改名,最好是改成MD5形式的,最好长点

5、DedeCms 万能安全防护代码http://bbs.dedecms.com/read.php?tid=15538

6、如果是使用HTML可以把plus下的相应文件和根目录下的index.php做掉(用不到的全删掉,还可以把数据库里面不用的表删除掉)

7、不用留言本的可以把plus下的guestbook去掉

8、不用会员的可以把member去掉

9,目录权限设置:

(1) data、templets、uploads、a目录, 设置可读写,不可执行的权限。

(2) include、member、plus、后台管理目录 设置为可执行脚本,可读,但不可写入(安装了附加模块的,book、ask、company、group 目录同样如此设置

以下是可以删除的文件:

管理目录下的这些文件是后台文件管理器,属于多余功能,而且最影响安全

file_manage_control.php file_manage_main.php file_manage_view.php media_add.php media_edit.php media_main.php

结论:还没设置的尽快设置吧,如果真不小心发生万一,哪真的很痛苦的。

Smarty foreach 循环中的常量 循环的总数、当前循环的次数、循环的第一次、最后一次

悠然见南山阅读(541)评论(0)

smarty之foreach用法

{foreach},{foreachelse}用于像访问序数数组一样访问关联数组

Attribute Name属性名称

from:循环访问的数组
item:当前元素的变量名
key:当前键名的变量名
name:用于访问foreach属性的foreach循环的名称
{foreach from=$variable item = item key = key name=name}

{$variable|@count}   //获取循环数组的长度

{$smarty.foreach.name.index} //获取当前循环数组元素的下标,以0开始

{$smarty.foreach.name.iteration} //获取循环次数,以1开始

{$smarty.foreach.name.first} //当为true时,标记循环第一次执行

{$smarty.foreach.name.last} //当为true时,标记循环最后一次执行

{$smarty.foreach.name.show} //当前是否显示

{$smarty.foreach.name.total} //循环次数

{/foreach}

ecshop分类列表页面每个商品调取商品相册缩略图方法

悠然见南山阅读(510)评论(0)

在做天猫模板的时候列表页面需要调用商品相册缩略图,找了很多方法才到这简单实用的调用方法,现在由68ecshop技术来告诉你该怎么调用吧!

在category.php里搜索代码

if($display == ‘grid’)
{
if(count($goodslist) % 2 != 0)
{
$goodslist[] = array();
}
}

在代码上方添加如下代码调出小相册缩略图

//新增分类页商品相册
if(is_array($goodslist)){
foreach($goodslist as $key=>$vo){
$goodslist[$key][‘pictures’] = get_goods_gallery($key);// 商品相册
}
}
//新增分类页商品相册

然后打开goods_list.lbi库文件,在商品循环
<!–{foreach from=$goods_list item=goods name=name}–>
<!–{if $goods.goods_id} –>

里面,找到合适的位置添加如下代码

<!– {if $goods.goods_id} –>

<div class=”productThumb clearfix”>
<a style=”visibility: visible; color:#fff; position:relative; z-index:99999999999;” href=”javascript:;” class=”ui-slide-arrow-s proThumb-prev” title=”上一页” >&lt;</a>
<div style=”float:left; width:185px; overflow:hidden;” id=”goods_item{$smarty.foreach.goods_list.iteration}”>
<div  class=”proThumb-wrap” style=”position:relative;” >

<p class=”ks-switchable-content” style=”position:absolute; left:0px; width:300%;”>
<!–{if $goods.pictures}–>
<!– {foreach from=$goods.pictures item=picture name=picture}–>
<b  data=”pic_{$goods.goods_id}”>
<A href=”###” rev={$picture.img_url} rel=goodsPic ><img src=”{if $picture.thumb_url}{$picture.thumb_url}{else}{$picture.img_url}{/if}” alt=”{$goods.goods_name}” /></a>
<i></i>
</b>
<!–{/foreach}–>
<!–{/if}–>
</p>

</div>
</div>
<a  style=”visibility: visible; color:#fff;” href=”javascript:;” class=”ui-slide-arrow-s proThumb-next” title=”下一页”>&gt;</a>
</div>

<script>
//相册底部控制
function goods_gallery_control(){
var num01=0;
var gg_lis = $(‘.ks-switchable-content b’).length;
$(‘.proThumb-next’).click(function(){

gg_lis = $(this).siblings(‘#goods_item’).find(‘.ks-switchable-content b’).length;
num01++;

if(num01>(gg_lis-5)){
num01=gg_lis-5;
$(this).siblings(‘#goods_item’).find(‘.proThumb-wrap p’).css(‘left’,(gglis-num01)*35);

}
$(this).siblings(‘#goods_item’).find(‘.proThumb-wrap p’).animate({left:-num01*35},200);
})
$(‘.proThumb-prev’).click(function(){

gg_lis = $(this).siblings(‘#goods_item’).find(‘.ks-switchable-content b’).length;
num01–;
if(num01<0){

num01=0;
$(this).siblings(‘#goods_item’).find(‘.proThumb-wrap p’).css(‘left’,(gglis-num01)*35);

}
$(this).siblings(‘#goods_item’).find(‘.proThumb-wrap p’).animate({left:-num01*35},200);
})
}
goods_gallery_control();
</script>

<script type=”text/javascript”>
$(function(){
var pic_tab = $(‘.ks-switchable-content b’);
pic_tab.click(function(){
var pic_tab = $(this).attr(‘data’);
var pic_img = $(‘.item_’ + pic_tab);
var pic_goodsimg = $(this).find(‘img’).attr(‘src’);
pic_img.attr(‘src’, pic_goodsimg);
$(this).addClass(‘proThumb-img proThumb-selected’).siblings(‘.ks-switchable-content b’).removeClass(‘proThumb-img proThumb-selected’);
})
})
</script>

<div style=”display: none;” class=”productSize clearfix”></div>
<!–{/if}–>

简单的分类页面商品相册缩略图已经调出来了,有可能点击切换功能会有些不好使,就要大家自己动手好好调调了,建议所添加的部分另放在一个库文件里面

修复ecshop邮件模板无法保存html问题

悠然见南山阅读(558)评论(0)

ECSHOP的邮件模板BUG  无法保存html问题,无论保存为纯文本邮件还是HTML 邮件,最终保存的依然是纯文本邮件。这是因为保存邮件时,mail_templates表的is_html字段没有接收到写入的数据,默认值为0。

解决办法:

1. 进入PHPMYADMIN,找到mail_templates表,在里面把所有邮件模板的is_html  tinyint(1) unsigned 的值 设为1,保存。

2。编辑/admin/mail_template.php,将$_POST[‘is_html’]修改为$_POST[‘mail_type’]

1
2
3
4
5
6
7
8
9
$type = intval($_POST[‘mail_type’]);
$tpl_id = intval($_POST[‘tpl’]);
$sql = “UPDATE ” .$ecs>table(‘mail_templates’). ” SET “.
“template_subject = ‘” .str_replace(‘\\\’\\\”, ‘\\\”, $subject). “‘, “.
“template_content = ‘” .str_replace(‘\\\’\\\”, ‘\\\”, $content). “‘, “.
“is_html = ‘$type‘, “.
“last_modify = ‘” .gmtime(). “‘ “.
“WHERE template_id=’$tpl_id‘”;

ecshop新订单通知邮件显示商品数量

悠然见南山阅读(454)评论(0)

ECSHOP新订单邮件提醒管理员不显示商品数量,给网店管理员带来了不便。

ECSHOP新订单通知邮件显示商品数量

只需简单修改邮件模板,加入数量标签即可实现,进入数据库,执行SQL:

提示:设置客服邮件地址为139邮箱(免费短信提醒)或QQ邮箱(使用微信接收),24小时掌握网店订单情况。

更专业 更方便

联系我们联系我们