作者归档:admin

php 数组去重复[转]

去除数组中的重复项
一维数组的重复项:
使用array_unique函数即可,使用实例如下:

<?php
$aa=array(“apple”,”banana”,”pear”,”apple”,”wail”,”watermalon”);
$bb=array_unique($aa);
print_r($bb);
?>

结果如下:Array ( [0] => apple [1] => banana [2] => pear [4] => wail [5] => watermalon ) 。
二维数组的重复项:
对于二维数组咱们分两种情况讨论,一种是因为某一键名的值不能重复,删除重复项;另一种因为内部的一维数组不能完全相同,而删除重复项,下面举例说明:
㈠因为某一键名的值不能重复,删除重复项

<?php
function assoc_unique($arr, $key)
{
$tmp_arr = array();
foreach($arr as $k => $v)
{
if(in_array($v[$key], $tmp_arr))//搜索$v[$key]是否在$tmp_arr数组中存在,若存在返回true
{
unset($arr[$k]);
}
else {
$tmp_arr[] = $v[$key];
}
}
sort($arr); //sort函数对数组进行排序
return $arr;
}
$aa = array(
array(‘id’ => 123, ‘name’ => ‘张三’),
array(‘id’ => 123, ‘name’ => ‘李四’),
array(‘id’ => 124, ‘name’ => ‘王五’),
array(‘id’ => 125, ‘name’ => ‘赵六’),
array(‘id’ => 126, ‘name’ => ‘赵六’)
);
$key = ‘id’;
assoc_unique(&$aa, $key);
print_r($aa);
?>

显示结果为:Array ( [0] => Array ( [id] => 123 [name] => 张三 ) [1] => Array ( [id] => 124 [name] => 王五 ) [2] => Array ( [id] => 125 [name] => 赵六 ) [3] => Array ( [id] => 126 [name] => 赵六 ) )
㈡因内部的一维数组不能完全相同,而删除重复项

<?php
function array_unique_fb($array2D){
foreach ($array2D as $v){
$v = join(“,”,$v); //降维,也可以用implode,将一维数组转换为用逗号连接的字符串
$temp[] = $v;
}
$temp = array_unique($temp); //去掉重复的字符串,也就是重复的一维数组
foreach ($temp as $k => $v){
$temp[$k] = explode(“,”,$v); //再将拆开的数组重新组装
}
return $temp;
}
$aa = array(
array(‘id’ => 123, ‘name’ => ‘张三’),
array(‘id’ => 123, ‘name’ => ‘李四’),
array(‘id’ => 124, ‘name’ => ‘王五’),
array(‘id’ => 123, ‘name’ => ‘李四’),
array(‘id’ => 126, ‘name’ => ‘赵六’)
);
$bb=array_unique_fb($aa);
print_r($bb)
?>

显示结果:Array ( [0] => Array ( [0] => 123 [1] => 张三 ) [1] => Array ( [0] => 123 [1] => 李四 ) [2] => Array ( [0] => 124 [1] => 王五 ) [4] => Array ( [0] => 126 [1] => 赵六 ) )

get_headers()返回"HTTP request failed!" (Read 1135 times)

<?php
// print_r(get_headers(‘http://www.digg.com’, 1));
// print_r(get_headers(‘http://digg.com’, 1));
?>

