存档

‘程序开发’ 分类的存档

【PHP】过滤XML中的非法字符

2011年8月1日 没有评论

一般XML中如果含有&等字符,可以通过CDATA来过滤,但是含有一些不认识的特殊字符时候就会不起作用,下面是从别人那儿拿来的一个过滤方法,过滤xml中的非法字符:

//XML标准规定的无效字节为:

/*
0×00 – 0×08
0x0b – 0x0c
0x0e – 0x1f
*/

//所以很简单,输出的时候过滤这些字符就万无一失了,下面是PHP的实现。

/* PHP 实现 */
function XmlSafeStr($s)
{
return preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/","",$s);
}

原文无法访问http://zongfeng.bloghome.cn/posts/77742.html

p.s. W3C的XML规范中关于字符的定义请参看这里:http://www.w3.org/TR/2004/REC-xml-20040204/#charsets

分类: 程序开发 标签: , 1,178次阅读

【C】md5函数实现代码

2011年7月25日 没有评论

网上找到的md5函数的代码,试了一下,可以用,记录一下。包括三个文件,依次如下:

头文件md5.h


#ifndef MD5_H
#define MD5_H

typedef struct
{
    unsigned int count[2];
    unsigned int state[4];
    unsigned char buffer[64];   
}MD5_CTX;

                        
#define F(x,y,z) ((x & y) | (~x & z))
#define G(x,y,z) ((x & z) | (y & ~z))
#define H(x,y,z) (x^y^z)
#define I(x,y,z) (y ^ (x | ~z))
#define ROTATE_LEFT(x,n) ((x << n) | (x >> (32-n)))
#define FF(a,b,c,d,x,s,ac) \
          { \
          a += F(b,c,d) + x + ac; \
          a = ROTATE_LEFT(a,s); \
          a += b; \
          }
#define GG(a,b,c,d,x,s,ac) \
          { \
          a += G(b,c,d) + x + ac; \
          a = ROTATE_LEFT(a,s); \
          a += b; \
          }
#define HH(a,b,c,d,x,s,ac) \
          { \
          a += H(b,c,d) + x + ac; \
          a = ROTATE_LEFT(a,s); \
          a += b; \
          }
#define II(a,b,c,d,x,s,ac) \
          { \
          a += I(b,c,d) + x + ac; \
          a = ROTATE_LEFT(a,s); \
          a += b; \
          }                                            
void MD5Init(MD5_CTX *context);
void MD5Update(MD5_CTX *context,unsigned char *input,unsigned int inputlen);
void MD5Final(MD5_CTX *context,unsigned char digest[16]);
void MD5Transform(unsigned int state[4],unsigned char block[64]);
void MD5Encode(unsigned char *output,unsigned int *input,unsigned int len);
void MD5Decode(unsigned int *output,unsigned char *input,unsigned int len);

#endif

阅读全文…

分类: 程序开发 标签: 1,491次阅读

【PHP】Fatal error: Cannot redeclare class的解决办法

2011年7月19日 2 条评论

写PHP代码的时候碰到这样的问题

Fatal error: Cannot redeclare class ….

从字面来看也很好理解,说明是重复定义了类,找了一下自己的代码,是因为存在同名的类导致的,修改了类名就好了。

再记一个网上找到的解决方法,可能在某些场合有用,先记着

if (!class_exists('pageModule')){
    require_once(PATH_site.'fileadmin/scripts/class.page.php');
}
分类: 程序开发 标签: 4,012次阅读

进程和线程的区别与联系

2011年5月11日 5 条评论

在提到操作系统和程序运行方式的时候,进程和线程是逃不开的话题,面试中问到,于是回顾总结一下。

概念

进程(process)是指在系统中正在运行的一个应用程序,是系统资源分配的基本单位,在内存中有其完备的数据空间和代码空间,拥有完整的虚拟空间地址。一个进程所拥有的数据和变量只属于它自己。

线程(thread)是进程内相对独立的可执行单元,所以也被称为轻量进程(lightweight processes);是操作系统进行任务调度的基本单元。它与父进程的其它线程共享该进程所拥有的全部代码空间和全局变量,但拥有独立的堆栈(即局部变量对于线程来说是私有的)。

阅读全文…

分类: 程序开发 标签: 1,995次阅读

