分类目录归档:未分类

php利用gd库给图片加透明水印

针对png做一下特殊处理,否则效果达不到,直接上代码:

/**
 * 给图片添加水印
 * @param filepath $src 待处理图片
 * @param filepath $mark_img 水印图片路径
 * @param string $position 水印位置 lt左上  rt右上  rb右下  lb左下 其余取值为中间
 * @param int $quality jpg图片质量,仅对jpg有效 默认85 取值 0-100之间整数
 * @param int $pct 水印图片融合度(透明度)
 *
 * @return void
 */
function water_mark($src, $mark_img, $position = 'rb', $quality = 85, $pct = 30) {
    if(function_exists('imagecopy') && function_exists('imagecopymerge')) {
        $data = getimagesize($src);
        if ($data[2] > 3)
        {
            return false;
        }
        $src_width = $data[0];
        $src_height = $data[1];
        $src_type = $data[2];
 
        $data = getimagesize($mark_img);
        $mark_width = $data[0];
        $mark_height = $data[1];
        $mark_type = $data[2];
 
        if ($src_width < ($mark_width + 20) || $src_width < ($mark_height + 20))
        {
            return false;
        }
        switch ($src_type)
        {
            case 1:
                $src_im = imagecreatefromgif($src);
                $imagefunc = function_exists('imagejpeg') ? 'imagejpeg' : '';
                break;
            case 2:
                $src_im = imagecreatefromjpeg($src);
                $imagefunc = function_exists('imagegif') ? 'imagejpeg' : '';
                break;
            case 3:
                $src_im = imagecreatefrompng($src);
                $imagefunc = function_exists('imagepng') ? 'imagejpeg' : '';
                break;
        }
        switch ($mark_type)
        {
            case 1:
                $mark_im = imagecreatefromgif($mark_img);
                break;
            case 2:
                $mark_im = imagecreatefromjpeg($mark_img);
                break;
            case 3:
                $mark_im = imagecreatefrompng($mark_img);
                break;
        }
 
        //水印位置
        switch ($position)
        {
            case 'lt':
                $x = 10;
                $y = 10;
                break;
            case 'rt':
                $x = $src_width - $mark_width - 10;
                $y = 10;
                break;
            case 'rb':
                $x = $src_width - $mark_width - 10;
                $y = $src_height - $mark_height - 10;
                break;
            case 'lb':
                $x = 10;
                $y = $src_height - $mark_height - 10;
                break;
            default:
                $x = ($src_width - $mark_width - 10) / 2;
                $y = ($src_height - $mark_height - 10) / 2;
                break;
        }
 
        if (function_exists('imagealphablending')) imageAlphaBlending($mark_im, true);
         
        if($mark_type == 3){
            //png单独处理
            imagecopymerge_alpha ( $src_im, $mark_im, $x, $y, 0, 0, $mark_width, $mark_height, $pct );
        }else{
            imageCopyMerge($src_im, $mark_im, $x, $y, 0, 0, $mark_width, $mark_height, $pct);
        }
         
        //die('$src_type='.$src_type.'; $imagefunc='.$imagefunc);
         
        if ($src_type == 2)
        {
            $imagefunc($src_im, $src, $quality);
        }
        else
        {
            $imagefunc($src_im, $src);
        }
    }
}
 
function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct) {
    $opacity = $pct;
    // getting the watermark width
    $w = imagesx ( $src_im );
    // getting the watermark height
    $h = imagesy ( $src_im );
    // creating a cut resource
    $cut = imagecreatetruecolor ( $src_w, $src_h );
    // copying that section of the background to the cut
    imagecopy ( $cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h );
    // inverting the opacity
    $opacity = 100 - $opacity;
    // placing the watermark now
    imagecopy ( $cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h );
    imagecopymerge ( $dst_im, $cut, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $opacity );
}

记录一个linux优化脚本[转]

此脚本用于初始化linux服务器的各项配置,适用于新装linux服务器
该脚本还未试验,欢迎搬走并留下试验结果

#!/bin/bash
#Created by kerryhu
#此脚本为系统初始化脚本
#用于新装linux的相关配置工作,比如禁掉 iptable 和 SELinux 及 ipv6、优化系统内核、停掉一些没有必要的系统服务等。
#此脚本尤其适合大批新装的CentOS 系列的服务器

cat<<EOF
+———————————————————————–+
|    = = = Welcome to CentOS System init = = =            |
+———————————————————————–+
+—————————by kerry————————————+
EOF

