thinkphp(2)--2015.10.15

来源:互联网 发布:淘宝古琴哪家好 编辑:程序博客网 时间:2024/06/01 13:57

#21.thinkphp迁移站后,及时删掉~runtime.php文件,否则可能报错

#22.thinkphp中截取字符串用mb_substr(str,开始位置,截取长度,字符编码),不要用substr,否则中文截取可能乱码

#23.thinkphp修改数据库后,数据库在phpmyadmin正常登陆,配置好后,却无法连接数据库显示网站内容,此时,删除runtime文件夹,就ok了

#24.pc端和手机端调用不同的主题,default和mobile,首先除了设置default_theme,theme_list以及TMPL_DETECT_THEME这3个参数外,然后在indexaction.class.php(主页所用的控制器)的index方法中添加了个判断客户端是否是手机端登录的函数,然后进行操作。其中网上介绍只是通过C函数去修改默认主题,但是我测试着不管用。

if(self::is_mobile()){C('DEFAULT_THEME','mobile');if(empty($_GET['t'])){header('location:?t=mobile');} }else{C('DEFAULT_THEME','default');if(empty($_GET['t']) || $_GET['t'] != 'default'){header('location:?t=default');}}

#25.thinkphp与discuz论坛用户同步单向注册,登录,修改用户密码,退出。可以去http://faq.comsenz.com/library/UCenter/example/example_index.htm,最下面下载范例包。然后按照网上其他教程实现。在开发中遇到几个问题:

1.在同步登陆的时候,需要echo 输出同步js语句,但是由于登录后就跳转到个人中心。造成这段js还没完成同步,就跳转打断了。所以当时并没有实现同步。解决方法是把要输出的语句存到session中,,在个人中心的控制器中判断存不存在这个session,存在就输出,并且销毁。

2.同步过程中发现其他一切正常,但是就是不同步,这是可以去uc_client/data/cache/app.php中查看下应用列表是否齐全。

3.thinkphp站注册并登陆后,discuz没有同步,是因为没有激活,如果想要免激活,可以在discuz站点/api/uc.php的synlogin方法修改成:

function synlogin($get, $post) {global $_G;if(!API_SYNLOGIN) {return API_RETURN_FORBIDDEN;}header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');$cookietime = 31536000;$uid = intval($get['uid']);/* if(($member = getuserbyuid($uid, 1))) {dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);} *///zm 修改其他应用注册后,免激活直接登陆if(($member = getuserbyuid($uid, 1))) {dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);} else {if(!function_exists('uc_get_user')) {loaducenter();}$user = uc_get_user($uid, 1);if($user) {$time = time();DB::query("REPLACE INTO ".DB::table('common_member')." SET `uid`='{$user[0]}' , `username`='{$user[1]}' , `password`='".md5(random(10))."' , `email`='{$user[2]}' , `adminid`='0' , `groupid`='10' , `regdate`='{$time}' , `emailstatus`='0' , `credits`='0' , `timeoffset`='9999'");DB::query("REPLACE INTO ".DB::table('common_member_status')." SET `uid`='{$user[0]}' , `regip`='{$_G['clientip']}' , `lastip`='{$_G['clientip']}' , `lastvisit`='{$time}' , `lastactivity`='' , `lastpost`='0' , `lastsendmail`='0'");DB::query("REPLACE INTO ".DB::table('common_member_count')." SET `uid`='{$user[0]}' , `extcredits1`='0' , `extcredits2`='0' , `extcredits3`='0' , `extcredits4`='0' , `extcredits5`='0' , `extcredits6`='0' , `extcredits7`='0' , `extcredits8`='0'");DB::query("REPLACE INTO ".DB::table('common_member_profile')." SET `uid`='{$user[0]}'");DB::query("REPLACE INTO ".DB::table('common_member_field_forum')." SET `uid`='{$user[0]}'");DB::query("REPLACE INTO ".DB::table('common_member_field_home')." SET `uid`='{$user[0]}'");DB::query("UPDATE ".DB::table('common_stat')." SET `register`=`register`+1 WHERE `daytime` = '".date('Ymd', $time)."'");if(($member = getuserbyuid($uid, 1))) {dsetcookie('auth', authcode("$member[password]\t$member[uid]", 'ENCODE'), $cookietime);}}}}

#26.qq互联和微信第三方登录,可以下载thinksdk,然后根据qq互联中心和微信开放平台的接口做相应更改

#27.短信接口,3.2下new soapclient会报错,用new \soapclient才行

#28.thinkphp404页面的添加。对于方法(操作)名不存在跳转到404的实现,方法是,新建一个公共控制器,其他控制器继承它,然后该控制器内添加一个方法

namespace Home\Controller;use Think\Controller;class CommonController extends Controller{public function _empty(){$this->display("Public:404");//确保View/Public/下404.html存在}}
然后如果是对于控制器名不存在的,实现方法是添加一个Empty控制器

namespace Home\Controller;use Think\Controller;class EmptyController extends Controller{public function _empty(){$this->display('Public:404');}public function index(){$this->display('Public:404');}}

#29.thinkphp调用另一个数据库。可以在model中使用$this->db()来实现。

public function selectpass($uid){return $this->db(1,"mysql://".UC_DBUSER.":".UC_DBPW."@".UC_DBHOST.":3306/".UC_DBNAME)->query("select password,salt,username from ".UC_DBTABLEPRE."members where uid={$uid} ");}

#30.在调用另一个数据库的时候,在执行update操作的时候报了一个

SQLSTATE[HY000]: General error

后来发现把query换成execute就可以了



0 0
原创粉丝点击