kk Blog —— 通用基础

date [-d @int|str] [+%s|"+%F %T"]

PHP排序函数详解

在PHP中,对数组排序的函数有以下几个:

  1. sort(array &$array[, int $sort_flags ])函数,该函数只对数组值进行排序,数组索引将随排序后自动分配。可选的第二个参数分别是SORT_REGULAR,SORT_NUMERIC,SORT_STRING,SORT_LOCAL_STRING。在对含有混合类型值的数组排序时要小心,因为 sort() 可能会产生不可预知的结果。
  2. rsort(array &$array[, int $sort_flags ]),与sort()相同,只不过排序顺序相反,rsort()从高到低。
  3. asort(array &$array[, int $sort_flags ]),键值排序,对于要求保持数组索引和键值不变,可以使用该函数。
  4. ksort(array &$array[, int $sort_flags ]),对数组索引排序,主要运用于关联数组。
  5. krsort(&array[, int $sort_flags ]),与ksort相同,只是排序顺序相反,从高到低排序。
  6. arsort(array &$array[, int $sort_flags ]),与asort()相同,只是排序顺序相反,从高到低排序。
  7. natsort(array &$array),用自然排序算法对数组排序。本函数实现了一个和人们通常对字母数字字符串进行排序的方法一样的排序算法并保持原有键/值的关联,这被称为“自然排序”。
  8. natcasesort(array &$array),和natsort()相同,只不过在排序时不区分大小写。
  9. usort( array &$array , callback $cmp_function ),本函数将用用户自定义的比较函数对一个数组中的值进行排序。如果要排序的数组需要用一种不寻常的标准进行排序,那么应该使用此函数。 比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。此函数为 array 中的元素赋与新的键名。这将删除原有的键名,而不是仅仅将键名重新排序。 当usort()用于多维数组排序时,自定义排序函数的参数包含到数组第一个索引的引用。 对于CI框架usort($file_list, ‘cmp_func’); 更改为usort($file_list, array($this, ‘cmp_func’));
  10. uksort(array &$array , callback $cmp_function ),与usort相同,只不过对数组索引排序。
  11. uasort ( array &$array , callback $cmp_function ),与sort相同,在排序时保持索引关联

在网页中嵌入CKeditor编辑器

1.

http://ckeditor.com/download 上下载最新版本的CKeditor。将下载的文件解压,然后将4M多的文件减肥:可以删掉samples、source、tests这三个无用的文件夹;打开lang文件夹,删掉除languages.js、en.js、zh-cn.js以外的所有文件;如果你不用office2003和v2两种皮肤,可以把skin目录下的这两个目录也都删掉。这样就做的了准备工作。
将ckeditor压缩包解压放在网站根目录下的“ckeditor”文件夹里: 引入ckeditor.js文件:

1
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>

你也可以将这些文件放在你网站的其他任何一个地方,默认为“ckeditor”。

2. 在要使用ckeditor编辑器的地方插入脚本:

1
2
3
4
<script type="text/javascript">CKEDITOR.replace( '多行文本的name',{skin : "kama",width:520} );</script>
如:
<textarea cols="80" rows="10" name="message">Please input the content in here</textarea>
<script type="text/javascript">CKEDITOR.replace( 'message',{skin : "kama",width:520} );</script>

这样就将name为message的多行文本替换成了ckeditor编辑器形式的输入框

3.获取内容:

1
2
3
<?php
$message=$_POST['message'];
?>

4.自定义ckeditor

4-1.设置编辑器皮肤、宽高

如:

1
2
3
4
5
6
7
8
9
10
<textarea  cols="90" rows="10" id="content" name="content">cftea</textarea>
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
<script type="text/javascript">
<!--
CKEDITOR.replace("content",
	{
		skin: "kama", width:700, height:300
	});
//-->
</script>

Ubuntu下安装MySQL获得 mysql.h

先安装MySQL

1
sudo apt-get install mysql-server mysql-client

再装开发包

1
sudo apt-get install libmysqlclient15-dev

安装完以后,C代码里添加头文件

1
#include <mysql.h>   还是 #include<mysql/mysql.h>

编译方法:

1
gcc $(mysql_config --cflags) xxx.c -o xxx $(mysql_config --libs)

CodeIgniter用钩子实现基于URL的权限控制

基于URL权限系统:

例如游客只能访问音乐模块的index,list,search方法。而注册用户除上述功能之外还能访问create,update,delete方法。那么我们可以在控制器之行之前判断当前用户是否具备访问该控制器的权限。

实现:

直接上代码:

1.system/application/config/hooks.php中添加钩子声明:
1
2
3
4
5
6
$hook['post_controller_constructor'] = array(
	'class' => 'Acl',
	'function' => 'filter',
	'filename' => 'acl.php',
	'filepath' => 'hooks',
);
2.system/application/config/config.php中让钩子系统生效
1
$config['enable_hooks'] = TRUE;
3.然后在config中新建acl.php权限系统配置文件,当然你也可以放在数据库中。

//游客权限映射

1
2
3
4
5
$config['acl']['visitor'] = array(
	'' => array('index'),//首页
	'music' => array('index', 'list'),
	'user' => array('index', 'login', 'register')
);

//管理员

1
2
$config['acl']['admin'] = array(
);

//————-配置权限不够的提示信息及跳转url——————//

1
2
3
4
5
6
7
8
9
10
$config['acl_info']['visitor'] = array(
	'info' => '需要登录以继续',
	'return_url' => 'user/login'
);
$config['acl_info']['more_role'] = array(
	'info' => '需要更高权限以继续',
	'return_url' => 'user/up'
);
/* End of file acl.php */
/* Location: ./application/config/acl.php */
4.system/application/hooks目录下添加acl.php逻辑处理文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class Acl
{
	private $url_model;//所访问的模块,如:music
	private $url_method;//所访问的方法,如:create
	private $url_param;//url所带参数 可能是 1 也可能是 id=1&name=test
	private $CI;
 
	function Acl()
	{
		$this->CI = & get_instance();

		if (!session_id()) session_start();

		$url = $_SERVER['PHP_SELF'];
		$arr = explode('/', $url);
		$arr = array_slice($arr, array_search('index.php', $arr) + 1, count($arr));
		$this->url_model = isset($arr[0]) ? $arr[0] : '';
		$this->url_method = isset($arr[1]) ? $arr[1] : 'index';
		$this->url_param = isset($arr[2]) ? $arr[2] : '';
	}
	function filter()
	{
		$user = $this->CI->session->userdata('user');
		if (empty($user)) {//游客visitor
			$role_name = 'visitor';
		} else {
			$role_name = $user->role;
		}

		$this->CI->load->config('acl');
		$acl = $this->CI->config->item('acl');
		$role = $acl[$role_name];
		$acl_info = $this->CI->config->item('acl_info');

		if (array_key_exists($this->url_model, $role) && in_array($this->url_method, $role[$this->url_model])) {
			;
		} else {//无权限,给出提示,跳转url
			$_SESSION['info'] = $acl_info[$role_name]['info'];
			redirect($acl_info[$role_name]['return_url']);
		}
	}
}

CI 处理 URL 的“大小写敏感”问题

CI 处理 URL 的“大小写敏感”问题

找到system/core里的Router.php文件,修文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
//找到 function _validate_request
function_validate_request($segments)
{
	// 增加下面这一句,其实就是强制将控制器名字转化为小写
	$segments[0] = strtolower($segments[0]);
	// Does the requested controller exist in the root folder?
	if(file_exists(APPPATH.'controllers/'.$segments[0].EXT))
	{
	    return $segments;
	}
}
?>