【Discuz】自动同步登陆的完美解决办法
Discuz很强大,安装、使用都很方便,能满足大部分论坛的需求,于是在做系统开发用到论坛的话几乎是毫不犹豫地会选择Discuz(对比过Discuz和PHPWind)。
但Discuz的同步登陆问题是个头疼的问题,网上搜搜,类似的文章、贴子无数,也参考过很多的文章,始终没能完美地解决自己系统登陆后同步登陆Discuz的问题;在开发机上正常的,放到服务器上就会出现无法同步登陆的情况。
无奈之下,自己看了一下UCenter、Discuz同步登陆的机制,提炼出了以下用于同步登陆Discuz的代码:
【PHP】setcookie设置Cookie用法(及设置无效的问题)
平时用Session比较多,很少用到Cookie,这次是为了解决Discuz!自动同步登陆不得不用Cookie。
结果碰到一个问题,setcookie设置了Cookie并没有生效,在浏览器端也没有看到。查了一下,原来是setcookie是通过HTTP请求响应的Header来完成的,需要在请求响应内容输出之前执行(就像其他Header设定一样)。
在php.ini中error_reporting = E_ALL的情况下,输出内容之后再setcookie会弹出以下提示:
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\b.php:2) in … on line …
但因为当时php.ini设置成了error_reporting = E_ALL & ~E_NOTICE,于是没有任何提示,所以开发的时候还是建议设成error_reporting = E_ALL 方便观察到一些异常情况。
附一个setcookie用法实例
【PHP】获取MySQL数据库里所有表的方法
获取某个MySQL数据库中所有表的PHP代码如下:
function list_tables($database)
{
$rs = mysql_list_tables($database);
$tables = array();
while ($row = mysql_fetch_row($rs)) {
$tables[] = $row[0];
}
mysql_free_result($rs);
return $tables;
}
但由于mysql_list_tables方法已经过时,运行以上程序时会给出方法过时的提示信息,如下:
Deprecated: Function mysql_list_tables() is deprecated in … on line xxx
【ExtJs】GridPanel自动出现横向滚动条和垂直滚动条
GridPanel是ExtJs中最常用的组件之一,特别对于信息系统来说,经常需要用它来显示表格状地数据。目前习惯用的界面布局是:左侧功能导航菜单,右侧主区域放TabPanel,每开一个功能加一个Tab。之前遇到的问题是GridPanel放在TabPanel里的话高度和宽度很难搞,横向滚动条和垂直滚动条自动出现是个大问题。今天找到了一个简便的解决办法。
在TabPanel的Tab里加入layout配置
new Ext.Panel({
layout:'border',
items: [ gp ]
...
});
【PHP】强制下载文件的代码(解决了IE下中文文件名乱码问题)
以下这段代码作用是:浏览器提交excel格式的数据和文件名到服务器上,PHP将请求转化为可下载的excel文件,并要求浏览器弹出文件下载提示窗口。
中间遇到一个问题是提交的中文文件名直接放到header里在IE下会变成乱码,解决方法是将文件名先urlencode一下再放入header,如下。
<?php
$file_name = urlencode($_REQUEST['filename']);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header('Content-Type: application/vnd.ms-excel; charset=utf-8');
header("Content-Transfer-Encoding: binary");
header('Content-Disposition: attachment; filename='.$file_name);
echo stripslashes($_REQUEST['content']);
?>
【WordPress】获取当前文章别名、分类别名的函数
出于SEO的考虑,很多使用WordPress搭建的博客都会使用文章别名来作为固定链接,如本博客的固定链接格式为http://witmax.cn/%postname%.html。文章的别名可以在文章编辑页面进行设置。
对于WordPress主题设计来说,希望针对不同的文章别名或是文章所属的分类别名来显示不同的效果,就需要再模板文件在获取到当前文章的别名、分类别名。
【C】常量指针和指针常量的区别
常量指针,就是指向常量的指针,关键字 const 出现在 * 左边,表示指针所指向的地址的内容是不可修改的,但指针自身可变。
指针常量,就是指针内容的常量,关键字 const 出现在 * 右边,表示指针自身不可变,但其指向的地址的内容是可以被修改的。
比如:
常量指针: const char *ptr = “hello” ptr可改变,*ptr不可改变
常量指针: char const *ptr = “hello” ptr可改变,*ptr不可改变
指针常量: char * const ptr = “hello” ptr不可改变,*ptr可改变
【C】int与size_t的区别
size_t是一些C/C++标准在stddef.h中定义的。这个类型足以用来表示对象的大小。
size_t的真实类型与操作系统有关,在32位架构中被普遍定义为:
typedef unsigned int size_t;
而在64位架构中被定义为:
typedef unsigned long size_t;
【C】取出结构中成员变量偏移位置的宏定义
昨天看到的一句代码,是用来取出结构中成员变量相对偏移位置的宏,如下:
#define OFFSET_OF_STRUCT(type, var) ((size_t)(&((type *)NULL)->var))
举个例子
【Sybase】You cannot run the non-logged version of bulk copy in this database的解决办法
在新建的数据库上bcp in数据的时候出现了一下的错误提示:
Starting copy... Server Message: - Msg 4806, Level 16, State 1: You cannot run the non-logged version of bulk copy in this database. Please check with the DBO. Server Message: - Msg 3621, Level 10, State 0: Command has been aborted. CTLIB Message: - L1/O3/S0/N14/0/0: blk_init(): blk layer: CT library error: Failed when CT_Lib routine ct_results() called. blk_init failed. bcp copy in failed
近期评论