标签归档:原创

Deprecated: Function session_register() is deprecated

php从5.2.x升级到5.3.2.出来问题了。有些原来能用的程序报错了。
报错内容是
Deprecated: Function session_register() is deprecated
查了一下是5.3这个session_register就不让用了,降回去?不爽。
搜了一把,有个解决方法是写一个函数

<?php 
// Fix for removed Session functions 
function fix_session_register(){ 
    function session_register(){ 
        $args = func_get_args(); 
        foreach ($args as $key){ 
            $_SESSION&#91;$key&#93;=$GLOBALS&#91;$key&#93;; 
        } 
    } 
    function session_is_registered($key){ 
        return isset($_SESSION&#91;$key&#93;); 
    } 
    function session_unregister($key){ 
        unset($_SESSION&#91;$key&#93;); 
    } 
} 
if (!function_exists('session_register')) fix_session_register(); 
?> 

查了一下出现这个问题的地方不多,找到了另外一个方法,直接

session_register( “abc” ) ;
改成
$_SESSION[‘abc’] = null;
即可

apache目录密码保护错误

apache的.htaccess有个可以保护目录的功能。当用户访问这个目录里资源的时候,会弹出对话框,让输入用户名和口令。在设置的时候有一些关必要条件。比如启用.htaccess文件等。
这2天在freebsd里面想这么做一次,但是遇到了问题,一直报错
configuration error: couldn’t check user. No user file?
后来经过调整,还有
configuration error: couldn’t check access. No groups file?

Invalid command ‘AuthUserFile’, perhaps misspelled or defined by a module not included in the server configuration
等错误信息。

后来经过n多个小时。。n>3,最后准备投降的时候,看到httpd.conf里面有一些注释掉名字里面有auth字样的module。一狠心,全去掉注释,好了!
又经过一番测试。
需要启用下面的三个module

LoadModule authn_file_module libexec/apache22/mod_authn_file.so
LoadModule authz_user_module libexec/apache22/mod_authz_user.so
LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so

当然我用的是
AuthType Basic
.htaccess的内容如下

AuthType Basic
AuthName "admin"
AuthUserFile /usr/local/etc/apache22/.htpasswd
Require user admin

find grep perl配合查找替换内容

有时候需要对一个目录或者一批文件进行内容的替换。
可以用find配合sed或者perl来完成
查找当前目录下,把

 </title>

替换成

</title><meta http-equiv="Content-Type" content="text\/html; charset=utf-8" />
find ./ -type f -exec sed -i "s/<\/title>/<\/title><meta http-equiv=\"Content-Type\" content=\"text\/html; charset=utf-8\" \/>/g" {} \;

上边是在linux,好像centos也可以,但是FreeBSD上不行,懒得查语法了。搞了个find+perl的版本
把abc换成def

find ./ -type f | xargs perl -pi -e "s/abc/def/g"

FreeBSD不行,可能是shell不对。切换到bash,没报错了

mysql里面的oracle decode

oracle里面有一个decode的函数,顾名思义,可以将1,2,3按照需求转成a,b,c,最后还有一个缺省值。

mysql里面好像没有这个函数。但是可以用另外的函数来实现类似的效果。

IF(expr1,expr2,expr3)
如果expr1是TRUE(expr1<>;0且expr1<>;NULL),那么IF()返回expr2,否则它返回expr3。IF()返回一个数字或字符串值

oracle的写法

SELECT decode(ttype,1,'a',2,'b',3,'c','d') FROM taba

可以在mysql里写成

SELECT if( ttype =1, 'a', if( ttype =2, 'b', if( ttype =3, 'c', 'd' ) ) ) 
FROM taba

如何跳出jquery的each?

jquery再遍历选定的对象时候用each比较方便。有种应用是找到里面符合条件的对象后,要跳出这个循环。
javascript的跳出循环一般用break.
同事遇到这个问题,下意识 的用了break,想跳出这个循环。结果报错

SyntaxError: unlabeled break must be inside loop or switch

经查,应该用一个

return false;

continue是跳出当前循环,继续下一个循环。

jquery实现ajax投票一例

其实是很简单的,一个或多个页面有一堆摄影作品,用户点击投票,相应的作品数量增加1.

前台jsp部分的代码如下:

...
票数:<span id="i<%=id%>"><%=vote_number%></span><br/>
    <a onclick=myvote(<%=id%>); href='javascript:;'">投票</a>
...

js部分的代码如下

function myvote(id){
	$.post("vote.jsp", { id: id },
  function(data){
  	  eval("var data="+data);
    if (data.issucc=="0"){
    	alert(data.mess)
    }else{
    	//alert("更新页面");
    	$("#i"+data.myid).html(data.votenum);
    	}
  });
}

后台返回的json数据如下

{issucc:<%=issucc%>,mess:”<%=mess%>“,votenum:<%=votenum%>,myid:<%=myid%>}

issucc:是否成功
mess:信息,主要是错误信息,比如没登录,超过限制等
votenum:投票后的得票总数
myid:投票的id,用于更新页面的投票数。

大路考过,等驾照

最后一次因为考驾照5点起床了。晚上睡不早,估计睡着的时候快1点了。不到5点闹钟就叫了,无意识的起床,按掉了叫的欢的闹钟,2分钟,出门。

路上眯了一会儿。开始在大路考的区域转,靠边停车,掉头,转弯。双车道,左转弯要先到快车道,然后变慢车道,左转,要再变回来。还有就是安全带,转向灯这些细节。

随后是漫长的等待,排队了1个小时,,终于开始了,4个人,三男一女,我排第三个。第一个,路很简单,第二个mm有点倒霉,开到了双车道的路段。左转上去,没问题。变道,没问题。到了一个路口,大家都觉得要左转了,考官没发话,结果直走了。这条路我们都没走过,我看了一眼一个同伴。。。过了路口没多远,让靠边停车了。考官问,知道那里出问题了么?mm不知。后来才知道,那个路口慢车道是右转车道,如果左转或直行,是要变道快车道的,结果,,,,。还有一项说速度慢。不知道是mm等左转指令慢还是路过一个卖菜的地方慢。

轮到我了,上车,安全带,转向灯。问可以开始了么?考官说,可以了我会说。乖乖的等。。先来了个掉头,没问题。加档,路口2档,右转,左转,都没问题,边上有个车,借点对面的道,回来。考官让靠边停车了。离合,刹车。。。kkk,好险啊,车距离马路边的距离估计只有15cm,再晚点,就上去了。。停车多次,从来没有这么近过。

考官说:停的靠路边太近了,开的不错。合格了。你看,太近了,别人不好下车。连连点头。

空挡,手刹,下车后和同伴车后击掌。最后三个男的过了,那个mm被关。可怜

再不用5点起来去哪个鬼地方了,哈哈

修改ecshop后台admin目录为任意目录名

ecshop有个地方配置admin的目录名
data/config.php

$admin_dir = “admin”;
但是直接改不行,因为很多地方,这个目录名字被硬编码进去了,直接改会有很多地方报错。

网上搜到一篇文章,整理了一些需要修改的地方,内容转帖如下:

1.修改data/config.php
   1. $admin_dir = "admin";
修改成
   1. $admin_dir = "新目录名";
2.修改admin/index.php
   1.   //货号
   2.         require_once(ROOT_PATH . 'admin/includes/lib_goods.php');
修改成
   1. require_once(ROOT_PATH . $admin_dir.'/includes/lib_goods.php');
3.修改admin/database.php
   1. require_once(ROOT_PATH . 'admin/includes/cls_sql_dump.php');
修改成
   1. require_once(ROOT_PATH . $admin_dir.'/includes/cls_sql_dump.php');
4.修改admin/get_password.php
   1. $reset_email = $ecs->url() . 'admin/get_password.php?act=reset_pwd&uid='.$admin_id.'&code='.$code;
   2.   修改成
   3. $reset_email = $ecs->url() .  $admin_dir.'/get_password.php?act=reset_pwd&uid='.$admin_id.'&code='.$code;
5.修改admin/goods.php
   1. require_once(ROOT_PATH . '/admin/includes/lib_goods.php');
   2.   修改成
   3. require_once(ROOT_PATH . $admin_dir.'/includes/lib_goods.php');
6.修改admin/check_file_priv.php
   1. $dir[]                     = 'admin';
   2.   修改成
   3. $dir[]                     = $admin_dir;
7.修改admin/includes/init.php
   1. if (file_exists(ROOT_PATH . 'data/config.php'))
   2. {
   3.      include(ROOT_PATH . 'data/config.php');
   4. }
   5. else
   6. {
   7.      include(ROOT_PATH . 'includes/config.php');
   8. }
   9.   修改成下面代码,并将代码移至“/* 取得当前ecshop所在的根目录 */”注释之前。
  10. if (file_exists('../data/config.php'))
  11. {
  12.      include('../data/config.php');
  13. }
  14. else
  15. {
  16.      include('../includes/config.php');
  17. }
   1. define('ROOT_PATH', str_replace('admin/includes/init.php', '', str_replace('\\', '/', __FILE__)));
   2.   修改成
   3. define('ROOT_PATH', str_replace($admin_dir.'/includes/init.php', '', str_replace('\\', '/', __FILE__)));
 
   1. require(ROOT_PATH . 'admin/includes/lib_main.php');
   2.   修改成
   3. require(ROOT_PATH . $admin_dir.'/includes/lib_main.php');
   1. require(ROOT_PATH . 'admin/includes/cls_exchange.php');
   2.   修改成
   3. require(ROOT_PATH . $admin_dir.'/includes/cls_exchange.php');
   1. $smarty->template_dir  = ROOT_PATH . 'admin/templates';
   2.   修改成
   3. $smarty->template_dir  = ROOT_PATH . $admin_dir.'/templates';
 
   1. $admin_path = preg_replace('/:\d+/', '', $ecs->url()) . 'admin';
   2.   修改成
   3. $admin_path = preg_replace('/:\d+/', '', $ecs->url()) . $admin_dir;
8.修改include/lib_main.php
   1. include_once(ROOT_PATH . 'admin/includes/lib_template.php');
修改成
   1.
   2. global $admin_dir;
   3. include_once(ROOT_PATH . $admin_dir.'/includes/lib_template.php');
9.修改include/cls_ecshop.php
   1.     $curr = strpos(PHP_SELF, 'admin/') !== false ?
   2.   preg_replace('/(.*)(admin)(\/?)(.)*/i', '\1', dirname(PHP_SELF)) :
   3.   dirname(PHP_SELF);
修改成
   1. global $admin_dir;
   2.         $curr = strpos(PHP_SELF, $admin_dir.'/') !== false ?
   3.                 preg_replace('/(.*)('.$admin_dir.')(\/?)(.)*/i', '\1', dirname(PHP_SELF)) :
   4.                 dirname(PHP_SELF);
10.如果担心$admin_dir变量注入安全问题可以在data/config.php文件中define('EC_CHARSET','utf-8');后增加
   1. define('ADMIN_DIR','新目录名');
然后将所有修改的$admin_dir变量修改成ADMIN_DIR,例如:
   1. require_once(ROOT_PATH . $admin_dir.'/includes/lib_goods.php');
   2. 修改成
   3. require_once(ROOT_PATH . ADMIN_DIR.'/includes/lib_goods.php');
11.根据pjb126 网友提示修改/admin/picture_batch.php
将
   1. include_once(ROOT_PATH . '/admin/includes/lib_goods.php');
   2. 修改成
   3. include_once(ROOT_PATH .$admin_dir.'/includes/lib_goods.php');
12.新增修改quotation.php
   1. include_once(ROOT_PATH . 'admin/includes/lib_main.php');
修改成
   1.
   2. global $admin_dir;
   3.     include_once(ROOT_PATH . $admin_dir.'/includes/lib_main.php');

但是,我改过这些之后,还发现可能还有三个文件需要修改

admin/filecheck.php:
api/client/includes/lib_api.php
ecshopfiles.md5

关键字 ‘admin’

ecshop和discuz的2段代码

最近想装一下ecshop和discuz2个程序,装的时候看到2段代码
ecshop的

<script type=”text/javascript” src=”http://api.ecshop.com/checkver.php?ver=<?php
 echo $this->_var['ecs_version']; ?>&lang=<?php
 echo $this->_var['ecs_lang']; ?>&release=<?php 
echo $this->_var['ecs_release']; ?>&php_ver=<?php 
echo $this->_var['sys_info']['php_ver']; ?>&mysql_ver=<?php 
echo $this->_var['sys_info']['mysql_ver']; ?>&ocount=<?php 
echo $this->_var['order']['stats']['oCount']; ?>&oamount=<?php
 echo $this->_var['order']['stats']['oAmount']; ?>&gcount=<?php
 echo $this->_var['goods']['total']; ?>&charset=<?php
 echo $this->_var['ecs_charset']; ?>”></script>

discuz的

<script src=”http://<?=$insenz&#91;url&#93;?>/news.php?id=<?=$insenz&#91;siteid&#93;?>&t=<?=$timestamp?>&k=<?=md5($insenz&#91;authkey&#93;.$insenz&#91;siteid&#93;.$timestamp.’Discuz!’)?>&insenz_version=<?=INSENZ_VERSION?>&discuz_version=<?=DISCUZ_VERSION.’ - ‘.DISCUZ_RELEASE?>&random=<?=random(4)?>”
 type=”text/javascript” charset=”UTF-8″></script>
echo ‘<sc’
.'ript language=”Jav’.'aScript” src=”
ht’.'tp:/’.'/cus’.'tome’.'r.disc’.'uz.n’.'et/n’
.'ews’.’.p’.'hp?’.bbsinformation().’”></s’.'cri’.'pt>’;

恩,很好很强大