#set ntp
yum -y install ntp
echo "* 3 * * * /usr/sbin/ntpdate 210.72.145.44 > /dev/null 2 >&1">>/etc/crontab
service crond restart
#set ulimit
echo "ulimit -SHn 102400" >> /etc/rc.local
#set locale
#true > /etc/sysconfig/i18n
#cat >>/etc/sysconfig/i18n<<EOF
#LANG="zh_CN.GB18030"
#SUPPORTED="zh_CN.GB18030;zh_CN:zh:en_US.UTF-8:en_US:en"
#SYSFONT="latartcyrheb-sun16"
#EOF
#set sysctl
true > /etc/sysctl.conf
cat >> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.ipv4.tcp_max_tw_backets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_windows_scaling = 1
net.ipv4.tcp_rmem = 4096 87380 4194304
net.ipv4.tcp_wmem = 4096 16384 4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmen_max = 16777216
net.core.netdev_max_backlog = 262144
net.core.somaxconn = 262144
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65535
EOF
/sbin/sysctl -p
echo "sysctl set OK!!"
#close ctrl+alt+del
sed -i "s/ca::ctrlaltdel:\/bin\/shutdown -t3 -r now/#ca::ctrlaltdel:\/sbin\/shutdown -t3 -r now/" /etc/inittab
#set purview
chmod 600 /etc/passwd
chmod 600 /etc/shadow
chmod 600 /etc/group
chmod 600 /etc/gshadow
#disable ipv6
cat << EOF
+———————————————————————–+
|    = = = Welcome to Disable IPV6 = = =                |
+———————————————————————–+
EOF
echo "alias net -pf -10 off" >> /etc/modprobe.conf
echo "alias ipv6 off" >> /etc/modprobe.conf
/sbin/chkconfig –level 35 ip6tables off
echo "ipv6 is disabled!"
#disable selinux
sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config
echo "selinux is disabled,you must reboot!"
#vim
sed -i "8 s/^/alias vi ='vim'/" /root/.bashrc
echo 'syntax on' > /root/.vimrc
#zh_cn
sed -i -e 's/^LANG=.*/LANG="en"/'  /etc/sysconfig/il8n
#init_ssh
ssh_cf="/etc/ssh/sshd_config"
sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' $ssh_cf
#sed -i "s/#Port 22/Port 65535/" $ssh_cf
sed -i "s/#UseDNS yes /UseDNS no/" $ssh_cf
#client
sed -i -e '44 s/^/#/' -i -e '48 s/^/#/' $ssh_cf
service sshd restart
echo "ssh is init is ok…………."
#chkser
#tunoff services
#———————————————————————————-
cat << EOF
+———————————————————————–+
|    = = = Welcome to Tunoff services = = =                |
+———————————————————————–+
EOF
#———————————————————————————-
for i in 'ls /etc/rc3.d/S* '
do
   CURSRV= 'echo $i |cut -c 15-'
echo $CURSRV
case $CURSRV in
   crond | irqbalance | microcode_ctl | network | random | sshd | syslog | local)
   echo "Base services,Skip!"
   ;;
   *)
       echo "change $CURSRV to off"
       chkconfig –level 235 $CURSRV off
       service $CURSRV stop
   ;;
esac
done
echo "service is init is ok……………"

win2003+ii6+php+mysql+rewrite配置discuzx3过程

1. 从微软下载fastcgi,https://www.microsoft.com/web/handlers/webpi.ashx?command=getinstaller&appid=FastCGIIIS6;FastCGIIIS6

2.下载安装php installer5.3

3.下载安装mysql5.1.x, 不能安装5.6.x,需要net framework4.0,还提示个错误,很麻烦。

4.全新安装discuzx3 utf8;

5.下载iis6 rewrite, http://www.openiwom.com/Download/re_write.rar

6. 在我们架设好Discuz! X3后,打开后台进入到 全局 – seo设置 – URL静态化,如下图所示:      

       

       然后勾选你想要设置伪静态的项目,举个例子,比如我只想设置论坛开始伪静态,那么我就将论坛主题列表页、论坛内容列表页、论坛Achiver页,当然了日后还有可能用上插件,所以将插件也选上,这样选上以后,对于下面的Rewrite的兼容性和仅对游客有效这两项保持默认就好了(默认都是“否”),这样设置好了以后,我们点击“提交”。

       提交以后,我们再返回到上面找到“查看当前的rewrite规则”,点击打开后,找到“IIS Web Server(独立主机用户)”,因为我用的win2003服务器,所以我选择这个,如果你用的是不同的服务器,选择对应的其他项即可,这样我们将IIS Web Server(独立主机用户)下面的内容复制下来:

       [ISAPI_Rewrite]

       # 3600 = 1 hour
       CacheClockRate 3600

       RepeatLimit 32

       # Protect httpd.ini and httpd.parse.errors files
       # from accessing through HTTP
       RewriteRule ^(.*)/forum-(\w+)-([0-9]+)\.html(\?(.*))*$ $1/forum\.php\?mod=forumdisplay&fid=$2&page=$3&$5
       RewriteRule ^(.*)/thread-([0-9]+)-([0-9]+)-([0-9]+)\.html(\?(.*))*$ $1/forum\.php\?mod=viewthread&tid=$2&extra=page\%3D$4&page=$3&$6
       RewriteRule ^(.*)/(fid|tid)-([0-9]+)\.html(\?(.*))*$ $1/index\.php\?action=$2&value=$3&$5
       RewriteRule ^(.*)/([a-z]+[a-z0-9_]*)-([a-z0-9_\-]+)\.html(\?(.*))*$ $1/plugin\.php\?id=$2:$3&$5

       将以上的内容复制下来后,粘贴到记事本里,然后将记事本的名称修改成httpd.ini,注意一定要将记事本的后缀txt改为ini,不显示记事本后缀名的尤其要注意这点。

       将保存好的httpd.ini上传到你的BBS所在的目录,比如你的论坛目录是bbs,那么一定要放到bbs这个目录里面。

       上面步骤完成后,我们要对IIS进行一些基本的设置,以便实现IIS的rewrite功能,这里我们选择一个rewrite工具,关于如何设置IIS的rewrite功能,大家百度一下一大把,这里亦是美网络就不做详细赘述了。

