PHP使用DES进行加密和解密

发布于:2014-8-27 13:52 作者:admin 浏览:2175 分类:PHP

php中有一个扩展可以支持DES的加密算法,是:extension=php_mcrypt.dll

在配置文件中将这个扩展打开还不能够在windows环境下使用

需要将PHP文件夹下的 libmcrypt.dll 拷贝到系统的 system32 目录下,这是通过phpinfo可以查看到mcrypt表示这个模块可以正常试用了。

 下面是PHP中使用DES加密解密的一个例子:

//$input - stuff to decrypt

    //$key - the secret key to use



    function do_mencrypt($input, $key)

    {

        $input = str_replace(""n", "", $input);

        $input = str_replace(""t", "", $input);

        $input = str_replace(""r", "", $input);

        $key = substr(md5($key), 0, 24);

        $td = mcrypt_module_open('tripledes', '', 'ecb', '');

        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

        mcrypt_generic_init($td, $key, $iv);

        $encrypted_data = mcrypt_generic($td, $input);

        mcrypt_generic_deinit($td);

        mcrypt_module_close($td);

        return trim(chop(base64_encode($encrypted_data)));

    }

    

    //$input - stuff to decrypt

    //$key - the secret key to use

    

    function do_mdecrypt($input, $key)

    {

        $input = str_replace(""n", "", $input);

        $input = str_replace(""t", "", $input);

        $input = str_replace(""r", "", $input);

        $input = trim(chop(base64_decode($input)));

        $td = mcrypt_module_open('tripledes', '', 'ecb', '');

        $key = substr(md5($key), 0, 24);

        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

        mcrypt_generic_init($td, $key, $iv);

        $decrypted_data = mdecrypt_generic($td, $input);

        mcrypt_generic_deinit($td);

        mcrypt_module_close($td);

        return trim(chop($decrypted_data));


    }

标签: des

0

header

发布于:2014-5-8 11:42 作者:admin 浏览:1737 分类:PHP
//定义编码
header( 'Content-Type:text/html;charset=utf-8 ');

//Atom
header('Content-type: application/atom+xml');

//CSS
header('Content-type: text/css');

//Javascript
header('Content-type: text/javascript');

//JPEG Image
header('Content-type: image/jpeg');

//JSON
header('Content-type: application/json');

//PDF
header('Content-type: application/pdf');

//RSS
header('Content-Type: application/rss+xml; charset=ISO-8859-1');

//Text (Plain)
header('Content-type: text/plain');

//XML
header('Content-type: text/xml');

// ok
header('HTTP/1.1 200 OK');

//设置一个404头:
header('HTTP/1.1 404 Not Found');

//设置地址被永久的重定向
header('HTTP/1.1 301 Moved Permanently');

//转到一个新地址
header('Location: http://www.example.org/');

//文件延迟转向:
header('Refresh: 10; url=http://www.example.org/');
print 'You will be redirected in 10 seconds';

//当然,也可以使用html语法实现
// <meta http-equiv="refresh" content="10;http://www.example.org/ />

// override X-Powered-By: PHP:
header('X-Powered-By: PHP/4.4.0');
header('X-Powered-By: Brain/0.6b');

//文档语言
header('Content-language: en');

//告诉浏览器最后一次修改时间
$time = time() - 60; // or filemtime($fn), etc
header('Last-Modified: '.gmdate('D, d M Y H:i:s', $time).' GMT');

//告诉浏览器文档内容没有发生改变
header('HTTP/1.1 304 Not Modified');

//设置内容长度
header('Content-Length: 1234');

//设置为一个下载类型
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="example.zip"');
header('Content-Transfer-Encoding: binary');
// load the file to send:
readfile('example.zip');

// 对当前文档禁用缓存
header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
header('Pragma: no-cache');

//设置内容类型:
header('Content-Type: text/html; charset=iso-8859-1');
header('Content-Type: text/html; charset=utf-8');
header('Content-Type: text/plain'); //纯文本格式
header('Content-Type: image/jpeg'); //JPG***
header('Content-Type: application/zip'); // ZIP文件
header('Content-Type: application/pdf'); // PDF文件
header('Content-Type: audio/mpeg'); // 音频文件
header('Content-Type: application/x-shockw**e-flash'); //Flash动画

//显示登陆对话框
header('HTTP/1.1 401 Unauthorized');
header('WWW-Authenticate: Basic realm="Top Secret"');
print 'Text that will be displayed if the user hits cancel or ';
print 'enters wrong login data';

标签: header

0

PHP的SESSION机制

发布于:2014-1-9 9:11 作者:admin 浏览:1829 分类:PHP
1.session.save_handler = files

1. session_start()
1. session_start()是session机制的开始,它有一定概率开启垃圾回收,因为session是存放在文件中,
PHP自身的垃圾回收是无效的,SESSION的回收是要删文件的,这个概率是根据php.ini的配置决定的,
但是有的系统是 session.gc_probability = 0,这也就是说概率是0,而是通过cron脚本来实现垃圾回收。

session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440//过期时间 默认24分钟
//概率是 session.gc_probability/session.gc_divisor 结果 1/1000, 
//不建议设置过小,因为session的垃圾回收,是需要检查每个文件是否过期的。
session.save_path = //好像不同的系统默认不一样,有一种设置是 "N;/path"
//这是随机分级存储,这个样的话,垃圾回收将不起作用,需要自己写脚本

 2. session会判断当前是否有$_COOKIE[session_name()];session_name()返回保存session_id的COOKIE键值,
这个值可以从php.ini找到

session.name = PHPSESSID //默认值PHPSESSID
     

 3. 如果不存在会生成一个session_id,然后把生成的session_id作为COOKIE的值传递到客户端.
相当于执行了下面COOKIE 操作,注意的是,这一步执行了setcookie()操作,COOKIE是在header头中发送的,
这之前是不能有输出的,PHP有另外一个函数 session_regenerate_id() 如果使用这个函数,这之前也是不能有输出的。

setcookie(session_name(),
	  session_id(),
	  session.cookie_lifetime,//默认0
	  session.cookie_path,//默认'/'当前程序跟目录下都有效
	  session.cookie_domain,//默认为空
)

 4. 如果存在那么session_id = $_COOKIE[session_name];
然后去session.save_path指定的文件夹里去找名字为'SESS_' . session_id()的文件.
读取文件的内容反序列化,然后放到$_SESSION中


* 2. 为$_SESSION赋值
比如新添加一个值$_SESSION['test'] = 'blah'; 那么这个$_SESSION只会维护在内存中,当脚本执行结束的时候,
用把$_SESSION的值写入到session_id指定的文件夹中,然后关闭相关资源.      这个阶段有可能执行更改session_id的操作,
比如销毁一个旧的的session_id,生成一个全新的session_id.一半用在自定义 session操作,角色的转换上,
比如Drupal.Drupal的匿名用户有一个SESSION的,当它登录后需要换用新的session_id

if (isset($_COOKIE[session_name()])) 
{
	setcookie(session_name(), '', time() - 42000, '/');//旧session cookie过期
}
session_regenerate_id();//这一步会生成新的session_id
//session_id()返回的是新的值

3.写入SESSION操作
在脚本结束的时候会执行SESSION写入操作,把$_SESSION中值写入到session_id命名的文件中,可能已经存在,
可能需要创建新的文件。




4. 销毁SESSION
SESSION发出去的COOKIE一般属于即时COOKIE,保存在内存中,当浏览器关闭后,才会过期,假如需要人为强制过期,
比如 退出登录,而不是关闭浏览器,那么就需要在代码里销毁SESSION,方法有很多,
4.1. setcookie(session_name(), session_id(), time() - 8000000, ..);//退出登录前执行
4.2. usset($_SESSION);//这会删除所有的$_SESSION数据,刷新后,有COOKIE传过来,但是没有数据。
4.3. session_destroy();//这个作用更彻底,删除$_SESSION 删除session文件,和session_id




2.session.save_handler = user

用户自定义session处理机制,更加直观
* session_set_save_handler('open', 'close', 'read', 'write', 'destroy', 'gc'); 
1.session_start(),
执行open($save_path, $session_name)打开session操作句柄
$save_path 在session.save_handler = files的情况下它就是session.save_path,
但是如果用户自定的话,这个两个参数都用不上,直接返回TRUE

执行read($id)从中读取数据.//这个参数是自动传递的就是session_id(),可以通过这个值进行操作。

* 2.脚本执行结束
执行write($id, $sess_data) //两个参数,很简单

* 3.假如用户需要session_destroy()
先执行destroy.在执行第2步

一个实际例子:

//SESSION初始化的时候调用
function open($save_path, $session_name)
{
	global $sess_save_path;
	$sess_save_path = $save_path;
	return(true);
}

//关闭的时候调用
function close()
{
	return(true);
}

function read($id)
{
	global $sess_save_path;
	$sess_file = "$sess_save_path/sess_$id";
	return (string) @file_get_contents($sess_file);
}
//脚本执行结束之前,执行写入操作
function write($id, $sess_data)
{
	echo "sdfsf";
	global $sess_save_path;

	$sess_file = "$sess_save_path/sess_$id";
	if ($fp = @fopen($sess_file, "w")) 
	{
		$return = fwrite($fp, $sess_data);
		fclose($fp);
		return $return;
	} 
	else 
	{
		return(false);
	}

}

function destroy($id)
{
	global $sess_save_path;

	$sess_file = "$sess_save_path/sess_$id";
	return(@unlink($sess_file));
}

function gc($maxlifetime)
{
	global $sess_save_path;

	foreach (glob("$sess_save_path/sess_*") as $filename) 
	{
	  if (filemtime($filename) + $maxlifetime < time()) 
	  {
	    @unlink($filename);
	  }
	}
	return true;
}

标签: session

0

register_shutdown_function

发布于:2013-12-25 13:45 作者:admin 浏览:1915 分类:PHP

register_shutdown_function 执行机制是:PHP把要调用的函数调入内存。当页面所有PHP语句都执行完成时,再调用此 函数。
注意:register_shutdown_function是指在执行完所有PHP语句后再调用函数,不要理解成客户端关闭流浏览器页面时调用函数。
可以这样理解调用条件:
1、当页面被用户强制停止时
2、当程序代码运行超时时
3、当PHP代码执行完成时

 

<?php
//register_shutdown_function测试范例
function shutdown()
{
    echo 'PHP_EOL 万能换行符,window \r\n, unix \n, mac \r'.PHP_EOL; //连接符的使用方式。
    echo 'Script executed with success', PHP_EOL;  //,和 PHP_EOL 的使用方式
	
}

register_shutdown_function('shutdown');

echo 'pos1'.PHP_EOL;

exit();

echo 'pos2';
?>

 

 

测试结果:(输出POS1后,由于exit()退出,然后开始执行内存中的'shutdown' 函数。没有执行 pos2)

pos1
PHP_EOL 万能换行符,window \r\n, unix \n, mac \r 
Script executed with success


 
 

 

SCWS – 简易中文分词系统 介绍和案例

发布于:2013-12-9 11:19 作者:admin 浏览:2229 分类:PHP

SCWS – 简易中文分词系统

SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集,经小范围测试大概准确率在 90% ~ 95% 之间,已能基本满足一些中小型搜索引擎、关键字提取等场合运用。 SCWS 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持 GBK,UTF-8,BIG5 等汉字编码,切词效率高。

系统平台:Windows/Unix
开发语言:C
使用方式:PHP扩展

官方地址:http://www.xunsearch.com/scws/index.php

 

 

案例:

PSCWS4 类对应的文件为 pscws4.class.php。在 PHP 代码中的调用方法如下:
<?php

// 加入头文件
require '/path/to/pscws4.class.php';

// 建立分词类对像, 参数为字符集, 默认为 gbk, 可在后面调用 set_charset 改变
$pscws = new PSCWS4('utf8');

//
// 接下来, 设定一些分词参数或选项, set_dict 是必须的, 若想智能识别人名等需要 set_rule 
//
// 包括: set_charset, set_dict, set_rule, set_ignore, set_multi, set_debug, set_duality ... 等方法
// 
$pscws->set_dict('/path/to/etc/dict.xdb');
$pscws->set_rule('/path/to/etc/rules.ini');

// 分词调用 send_text() 将待分词的字符串传入, 紧接着循环调用 get_result() 方法取回一系列分好的词
// 直到 get_result() 返回 false 为止
// 返回的词是一个关联数组, 包含: word 词本身, idf 逆词率(重), off 在text中的偏移, len 长度, attr 词性
//

$pscws->send_text($text);
while ($some = $pscws->get_result())
{
   foreach ($some as $word)
   {
      print_r($word);
   }
}

// 在 send_text 之后可以调用 get_tops() 返回分词结果的词语按权重统计的前 N 个词
// 常用于提取关键词, 参数用法参见下面的详细介绍.
// 返回的数组元素是一个词, 它又包含: word 词本身, weight 词重, times 次数, attr 词性
$tops = $pscws->get_tops(10, 'n,v');
print_r($tops);


?>



<?php
class PSCWS4 {

  void set_charset(string charset);
  说明:设定分词词典、规则集、欲分文本字符串的字符集,系统缺省是 gbk 字集。
  返回:无。
  参数:charset 是设定的字符集,目前只支持 utf8 和 gbk。(注:big5 也可作 gbk 处理)
  注意:输入要切分的文本,词典,规则文件这三者的字符集必须统一为该 charset 值。
  
  bool set_dict(string dict_fpath);
  说明:设置分词引擎所采用的词典文件。
  参数:dict_path 是词典的路径,可以是相对路径或完全路径。
  返回:成功返回 true 失败返回 false。
  错误:若有错误会给出 WARNING 级的错误提示。
  
  void set_rule(string rule_path);
  说明:设定分词所用的新词识别规则集(用于人名、地名、数字时间年代等识别)。
  返回:无。
  参数:rule_path 是规则集的路径,可以是相对路径或完全路径。
  
  void set_ignore(bool yes)
  说明:设定分词返回结果时是否去除一些特殊的标点符号之类。
  返回:无。
  参数:yes 设定值,如果为 true 则结果中不返回标点符号,如果为 false 则会返回,缺省为 false。
  
  void set_multi(int mode);
  说明:设定分词返回结果时是否复合分割,如“中国人”返回“中国+人+中国人”三个词。
  返回:无。
  参数:mode 设定值,1 ~ 15。
        按位异或的 1 | 2 | 4 | 8 分别表示: 短词 | 二元 | 主要单字 | 所有单字
    
  void set_duality(bool yes);
  说明:设定是否将闲散文字自动以二字分词法聚合。
  返回:无。
  参数:yes 设定值,如果为 true 则结果中多个单字会自动按二分法聚分,如果为 false 则不处理,缺省为 false。

  void set_debug(bool yes);
  说明:设置分词过程是否输出N-Path分词过程的调试信息。
  参数:yes 设定值,如果为 true 则分词过程中对于多路径分法分给出提示信息。
  返回:无。
  
  void send_text(string text)
  说明:发送设定分词所要切割的文本。
  返回:无。
  参数:text 是文本的内容。
  注意:执行本函数时,请先加载词典和规则集文件并设好相关选项。
  
  mixed get_result(void)
  说明:根据 send_text 设定的文本内容,返回一系列切好的词汇。
  返回:成功返回切好的词汇组成的数组, 若无更多词汇,返回 false。
  参数:无。
  注意:每次切割后本函数应该循环调用,直到返回 false 为止,因为程序每次返回的词数是不确定的。
        返回的词汇包含的键值有:word (string, 词本身) idf (folat, 逆文本词频) off (int, 在文本中的位置) attr(string, 词性)
    
  mixed get_tops( [int limit [, string attr]] )
  说明:根据 send_text 设定的文本内容,返回系统计算出来的最关键词汇列表。
  返回:成功返回切好的词汇组成的数组, 若无更多词汇,返回 false。
  参数:limit 可选参数,返回的词的最大数量,缺省是 10;
        attr 可选参数,是一系列词性组成的字符串,各词性之间以半角的逗号隔开,
             这表示返回的词性必须在列表中,如果以~开头,则表示取反,词性必须不在列表中,
         缺省为空,返回全部词性,不过滤。
         
  string version(void);
  说明:返回本版号。
  返回:版本号(字符串)。
  参数:无。
  
  void close(void);
  说明:关闭释放资源,使用结束后可以手工调用该函数或等系统自动回收。
  返回:无。
  参数:无。
};

?>
	

 

 

标签: 分词 SCWS

0

php 匹配汉字

发布于:2013-10-21 11:34 作者:admin 浏览:1799 分类:PHP
在javascript中,判断字符串是否中文:
var str = "php编程";
if (/^[\u4e00-\u9fa5]+$/.test(str)) {
alert("该字符串全部是中文");
} else {
alert("该字符串不全部是中文");
}
在php中来判断字符串是否为中文:
<?php
$str = "php编程";
if (preg_match("/^[\u4e00-\u9fa5]+$/",$str)) {
print("该字符串全部是中文");
} else {
print("该字符串不全部是中文");
}
?>

标签: php JS 正则

0

获取JS对象的位置

发布于:2013-10-18 13:54 作者:admin 浏览:2781 分类:PHP
function getSite(obj){
	var s={x:0,y:0};
		while(obj){
			s.x+=obj.offsetLeft;
			s.y+=obj.offsetTop;
			obj=obj.offsetParent;
		}
	return s;
};

标签: php JS

3