Warning: get_headers(http://www.digg.com) [function.get-headers]: failed to open stream: HTTP request failed! in /home/jacob/workspace/tester.php on line 3
Warning: get_headers(http://www.digg.com) [function.get-headers]: failed to open stream: HTTP request failed! in /home/jacob/workspace/tester.php on line 6

Is allow_url_fopen set to true within your php.ini? If not the function will fail right away.

即,php.ini文件中打开allow_url_fopen。

李宗盛音乐创作年表 李宗盛作品全集

李宗盛音乐创作年表
1982年
如果你说 桂冠水饺广告曲 我和你 摇滚舞台 结束
1985年
艾嘉,爱家 不知道 亲爱的你好吗 恋爱告别 爱情有什么道理 忙与盲
1986年
锁上记忆(为滚石写的第1首歌) 七点钟 飞 没有人知道 一个人
开场白(第一张个人专辑的第一首个,小厨师牛肉面广告歌曲)
寂寞难耐(李氏歌词的发轫) 你像个孩子似的
风柜来的人(电影〔风柜来的人〕主题曲) 如果你要离去
生命中的精灵 小镇医生的爱情(电影〔小镇医生的爱情〕主题曲)
旧爱新欢 最爱(写歌手法的阶段性改变,非常不像李氏以往的作品)
悲伤的语言
1987年
像我这样的单身女子 我有话要说(电影〔我有话要说〕主题曲)
十七岁女生的温柔 因为我在乎(电影〔东方秃鹰〕主题曲)
离别赋 耳语 请原谅我 求你讲清楚
1988年
那一夜你喝了酒 我只为你美丽 飞雪(演奏曲) 别说可惜
所以让我爱你 心所爱的人 你再也找不到一个像我的人
不敢哭出声 和自己赛跑的人 当我们同在一起(为奥运欢歌)
把握 不要挡在我面前 孤单 戏说从头 可口可乐广告歌曲
雪碧汽水广告歌曲
1989年
爱情少尉 我的未来我的家我的妻 给所有单身女子
我的骄傲 喔!莎莉 我终于失去了你
油麻菜籽(早期用情最深的作品,电影〔 油麻菜籽〕主题曲)
心动的感觉 让我忘记你的脸 别在补习 算不算是一对恋人
你走你的路 梦醒时分 依然想你 傲慢与偏见 在我心中
相信相依 阿宗三件事
1990年
阳光少年 听见有人叫你宝贝 请不要对我说 就算没有明天
原谅我的错 我是一只小小鸟 给所有知道我名字的人 伤心舞台
连梦也没有 征服我的心
1991年
缘是一首歌(广告歌) 将心比心 富士胶片广告歌曲
凡人歌 在我生命中的每一天 想逃 漂洋过海来看你
若不能拥有你 让我欢喜让我忧 这样爱你对不对
明明白白我的心 壮志在我胸
1992年
YAMAHA企业广告歌 保力达B广告歌 我为你而生
碧海情天 等待奇迹 因为寂寞 迷(电影〔超级警察〕主题曲)
爱的代价(老友再次相聚,心中感而发写下此歌, 电影(哥哥的情人)主题曲
1993年
爱似流星(电影〔新流星蝴蝶剑〕主题曲)
笑红尘(电影〔风云再起〕主题曲) 向着阳光走
爱的太多是错 你要的男人是那一种 不必在乎我是谁
寂寞派队 爱如潮水 我是真的爱你 要你亲口对我说
我一个人住 用热情种出希望(黑松沙土广告歌曲)
真心英雄 快乐似神仙 多事的秋 爱要怎么说出口
没修饰的印记 远行 始终只爱你 如风往事(麦斯威尔咖啡广告歌曲)
希望(BMW环保篇主题曲) 宁愿相信 爱的进行式
1994年
领悟 伤痕 为你我受冷风吹
1995年
荒唐
1996年
怎么会 冷雨中
1999年
大地只歌
2000年
十二楼

解决Chrome浏览网页自动下载保存的问题

在中国电信ADSL环境下,使用Chrome浏览器上网的时候,经常会出现一个奇怪的问题,就是上网点击一个链接,Chrome并没有正常浏览该网页,而是自动将该网页下载到本地,而此情况在IE浏览器下并没有出现。
原以为是Chrome浏览器的BUG,也试着重新安装了,发现偶尔还是出现这种情况,每次无法访问网页的时候,使用IE浏览器打开就正常,而在IE浏览器下则有时会弹出中国电信的广告。
经过研究发现,这不是Chrome浏览器的问题,问题的原因是中国电信恶意劫持,在IE浏览器的现象是,访问一个本来没有弹出广告的网站,偶然会自动弹出中国电信的广告,再刷新网站,又没有广告弹出。对于谷歌Chrome浏览器,则无法浏览目标网页,系统会自动下载网页到本地。
使用记事本打开Chrome下载的文件,会发现原本正常的网站源码里会被中国电信插入很多iframe和javascript代码,使用的域名和IP均为中国电信的服务器。
有网友从2005年就报道过中国电信的强弹广告,谴责中国电信这种劫持用户浏览器,通过嵌入代码的方式在用户浏览器上弹出广告的恶行,并曾经打电话投诉电信,要求解除其帐号的PUSH广告业务,没想到每年续费一次,都会自动增加这种PUSH广告。
更为糟糕的是,这些PUSH广告代码存在严重的浏览器兼容性问题,只能在IE浏览器下工作,如果目标网站使用了GZIP压缩传输,电信的这些代码在Chrome浏览器下就会异常,导致出错,从而影响用户正常浏览网页。
目前想到的解决的方法是:打电话给中国电信投诉,投诉“增值业务部门”增加的强行广告,要求其去除“PUSH 强推广告业务”,特别要强调,从PUSH广告业务测试中去掉自己的ADSL帐号,这个招数我以前用过,但是似乎时间是有限的,过一段时间电信又会继续投放广告。
我现在使用中国电信的ADSL宽带,每月要交168元,中国电信还通过这种恶心的广告阻止我使用Chrome浏览器上网,中国电信可真是太邪恶了。

linux命令手册Txt版[请复制到记事本保存]

1
文件管理
#
ls
ls -a
列出当前目录下的所有文件,包括以.头的隐含文件
文件管理
#
ls
ls -l或ll
列出当前目录下文件的详细信息
[url=http://www.xt-benet.meibu.com/admin_main.aspx][/url]
文件管理
#
pwd
pwd
查看当前所在目录的绝对路经
文件管理
#
cd
cd ..
回当前目录的上一级目录
文件管理
#
cd
cd –
回上一次所在的目录
文件管理
#
cd
cd ~ 或 cd
回当前用户的宿主目录
文件管理
#
cd
cd ~用户名
回指定用户的宿主目录
2
文件管理
#
mkdir
mkdir 目录名
创建一个目录
文件管理
#
mkdir
mkdir ?p
递归式去创建一些嵌套目录
文件管理
#
rmdir
Rmdir 空目录名
删除一个空目录
3
文件管理
#
rm
rm 文件名 文件名
删除一个文件或多个文件
文件管理
#
rm
rm -rf 非空目录名
递归删除一个非空目录下的一切,不让提式-f
4
文件管理
#
cat
cat文件名
一屏查看文件内容
5
文件管理
#
more
more文件名
分页查看文件内容
6
文件管理
#
less
less 文件名
可控分页查看文件内容
7
文件管理
#
grep
grep字符 文件名
根据字符匹配来查看文件部分内容
8
文件管理
#
mv
mv 路经/文件 /经/文件
移动相对路经下的文件到绝对路经下
文件管理
#
mv
mv 文件名 新名称
在当前目录下改名
Array
文件管理
#
cp
cp /路经/文件 ./
移动绝对路经下的文件到当前目录下
10
文件管理
#
find
find 路经 -name "字符串"
查找路经所在范围内满足字符串匹配的文件和目录
11
文件管理
#
ln
ln 源文件 链接名
创建当前目录源文件的硬链接
ln /home/test /usr/test1
在/usr下建立/home/test的硬链接
12
文件管理
#
ln
Ln -s a b
创建当前目录下a的符号链接b
13
文件管理
#
touch
touch file1 file2
创建两个空文件
14
磁盘管理
#
df
df
用于报告文件系统的总容量,使用量,剩余容量。
15
磁盘管理
#
du
du -b /home
查看目前/HOME目录的容量(k)及子目录的容量(k)。
16
磁盘管理
#
fdisk
fdisk -l
查看系统分区信息
17
磁盘管理
#
fdisk
fdisk /dev/sdb
为一块新的SCSI硬盘进行分区
18
磁盘管理
#
mkfs.ext3
Mkfs.ext3 /dev/sdb1
为第一块SCSI硬盘的第一主分区格式化成
ext3的文件系统
mkfs.ext2
Mkfs.ext2/dev/sdb2
格式化成ext2文件系统
1Array
磁盘管理
#
mount
mount -t 文件系统类型 设备路经 访问路经
磁盘管理
#
文件系统类型
IsoArray660
光驱文件系统
vfat
Fat文件系统(windows)
挂载光驱
#
mount ?t isoArray660 /dev/cdrom /mnt/cdrom
挂载FAT
#
mount ?t vfat /dev/hda5 /mnt/cdrom
挂第一个ide的第五个逻辑分区
17
磁盘管理
#
Umount /mnt/cdrom
卸载/mnt/cdrom为空
18
文件权限
#
chmod
chmod u+s file
为file的属主加上特殊权限
chmod g+r file
为file的属组加上读权限
chmod o+w file
为file的其它用户加上写权限
chmod a-x file
为file的所有用户减去执行权限
chmod 765 file 为file的属主设为完全权限,属组设成读写权,其它用户具有读和执心权限
1Array
文件权限
#
chown
chown root /home
把/home的属主改成root用户
20
文件权限
#
chgrp
chgrp root /home
把/home的属组改成root组
www Says:
八月 1st, 2006 at 10:04 am
🙂 ~
21
打印管理
#
redhat-config-printer-tui
进入安装打印机界面
22
打印管理
#
lp
lp ?d hptr file
打印file到hptr的打印机上
23
打印管理
#
lpq
Lpq ?P 打印机名
查看打印机的状态
24
打印管理
#
lprm
Lprm ?P 打印机名 a
删除打印机内的打印作业
25
打印管理
#
disable
Disable ?r "changing paper" HPtr
禁用打印机并提示原因
26
打印管理
#
enable
Enable HPtr
重新启用被禁用的
27
用户管理
#
useradd
Useradd
创建一个新的用户
28
用户管理
#
groupadd
Groupadd 组名
创建一个新的组
2Array
用户管理
#
passwd
Passwd 用户名
为用户创建密码
30
用户管理
#
Passwd -d
Passwd -d用户名
删除用户密码也能登陆
31
用户管理
#
Passwd -l
Passwd -l用户名
锁定账号密码
32
用户管理
#
Passwd -u
Passwd -u用户名
解锁账号密码
33
用户管理
#
Passwd -S
Passwd -S用户名
查询账号密码
34
用户管理
#
Usermod -l
Usermod -l 新用户名 老用户名
为用户改名
35
用户管理
#
Usermod -L
Usermod -L 要锁定用户名
锁定用户登陆
36
用户管理
#
Usermod -U
Usermod ?U解锁用户名
解锁用户登陆
37
用户管理
#
Usermod -u
Usermod ?u 501用户名
改变用户UID
38
用户管理
#
Userdel
Userdel?r 用户名
删除用户一切
3Array
用户管理
#
Groupmod -n
Groupmod ?n新用户名 老用户名
为组改名
40
用户管理
#
Groupmod -g
Groupmod ?g 501 组名
改变组GID
41
用户管理
#
groupdel
Groupdel组名 先应删它的用户
删除组
42
用户管理
#
gpasswd -a
gpasswd -a 用户名 组名
增加用户到组
43
用户管理
#
Id
id 用户名
查用户信息
44
软件管理
#
rpm -qa
rpm ?qa | less
查询已安装RPM
45
软件管理
#
rpm ?qa | grep ftp
查询指定RPM
46
软件管理
#
rpm -q
rpm -q 已安装的RPM包
查是否安装
47
软件管理
#
rpm -q telnet-server
查看telnet服务器包
48
软件管理
#
rpm -qi
rpm ?qi 软件包名称
查看软件的描述信息
4Array
软件管理
#
rpm -ql
rpm ?ql软件包名称
查询软件包的文件列表
50
软件管理
#
rpm -qf
rpm ?qf软件包名称
查询某个文件所属的软件包
51
软件管理
#
rpm -qp
rpm ?qp软件包全名
查询未安装的软件包信息
52
软件管理
#
rpm -e
rpm ?e 软件包名称
删除具体的软件包
53
软件管理
#
rpm -U
rpm ?Uvh软件包全名
升级软件包并显示过程
54
软件管理
#
rpm -ivh
rpm ?ivh 软件包全名
安装软件包并显示过程
55
软件管理
#
rpm -V
rpm ?V软件包名称
验证软件包的大小,类型等
56
软件管理
#
tar
-c 创建包 ?x 释放包 -v 显示命令过程 ?z 代表压缩包
57
软件管理
#
tar -cf
tar ?cvf benet.tar /home/benet
把/home/benet目录打包
58
软件管理
#
tar -czf
tar ?zcvf benet.tar.gz /mnt
把目录打包并压缩
5Array
软件管理
#
tar ?tf
tar ?tf benet.tar
看非压缩包的文件列表
60
软件管理
#
tar ?tzf
tar ?tf benet.tar.gz
看压缩包的文件列表
61
软件管理
#
tar ?xf
tar ?xf benet.tar
非压缩包的文件恢复
62
软件管理
#
tar ?zxvf
tar ?zxvf benet.tar.gz
压缩包的文件解压恢复
63
软件管理
#
tar -jxvf
tar ?jxvf benet.tar.bz2
64
软件管理
#
diff
diff file1 file2 > 补丁名.patch
为新旧文件生成补丁文件
65
软件管理
#
diff
diff file1 file2
比较两个文件的区别
66
软件管理
#
Patch
Patch file补丁名.patch
打补丁
67
软件管理
#
./configure ?prefix=/usr/local/
编译前配置
68
软件管理
#
make
编译
6Array
软件管理
#
make install
安装编译好的源码包

www Says:
八月 1st, 2006 at 10:10 am
🙂 ~~
70
启动管理
#
reboot
Init 6
重启LINUX系统
71
启动管理
#
Halt
Init 0
Shutdown ?h now
关闭LINUX系统
72
启动管理
#
runlevel
显示系统运行级
73
启动管理
#
Init [0123456]
改变系统运行级,7种
74
启动管理
#
Chkconfig ?-list [服务名称]
查看服务的状态
75
启动管理
#
Chkconfig ?-level on|off|set
设置服务的启动状态
76
启动管理
#
Chkconfig on|off|set
设置非独立服务启状态
77
进程管理
#
Top动态
Ps-aux静态
进程树pstree
查看系统进程
78
进程管理
#
程序名 &
后台运行程序
7Array
进程管理
#
fg
把后台运行的进程调回前台
80
进程管理
#
bg
把前台运行进程调到后台
81
进程管理
#
renice
Renice +1 180
把180号进程的优先级加1
82
进程管理
#
kill
Kill PID
终止某个PID进程
83
进程管理
#
at
at 5pm + 3 days
/bin/ls
指定三天后下午5:00执行/bin/ls
84
进程管理
#
crontab
Crontab -e
用VI的形式来编辑自动周期性任务
85
进程管理
#
crontab
Crontab -l
查看自动周期性任务
86
进程管理
#
crontab
Crontab -r
删除自动周期性任务
87
进程管理
#
crond
Service crond
马上启动自动周期性服务
Service crond
www Says:
八月 1st, 2006 at 10:13 am
:D 实现磁盘配额
(注安装LINUX时建立/home分区)
目标:对用户user在/home目录上实现soft limit为5k,hard limit 为10k的磁盘配额
实现步骤:
1. 修改包含/home的行, #vi /etc/fstab, 改为:defaults,usrquota。也就是增加usrquota项。然后保存退出。
2、卸载/home目录 #umount /home
3. 挂接/home目录 #mount /home
4、增加用户zhao #useradd zhao
5、修改密码 #passwd zhao
6、生成关于/home目录的quota信息 # quotacheck -cmug /home
#quotacheck -vu /home
7、查看所有用户的信息 #repquota -au
8、设置配额 #edquota -u zhao
将soft 和hard 分别改为5和10
Array、保存并退出 #wq!
10、修改时间 #edquota -t
11、 #wq!
12.开启/home上的磁盘配额功能 #quotaon /home
13.查询配额 #quota -u zhao
14.验证配额 #su – zhao

UNIX下的编辑器VI命令总结

文本编辑器是所有计算机系统中最常用的一种工具。UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi,而vi命令繁多,论坛里好像这方面的总结不多,以下稍做总结,以资共享!渴望更正和补充!
进入vi的命令
vi filename :打开或新建文件,并将光标置于第一行首
vi +n filename :打开文件,并将光标置于第n行首
vi + filename :打开文件,并将光标置于最后一行首
vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
vi filename….filename :打开多个文件,依次进行编辑
移动光标类命令
h :光标左移一个字符
l :光标右移一个字符
space:光标右移一个字符
Backspace:光标左移一个字符
k或Ctrl+p:光标上移一行
j或Ctrl+n :光标下移一行
Enter :光标下移一行
w或W :光标右移一个字至字首
b或B :光标左移一个字至字首
e或E :光标右移一个字至字尾
) :光标移至句尾
( :光标移至句首
}:光标移至段落开头
{:光标移至段落结尾
nG:光标移至第n行首
n+:光标下移n行
n-:光标上移n行
n$:光标移至第n行尾
H :光标移至屏幕顶行
M :光标移至屏幕中间行
L :光标移至屏幕最后行
0:(注意是数字零)光标移至当前行首
$:光标移至当前行尾
屏幕翻滚类命令
Ctrl+u:向文件首翻半屏
Ctrl+d:向文件尾翻半屏
Ctrl+f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
插入文本类命令
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行
删除命令
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl+u:删除输入方式下所输入的文本
搜索及替换命令
/pattern:从光标开始处向文件尾搜索pattern
?pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
:s/p1/p2/g:将当前行中所有p1均用p2替代
:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
:g/p1/s//p2/g:将文件中所有p1均用p2替换
选项设置
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl+I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带“”的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息
最后行方式命令
:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下
:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下
:n1,n2 d :将n1行到n2行之间的内容删除
:w :保存当前文件
:e filename:打开文件filename进行编辑
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:!command:执行shell命令command
:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入
:r!command:将命令command的输出结果放到当前行
寄存器操作
“?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
“?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
“?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。

opencart开发架构分析[转]

1. opencart的系统架构
1.1. 架构分析
opencart是有自己的开发架构的,其架构的核心都在systemengine 下,访问控制统一用 根目录下的 index.php 来协调。
Route 就是起到一个中转器的作用,它会根据你的Route目录去找到它要执行的方法,比如:

index.php?route=account/login

根据这个route,op的框架会找到Controller下的Account里的Login.php, 注意login.php的类名一定是这种格式的

ControllerAccoutLogin{…}

否则Op就识别不了目录,route=account/login 会执行类的默认方法:index
如果要指明执行那个方法,则在login后面再加上

route=account/login/你定义的方法名

并且在login.php 里定义你要执行的方法。
同理,Op里 load 语言包和model等都是以这种机制为基础的。请结合程序,应该是比较好理解的。
至于View层,Op都是把要显示的数据加载到 this->data里去的,这样就可以用 $变量名 在页面上显示变量了。
1.2. Op系统配置文件 (这段是引用别人的。。。找不到出处了 – – 作者看到请联系我)
在Op的目录下,可以发现一个 Config.php文件,这里是配置一些OP要使用到的配置路径,并且是每个单独项目里都有一个单独的配置(这点要注意),比如admin和catalog下就分别有这个文件。
OpenCart是使用面向对象编程的,同时又使用了MVC的设计思想,因此在解读其源代码时是看不到过程式的代码的。同时它把MVC框架部分单独放在library目录中,这个部分的内容一般是不作修改的。就象你显式地使用其它框架编程一样。
Engine下有一个装配器文件:loader.php,这个文件中只有一个类:loader,实际上是一个调度程序,框架中的其它组件,如controller,module,session,cache,language统统由它装载调度。
为了让系统运行起来, 象所有的PHP程序一样,OpenCart需要把系统中的一些重要的参数从config.php中,对于这个文件,按惯例,使用一句:

require(‘config.php’);

连接数据库的DSN参数和相关目录设置就可用了,下面有必要将config.php文件列表在下,这有利于我们理解OpenCart的设计思想:

// HTTP
define(‘HTTP_SERVER’, ‘http://localhost/cnopencart/’);
define(‘HTTP_IMAGE’, ‘http://localhost/cnopencart/image/’);
// HTTPS
define(‘HTTPS_SERVER’, ”);
define(‘HTTPS_IMAGE’, ”);
// DIR
define(‘DIR_CACHE’, ‘C:wampwwwcnopencart/cache/’);
define(‘DIR_DOWNLOAD’, ‘C:wampwwwcnopencart/download/’);
define(‘DIR_IMAGE’, ‘C:wampwwwcnopencart/image/’);
define(‘DIR_LIBRARY’, ‘C:wampwwwcnopencart/library/’);
define(‘DIR_MODEL’, ‘C:wampwwwcnopencartcatalog/model/’);
define(‘DIR_CONTROLLER’, ‘C:wampwwwcnopencartcatalog/controller/’);
define(‘DIR_LANGUAGE’, ‘C:wampwwwcnopencartcatalog/language/’);
define(‘DIR_EXTENSION’, ‘C:wampwwwcnopencartcatalog/extension/’);
define(‘DIR_TEMPLATE’, ‘C:wampwwwcnopencartcatalog/template/’);
// DB
define(‘DB_HOST’, ‘localhost’);
define(‘DB_USER’, ‘root’);
define(‘DB_PASSWORD’, ‘111111’);
define(‘DB_NAME’, ‘opencart’);
?>

与别的系统可能有些不同是的,OpenCart有一个config类用来从别的设置文件或数据库里存取数据,这些数据也是在程序一开始运行就需要的,因此第一个由loader装载的就是config类,装载config类就只简单地用了一句:

// Config
$config =$this->load->….

其它所有的对象这是以这种方法来进行管理。
2. Op的加载器
2.1. 系统加载
在System下有一些公共类,所以的基础类和公共类都是通过index.php 去加载的,这样你就可以去加载你需要的类和文件了。比如:

$loader = new Loader();
Registry::set(‘load’, $loader);

然后你就可以在系统里调用Load方法去加载需要的Model和language 文件了。调用方式如下:

$this->load->….

Op里就是通过这个方法来注册他所需要的资源的。

php 序列化(serialize)与反序列化(unserialize)

把复杂的数据类型压缩到一个字符串中
serialize() 把变量和它们的值编码成文本形式
unserialize() 恢复原先变量
eg:
$stooges = array(‘Moe’,’Larry’,’Curly’);
$new = serialize($stooges);
print_r($new);echo ”
“;
print_r(unserialize($new));
结果:a:3:{i:0;s:3:”Moe”;i:1;s:5:”Larry”;i:2;s:5:”Curly”;}
Array ( [0] => Moe [1] => Larry [2] => Curly )
当把这些序列化的数据放在URL中在页面之间会传递时,需要对这些数据调用urlencode(),以确保在其中的URL元字符进行处理:
$shopping = array(‘Poppy seed bagel’ => 2,’Plain Bagel’ =>1,’Lox’ =>4);
echo ‘<a href=”next.php?cart=’.urlencode(serialize($shopping)).'”>next</a>’;
margic_quotes_gpc和magic_quotes_runtime配置项的设置会影响传递到unserialize()中的数据。
如果magic_quotes_gpc项是启用的,那么在URL、POST变量以及cookies中传递的数据在反序列化之前必须用stripslashes()进行处理:
$new_cart = unserialize(stripslashes($cart)); //如果magic_quotes_gpc开启
$new_cart = unserialize($cart);
如果magic_quotes_runtime是启用的,那么在向文件中写入序列化的数据之前必须用addslashes()进行处理,而在读取它们之前则必须用stripslashes()进行处理:
$fp = fopen(‘/tmp/cart’,’w’);
fputs($fp,addslashes(serialize($a)));
fclose($fp);
//如果magic_quotes_runtime开启
$new_cat = unserialize(stripslashes(file_get_contents(‘/tmp/cart’)));
//如果magic_quotes_runtime关闭
$new_cat = unserialize(file_get_contents(‘/tmp/cart’));
在启用了magic_quotes_runtime的情况下,从数据库中读取序列化的数据也必须经过stripslashes()的处理,保存到数据库中的序列化数据必须要经过addslashes()的处理,以便能够适当地存储。
mysql_query(“insert into cart(id,data) values(1,'”.addslashes(serialize($cart)).”‘)”);
$rs = mysql_query(‘select data from cart where id=1’);
$ob = mysql_fetch_object($rs);
//如果magic_quotes_runtime开启
$new_cart = unserialize(stripslashes($ob->data));
//如果magic_quotes_runtime关闭
$new_cart = unserialize($ob->data);
当对一个对象进行反序列化操作时,PHP会自动地调用其__wakeUp()方法。这样就使得对象能够重新建立起序列化时未能保留的各种状态。例如:数据库连接等。

CentOS 5.5开通Ftp和Telnet服务配置

在安装好CentOS以后,需要设置Ftp和Telnet服务文件,才能启动Ftp和Telnet服务,可以通过远程控制进行开启。
1.1、进入终端命令模式,用root用户登录;
1.2、开启ftp服务。

cd /etc/xinetd.d
#编辑ftp服务的配置文件gssftp:
vi gssftp
#将 修改两项内容:
server_args = -l –a # 去掉-a 改为server_args = -l
disable=yes #改为disable=no

1.3、开启telnet服务

cd /etc/xinetd.d
#察看telnet服务的配置文件krb5-telnet的设置:$ {! b7 r0 A8 d. z
#开启telnet服务设置
vi krb5-telnet
disable=yes # 改为disable=no,保存退出。

1.4、激活服务:
telnet /ftp 是挂在 xinetd 底下的,所以自然只要重新激活 xinetd 就能够将 xinetd 里头的设定重新读进来,所以刚刚设定的telnet /ftp自然也就可以被激活。
激活目录和命令:

cd /etc/rc.d/init.d/
service xinetd restart

有时会提示命令不存在,需要加上命令的路径

[root@localhost init.d]# service xinetd resart
bash: service: command not found
[root@localhost init.d]# /sbin/service xinetd restart

若提示xinetd: 未被识别的服务,则说明/etc/rc.d/init.d下无xinetd包

[root@localhost init.d]# yum -y install xinetd* #下载xinetd包
[root@localhost init.d]# service xinetd resart #重新启动FTP、Telnet服务

这样既可ftp登陆到服务器

PHP高级工程师的面试题【转】

这些题目都能搞定,你就是高高手了~

1. 基本知识点
HTTP协议中几个状态码的含义:503 500 401 200 301 302。。。
Include require include_once require_once 的区别.
PHP/Mysql中几个版本的进化史,比如mysql4.0到4.1,PHP 4.x到5.1的重大改进等等。
HEREDOC介绍
写出一些php魔幻方法;
一些编译php时的configure 参数
向php传入参数的两种方法。
(mysql)请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别;
error_reporting 等调试函数使用
您是否用过版本控制软件? 如果有您用的版本控制软件的名字是?
posix和perl标准的正则表达式区别;
Safe_mode 打开后哪些地方受限.
写代码来解决多进程/线程同时读写一个文件的问题。
写一段上传文件的代码。
Mysql 的存储引擎,myisam和innodb的区别。
2. web 架构,安全,项目经验
介绍xdebug,apc,eAccelerator,Xcache,Zend opt的使用经验。
使用mod_rewrite,在服务器上没有/archivers/567.html这个物理文件时,重定向到index.php?id=567 ,请先打开mod_rewrite.
MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
写出一种排序算法(原理),并说出优化它的方法。
请简单阐述您最得意的开发之作
对于大流量的网站,您采用什么样的方法来解决各页面访问量统计问题
您是否用过模板引擎? 如果有您用的模板引擎的名字是?
请介绍Session的原理,大型网站中Session方面应注意什么?
测试php性能和mysql数据库性能的工具,和找出瓶颈的方法。
正则提出一个网页中的所有链接.
介绍一下常见的SSO(单点登陆)方案(比如dedecms整合discuz的passport)的原理。
您写过的PHP框架的特点,主要解决什么问题,与其他框架的不同点。
大型的论坛/新闻文章系统/SNS网站在性能优化上有什么区别?
相册类应用:要求在浏览器中能同时选中并上传多个文件,图片要求能剪裁,压缩包在服务器端解压。能上传单个达50M的文件。上传过程中有进度条显示。每个图片能生成四种大小缩略图,视频文件要转成flv供flash播放。叙述要涉及的各类开源软件和简单用途。
一群猴子排成一圈,按1,2,…,n依次编号。然后从第1只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,在把它踢出去…,如此不停的进行下去,直到最后只剩下一只猴子为止,那只猴子就叫做大王。要求编程模拟此过程,输入m、n, 输出最后那个大王的编号。用程序模拟该过程。
3. unix/linux 基本使用
linux下查看当前系统负载信息的一些方法。
vim的基本快捷键。
ssh 安全增强方法;密码方式和rsa key 方式的配置。
rpm/apt/yum/ports 装包,查询,删除的基本命令。
Makefile的基本格式,gcc 编译,连接的命令,-O0 和-O3区别。
gdb,strace,valgrind的基本使用.
4. 前端,HTML,JS
css盒模型。
javascript中的prototype。
javascript中this对象的作用域。
IE和firefox事件冒泡的不同。
什么是怪异模式,标准模式,近标准模式。
DTD的定义
IE/firefox常用hack.
firefox,IE下的前端js/css调试工具。