bind+dlz+mysql实现智能DNS

一、安装mysql

yum install gcc gcc-c++ openssl-devel wget ncurses-devel make
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin
cd /tmp
wget http://cdn.mysql.com/Downloads/MySQL-5.1/mysql-5.1.65.tar.gz
tar xzf mysql-5.1.65.tar.gz
cd mysql-5.1.65
./configure --prefix=/usr/local/mysql/ --without-pthread --with-unix-socket-path=/tmp/mysql.sock --with-extra-charsets=gbk,gb2312,utf8
make
make install
cp support-files/my-medium.cnf /etc/my.cnf
/usr/local/mysql/bin/mysql_install_db --user=mysql
chown -R root.mysql /usr/local/mysql
chown -R mysql /usr/local/mysql/var
cp support-files/mysql.server /etc/init.d/mysqld
chown root.root /etc/rc.d/init.d/mysqld
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig  mysqld on
ln -s /usr/local/mysql/bin/mysql /usr/bin
ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
service mysqld start
mysqladmin -u root password root

二、安装bind

cd /tmp
wget http://ftp.isc.org/isc/bind9/cur/9.9/bind-9.9.1-P2.tar.gz
tar xzf bind-9.9.1-P2.tar.gz
cd bind-9.9.1-P2
./configure --prefix=/usr/local/named/ --enable-largefile --enable-threads=no --disable-openssl-version-check --with-dlz-mysql=/usr/local/mysql
make
make install

三、配置bind

cd /usr/local/named/etc
../sbin/rndc-confgen -r /dev/urandom >rndc.conf
tail -n10 rndc.conf | head -n9 | sed -e s/#\//g>named.conf
      
vi named.conf
include "/usr/local/named/etc/CHINANET.acl"; //联通ACL
include "/usr/local/named/etc/CNC.acl"; //电信ACL
include "/usr/local/named/etc/view.conf"; //DLZ相关的配置

四、下载acl文件

wget http://www.centos.bz/wp-content/uploads/2012/02/CHINANET.acl
wget http://www.centos.bz/wp-content/uploads/2012/02/CNC.acl


五、配置view.conf

