Submitted by admin on 2010, November 29, 7:11 PM
制做方法是使用cat 命令将执行脚本和打包文件同时放到一个.bin的文件里
这样安装的时候只要使用一个包,直接执行该包即可安装完毕,简单方便。
例:制作安装apache、mysql的安装脚本包
1.将源码包先打包
#tar zcvf packages.tar.gz httpd-2.0.63.tar.bz2 mysql-5.0.33.tar.gz
2.编写脚本如下:
# cat install.sh
#!/bin/bash
dir_tmp=/root/installapache
mkdir $dir_tmp
sed -n -e '1,/^exit 0$/!p' $0 > "${dir_tmp}/packages.tar.gz" 2>/dev/null
cd $dir_tmp
tar zxf packages.tar.gz
tar jxf httpd-2.0.63.tar.bz2
cd httpd-2.0.63
./configure --prefix=/tmp/apache2
make
make install
cd $dir_tmp
tar zxf mysql-5.0.33.tar.gz
cd mysql-5.0.33
./configure --with-charset=gbk --with-extra-charsets=binary,latin1,gb2312 --localstatedir=/home/db --with-mysqld-ldflags=-all-static -enable-assembler --with-innodb --prefix=/tmp/mysql5
make
make install
exit 0
#cat install.sh packages.tar.gz >install.bin
这样就生成install.bin的安装文件,改文件是由shell脚本和二进制合成的。前半部分是脚本后半部分是二进制文件,用strings等二进制查看命令可以看到
最主要的是下面这句,是将二进制文件从.bin文件里分离出来
sed -n -e '1,/^exit 0$/!p' $0 > "${dir_tmp}/packages.tar.gz" 2>/dev/null
安装的时候直接执行
sh install.bin
安装这个方法可以将我们平时常使用的安装脚本化,然后打包。以后使用就方便了。
linux | 评论:0
| Trackbacks:0
| 阅读:972
Submitted by admin on 2010, November 20, 5:30 PM
虽说hypervm在年中的时候由于安全漏洞引起了轩然大波,但做为免费的VPS管理工具,还是很方便的。自己注意一些安全配置,也应该无大障。另外,目前hypervm已经开源,相信未来会更光明的。
hypervm的安装还是很简单的,下面是官方的命令说明:
$ setenforce 0
$ wget http://download.lxcenter.org/download/hypervm/production/hypervm-install-master.sh
$ sh ./hypervm-install-master.sh –virtualization-type=xen/openvz/NONE
You have to explicitly specify which virtualization type you want using the option –virtualization-type as either xen or openvz or NONE. If you want to install hypervm on an existing system, just use virtualization-type=NONE, which will install just hyperVM components, and skip the virtualization componetns entirely. When you run the command, you will presented with a menu from up2date, on which you can press <Enter>
值的一提的是,hypervm安装时会下载一些的操作系统的安装模板,下载时间会比较长,如果暂时不需要这些模板,可以通过在安装命令行加入skip-ostemplate参数。比如:
# sh ./hypervm-install-master.sh –virtualization-type=openvz –skip-ostemplate=true
--------------------------------------
HyperVM安装手记(XEN篇)
从http://download.lxlabs.com/?software=hypervm选择下载需要的安装脚本(master的地址为http://download.lxlabs.com/download/hypervm/production/hypervm-install-master.sh),在服务器上运行sh ./hypervm-install-master.sh –virtualization-type=xen
安装过程是会自动完成的,但在这之前,需要先将需要的虚拟化软件装好。安装完HyperVM后init 6重启,然后通过浏览器访问http://<server address>:8888就能操作虚拟机了。
需要注意的是,HyperVM需要一个未建立分区的LVM卷来存放XEN虚拟机,并且这个操作要在安装HyperVM之前完成,虽然可以在安装后通过管理界面添加,但那比较麻烦。
对于fedora 6/centos 5,其xen安装可能会有些后遗症,因此,在这些系统中安装完HyperVM后应根据http://lxlabs.com/software/hypervm/install-xen/中的方法对系统进行一些调整。
推荐一个建立LVM卷的方法:http://book.51cto.com/art/200909/149041.htm
---------------------------------------
HyperVM安装手记(OpenVZ篇)
首先要说一说OpenVZ的安装
cd /etc/yum.repos.d
wget http://download.openvz.org/openvz.repo
yum install ovzkernel
即可完成安装。重启后,从http://download.lxlabs.com/?software=hypervm选择下载需要的安装脚本(master的地址为http://download.lxlabs.com/download/hypervm/production/hypervm-install-master.sh),在服务器上运行sh ./hypervm-install-master.sh –-virtualization-type=openvz
安装过程是会自动完成的,安装完HyperVM后init 6重启,然后通过浏览器访问http://<server address>:8888就能操作虚拟机了。
最后,推荐个关于OpenVZ安装的页面http://linux.chinaunix.net/docs/2006-11-13/3187.shtml
虚拟化 | 评论:0
| Trackbacks:0
| 阅读:1174
Submitted by admin on 2010, November 20, 9:14 AM
变量替换:
一:简单赋值和替换
a=bcd
$ echo $a
bcd
$ echo ${a}
bcd
二:变量扩充
除了shell中的meta,其它的[^a-zA-Z0-9_]几乎都可以作单词边界。
同sed中关于单词边界[^a-zA-Z0-9_]的描述。
http://bbs.chinaunix.net/forum/24/20040825/393964.html
这些功能有时候会在程序中有意想不到的作用!
例如:
$ a=bcd
$ echo ${a}.b
bcd.b
$ echo $a.php
bcd.php
$ echo $a%b
bcd%b
$ echo /$a/bc
/bcd/bc
对于shell中的meta字符,则backslash。
$ echo $a\*b
bcd*b
三:变量中的变量
$ a=bcd
$ b=efg
$ c=$a$b
$ echo $c
bcdefg
$ d=$c.ghi
$ echo $d
bcdefg.ghi
思考:若变量互相嵌套,会怎样呢?
四:变量的特异功能
到网中人的啦!(ps:重写真是没激情啊)
file=/dir1/dir2/dir3/my.file.txt
我们可以用 ${ } 分别替换获得不同的值:
${file#*/}:从变量file的字符串左边开始,删除字符直到第一个“/”:dir1/dir2/dir3/my.file.txt
${file##*/}:从变量file的字符串左边开始,删除字符直到最后一个“/”:my.file.txt
${file#*.}:从变量file的字符串左边开始,删除字符直到第一个“.”:file.txt
${file##*.}:从变量file的字符串左边开始,删除字符直到最后一个“.”:txt
其实,在“#”后面,无非就是一个匹配问题,不限于两个,你可以放任意个字符,还可以用shell中另外的通配符“?”“[…]”“[!…]”,例如:
$ echo ${file#????}
1/dir2/dir3/my.file.txt
$ echo ${file#*[0-9]}
/dir2/dir3/my.file.txt
$ echo ${file#/dir1/dir[0-9]}
/dir3/my.file.txt
“#”:相当于最小匹配,遇到一个最小的符合其后表达式的字符串(单个或多个)即中止匹配动作;
“##”:相当于最大匹配,它尽可能的匹配更多的字符。
我们可以拿“*”来说明:
* 在shell中表示匹配任何符号包括空。当它在只有一个 # 的变量替换中,受最小匹配的影响,它不会匹配任何可打印字符,只匹配一个空,也就是什么也不匹配,你完全可以忽略它的存在;
当在有两个 ## 的变量替换中,受最大匹配的影响,一个 * 表示匹配整个字符串。
如果想匹配字符“*”时,要在“*”前加一个“\”,其后的“*”失去通配符的功能。
但是还有一种例外情况(请接着看)
例:
$ file2=abcd.efgh.ijkl.oopp
$ echo ${file2#*.*.*.*}
$ echo ${file2##*.*.*.*}
想想上面两个的输出是什么?
$ echo ${file2#*.*.*.*}
oopp
$ echo ${file2##*.*.*.*}
空
??知道为什么吗?因为:“*”匹配任何符号包括空。遇到一个“#”时,最后一个“*”就匹配“空”去了。看下面的:
$ echo ${file2#*.*.*.?}
opp
$ echo ${file2#*.*.*.?*}
opp
$ echo ${file2##*.*.*.?}
opp
$ echo ${file2##*.*.*.?*}
空
do you know?
$ echo $file3
*ab*de*cd
看看下面将输出什么?
$ echo ${file3#*ab}
*de*cd
$ echo ${file3#**}
*ab*de*cd
$ echo ${file3##**}
空
$ echo ${file3#\*ab}
*de*cd
$ echo ${file3#\**}
ab*de*cd
$ echo ${file3##\**}
空
$ echo ${file3#*a}
b*de*cd
$ echo ${file3#\*a}
b*de*cd
不知各位有没有发现,“*”在一个“#”中时,并不一定代表“空”,它可能代表一个字符“*”也可能代表其他的什么字符,如上例的:
“$ echo ${file3#*a}”输出为“b*de*cd”,其实这还是符合最小匹配理论的。这个表达式的意思是:从变量file3的字符串左边开始删除字符,直到遇到第一个字符“a”。所以不要和“$ echo ${file3#\*a}”混淆,虽然两个结果是一样,但意思是不一样的。
再举几个例子,相信大家更容易理解这段话:
$ echo $file3
*ab*de*cd*ab*de //注意:出现两个“*ab”
$ echo ${file3#*a}
b*de*cd*ab*de //删除字符,直到出现第一个“a”,“*”为通配符
$ echo ${file3##*a}
b*de //删除字符,直到出现第二个“a”,“*”为通配符
$ echo ${file3##\*a}
b*de*cd*ab*de //删除字符串“*a”,“*”在“\”表示字符“*”
除了通配符“*”比较难理解一点,其他的shell通配符就都很容易了。
至于“%”,和“#”不同的地方,就是从变量字串右部开始。
${file%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“/” :/dir1/dir2/dir3
${file%%/*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“/”:(空值)
${file%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)第一个“.”:/dir1/dir2/dir3/my.file
${file%%.*}:从右部开始拿掉字符,直到遇到(从右部数起的)最后一个“.”:/dir1/dir2/dir3/my
单匹配格式${var/被替换字符/替换字符}
全匹配格式${var//被替换字符/替换字符}
例子:
[test]# echo ${ip/./@}
324@2354.329.5324
[test]# echo ${ip/./,}
324,2354.329.5324
[test]# echo ${ip/./ }
324 2354.329.5324
[test]# echo ${ip//./ }
324 2354 329 5324
[test]# echo ${ip//./,}
324,2354,329,5324
[test]# echo ${ip//./@}
324@2354@329@5324
总结一点结果.${}中:
/代表字符串的替换.
:代表字符串的提取.
#和%公别代表左截和右截.
linux | 评论:0
| Trackbacks:0
| 阅读:928
Submitted by admin on 2010, November 12, 9:24 PM
linux大硬盘分区parted
我们来看一下两种分区表
MBR分区表:(MBR含义:主引导记录)
所支持的最大卷:2T (T; terabytes,1TB=1024GB)
对分区的设限:最多4个主分区或3个主分区加一个扩展分区(扩展分区中支持无限制的逻辑驱动器)
GPT分区表:(GPT含义:GUID分区表)
支持最大卷:18EB,(E:exabytes,1EB=1024TB)
每个磁盘最多支持128个分区
假设要用parted对/dev/sdb(大小为6000G)进行分区操作:
1、进入系统执行:
#parted /dev/sdb
2、建立磁盘label:
mklabel GPT
3、按p键,查看磁盘可用空间,显示单位为M。6000G应该显示大致
为: /dev/sdb 的磁盘几何结构:0.000-6000000.000 兆字节
4、创建分区:
在(parted)后输入:
mkpart并按照提示操作
分区类型? primary/主分区/extended/扩展分区? p (如果要创建扩展分区 此处
输入e)
文件系统类型? [ext2]? (这里直接回车,分区创建完毕后通过mkfs.ext3
/dev/sdb*建立文件系统)
起始点?0
结束点?-1
5、按p键查看刚创建的分区是否已经成功。
6、如果成功,键入quit退出parted。
7、使用mkfs.ext3 /dev/sdb1 来创建文件系统
fdisk命令虽然很交互,操作也方便,但是对于大于2T的磁盘无法操作,如果我们想用大于2T的磁盘怎么办?可以把磁盘转化为GPT格式。
GPT格式的磁盘相当于原来MBR磁盘中原来保留4个partition table的4*16个字节只留第一个16个字节,类似于扩展分区,真正的partition table在512字节之后,GPT磁盘没有四个主分区的限制。
但fdisk不支持GPT,我们可以使用parted来对GPT磁盘操作。
parted功能很强大,既可用命令行也可以用于交互式
在提示符下输入parted就会进入交互式模式,如果有多个磁盘的话,我们需要运行select sdx x为磁盘,来进行磁盘的选择
parted>
parted>select sdb 假设磁盘为sdb
parted>mklable gpt 将MBR磁盘格式化为GPT
parted>mklable msdos 将GPT磁盘转化为MBR磁盘
parted>mkpart primary 0 100 划分一个起始位置为0大小为100M的主分区
parted>mkpart primary 100 200 划分一个起始位置为100M大小为100M的主分区
parted>print 打印当前分区
在parted里边不支持ext3的文件系统,所以如果要使用的话,要退出parted进行格式话
mkfs.ext3 /dev/sdx1
因为fdisk是不支持GPT磁盘,所以不要使用fdisk -l来查看X磁盘刚才分好的区,看不到的。
命令行的模式:
将硬盘转化为GPT磁盘后,执行下列命令
parted /dev/sdx mkpart primary 0 100 划分一个起始位置为0大小为100M的主分区
Acronym for GUID Partition Table
GPT was introduced for iA64 systems, to get around a fixed 32 bit issue (2 to the power of 32 is 4 billion times a 512 byte block equals 2 Terabytes) in the PC-BIOS Partition table. Partitions larger than 2 TB require using a GPT disklabel, which differs from the PC-BIOS Partition table in a number of ways:
* Is easily extensible.
* Can contain up to 128 primary partitions, as opposed to 4, so there's no need for extended partitions.
* Allows Partitions larger than 2 TB.
* Identifies Partitions with a GUID so you can reference that Partition even if disks are moved around.
* Identifies Partition type with a GUID, thus avoiding the type conflicts that plague the PC-BIOS Partition table format.
* Provides a 46(?) character UTF-16 partition label to identify Partitions.
* Has a "fake" MBR for backwards compatibility.
* Includes a CRC32 to detect corrupt Partition tables.
* Stores a backup Partition table at the end of the disk.
Most partitioning tools under Linux will fail to do anything sensible with a > 2 TB Partition. As of this writing, parted(8) is the only one that understands them and will let you set the GPT label on the disk.
There is a lot of information stating that you cannot boot off a GPT enabled device. Most of the claims imply that the fault is with LILO or GRUB not understanding GPT devices. We've not tested this, but GPT and traditional MBRs will coexist.
See also:
* Disk Sectors on GPT Disks from the MS Knowledge Base
所以在超过2TB时,我不能使用交互很好的Fdisk命令,只能磁盘转化为GPT格式。由于GPT格式的磁盘相当于原来MBR磁盘中原来保留4个 partition table的4*16个字节只留第一个16个字节,其它的类似于扩展分区,真正的partition table在512字节之后,所以对GPT磁盘表来讲没有四个主分区的限制。
对GPT磁盘分区表进行操作,我们要使用parted命令。其实parted功能很强大,它可以象fdisk一样既可用命令行也可以用于交互式.
下面我们就来实际操作吧,在提示符下输入parted就会进入交互式模式
# parted /dev/sdb
GNU Parted 1.8.1
Using /dev/sdb
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) mklabel gpt
将MBR磁盘格式化为GPT
(parted) mkpart primary 0 100
划分一个起始位置为0大小为100M的主分区
(parted) mkpart primary 100 200
划分一个起始位置为100M大小为100M的主分区
(parted) mkpart primary 0 -1
划分所有空间到一个分区
(parted) print
打印当前分区
(parted) quit
可能还会用到的一些命令
(parted) mklable msdos
如果要反过来.将GPT磁盘转化为MBR磁盘
在这样分完分区后,还要使用mkfs.ext3来进行格式化
#partprobe
#mkfs.ext3 -F /dev/sdb1
记的哦,因为fdisk是不支持GPT磁盘,所以使用fdisk -l来查看磁盘刚才的分区是没有用的.
命令行的模式:
将硬盘转化为GPT磁盘后,执行下列命令
parted /dev/sdx mkpart primary 0 100
##划分一个起始位置为0大小为100M的主分区
parted /dev/sdb
p
mklabel gpt
GPT
mkpart primary 0 -1
mkfs.ext3 /dev/sdb1
linux | 评论:0
| Trackbacks:0
| 阅读:1054
Submitted by admin on 2010, October 27, 10:11 PM
首先说明下,在写脚本时,记得要用vi写,其它的文本编辑器不要用,因为会出来许多不知名的字符。
个人认为在vi中输入(:set nu)显示行号,更加适合编辑。
如果eth1网卡上用来上外网,eth2是用来作内网共享上网。tc只能控制发送的数据量所以要写下载的话,只能写在eth2网卡上。
一,先记得清空eth2旧有队列,再作根队列进行绑定这个网卡
tc qdisc del dev eth2 root
tc qdisc add dev eth2 root handle 2: htb default 20
注:这里有一个默认就是选择2:20
二,作根类
tc class add dev eth2 parent 2:0 classid 2:1 htb rate 100kbit
这里也作了根类的限速,所以共享所能拥有的网速100k。这里的k可不是我们平时用的k,100kbit大概只能提供12k的下载速度,也就是如同我们拉了一根10M的光纤,实际下载的速度只有1.2M。这个关系也就是除个8这样。
注:htb是Hierarchy Token Bucket的缩写。通过在实践基础上的改进,它实现了一个丰富的连接共享类别体系。HTB可以通过TBF(Token Bucket Filter)令牌桶过滤器实现带宽限制,也能够划分类别的优先级。
三,作子类
tc class add dev eth2 parent 2:1 classid 2:50 htb rate 50kbit ceil 50kbit
tc class add dev eth2 parent 2:1 classid 2:100 htb rate 100kbit ceil 100kbit
tc class add dev eth2 parent 2:1 classid 2:20 htb rate 20kbit ceil 20kbit
这三个子类,都进行了限速而且不能借速,如果rate 128kbit ceil 384kbit 速率是128kbit,最高是384kbit,也就是它能借用(384-128)kbit ,但是这里有一点ceil的值最高可不能大于根类的大小。
四,作队列
tc qdisc add dev eth2 parent 2:50 handle 50: sfq perturb 10
tc qdisc add dev eth2 parent 2:100 handle 100: sfq perturb 10
tc qdisc add dev eth2 parent 2:20 handle 20: sfq perturb 10
这里的sfq perturb 10还可能是以下的几种形式:
第一种:[p|b]fifo先进先出只有一个参数:limit. pfifo是以数据包的个数为单位;bfifo是以字节数为单位。如:pfifo limit 2
第二种:red是Random Early Detection(随机早期探测)的简写。如果使用这种QDISC,当带宽的占用接近于规定的带宽时,系统会随机地丢弃一些数据包。它非常适合高带宽应用。
第三种:sfq是Stochastic Fairness Queueing(随机公平队列)的简写。是公平队列算法家族中的一个简单实现.它的精确性不如其它的方法,但是它在实现高度公平的同时,需要的计算量却很少。只有当你的出口网卡确实已经挤满了的时候,SFQ才会起作用,SFQ会频繁地改变散列算法,这也是公平的一个方面。sfq的perturb参数指多少秒后重新配置一次散列算法.如果取消设置,散列算法将永远不会重新配置(不建议这样做).10秒应该是一个合适的值:如tc qdisc add dev eth0 parent 2:10 handle 10: sfq perturb 10
第四种:tbf是Token Bucket Filter(令牌桶过滤器)的简写,适合于把流速降低到某个值。这个参数参考tc命令及参数
五,过滤器
tc filter add dev eth2 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.1.50/32 flowid 2:50
tc filter add dev eth2 protocol ip parent 2:0 prio 1 u32 match ip dst 192.168.1.100/32 flowid 2:100
tc filter add dev eth2 protocol ip parent 2:0 prio 3 u32 match ip dst 192.168.1.0/24 flowid 2:20
这里用u32的过滤器
还有一种是fw形式的过滤器,fw的写法
tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
另个还得在iptables 作fw标志。
一般出外网时才会用fw规则,因为内部IP地址在经过外网卡时会进行NAT,所以不能用源地址进行U32匹配,只能是FW规则进行流量标识。
iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.200/32 -j MARK --set-mark 1
iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.172/32 -j MARK --set-mark 1
iptables -A PREROUTING -t mangle -i eth2 -s 192.168.1.82/32 -j MARK --set-mark 1
tc filter add dev eth1 parent 1:0 protocol ip prio 3 handle 1 fw classid 1:20
iptables mark后的值也就是tc fw前的值
但是prio优先级一定不能相同,否则fw规则将失效
因为我没有做上传限速,所以没有用到fw.
这里有没有看到ip的形式是192.168.1.82/32 和192.168.1.0/24。前者表示192.168.1.82这样一个ip,后者却是表示192.168.1这样的一个整个c段的网络地址。
这里的ip不能写成192.168.1.25-82(想表示的意思是从192.168.1.25到192.168.1.82这里的所有ip)。我用了很多的方法,都做不到。如果要这样做的话,我只能用shell里做一个循环。
IPS=2#起始
IPE=253#结束
COUNTER=$IPS
while [ $COUNTER -le $IPE ]
do
语句 $COUNTER
COUNTER=` expr $COUNTER + 1 `
done
还有规则是提到的ip的电脑一起共用所设带宽
linux | 评论:0
| Trackbacks:0
| 阅读:1645
Submitted by admin on 2010, October 19, 10:42 PM
ftp传输数据是明文,弄个抓包软件就可以通过数据包来分析到账号和密码,为了搭建一个安全性比较高ftp,可以结合SSL来解决问题
SSL(Secure Socket Layer)工作于传输层和应用程序之间.作为一个中间层,应用程序只要采用SSL提供的一套SSL套接字API来替换标准的Socket套接字,就可以把程序转换为SSL化的安全网络程序,在传输过程中将由SSL协议实现数据机密性和完整性的保证.SSL取得大规模成功后,IETF将SSL作了标准化,并将其称为TLS(Transport Layer Security).Ftp结合SSL,将实现传输数据的加密,保证数据不被别人窃取
让vsftpd支持SSL,必须让OPENSSL≥0.9.6版本,还有就是本身vsftpd版本是否支持
查询vsftpd软件是否支持SSL
[root@localhost vsftpd]# ldd /usr/sbin/vsftpd |grep libssl
libssl.so.6 => /lib/libssl.so.6 (0xf7f27000) ==è说明此版本支持
如没有输出libssl.so.6 => /lib/libssl.so.6 (0xf7f27000)类似文本,说明此vsftpd版本不支持SSL
openssl req -x509 -nodes -days 365 -newkey rsa:1024 \-keyout /etc/vsftpd/vsftpd.pem \-out /etc/vsftpd/vsftpd.pem ==è生成vsftpd.pem 证书
vi /etc/vsftpd/vsftpd.conf ==è编辑主配置文件,添加以下参数ssl_enable=YES
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/vsftpd/vsftpd.pem
service vsftpd restart
下面是ssl参数一些定义,根据自己需求去修改
ssl_enable=yes/no //是否启用 SSL,默认为no
allow_anon_ssl=yes/no //是否允许匿名用户使用SSL,默认为no
rsa_cert_file=/path/to/file //rsa证书的位置
dsa_cert_file=/path/to/file //dsa证书的位置
force_local_logins_ssl=yes/no //非匿名用户登陆时是否加密,默认为yes
force_local_data_ssl=yes/no //非匿名用户传输数据时是否加密,默认为yes
force_anon_logins_ssl=yes/no //匿名用户登录时是否加密,默认为no
force_anon_data_ssl=yes/no //匿名用户数据传输时是否加密,默认为no
ssl_sslv2=yes/no //是否激活sslv2加密,默认no
ssl_sslv3=yes/no //是否激活sslv3加密,默认no
ssl_tlsv1=yes/no //是否激活tls v1加密,默认yes
ssl_ciphers=加密方法 //默认是DES-CBC3-SHA
ftp | 评论:0
| Trackbacks:0
| 阅读:1728
Submitted by admin on 2010, October 16, 5:43 PM
1.第一种:
<?php
header("Location: htto://www.wdlinux.cn");
?>
2.第二种:
和javascrīpt结合起来
echo "<script language=javascript>";
echo "location.href='www.wdlinux.cn';";
echo "</script>";
3.第三种:
echo("<meta http-equiv='refresh'content=0;URL='http://www.wdlinux.cn'>");
php | 评论:0
| Trackbacks:0
| 阅读:1030
Submitted by admin on 2010, October 16, 5:31 PM
session_register()出错的解决办法
错误提示:warning: unknown(): your script possibly relies on a session side-effect which
existed until php 4.2.3. please be advised that the session extension does not
consider global variables as a source of data, unless register_globals is
enabled. you can disable this functionality and this warning by setting
session.bug_compat_42 or session.bug_compat_warn to off, respectively. in unknown on line 0
1、php4.2以上版本不需要用session_register()注册session变量,直接用:
$_session["string"]=“string";
赋值。
2、用$_session["string"]获取变量值。
3、用$_session["string"][$n]可传递session数组。
两个测试页面:
//a.php
session_start();
echo $_session["x"]++;
//b.php
session_start();
echo $_session["x"];
运行a.php并不断刷新它,看看有什么结果
运行b.php看看能否在页面之间传送结果。
注意:a.php和b.php必须是同一个ie进程!
测试在register_globals = off下进行,一切正常。
php | 评论:0
| Trackbacks:0
| 阅读:1090