【Discuz】完美集成进现有系统(整合用户和版面增删)

2011年5月8日 没有评论

之前写过《【Discuz】自动同步登陆的完美解决办法》,主要是解决Discuz的同步登陆问题,用户系统是采用UCenter进行管理的。

最近的一次应用是基本完成了业务系统,需要整合Discuz进去作为交流版块使用。于是,涉及到用户系统的整合和版面的增删操作。UCenter提供了API进行用户的增删管理,自然可以用,但为了保证用户id的统一性,暴力地绕过了UCenter API,而采用直接操作数据库的方式来完成用户增删,当然版面的增删也是操作数据库来完成。

1、增加用户到Discuz和UCenter的代码

$uid = 100;   // 用户编号
$username = "maple";  // 用户名
$password = "mypassword"; // 用户密码
$salt = md5((string)rand()); // 随机字符用于加密
$password = md5(md5($pwd) . $salt); // 加密后的密码
$groupid = 10;   // 用户组编号
$timestamp = time();  // 时间戳
$bbsemail = "i@witmax.cn";  // 注册邮箱,不能重复

execute_sql("INSERT INTO cdb_members (uid, username, password, secques, gender, adminid, groupid, regip, regdate, lastvisit, lastactivity, posts, credits, email, bday, sigstatus, tpp, ppp, styleid, dateformat, timeformat, showemail, newsletter, invisible, timeoffset) VALUES ('$uid', '$username', '$salt', '$password', '0', '0', '$groupid', 'Manual Acting', '$timestamp', '$timestamp', '$timestamp', '0', '0', '$bbsemail', '0000-00-00', '0', '0', '0', '0', '0', 'H:i', '1', '1', '0', '8')");
execute_sql("INSERT INTO cdb_memberfields (uid) VALUES ('$uid')");
execute_sql("INSERT INTO `cdb_uc_members` SET uid='$uid', username='$username', password='$password', email='$bbsemail', regip='Manual Acting', regdate='$timestamp', salt='$salt'");
execute_sql("INSERT INTO `cdb_uc_memberfields` SET uid='$uid'");

阅读全文…

分类: 程序开发 标签: 1,236次阅读

【C/C++】联合union的用法和说明

2011年4月26日 没有评论

看了几篇c语言中union的文章,整理记录一下

============分=======隔=======线============

1、什么是联合?

“联合”是一种特殊的类,也是一种构造类型的数据结构。在一个“联合”内可以定义多种不同的数据类型, 一个被说明为该“联合”类型的变量中,允许装入该“联合”所定义的任何一种数据,这些数据共享同一段内存,已达到节省空间的目的(还有一个节省空间的类型:位域)。 这是一个非常特殊的地方,也是联合的特征。另外,同struct一样,联合默认访问权限也是公有的,并且,也具有成员函数。

阅读全文…

分类: 程序开发 标签: 2,011次阅读

【Discuz】自动同步登陆的完美解决办法

2011年4月3日 6 条评论

Discuz很强大,安装、使用都很方便,能满足大部分论坛的需求,于是在做系统开发用到论坛的话几乎是毫不犹豫地会选择Discuz(对比过Discuz和PHPWind)。

但Discuz的同步登陆问题是个头疼的问题,网上搜搜,类似的文章、贴子无数,也参考过很多的文章,始终没能完美地解决自己系统登陆后同步登陆Discuz的问题;在开发机上正常的,放到服务器上就会出现无法同步登陆的情况。

无奈之下,自己看了一下UCenter、Discuz同步登陆的机制,提炼出了以下用于同步登陆Discuz的代码:

阅读全文…

分类: 程序开发 标签: 3,200次阅读

【PHP】setcookie设置Cookie用法(及设置无效的问题)

2011年4月3日 没有评论

平时用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用法实例

阅读全文…

分类: 程序开发 标签: 3,034次阅读

【PHP】获取MySQL数据库里所有表的方法

2011年4月3日 没有评论

获取某个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

阅读全文…

分类: 程序开发 标签: , 1,733次阅读

【PHP】强制下载文件的代码(解决了IE下中文文件名乱码问题)

2011年4月3日 没有评论

以下这段代码作用是:浏览器提交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']);

?>
分类: 程序开发 标签: 2,126次阅读

无觅相关文章插件,快速提升流量