view "CHINANET_view" {
  match-clients  { CHINANET; };
  allow-query-cache { none; };
  allow-recursion { none; };
  allow-transfer { none; };
  recursion no;
      
    dlz "Mysql zone" {
    database "mysql
    {host=127.0.0.1 dbname=dns_data ssl=false port=3306 user=root pass=password}
    {select zone from dns_records where zone = '$zone$' and  view = 'CHINANET' limit 1}
    {select ttl,type,mx_priority,case when lower(type)='txt' then concat('\"',data,'\"') when lower(type)    =  'soa'  then   concat_ws(' ',  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = '$zone$'   and host = '$record$' and view=(select view from dns_records where zone = '$zone$' and host = '$record$' and (view='CHINANET' or view='any') order by priority asc limit 1)}";
};
};
view "CNC_view" {
  match-clients  { CNC; };
  allow-query-cache { none; };
  allow-recursion { none; };
  allow-transfer { none; };
  recursion no;
      
    dlz "Mysql zone" {
    database "mysql
    {host=127.0.0.1 dbname=dns_data ssl=false port=3306 user=root pass=password}
    {select zone from dns_records where zone = '$zone$' and  view = 'CNC' limit 1}
    {select ttl,type,mx_priority,case when lower(type)='txt' then concat('\"',data,'\"') when lower(type)    =  'soa'  then   concat_ws(' ',  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = '$zone$'   and host = '$record$' and view=(select view from dns_records where zone = '$zone$' and host = '$record$' and (view='CNC' or view='any') order by priority asc limit 1)}";
};
};
view "any_view" {
  match-clients  { any; };
  allow-query-cache { none; };
  allow-recursion { none; };
  allow-transfer { none; };
  recursion no;
      
    dlz "Mysql zone" {
    database "mysql
    {host=127.0.0.1 dbname=dns_data ssl=false port=3306 user=root pass=password}
    {select zone from dns_records where zone = '$zone$' and  view = 'any' limit 1}
    {select ttl,type,mx_priority,case when lower(type)='txt' then concat('\"',data,'\"') when lower(type)    =  'soa'  then   concat_ws(' ',  data,  resp_person,  serial,  refresh,  retry,  expire,  minimum)   else   data   end   as   mydata   from   dns_records where zone = '$zone$'   and host = '$record$' and view = 'any'}";
};
};

六、建库

create database dns_data;
use dns_data;
CREATE TABLE `dns_records` (
   `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
   `zone` VARCHAR(255) NOT NULL,
   `host` VARCHAR(255) NOT NULL DEFAULT '@',
   `type` ENUM('MX','CNAME','NS','SOA','A','PTR') NOT NULL,
   `data` VARCHAR(255) DEFAULT NULL,
   `ttl` INT(11) NOT NULL DEFAULT '800',
   `view` CHAR(20) DEFAULT 'any',     
   `mx_priority` INT(11) DEFAULT NULL,
   `priority` INT(3) DEFAULT 255, 
   `refresh` INT(11) NOT NULL DEFAULT '3600',
   `retry` INT(11) NOT NULL DEFAULT '3600',
   `expire` INT(11) NOT NULL DEFAULT '86400',
   `minimum` INT(11) NOT NULL DEFAULT '3600',
   `serial` BIGINT(20) NOT NULL DEFAULT '2008082700',
   `resp_person` VARCHAR(64) NOT NULL DEFAULT 'root.domain.com.',
   `primary_ns` VARCHAR(64) NOT NULL DEFAULT 'ns1.domain.com.',
   `data_count` INT(11) NOT NULL DEFAULT '0',
   PRIMARY KEY          (`id`),
   KEY `type` (`type`),
   KEY `host` (`host`),
   KEY `zone` (`zone`)
) ENGINE=MYISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

七、启动bind

/usr/local/named/sbin/named -uroot -g -d 9   //调试状态,如果没有报错说明环境配置正确。做成启动服务. Debug 的时候多用此模式启动bind.。

这时报了一个错误:

/usr/local/named/sbin/named: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

解决办法:

ln -s /usr/local/mysql/lib/libmysqlclient.so.18 /usr/lib64/libmysqlclient.so.18
ldconfig

接着又报一个错误:

02-Jul-2013 14:29:21.728 mysql driver failed to create database connection after 4 attempts

02-Jul-2013 14:29:21.728 SDLZ driver failed to load.

02-Jul-2013 14:29:21.729 DLZ driver failed to load.

02-Jul-2013 14:29:21.738 load_configuration: failure

02-Jul-2013 14:29:21.739 loading configuration: failure

02-Jul-2013 14:29:21.739 exiting (due to fatal error)

原因是view.conf中的数据库配置参数不对,修改为自己对应的即可。

/usr/local/bind/sbin/rndc reload //重载 named.conf 相关配置文件.
/usr/local/bind/sbin/named -uroot -c /usr/local/bind/etc/named.conf & //指定配置文件

设置开机启动,vim /etc/init.d/named

#!/bin/bash
# named a network name service.
# chkconfig: 345 35 75
# description: a name server
# http://www.linuxtone.org
   
if [ `id -u` -ne 0 ]
then
echo "ERROR:For bind to port 53,must run as root."
exit 1
fi
case "$1" in
start)
if [ -x /usr/local/bind/sbin/named ]; then
for i in `seq 1 8`
do
/usr/local/bind/sbin/named -c /usr/local/bind/etc/named1$i.conf -u root 
echo "BIND9-named1$i server started"
done
fi
;;
stop)
kill `cat /usr/local/bind/var/named.pid` && echo . && echo 'BIND9 server stopped'
;;
restart)
echo .
echo "Restart BIND9 server"
$0 stop
sleep 10
$0 start
;;
reload)
/usr/local/bind/sbin/rndc reload
;;
status)
/usr/local/bind/sbin/rndc status
;;
*)
echo "$0 start | stop | restart |reload |status"
;;
esac
chkconfig --add named
chkconfig named on

八、写入测试数据

INSERT   INTO   `dns_records`   (`zone`,   `host`,   `type`,   `data`,   `ttl`,`mx_priority`,   `refresh`,   `retry`,   `expire`,      `minimum`, `serial`, `resp_person`, `primary_ns`, `data_count`) VALUES    ('centos.bz',     '@',   'SOA',   'ns1.centos.bz.',    10,   NULL,     3600,    3600,   86400,    10,   2008082700, 'root.centos.bz.', 'ns1.centos.bz.', 0);
INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`) VALUES      ('centos.bz', '@', 'NS', 'ns1.centos.bz.'),      ('centos.bz', '@', 'NS', 'ns2.centos.bz.');
INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`) VALUES      ('centos.bz', 'ns1', 'A', '211.100.72.137'),   ('centos.bz', 'ns2', 'A', '219.232.244.11');
INSERT INTO `dns_records` (`zone`, `host`, `type`, `data`, `ttl`, `view`,`priority`) VALUES   ('centos.bz', 'www', 'A', '210.51.36.116', 3600, 'CNC',200),      ('centos.bz', 'www', 'A', '221.238.249.178', 3600, 'CHINANET',200),      ('centos.bz', 'www', 'A', '211.103.156.230', 3600, 'any',255);
INSERT INTO dns_records (`zone`,`host`,`type`,`DATA`,`view`,`priority`)      VALUES ('centos.bz', 'man', 'CNAME', 'www','CNC',200),      ('centos.bz', 'man', 'CNAME', 'www','CHINANET',200),  ('centos.bz', 'man', 'CNAME', 'www','any',255);

CentOS 6.2编译安装Nginx1.2.0+MySQL5.5.25+PHP5.3.13[转]

转自:http://www.xuejiehome.com/blread-1639.html

操作系统:CentOS 6.2 32位


准备篇:


一、配置好IP、DNS 、网关,确保使用远程连接工具能够连接服务器

二、配置防火墙,开启80端口、3306端口

vi /etc/sysconfig/iptables   #编辑防火墙配置文件
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT(允许80端口通过防火墙)
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT(允许3306端口通过防火墙)

特别提示:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败

正确的应该是添加到默认的22端口这条规则的下面,添加好之后防火墙规则如下所示:

#########################################################
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
#########################################################

三、关闭SELINUX

vi /etc/selinux/config  #编辑
#SELINUX=enforcing       #注释掉
#SELINUXTYPE=targeted    #注释掉
SELINUX=disabled         #增加
:wq #保存退出

四 、系统约定

软件源代码包存放位置:/usr/local/src

源码包编译安装位置:/usr/local/软件名字

五、下载软件包

1、下载nginx(目前最新稳定版)

http://nginx.org/download/nginx-1.2.0.tar.gz

2、下载pcre  (支持nginx伪静态)

ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.30.tar.gz

3、下载MySQL(目前稳定版)

http://mysql.mirror.kangaroot.net/Downloads/MySQL-5.5/mysql-5.5.25.tar.gz

4、下载php

http://cn.php.net/distributions/php-5.3.13.tar.gz

5、下载cmake(MySQL编译工具)

http://www.cmake.org/files/v2.8/cmake-2.8.8.tar.gz

6、下载libmcrypt(PHPlibmcrypt模块)

ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz

六、安装编译工具及库文件(使用CentOS yum命令安装)

yum install make apr* autoconf automake curl-devel gcc gcc-c++ zlib-devel openssl openssl-devel pcre-devel gd  kernel keyutils  patch  perl kernel-headers compat* mpfr cpp glibc libgomp libstdc++-devel ppl cloog-ppl keyutils-libs-devel libcom_err-devel libsepol-devel libselinux-devel krb5-devel zlib-devel libXpm* freetype libjpeg* libpng* php-common php-gd ncurses* libtool* libxml2 libxml2-devel patch freetype-devel

安装篇


一、安装cmake

cd /usr/local/src
tar zxvf cmake-2.8.8.tar.gz
cd cmake-2.8.8
./configure
make           #编译
make install   #安装

二、安装MySQL

在安装mysql之前最好用grep -qa|grep mysql命令查看一上系统有没有默认帮你装了一些mysql-libs之类的库。如果有,可以用yum -y remove mysql-libs把旧版本的卸载掉。

groupadd mysql  #添加mysql组
useradd -g mysql mysql -s /bin/false  #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系统
mkdir -p /data/mysql  #创建MySQL数据库存放目录
chown -R mysql:mysql /data/mysql   #设置MySQL数据库目录权限
mkdir -p /usr/local/mysql #创建MySQL安装目录
cd /usr/local/src
tar zxvf mysql-5.5.25.tar.gz  #解压
cd mysql-5.5.25
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  -DMYSQL_DATADIR=/data/mysql  -DSYSCONFDIR=/etc   #配置
make #编译
make install  #安装
cd /usr/local/mysql
cp ./support-files/my-huge.cnf  /etc/my.cnf   #拷贝配置文件(注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可)
vi /etc/my.cnf   #编辑配置文件,在 [mysqld] 部分增加下面一行
datadir = /data/mysql  #添加MySQL数据库路径
:wq!  #保存退出
./scripts/mysql_install_db --user=mysql --datadir=/data/mysql #生成mysql系统数据库
cp ./support-files/mysql.server  /etc/rc.d/init.d/mysqld  #把Mysql加入系统启动
chmod 755 /etc/init.d/mysqld   #增加执行权限
chkconfig mysqld on  #设置开机启动
vi /etc/rc.d/init.d/mysqld  #编辑
basedir = /usr/local/mysql   #MySQL程序安装路径
datadir = /data/mysql  #MySQl数据库存放目录
service mysqld start  #启动
vi /etc/profile   #把mysql服务加入系统环境变量:在最后添加下面这一行
export PATH=$PATH:/usr/local/mysql/bin
:wq! #保存退出
下面这两行把myslq的库文件链接到系统默认的位置,在编译类似PHP等软件时可以不用指定mysql的库文件地址。
ln -s /usr/local/mysql/lib/mysql /usr/lib/mysql
ln -s /usr/local/mysql/include/mysql /usr/include/mysql
shutdown -r now     #需要重启系统,等待系统重新启动之后继续在终端命令行下面操作
mysql_secure_installation    #设置Mysql密码
根据提示按Y 回车(默认密码为空)
然后输入2次密码
继续按Y 回车,直到设置完成
或者直接修改密码/usr/local/mysql/bin/mysqladmin -u root -p password "123456" #修改密码
service mysqld restart  #重启
到此,mysql安装完成!


三、安装pcre

cd /usr/local/src
mkdir /usr/local/pcre  #创建安装目录
tar  zxvf pcre-8.30.tar.gz
cd pcre-8.30
./configure  --prefix=/usr/local/pcre  #配置
make
make install

四、安装 nginx

cd /usr/local/src
groupadd  www  #添加www组
useradd -g  www www -s /bin/false  #创建nginx运行账户www并加入到www组,不允许www用户直接登录系统
tar  zxvf nginx-1.2.0.tar.gz
cd nginx-1.2.0
./configure --prefix=/usr/local/nginx --without-http_memcached_module --user=www --group=www --with-http_stub_status_module --with-openssl=/usr/ --with-pcre=/usr/local/src/pcre-8.30
#注意:--with-pcre=/usr/local/src/pcre-8.30指向的是源码包解压的路径,而不是安装的路径,否则会报错
make
make install
/usr/local/nginx/sbin/nginx   #启动nginx
vi /etc/rc.d/init.d/nginx    #设置nginx开启启动,编辑启动文件添加下面内容

#################################################################
#!/bin/bash
# nginx Startup script for the Nginx HTTP Server
# it is v.0.0.2 version.
# chkconfig: - 85 15
# description: Nginx is a high-performance web and proxy server.
#              It has a lot of features, but it's not for everyone.
# processname: nginx
# pidfile: /var/run/nginx.pid
# config: /usr/local/nginx/conf/nginx.conf
nginxd=/usr/local/nginx/sbin/nginx
nginx_config=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid
RETVAL=0
prog="nginx"
# Source function library.
.  /etc/rc.d/init.d/functions
# Source networking configuration.
.  /etc/sysconfig/network
# Check that networking is up.
[ ${NETWORKING} = "no" ] && exit 0
[ -x $nginxd ] || exit 0
# Start nginx daemons functions.
start() {
if [ -e $nginx_pid ];then
   echo "nginx already running...."
   exit 1
fi
   echo -n $"Starting $prog: "
   daemon $nginxd -c ${nginx_config}
   RETVAL=$?
   echo
   [ $RETVAL = 0 ] && touch /var/lock/subsys/nginx
   return $RETVAL
}
# Stop nginx daemons functions.
stop() {
        echo -n $"Stopping $prog: "
        killproc $nginxd
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f /var/lock/subsys/nginx /usr/local/nginx/logs/nginx.pid
}
reload() {
    echo -n $"Reloading $prog: "
    #kill -HUP `cat ${nginx_pid}`
    killproc $nginxd -HUP
    RETVAL=$?
    echo
}
# See how we were called.
case "$1" in
start)
        start
        ;;
stop)
        stop
        ;;
reload)
        reload
        ;;
restart)
        stop
        start
        ;;
            
status)
        status $prog
        RETVAL=$?
        ;;
*)
        echo $"Usage: $prog {start|stop|restart|reload|status|help}"
        exit 1
esac
exit $RETVAL
#################################################################

chmod 700 /etc/init.d/nginx
chkconfig nginx on
service nginx start


五、安装libmcrypt

cd /usr/local/src
tar zxvf  libmcrypt-2.5.7.tar.gz   #解压
cd  libmcrypt-2.5.7 #进入目录
./configure    #配置
make             #编译
make install   #安装

六、安装php


cd /usr/local/src
tar -zvxf php-5.3.13.tar.gz
cd  php-5.3.13
mkdir -p /usr/local/php  #建立php安装目录
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-gd --with-iconv  --with-zlib  --enable-xml  --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex  --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --with-jpeg-dir --with-freetype-dir #配置
make   #编译
make install    #安装
cp  php.ini-production   /usr/local/php/etc/php.ini  #复制php配置文件到安装目录
rm -rf /etc/php.ini   #删除系统自带配置文件
ln -s /usr/local/php/etc/php.ini  /etc/php.ini    #添加软链接
cp  /usr/local/php/etc/php-fpm.conf.default   /usr/local/php/etc/php-fpm.conf      #拷贝模板文件为php-fpm配置文件
vi  /usr/local/php/etc/php-fpm.conf  #编辑
user = www    #设置php-fpm运行账号为www
group = www   #设置php-fpm运行组为www
pid = run/php-fpm.pid    #取消前面的分号
cp /usr/local/src/php-5.3.13/sapi/fpm/init.d.php-fpm   /etc/rc.d/init.d/php-fpm  #设置 php-fpm开机启动,拷贝php-fpm到启动目录
chmod +x /etc/rc.d/init.d/php-fpm  #添加执行权限
chkconfig php-fpm on    #设置开机启动
vi /usr/local/php5/etc/php.ini    #编辑配置文件
找到:disable_functions =
修改为:disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
#列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。
找到:;date.timezone =
修改为:date.timezone = PRC   #设置时区
找到:expose_php = On
修改为:expose_php = OFF  #禁止显示php版本的信息

在编译PHP的过程中可能会报UNDEFINED REFERENCE TO `LIBICONV_OPEN 无法编译PHP LIBICONV错误.

七、配置nginx支持php

vi /usr/local/nginx/conf/nginx.conf      #编辑配置文件
user   www  www;          #首行user去掉注释,修改Nginx运行组为www www;必须与/usr/local/php5/etc/php-fpm.conf中的user,group配置相同,否则php运行出错
index  index.php  index.html index.htm;    #添加index.php
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
    root           html;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

注意:取消FastCGI server部分location的注释,并要注意fastcgi_param行的参数,改为$document_root$fastcgi_script_name,或者使用绝对路径/app/web之类

/etc/init.d/nginx restart  #重启nginx


测试篇

访问http://ip地址    出现欢迎使用nginx,说明配置成功。默认web目录 /usr/local/nginx/html/可以自己写程序测试PHP是否可用。

centos编译安装配置bind

1. 下载bind源码,

wget http://www.bind.com/pub/bind9/9.9.3/bind-9.9.3.tar.gz

2. 安装openssl

yum install -y openssl

3. 安装bind

tar zxvf bind-9.9.3.tar.gz

cd bind-9.9.3

./configure –prefix=/usr/local/named –enable-threads –disable-ipv6 –disable-openssl-version-check

编译时提示找不到openssl,改为

./configure –prefix=/usr/local/named –enable-threads –disable-ipv6 –without-openssl

最后提示BIND is being built without OpenSSL. This means it will not have DNSSEC support.

make

make install

4. 配置bind

生成rndc配置文件

/usr/local/named/sbin/rndc-confgen > /usr/local/named/etc/rndc.conf

//编写named.conf配置文件

tail -n10 /usr/local/named/etc/rndc.conf | head -n9 | sed -e s/#\ //g > /usr/local/named/etc/named.conf

vi /usr/local/named/etc/named.conf

key "rndc-key" {
        algorithm hmac-md5;
        secret "18ZFNXt9bsXEXT1kaSKZ/g==";
};
  
controls {
        inet 127.0.0.1 port 953
                allow { 127.0.0.1; } keys { "rndc-key"; };
};
  
options {
        directory "/data/named";
        allow-query{ any; };
        pid-file "named.pid";
        recursion yes;
};
  
logging {
        channel query_log {
                file "query.log" versions 5 size 20m;
                severity info;
                print-time yes;
                print-category yes;
        };
        category queries {
                query_log;
        };
};
  
zone "." IN {
        type hint;
        file "named.ca";
};
  
zone "localhost" IN {
        type master;
        file "localhost.zone";
        allow-update { none;};
};
  
zone "0.0.127.in-addr.arpa" IN {
         type master;
         file "localhost.rev";
         allow-update { none;};
};
  
zone "nengzuo.com" IN {
         type master;
         file "nengzuo.com.zone";
         allow-update { none; };
};
  
zone "196.255.116.in-addr.arpa" in {
        type master;
        file "nengzuo.com.rev";
        allow-update { none; };
};

//创建数据文件目录

mkdir /data/named -p

//创建根数据文件

dig > /data/named/named.ca

//创建本地正向解析文件

vi /data/named/localhost.zone

$TTL    86400

$ORIGIN localhost.

@               1D  IN  SOA     @       root    (

                               42      

                               3H      

                               15M    

                               1W      

                               1D)

               1D  IN  NS      @

               1D  IN  A       127.0.0.1

//创建本地反向解析文件

vi /data/named/localhost.rev

$TTL    86400

@       IN  SOA         localhost. root.localhost. (

                               2011040100

                               3H

                               15M

                               1W

                               1D)

       IN  NS          localhost.

1       IN  PTR         localhost

                             

//创建nengzuo.com域正向解析文件

vi /data/named/nengzuo.com.zone

$ORIGIN .

$TTL 600        ;       20      minutes

nengzuo.com      IN      SOA     ns1.nengzuo.com. root.nengzuo.com. (

                                     2011040100      ;serial

                                     20M             ;refresh(20 minutes)

                                     3M              ;retry(3 minutes)

                                     2W              ;expire(2 weeks)

                                     2D              ;minimum(2 hours)

                                     )

                       NS              ns1.nengzuo.com.

                       MX      10      mail.nengzuo.com.

$ORIGIN nengzuo.com.

                       A               116.255.196.184

ns1                     A               116.255.196.184

mail                    A               116.255.196.184

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

www             IN      A       116.255.196.184

//创建youyichunqiu.com域反向解析文件

vi /data/named/nengzuo.com.rev

$TTL    86400

@       IN      SOA     ns1.nengzuo.com. root.nengzuo.com.  (

                                     20111040100; Serial

                                     8H         ; Refresh

                                     4H         ; Retry

                                     41D        ; Expire

                                     1D     ; Minimum

                                     )    

       IN      NS      ns1.nengzuo.com.

       IN      NS      ns2.nengzuo.com.

125       IN      PTR     ns1.nengzuo.com.

125       IN      PTR     ns2.nengzuo.com.

//检查主配置文件语法

/usr/local/named/sbin/named-checkconf /usr/local/named/etc/named.conf

//检查区域数据文件语法

/usr/local/named/sbin/named-checkzone youyichunqiu.com /data/named/youyichunqiu.com.zone

//启动bind服务

/usr/local/named/sbin/rndc reload

//指定配置文件启动bind服务

/usr/local/named/sbin/named -c /usr/local/named/etc/named.conf

//检查bind运行状态

ps -aux | grep named

//检查bind服务网络监听

netstat -an | grep 53

//测试域名解析

//正向

>nslookup

>server bind服务器ip

>www.nengzuo.com

//反向

>116.255.196.184

win server2008使用hyper-v无线安装配置

首先,在hyper-v的虚拟网络管理里新建一个外部虚拟网络“Microsoft Loopback Adapter”,并且将其和无线连接进行桥接。

其次,安装kernel-devel,kernel-headers,gcc

安装完Linux Integration Services v2.1,会出现一个seth0

配置为static

[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-seth0
DEVICE=seth0
BOOTPROTO=static
IPADDR=192.168.3.170
BROADCAST=192.168.3.255
NETMASK=255.255.255.0
#NETWORK=192.168.3.1
GATEWAY=192.168.3.1
ONBOOT=yes

另外最好在路由器的配置里把ip和mac地址绑定,下次得启路由不用换ip。

支持高并发的IIS Web服务器常用设置[转]

适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0

适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows Server 2012

1、应用程序池(Application Pool)的设置:

  • General->Queue Length设置为65535(队列长度所支持的最大值)

  • Process Model->Idle Time-out设置为0(不让应用程序池因为没有请求而回收)

  • Recycling->Regular Time Interval设置为0(禁用应用程序池定期自动回收)

2、.Net Framework相关设置

a) 在machine.config中将

<processModel autoConfig="true" />

改为:

<processModel enable="true" requestQueueLimit="100000"/>

(保存后该设置立即生效)

b) 打开C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\Browsers\Default.browser,找到<defaultBrowser id="Wml" parentID="Default" >,注释<capabilities>部分,然后运行在命令行中运行aspnet_regbrowsers -i。

<defaultBrowser id="Wml" parentID="Default" >
<identification>
<header name="Accept" match="text/vnd\.wap\.wml|text/hdml" />
<header name="Accept" nonMatch="application/xhtml\+xml; profile|application/vnd\.wap\.xhtml\+xml" />
</identification>
<!--
<capabilities>
<capability name="preferredRenderingMime"              value="text/vnd.wap.wml" />
<capability name="preferredRenderingType"              value="wml11" />
</capabilities>
-->
</defaultBrowser>

以解决text/vnd.wap.wml问题。

3、IIS的applicationHost.config设置

设置命令:

c:\windows\system32\inetsrv\appcmd.exe set config /section:serverRuntime /appConcurrentRequestLimit:100000

设置结果:

<serverRuntime appConcurrentRequestLimit="100000" />

(保存后该设置立即生效)

4、http.sys的设置

注册表设置命令1(将最大连接数设置为10万):

reg add HKLM\System\CurrentControlSet\Services\HTTP\Parameters /v MaxConnections /t REG_DWORD /d 100000

注册表设置命令2(解决Bad Request – Request Too Long问题):

reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxFieldLength /t REG_DWORD /d 32768
reg add HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters /v MaxRequestBytes /t REG_DWORD /d 32768

(需要在命令行运行 net stop http  & net start http & iisreset 使设置生效)

5、针对负载均衡场景的设置

在Url Rewrite Module中增加如下的规则:

<rewrite>
<allowedServerVariables>
<add name="REMOTE_ADDR" />
</allowedServerVariables>
<globalRules>
<rule name="HTTP_X_Forwarded_For-to-REMOTE_ADDR">
<match url=".*" />
<serverVariables>
<set name="REMOTE_ADDR" value="{HTTP_X_Forwarded_For}" />
</serverVariables>
<action type="None" />
</rule>
</globalRules>
</rewrite>

修改centos默认内核选项

default=1
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.18-194.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-194.el5 ro root=/dev/VolGroup00/LogVol00
#rhgb quiet acpi=off noapic
        initrd /initrd-2.6.18-194.el5.img
title CentOS (2.6.18-308.13.1.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-308.13.1.el5 ro root=/dev/VolGroup00/LogVol00
#rhgb quiet acpi=off noapic
        initrd /initrd-2.6.18-308.13.1.el5.img

default的值刚开始为0,即老的内核,下面308.13.1为升级后的新的内核。机房说默认选第一个是有问题的,改为第二项就好了。