zoukankan      html  css  js  c++  java
  • CentOS6.8 x64+Nginx1.3.8/Apache-httpd 2.4.3+PHP5.4.8(php-fpm)+MySQL5.5.28+CoreSeek4.1源码编译安装

    系统为CentOS6.8 x64服务器版精简安装。

    准备工作

      部署安装目录 

      /usr/local/* 

      /var/lib/*

        /var/lib64/*

    下载源文件

    #cd /usr/local/src 

    wget http://cdn.mysql.com/Downloads/MySQL-5.5/mysql-5.5.28.tar.gz

    wget http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.10.tar.gz

    wget http://www.nginx.org/download/nginx-1.3.8.tar.gz

    wget http://cl1.php.net/distributions/php-5.4.8.tar.gz

    wget http://acelnmp.googlecode.com/files/eaccelerator-0.9.6.1.tar.bz2

    wget http://google-perftools.googlecode.com/files/google-perftools-1.8.3.tar.gz

    wget http://mynginx.googlecode.com/files/ImageMagick.tar.gz

    wget http://lnmpp.googlecode.com/files/imagick-2.3.0.tgz

    wget http://mozbuildtools.googlecode.com/files/libiconv-1.13.1.tar.gz

    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz        http://www.gnu.org/software/libiconv/

    wget http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz

    wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz

    wget http://vps.googlecode.com/files/memcache-2.2.5.tgz

    wget http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz

    wget http://jaist.dl.sourceforge.net/project/pcre/pcre/8.35/pcre-8.35.tar.gz

    wget http://sourceforge.net/projects/pcre/files/pcre/8.31/pcre-8.31.tar.gz

    wget http://vps.googlecode.com/files/PDO_MYSQL-1.0.2.tgz

    wget http://nchc.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.5.2.2/phpMyAdmin-3.5.2.2-all-languages.tar.gz

    php myadmin官网:http://www.phpmyadmin.net/home_page/index.php

    wget http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.3.tar.gz

    wget http://mirrors.cnnic.cn/apache//httpd/httpd-2.4.4.tar.gz

    apache下载http://httpd.apache.org/download

    wget http://mirror.bit.edu.cn/apache/apr/apr-1.4.6.tar.gz                 #Apache库文件

    wget http://mirror.bit.edu.cn/apache/apr/apr-util-1.4.1.tar.gz          #Apache库文件

    wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz

    wget http://museum.php.net/php5/php-5.2.17.tar.gz

    wget http://php-fpm.org/downloads/php-5.2.17-fpm-0.5.14.diff.gz                          #官网http://php-fpm.org/downloads/

    wget http://xcache.lighttpd.net/pub/Releases/3.1.0/xcache-3.1.0.tar.gz              #XCache,官网http://xcache.lighttpd.net

    wget http://down1.chinaunix.net/distfiles/ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz

    wget http://www.openssl.org/source/openssl-1.0.1i.tar.gz                  #openssl-1.0.1i

    wget http://pecl.php.net/get/imagick-3.1.2.tgz

    最小化安装(minimal)需安装的基本软件

    yum install -y bind-utils traceroute wget man sudo ntp ntpdate screen patch make gcc gcc-c++ flex bison zip unzip ftp net-tools --skip-broken 

    安装相关库

    配置yum只安装64位软件,即过滤掉 i386, i686 的软件包

    # vi /etc/yum.conf      在[main]最后添加如下内容

    exclude=*.i?86 

    如果想删除系统上已经安装的 i386/i686 包:

    # yum remove *.i?86 -y                       #不建议,容易出现问题

    yum -y install kernel-devel-* gcc kernel-headers-* --skip-broken

    yum -y install yum-fastestmirror --skip-broken

    yum -y install patch make gcc gcc-c++ flex bison --skip-broken

    yum -y install libtool libtool-libs kernel-devel autoconf --skip-broken

    yum -y install libjpeg libjpeg-devel libpng libpng-devel gd-devel libtiff libtiff-devel tcl-devel ghostscript-devel fontconfig-devel libwmf-devel jasper jasper-devel --skip-broken

    yum -y install freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel --skip-broken

    yum -y install glib2 glib2-devel bzip2 diff* --skip-broken

    yum -y install bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs --skip-broken 

    yum -y install e2fsprogs-devel krb5 krb5-devel libidn libidn-devel --skip-broken

    yum -y install openssl openssl-devel vim-minimal --skip-broken

    yum -y install cmake --skip-broken

    yum -y install openldap openldap-devel --skip-broken

    yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel  freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel  glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel  e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl  openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers  make  --skip-broken

    yum -y update

    (也可用

    yum -y install make apr* autoconf automake 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 --skip-broken

    )

    关联动态库 

    # vi /etc/ld.so.conf                         添加如下内容

    include /etc/ld.so.conf.d/*.conf

    /usr/local/lib

    /usr/local/lib64

    /lib

    /lib64

    /usr/lib

    /usr/lib64

    编辑完ld.so.conf,执行 

    # ldconfig 

    使动态库生效

    安装pcre

    #cd /usr/local/src

    tar -zxvf pcre-8.35.tar.gz

    cd pcre-8.35

    ./configure --enable-jit; make; make install

    注:如果想卸载系统原来的PCRE,请先备份PCRE库libpcrecpp.so.0、libpcre.so.0.0.1,

    可以用rpm -ql pcre查找它的路径

    ]# rpm -ql pcre

    /lib64/libpcre.so.0

    /lib64/libpcre.so.0.0.1

    /usr/bin/pcregrep

    /usr/bin/pcretest

    /usr/lib64/libpcrecpp.so.0

    /usr/lib64/libpcrecpp.so.0.0.0

    /usr/lib64/libpcreposix.so.0

    /usr/lib64/libpcreposix.so.0.0.0

    /usr/share/doc/pcre-7.8

    /usr/share/doc/pcre-7.8/AUTHORS

    /usr/share/doc/pcre-7.8/COPYING

    /usr/share/doc/pcre-7.8/ChangeLog

    /usr/share/doc/pcre-7.8/LICENCE

    /usr/share/doc/pcre-7.8/NEWS

    /usr/share/doc/pcre-7.8/README

    /usr/share/man/man1/pcre-config.1.gz

    /usr/share/man/man1/pcregrep.1.gz

    /usr/share/man/man1/pcretest.1.gz

    最后yum -y remove pcre (或rpm -e pcre --nodeps)完后,再把它复制回原处,因为很多软件都依赖它,编译时也需要用到。

    OpenSSLl-1.0.1i安装

    cd /usr/local/src

    tar -zxvf openssl-1.0.1i.tar.gz 

    cd openssl-1.0.1i

     ./config; make; make install

    yum -y install zlib zlib-devel gd gd-devel

    I、LNMP

    编译安装Nginx

    添加一个不能登录且没有主目录的用户Nginx

    #useradd nginx -M -s /sbin/nologin                     #此命令会同时添加一个组nginx,且用户nginx自动加入该组

    cd /usr/local/src

    tar -zxvf nginx-1.3.15.tar.gz; cd nginx-1.3.15

    ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module --with-pcre=/usr/local/src/pcre-8.35 --with-http_realip_module --with-http_image_filter_module --with-http_gzip_static_module --with-openssl=/usr/local/src/openssl-1.0.1i --with-openssl-opt="enable-tlsext" --with-stream --with-stream_ssl_module --with-http_v2_module

    注意:--with-pcre=/usr/local/src/pcre-8.35指向的是源码包解压的路径,而不是安装的路径,否则会报错

    若是使用源码安装的 openssl(./configure;make;make install),则在后面加上  --with-openssl=/usr/local/src/openssl-1.0.1i    即openssl源码解压出来的路径

    添加 --with-openssl-opt="enable-tlsext" 这个参数可支持 同一个IP上配置多个HTTPS主机

    make && make install

    /usr/local/nginx/sbin/nginx                      #启动nginx

    添加ngxin到系统服务,设置nginx开启启动

    vi /etc/rc.d/init.d/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

    =======================================================

    :wq!              #保存退出

    chmod 755 /etc/rc.d/init.d/nginx              #赋予文件执行权限

    chkconfig nginx on                   #设置开机启动

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

    service nginx restart

    附:CentOS 7 nginx启动脚本

    vi /usr/lib/systemd/system/nginx.service  #编辑启动文件添加下面内容

    ############################################################

    [Unit]

    Description=nginx - high performance web server

    Documentation=http://nginx.org/en/docs/

    After=network.target remote-fs.target nss-lookup.target

    [Service]

    Type=forking

    PIDFile=/usr/local/nginx/logs/nginx.pid

    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf

    ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf

    ExecReload=/bin/kill -s HUP $MAINPID

    ExecStop=/bin/kill -s QUIT $MAINPID

    PrivateTmp=true

    [Install]

    WantedBy=multi-user.target

    ############################################################

    :wq! #保存退出

    systemctl enable nginx #设置开机启动

    systemctl start nginx.service #启动

    当然Nginx也可以用yum安装

    添加nginx yum repository库

    vi  /etc/yum.repos.d/nginx.repo           #新建nginx yum库,并添加下面的内容

    =======================================================

    [nginx]

    name=nginx repo

    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

    gpgcheck=0

    enabled=1

    =======================================================

    wq       #保存退出

    yum -y install nginx                    #yum安装nginx,这里安装的为nginx官网稳定版,不一定是最新版

    nginx.conf  调优配置:

    在http {} 里添加

            fastcgi_connect_timeout 60;

            fastcgi_send_timeout 180;

            fastcgi_read_timeout 180;

            fastcgi_buffers 4 256k;

            fastcgi_buffer_size 128k;

            fastcgi_busy_buffers_size 256k;

            fastcgi_temp_file_write_size 256k;

            fastcgi_intercept_errors on;

            client_max_body_size 200M;        #最大上传文件大小

            gzip  on;

    为不让nginx.conf的配置文件变得臃肿庞大,把各个虚拟主机的配置单独使用各自文件

    vi /var/local/nginx/conf/nginx.conf #在到数第二添加一行如下内容(;号不能少),指定包含虚拟主机配置文件:

    include /usr/local/nginx/conf/conf.d/*.conf;

    vi /usr/local/nginx/conf/fastcgi_params #在最后添加如下内容,省去每个虚拟主机配置都要指定fastcgi_param SCRIPT_FILENAME文件。

    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

    fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/";            #这句的意思是限制

    nginx访问在 本虚拟主机目录下,禁止跨目录

    把Nginx主配置文件/usr/local/nginx/conf/nginx.conf中的下面一行注释掉,即在前面加一 #

    #fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;

    cd /var/local/nginx/conf

    mkdir conf.d

    在/var/local/nginx/conf/conf.d  下建立,xx.conf虚拟主机配置文件即可

    编译安装MySQL

    创建用户和用户组与赋予数据存放目录权限

    # useradd mysql -M -s /sbin/nologin

    #mkdir /var/lib/mysqldb                这里最好不要跟用mysql.rpm包安装的数据库目录 /var/lib/mysql 相同,以免造成麻烦

    #chown -R mysql.mysql  /var/lib/mysqldb

    cd /usr/local/src; tar -zxvf mysql-5.6.10.tar.gz; cd mysql-5.6.10

    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/var/lib/mysqldb -DSYSCONFDIR=/usr/local/mysql/etc/  -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=yes -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_READLINE=on

    make ; make install

    cd /usr/local/mysql

    cp ./support-files/my-huge.cnf /etc/my.cnf      #拷贝配置文件

    (注意:如果/etc目录下面默认有一个my.cnf,直接覆盖即可。

       如果是mysql-5.6.10,不需要操作此步,也就是不需要复制配置文件到 /etc/my.cnf,且这个版本/usr/local/mysql/support-files/目录下也只有my-default.cnf,即mysql-5.6.10版本的数据库配置文件是  /usr/local/mysql/my.cnf )

    vi /etc/my.cnf               #编辑配置文件,在 [mysqld] 部分增加下面一行。注意:mysql-5.6.10把这一步留下面做

    datadir = /var/lib/mysqldb                 #添加MySQL数据库路径

    :wq!#保存退出    

    (注意:mysql-5.6.10版本

    vi  ./support-files/my-default.cnf            #在[mysqld] 加入以下两行

    #bind-address=127.0.0.1

    #port=32106

    datadir=/var/lib/mysqldb

    socket=/tmp/mysql.sock

    skip-name-resolve

    #忘记密码启用下面这行,skip-grant-tables

    #skip-grant-tables

    ./scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysqldb           #生成mysql系统数据库,在/usr/local/mysql执行

    (注意:mysql-5.6.10版本的执行完此命令后,会在/usr/local/mysql生成my.cnf文件,此时再修改 

    vi /usr/local/mysql/my.cnf                #编辑配置文件,

    在 [mysqld] 部分增加下面一行。

    datadir = /var/lib/mysqldb                 #添加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            #(编辑,其实这两个目录在./configure配置时就已经指定了,也可以不再此指定了,如果启动mysqld时出现

    /etc/init.d/mysqld: line 46: /usr/local/mysql: is a directory

    /etc/init.d/mysqld: line 47: /var/lib/mysqldb: is a directory

    就不要加指定这两个目录)

    basedir = /usr/local/mysql         #MySQL程序安装路径

    datadir = /var/lib/mysqldb      #MySQl数据库存放目录

    service mysqld start                    #启动,也可以执行 /usr/local/mysql/bin/mysqld_safe &  来启动,这种方式也可以让它随机启动,即vi /etc/rc.local 加入一行 /usr/local/mysql/bin/mysqld_safe &即可。

    如果不行,请再重复  ./scripts/mysql_install_db --user=mysql      到此的步骤,mysql-5.6.10版本的请先删除 ./my.cnf,再重复以上步骤

    配置库文件搜索路径

    # echo "/usr/local/mysql/lib" >> /etc/ld.so.conf 

    # ldconfig 

    #echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile 

    #source /etc/profile 

    下面这两行把myslq的库文件链接到系统默认的位置,这样你在编译类似PHP等软件时可以不用指定mysql的库文件地址。

    ln -s /usr/local/mysql/lib /usr/lib/mysql

    ln -s /usr/local/mysql/include/mysql /usr/include/mysql

    mysql_secure_installation              #设置Mysql密码

    ###################################################################

    Enter current password for root (enter for none):                #直接回车,mysql root初始密码为空

    OK, successfully used password, moving on...

    Setting the root password ensures that nobody can log into the MySQL

    root user without the proper authorisation.

    Set root password? [Y/n] Y                      #是否设置root密码

    New password:                                         #输入root要设置的新密码

    Re-enter new password:                          #再次输入新密码

    Password updated successfully!

    Reloading privilege tables..

     ... Success!

    By default, a MySQL installation has an anonymous user, allowing anyone

    to log into MySQL without having to have a user account created for

    them.  This is intended only for testing, and to make the installation

    go a bit smoother.  You should remove them before moving into a

    production environment.

    Remove anonymous users? [Y/n] Y        #是否删除mysql匿名anonymous用户

     ... Success!

    Normally, root should only be allowed to connect from 'localhost'.  This

    ensures that someone cannot guess at the root password from the network.

    Disallow root login remotely? [Y/n] Y          #是否禁止root远程登录

     ... Success!

    By default, MySQL comes with a database named 'test' that anyone can

    access.  This is also intended only for testing, and should be removed

    before moving into a production environment.

    Remove test database and access to it? [Y/n] Y      #是否删除 test 数据库

     - Dropping test database...

     ... Success!

     - Removing privileges on test database...

     ... Success!

    Reloading the privilege tables will ensure that all changes made so far

    will take effect immediately.

    Reload privilege tables now? [Y/n] Y           #是否马上重载特权表

     ... Success!

    Cleaning up...

    All done!  If you've completed all of the above steps, your MySQL

    installation should now be secure.

    Thanks for using MySQL!

    ###################################################################

    或者直接修改密码/usr/local/mysql/bin/mysqladmin -u root -p password "123456" #修改密码

    mysql>UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE User = 'root';(生新设置密码)

    mysql>flush privileges;(刷新权限)service mysqld restart #重启

    到此,mysql安装完成!

    问题1:

    Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysql/Serv1-01.pid).

    Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

    查看日志 /var/lib/mysql/localhost.err

    Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist

    最终解决方法如下:

    在mysql的安装目录下,我的是/usr/local/mysql

    ./scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysqldb

    原因是重装的时候数据目录不一致导致

    然后再次启动,OK

    实在不行就在   /usr/local/mysql/support-files/my-default.cnf  文件的  [mysqld]  添加下面这行,再执行./scripts/mysql_install_db --user=mysql --datadir=/var/lib/mysqldb

    datadir = /var/lib/mysqldb  

    问题2:Starting MySQL. ERROR! The server quit without updating PID file (/var/lib/mysqldb/CentOS7.pid).

     mysql5.6.19

    报这个错时,跟问题1很像,但却不是一样的,这里时候可以尝试用安全模式启动

    /usr/local/mysql/bin/mysqld_safe &

    然后会报错:

    [1] 10593

    [root@CentOS7 mysql]# 140831 13:10:13 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.

    touch: cannot touch ‘/var/log/mariadb/mariadb.log’: No such file or directory

    chmod: cannot access ‘/var/log/mariadb/mariadb.log’: No such file or directory

    touch: cannot touch ‘/var/log/mariadb/mariadb.log’: No such file or directory

    chown: cannot access ‘/var/log/mariadb/mariadb.log’: No such file or directory

    140831 13:10:13 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysqldb

    /usr/local/mysql/bin/mysqld_safe: line 129: /var/log/mariadb/mariadb.log: No such file or directory

    /usr/local/mysql/bin/mysqld_safe: line 166: /var/log/mariadb/mariadb.log: No such file or directory

    touch: cannot touch ‘/var/log/mariadb/mariadb.log’: No such file or directory

    chown: cannot access ‘/var/log/mariadb/mariadb.log’: No such file or directory

    chmod: cannot access ‘/var/log/mariadb/mariadb.log’: No such file or directory

    140831 13:10:13 mysqld_safe mysqld from pid file /var/run/mariadb/mariadb.pid ended

    /usr/local/mysql/bin/mysqld_safe: line 129: /var/log/mariadb/mariadb.log: No such file or directory

    大致意思是说:无法创建日志文件

    解决方法:mkdir /var/log/mariadb;touch /var/log/mariadb/mariadb.log;chown -R mysql:mysql /var/log/mariadb

    问题3:Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 

    解决方法:vi my.cnf   在 [mysqld]   一加下面这行

    socket=/tmp/mysql.sock

    允许root远程登录

    在本机先使用root用户登录mysql: 

    mysql -u root -p"youpassword" 

    进行授权操作: 

    mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION; 

    重载授权表: 

    FLUSH PRIVILEGES; 

    退出mysql数据库: 

    exit

    更新mysql用户密码:

    >update mysql.user set password=password('新密码') where User="test" and Host="localhost"; 

    删除mysql用户及权限

    mysql>Delete FROM user Where User='test' and Host='localhost'; 

     mysql>flush privileges;

     mysql>drop database testDB; //删除用户的数据库

    删除账户及权限:>drop user 用户名@'%';

            >drop user 用户名@ localhost;

    调优设置,vi   my.conf

    #调优

    #指定MySQL可能的连接数量

    back_log = 512

    #缓冲innodb池大小

    innodb_buffer_pool_size = 2048M

    innodb_log_file_size = 512M

    innodb_log_buffer_size =16M

    thread_stack = 256K

    sort_buffer_size = 38M

    read_buffer_size = 4M

    join_buffer_size = 8M

    thread_cache_size = 64

    query_cache_size = 64M

    query_cache_type = 1

    query_cache_limit = 1048576

    tmp_table_size = 256M

    max_connections = 768

    max_connect_errors = 10000000

    #断开超过10秒的连接,(需同时添加两条)

    wait_timeout  = 30

    interactive_timeout = 30

    #该参数取值为服务器逻辑CPU数量x2

    thread_concurrency = 16

    问题4: mysql DNS反解:skip-name-resolve

    错误日志有类似警告:

    120119 16:26:04 [Warning]IP address '192.168.1.10'could notbe resolved: Name orservice notknown

    120119 16:26:04 [Warning]IP address '192.168.1.14'could notbe resolved: Name orservice notknown

    120119 16:26:04 [Warning]IP address '192.168.1.17'could notbe resolved: Name orservice notknown

    通过show processlist发现大量类似如下的连接:

    |592|unauthenticated user|192.168.1.10:35320|NULL|Connect||login|NULL|

    |593|unauthenticated user|192.168.1.14:35321|NULL|Connect||login|NULL|

    |594|unauthenticated user|192.168.1.17:35322|NULL|Connect||login|NULL|

    skip-name-resolve 参数的作用:不再进行反解析(ip不反解成域名),这样可以加快数据库的反应时间。

    修改配置文件添加并需要重启:

    [mysqld]

    skip-name-resolve

    编译安装PHP

    cp -frp /usr/lib64/libldap* /usr/lib/

    cp -frp /usr/local/mysql/lib/libmysqlclient.so.* /usr/lib/

    #ldconfig -v

    假设wget都下载在/usr/local/src

    libiconv安装

    由于历史原因,国际化的文字常常由于语言或者国家的原因使用不同的编码。随着互联网时代的到来,通过互联网进行文字交流也逐渐增多:浏览外国的网站,这个时候字符编码的转换变得尤为重要。这带来了一个问题,就是许多字符在某一种编码方式中没有。为了解决这种混乱,Unicode的编码方式被建立。 Unicode是一种超级编码包含了所有这些编码的字符集,因此一些新的文本格式像XML的默认编码方式就是Unicode. 但是很多老式的计算机还在使用当地的传统的字符编码方式。而一些程序,例如邮件程序和浏览器必须能在这些不同的用户编码之间作转换。其他的一些程序则内置支持Unicode,以顺利支持国际化的处理,但是仍然有在Unicode和其他的传统编码之间转换的需求。GNU的00libiconv就是为这两种应用设计的编码转换库。0libiconv库为需要做转换的应用提供了一个iconv()的函数,以实现一个字符编码到另一个字符编码的转换。

    cd /usr/local/src

    tar -zxvf libiconv-1.14.tar.gz

    cd libiconv-1.14

    ./configure --prefix=/usr/local

    make ; make install

    cd /usr/local/src

    tar -zxvf libmcrypt-2.5.8.tar.gz

    cd libmcrypt-2.5.8

    ./configure; make; make install            (安装的目录在/usr/local下 ,/lib目录就可以看到)

    #cd ../; tar -zxvf mhash-0.9.9.9.tar.gz; cd mhash-0.9.9.9; ./configure; make; make install

    (安装mhash, 安装在/usr/local下, bin目录下看到命令)

    #cd ../; tar zxvf mcrypt-2.6.8.tar.gz; cd mcrypt-2.6.8; export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH; ./configure; make; make install

    (安装完后/usr/local/bin 下就可以看到mcrypt decrypt命令了)

    #cd /usr/local/src;  tar -zxvf php-5.4.13.tar.gz; cd php-5.4.13

     ./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-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap=shared --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap  --enable-pdo=shared --with-pdo-mysql=shared --enable-mssql=shared --with-sqlite=shared --with-pdo-sqlite=shared

    若mysql 是yum安装的:mysql参数可以这样  --with-mysql=/usr --with-mysqli=/usr/bin/mysql_config

    php5.3 以后就不需要指定myslq的安装路径和myslq的库了,因为php自己有一个mysql的客户端,直接--with-mysql=myslqnd --with-mysqli=myslqnd --with-pdo-mysql=mysqlnd 就ok了

    配置完后会有警告提示:

    configure: WARNING: unrecognized options: --enable-discard-path, --enable-safe-mode, --enable-fastcgi, --enable-force-cgi-redirect

    没事的,略过

    make ; make install    (make ZEND_EXTRA_LIBS='-liconv' ; make install        若无liconv环境时可用此命令)

    错误提示1 .../sapi/cli/php: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object file: No such file or directory

    make: *** [ext/phar/phar.php] Error 127

    32位系统

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

    64位系统

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

    php-fpm启动报错:

    Starting php_fpm /usr/local/webserver/php/bin/php-cgi: error while loading shared libraries: libmysqlclient.so.16: cannot open shared object file: No such file or directory failed。

    报错信息指示libmysqlclient.so.16没有找到。

    进入/usr/local/mysql/lib/ 目录查看,呵呵,还真没有,只有一个libmysqlclient.so.16.0.0 。于是我建立了一个软件链接来指向libmysqlclient.so.16。

    cd /usr/local/mysql/lib/

    ln -s libmysqlclient.so.16 libmysqlclient.so.16.0.0

    再次启动php-fpm,问题解决了。

    听有些网友说问题仍然存在,那可以试试其它网友的解决方案,在/usr/lib/下建立个软链接:

    ln -s /usr/local/mysql/lib/libmysqlclient.so.16 /usr/lib/

    如果不行,往下看

    export LD_LIBRARY_PATH=”/usr/local/mysq/lib:$LD_LIBRARY_PATH”

    加上这句后在去安装编译就ok了。

    1.找到libmysqlclient.so.16所在的目录

    2.将该目录加入到/etc/ld.so.conf的第一行

    3.ldconfig

    更新库所在位置

    /usr/local/mydns/sbin/named -4 -n 1 -S 52428

    错误提示2 

    /usr/local/src/php-5.4.8/sapi/cli/php: error while loading shared libraries: libmcrypt.so.4: cannot 

    open shared object file: No such file or directory

    make: *** [ext/phar/phar.phar] Error 127

    方法:

    find / name=libmcrypt.so.4 |grep libmcrypt.so.4

    ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib64/

    ldconfig

    错误提示3

    chmod: cannot access `ext/phar/phar.phar': No such file or directory

    make: [ext/phar/phar.phar] Error 1 (ignored)

    ...

    cp: cannot stat `ext/phar/phar.phar': No such file or directory 

    方法:

    在/usr/local/src/php-5.4.8/ext/phar下创建一个软链接,或把文件复制到该目录下

    ln -s  /usr/local/src/php-5.4.8/ext/phar/phar/phar.php /usr/local/src/php-5.4.8/ext/phar/phar.phar

    或 cp -p /usr/local/src/php-5.4.8/ext/phar/phar/phar.php /usr/local/src/php-5.4.8/ext/phar/phar.phar

    也可以在对php进行configure的时候,在./configure的后面加上 --without-pear 参数

    如果出现:

    configure: error: Cannot find ldap libraries in /usr/lib.

    解决办法: 

    cp -frp /usr/lib64/libldap* /usr/lib/

    configure: warning: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

    –enable-re2c-cgoto Enable -g flag to re2c to use computed goto gcc extension

    configure: warning: lemonversions supported for regeneration of libsqlite parsers: 1.0 (found: none). 

    yum install sqlite-devel  或在编译时加上   --without-sqlite

    ####################################################

    make ZEND_EXTRA_LIBS='-liconv' 

    make install

    #########################

    问题4:

    PEAR package PHP_Archive not installed: generated phar will require PHP’s phar extension be enabled.

    解决方法:当前php目录

    下载:wget http://pear.php.net/go-pear.phar

    执行:/opt/webserver/php/bin/php go-pear.phar

    可以选择all,或其他 

    问题5:

    configure: error: cannot compute sizeof (char *), 77 See `config.log' for more details.

    解决方法:vi /etc/ld.so.conf   添加如下内容,即libiconv.so.2所在的目录

    /usr/local/lib

    问题6:make: *** [sapi/fpm/php-fpm] 错误 1

    1)、重新安装libiconv

    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz

    tar -zxvf libiconv-1.13.1.tar.gz cd libiconv- 1.13.1 ./configure

    make

    make install

    2)、去除 iconv模块再编译应用:

    使用./configure –help查看参数,看具体应用如何去除iconv编译,例如下面是 opencc 的无 iconv的编译方法: opencc: ./configure CFLAGS=-liconv 再如php编译时,可在make时通过zend扩展参数去除libiconv的编译选项 make ZEND_EXTRA_LIBS='-liconv' make install

    3、iconv重复安装在不同目录,造成include文件iconv.h等重复 通过 find / -name "iconv.h" 如果查找到2个以上返回结果,说明 iconv重复安装了,卸载多余的版本即可正常编译。

    本人用第三种方法,确实有不同的版本,

    删除一个就OK。

    问题7:

    /usr/local/src/php-5.3.10/ext/xmlrpc/libxmlrpc/encodings.c:73: undefined reference to `libiconv_open' /usr/local/src/php-5.3.10/ext/xmlrpc/libxmlrpc/encodings.c:81: undefined reference to `libiconv' /usr/local/src/php-5.3.10/ext/xmlrpc/libxmlrpc/encodings.c:101: undefined reference to `libiconv_close' collect2: ld returned 1 exit status make: *** [sapi/fpm/php-fpm] 错误

    解决方法:

    表面看,是libiconv安装问题,重装libiconv之后问题依旧,网上看有人舍弃libiconv,使用 –without-iconv,我觉的不可取,这样是回避问题。 找了n久,终于找到bug所在: 在执行完 ./configure … 之后,修改下 Makefile,找到其中的

    EXTRA_LIBS = -lcrypt -lz -lcrypt -lrt -lmysqlclient -lmcrypt -lldap -llber -lfreetype -lpng -lz -ljpeg -lcurl -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt

     在最后面添加 -liconv ,修改后如下

    EXTRA_LIBS = -lcrypt -lz -lcrypt -lrt -lmysqlclient -lmcrypt -lldap -llber -lfreetype -lpng -lz -ljpeg -lcurl -lz -lrt -lm -ldl -lnsl -lrt -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lcurl -ldl -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lidn -lssl -lcrypto -lz -lxml2 -lz -lm -lssl -lcrypto -ldl -lz -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lxml2 -lz -lm -lcrypt -liconv

    问题8:PHP Warning: PHP Startup:Invalidlibrary (maybe nota PHP library)'pdo_mysql.so' inUnknownon line 0

    首先phpize:

    cd ext/pdophpizemake &&make installcd ../pdo_mysqlphpizemake &&make install

    php.ini相应修改:

    extension=pdo.so

    extension=pdo_mysql.so

    结果不能识别:

    PHP Warning: PHP Startup:Invalidlibrary (maybe nota PHP library)'pdo.so' inUnknownon line 0PHP Warning: PHP Startup:Invalidlibrary (maybe nota PHP library)'pdo_mysql.so' inUnknownon line 0

    无奈只好./configure附加上--enable-pdo --with-pdo-mysql从头编译:

    ./configure --with-openssl=/usr/--with-apxs2=/usr/local/apache2/bin/apxs --with-mysql-dir=/usr/--with-libdir=/lib64 --with-mysql --with-curl --enable-sockets --enable-xml --enable-mbstring --with-gd --enable-memcache --enable-soap --enable-zip --with-jpeg-dir=/usr/lib64 --enable-pdo --with-pdo-mysql

    make &&make install

    通了!  然后再重新安装pdo、pdo_mysql等

    问题9:configure: error: cannot compute sizeof (char *), See `config.log' for more details.

    先查看日志  vi config.log 

    查找关键字   sizeof

    wKioL1WgyZDBL7_dAAHpOO94dps860.jpg

     问题出来了,是找不到 libmcrypt.so.4 

    解决方法:ln -s /usr/local/lib/libmcrypt.so.4  /usr/local/lib64/libmcrypt.so.4 

    问题10:编译php的时候会出现下面错误

    checking for mysql_config... not found

    configure: error: Unable to find your mysql installation

    解决方法:

    ln -s /usr/local/mysql/bin/mysql_config /usr/bin/mysql_config

    问题11:configure: error: Cannot find MySQL header files under

    解决方法:

    cp -p /usr/local/mysql/bin/mysql_config /usr/bin     或   ln -s /usr/local/mysql/bin/mysql_config /usr/bin

    问题12:

    /usr/local/src/php-5.2.17/sapi/cli/php: error while loading shared libraries: libmhash.so.2: cannot open shared object file: No such file or directory

    make[1]: *** [install-pear-installer] Error 127

    make: *** [install-pear] Error 2

    解决方法:ln -s /usr/local/lib/libmhash.so.2 /usr/local/lib64/         

    ldconfig

    问题13:configure: error: libpng.(a|so) not found.          configure: error: libjpeg.(a|so) not found.

    解决方法:find  / libpng |grep  libpng

    ln -s /usr/lib64/libpng* /usr/lib

    ln -s /usr/lib64/libjpe* /usr/lib

    问题14:/lib64/liblber-2.4.so.2: could not read symbols: Invalid operation

    配置的时候 参数为 --with-ldap=shared

    make test 

    cp /usr/local/src/php-5.4.13/php.ini-development /usr/local/php/etc/php.ini

    如果是生产环境则cp /usr/local/src/php-5.4.13/php.ini-production /usr/local/php/etc/php.ini

    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             #编辑

    [global]

    pid = run/php-fpm.pid #取消前面的分号

    [www]

    user = nginx          #设置php-fpm运行账号为nginx

    group = nginx      #设置php-fpm运行组为nginx

    error_log = log/php-fpm.log        #启用错误日志

    log_level = notice                   #此行以下的参数可按默认的,也可按下面的参数进行调整

    emergency_restart_threshold = 0

    emergency_restart_interval = 0

    pm.start_servers = 20

    pm.min_spare_servers = 5

    pm.max_spare_servers = 35

    pm.max_requests = 500

    pm.max_children = 45

    pm.max_children = 

    php-fpm添加系统服务并设置开机启动

    cp /usr/local/src/php-5.4.13/sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm     #拷贝php-fpm到启动目录

    chmod +x /etc/rc.d/init.d/php-fpm          #添加执行权限

    chkconfig php-fpm on           #设置开机启动

    vi /usr/local/php/etc/php.ini        #编辑PHP配置文件

    找到: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

    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,fsockopen,opendir,readdir

    #列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用。

    fsockopen函数:php发包函数,强烈建议您修改php.ini文件,关闭这个函数,95%以上的程序是不需要这个函数的,个别程序如淘宝客、Ucenter、部分  API程序等才需要使用这个函数。如果关闭这个函数,发包程序彻底失效,极大的增强了服务器的安全级别

    opendir,readdir函数:浏览读取目录用。禁用此函数后,像phpsps这样的木马就浏览不了目录了。但,同样需要PHP后台管理浏览目录

    系统运维 温馨提醒:

    找到:;date.timezone =

    修改为:date.timezone = "Asia/Shanghai"          #设置时区

    找到:expose_php = On

    修改为:expose_php = OFF              #禁止显示php版本的信息,新建环境时先打开,便于排错,=设置好后再关闭

    找到:short_open_tag = Off

    修改为:short_open_tag = ON         #支持php短标签

    修改 upload_max_filesize = 2M 为 upload_max_filesize = 200M         #允许上传的最大大小,单位M

    修改 post_max_size = 8M         为 post_max_size = 200M                 #表单上允许的文件最大大小,单位M

    把PHP配置文件中 Date区改成如下

    [Date]

    ; Defines the default timezone used by the date functions

    ; http://php.net/date.timezone

    date.timezone = "Asia/Shanghai"                 

    ; http://php.net/date.default-latitude

    date.default_latitude = 31.5167

    ; http://php.net/date.default-longitude

    date.default_longitude = 121.4500

    service php-fpm start    #启动php-fpm,也可以用非服务的方式启动,用/usr/local/php/sbin/php-fpm &     (+ &表示后台运行)

    问题:

    启动时提示如下错误

    Starting php-fpm /usr/local/php/sbin/php-fpm: error while loading shared libraries: libiconv.so.2: cannot open shared object file: No such file or directory failed

    解决方法:在/etc/ld.so.conf最后加一行/usr/local/lib,运行ldconfig,再运行重启nginx 就可以了,前提是需要编译安装了libiconv,libiconv的安装参照前文。 

    PHP安装扩展pdo_mysql    (根据需要求安装,可选。这里也可以在php ./configure  预编译时加上参数--with-pdo-mysql=DIR,DIR表示mysql的安装路径,这里需要换成你的自己的mysql安装路径)

    这里用PHP中的phpize工具可以帮助我们轻松的扩展PHP而不需要重新编译PHP

    #cd ./ext/pdo                       #   ./为php源码路径,如我的路径为/usr/local/usr/php-5.4.13/,把它替换相应的路径就行了

    执行/usr/local/php/bin/phpize         #PHP的安装目录为/usr/local/php

    /usr/local/php/bin/phpize                #运行显示如下

    ]# /usr/local/php/bin/phpize

    Configuring for:

    PHP Api Version:         20100412

    Zend Module Api No:      20100525

    Zend Extension Api No:   220100525

    ./configure --with-php-config=/usr/local/php/bin/php-config --enable-pdo=shared

    make; make install; make test

    如果成功,则在make install完成后就会出现如下内容

    #Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

    Installing header files: /usr/local/php/include/php/

    Installing PDO headers: /usr/local/php/include/php/ext/pdo/

    在php配置文件的 Dynamic Extensions 区域中添加

    vi /usr/local/php/etc/php.ini

    extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/pdo.so"

    #cd ./ext/pdo_mysql

    执行/usr/local/php/bin/phpize

    /usr/local/php/bin/phpize

    ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql

    make; make install

    成功则出现

    Build complete.

    Don't forget to run 'make test'.

    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/

    最后测试  (这个版本的PHP源码文件中缺少测试扩展文件  /usr/local/usr/php-5.4.8/ext/pdo_mysql/ext/pdo/tests,不过不影响正常使用,想要通过这个测试,可以 mkdir -p /usr/local/usr/php-5.4.8/ext/pdo_mysql/ext/pdo ; cp -R  /usr/local/usr/php-5.4.8/ext/pdo/tests /usr/local/usr/php-5.4.8/ext/pdo_mysql/ext/pdo )

    #make test

    在php配置文件的 Dynamic Extensions 中添加

    extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/pdo_mysql.so"

    上面两个 extension 扩展也可以合成一条,为规范建议放到 Paths and Directories 

    extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525"

    extension=pdo.so

    extension=pdo_mysql.so

    安装其他扩展

    1、安装 pear

    [root@test php-5.3.6]# cd ext/phar

    [root@test phar]# wget http://pear.php.net/go-pear.phar

    [root@test phar]# /usr/local/php/bin/php go-pear.phar

    Below is a suggested file layout for your new PEAR installation.  To

    change individual locations, type the number in front of the

    directory.  Type 'all' to change all of them or simply press Enter to

    accept these locations.

     1. Installation base ($prefix)                   : /usr/local/php

     2. Temporary directory for processing            : /tmp/pear/install

     3. Temporary directory for downloads             : /tmp/pear/install

     4. Binaries directory                            : /usr/local/php/bin

     5. PHP code directory ($php_dir)                 : /usr/local/php/lib/php

     6. Documentation directory                       : /usr/local/php/docs

     7. Data directory                                : /usr/local/php/data

     8. User-modifiable configuration files directory : /usr/local/php/cfg

     9. Public Web Files directory                    : /usr/local/php/www

    10. Tests directory                               : /usr/local/php/tests

    11. Name of configuration file                    : /usr/local/php/etc/pear.conf

    1-11, 'all' or Enter to continue: 

    Beginning install...

    Configuration written to /usr/local/php/etc/pear.conf...

    Initialized registry...

    Preparing to install...

    installing phar:///usr/local/src/php-5.3.6/ext/phar/go-pear.phar/PEAR/go-pear-tarballs/Archive_Tar-1.3.7.tar...

    installing phar:///usr/local/src/php-5.3.6/ext/phar/go-pear.phar/PEAR/go-pear-tarballs/Console_Getopt-1.3.0.tar...

    installing phar:///usr/local/src/php-5.3.6/ext/phar/go-pear.phar/PEAR/go-pear-tarballs/PEAR-1.9.3.tar...

    installing phar:///usr/local/src/php-5.3.6/ext/phar/go-pear.phar/PEAR/go-pear-tarballs/Structures_Graph-1.0.4.tar...

    installing phar:///usr/local/src/php-5.3.6/ext/phar/go-pear.phar/PEAR/go-pear-tarballs/XML_Util-1.2.1.tar...

    install ok: channel://pear.php.net/Archive_Tar-1.3.7

    install ok: channel://pear.php.net/Console_Getopt-1.3.0

    install ok: channel://pear.php.net/Structures_Graph-1.0.4

    install ok: channel://pear.php.net/XML_Util-1.2.1

    install ok: channel://pear.php.net/PEAR-1.9.3

    PEAR: Optional feature webinstaller available (PEAR's web-based installer)

    PEAR: Optional feature gtkinstaller available (PEAR's PHP-GTK-based installer)

    PEAR: Optional feature gtk2installer available (PEAR's PHP-GTK2-based installer)

    PEAR: To install optional features use "pear install pear/PEAR#featurename"

    The 'pear' command is now at your service at /usr/local/php/bin/pear

    2、Memcache扩展

    Memcache是danga.com的一个开源项目,它是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的Hash表,能够用来存储各种格式的数据。可以类比于MySQL这样的服务,而PHP扩展的Memcache实际上是连接Memcache的方式。 

    cd /usr/local/src 

    wget http://pecl.php.net/get/memcache-2.2.6.tgz

    tar xvf memcache-2.2.6.tgz

    cd memcache-2.2.6

    /usr/local/php/bin/phpize

    (

    [root@test memcache-2.2.6]# /usr/local/php/bin/phpize          

    Configuring for:

    PHP Api Version:         20090626

    Zend Module Api No:      20090626

    Zend Extension Api No:   220090626

    )

    ./configure --with-php-config=/usr/local/php/bin/php-config

    make

    make install

    (

    [root@test memcache-2.2.6]# make install

    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    )

    修改php.ini ,添加扩展库文件的目录及扩展库

    vi /usr/local/php/etc/php.ini    找到“   ; extension_dir = "./"  ”  这一行,在此行下面添加:

    extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"

    extension = "memcache.so"

    3、eaccelerator加速器

    eaccelerator是一个自由开放源码PHP加速器,优化和动态内容缓存,提高了性能php脚本的缓存性能,使得PHP脚本在编译的状态下,对服务器的开销几乎完全消除。 它还有对脚本起优化作用,以加快其执行效率。使您的PHP程序代码执效率能提高1-10倍;

    wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2

    tar jxvf eaccelerator-0.9.6.1.tar.bz2

    cd eaccelerator-0.9.6.1/

    /usr/local/php/bin/phpize

    ./configure --enable-eaccelerator=shared --with-php-config=/usr/local/php/bin/php-config

    make

    make install

    [root@test eaccelerator-0.9.6.1]# make install

    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    配置eaccelerator 加速PHP 

    mkdir -p /usr/local/php/eaccelerator_cache_dir 建立加速缓存目录

    chmod 777 /usr/local/php/eaccelerator_cache_dir

    vi /usr/local/php/etc/php.ini  在文件末尾添加如下

    [eaccelerator]

    zend_extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so"

    eaccelerator.shm_size = "16"

    eaccelerator.cache_dir = "/usr/local/php/eaccelerator_cache_dir"

    eaccelerator.enable = "1"

    eaccelerator.optimizer = "1"

    eaccelerator.check_mtime = "1"

    eaccelerator.debug = "0"

    eaccelerator.filter = ""

    eaccelerator.shm_max = "0"

    eaccelerator.shm_ttl = "0"

    eaccelerator.shm_prune_period = "0"

    eaccelerator.shm_only = "0"

    eaccelerator.compress = "1"

    eaccelerator.compress_level = "9"

    保存退出

    以上参数只修改了缓存和扩展库的的路径,其他相关参数可自行参考修改

    4、PDO_MYSQL:

    PDO_MYSQL is a driver that implements the PHP Data Objects (PDO) interface to enable access from PHP to MySQL 3.x, 4.x and 5.x databases.http://pecl.php.net/package/PDO_MYSQL

    PDO_MYSQL是一个驱动程序,它实现了PHP数据对象(PDO)的接口,以实现从PHP访问MySQL的3.x,4.x和5.x的数据库。

    wget http://pecl.php.net/get/PDO_MYSQL-1.0.2.tgz

    tar zxvf PDO_MYSQL-1.0.2.tgz

    cd PDO_MYSQL-1.0.2

    /usr/local/php/bin/phpize

    ./configure --with-php-config=/usr/local/php/bin/php-config --with-pdo-mysql=/usr/local/mysql --with-mysql-sock=/var/mysqldata/mysql.sock

    (

    checking for re2c... no

    configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

    )

    make

    make install

    (

    [root@test PDO_MYSQL-1.0.2]# make install

    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    )

    修改php.ini ,添加扩展库文件的目录及扩展库

    vi /usr/local/php/etc/php.ini    找到“   ; extension_dir = "./"  ”  这一行,在此行下面添加:

    extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"

    extension = "pdo_mysql.so"

    5、ImageMagick

    ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过89种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。对图片的操作,即可以通过命令行进行,也可以用C/C++、Perl、Java、PHP、Python或Ruby编程来完成。同时ImageMagick提供了一个高质量的2D工具包,部分支持SVG。

    yum -y install perl-ExtUtils-MakeMaker

    wget ftp://mirror.aarnet.edu.au/pub/imagemagick/ImageMagick-6.7.0-10.tar.gz        

    #官网 http://www.imagemagick.org/download/

    tar zxvf ImageMagick-6.7.0-10.tar.gz

    cd ImageMagick-6.7.0-10

    ln -s  /usr/lib64/libtiff.so /usr/lib

    ln -s  /usr/lib64/libpng.so /usr/lib

    ln -s  /usr/lib64/libjpeg.so /usr/lib

    ./configure --prefix=/usr/local/imagemagick

    make; make install

    vi /etc/ld.so.conf 加入一行:

    /usr/local/imagemagick/lib

    ldconfig -v

    cd ..

    参考官方安装说明 :

    http://www.imagemagick.org/script/advanced-unix-installation.php   

    验证configuration情况:identify -list configure  验证支持的图片格式:identify -list format 

    http://wenku.baidu.com/link?url=1yeJdHxdpUkOXr0UzYCsVCqjBtyr0BOV3x1pXUN6_UdhMW5Wb9Aa8cNlHxBGPZcZZ_f3BctE65hSBWW4nI18b5PsnPdMHIMGvYlG5mCaAqC

    6、imagick

        一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。Imagick(PHP的原生函数库)是一个功能强大的图像处理库,Imagick是PHP下针对ImageMagick这个强大软件包的API接口。Imagick依赖于ImageMagick。[注意顺序]

    wget http://pecl.php.net/get/imagick-3.1.0b1.tgz

    tar -zxvf imagick-3.1.0b1.tgz 

    cd imagick-3.1.0b1

    /usr/local/php/bin/phpize

    ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick

    make; make install

    (

    [root@test imagick-3.1.0b1]# make install

    Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/

    Installing header files:          /usr/local/php/include/php/

    )

    修改php.ini ,添加扩展库文件的目录及扩展库

    vi /usr/local/php/etc/php.ini    找到“   ; extension_dir = "./"  ”  这一行,在此行下面添加:

    extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"

    extension = "imagick.so"

    安装imagick时Cannot locate header file MagickWand.h错误的解决

    环境如下:

    php5.4.13

    ImageMagick-6.8.3-10

    imagick-3.0.1

    可是出错了一个问题.就是死说找不到MagickWand.h:

    checking for MagickWand.h header file... configure: error: Cannot locate header file MagickWand.h

    可是我明明正确安装了ImageMagick的呀.GOOGLE了半天,也解决不了这个问题.后面对照另一个服务器上的ImageMagick才发现,原来ImageMagick 6.8这个版后的目录结构变了,旧版本头文件是放在/usr/local/include/ImageMagick目录的,而ImageMagick 6.8则是放在/usr/local/include/ImageMagick-6

    添加软连接

    命令如下:

    ln -s /usr/local/include/ImageMagick-6 /usr/local/include/ImageMagick

    make && make && install

    编译通过!

    php 编译安装imagick报错 wand/MagickWand.h:没有那个文件或目录

    在包含自 /soft/imagick-3.1.0RC2/imagick_file.c:21 的文件中:

    /soft/imagick-3.1.0RC2/php_imagick.h:49:31: 错误:wand/MagickWand.h:没有那个文件或目录

    In file included from /soft/imagick-3.1.0RC2/php_imagick_file.h:24,

                     from /soft/imagick-3.1.0RC2/imagick_file.c:22:

    /soft/imagick-3.1.0RC2/php_imagick_defs.h:72: 错误:expected specifier-qualifier-list before ‘MagickWand’

    /soft/imagick-3.1.0RC2/php_imagick_defs.h:80: 错误:expected specifier-qualifier-list before ‘DrawingWand’

    /soft/imagick-3.1.0RC2/php_imagick_defs.h:86: 错误:expected specifier-qualifier

    解决方法:

    export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig

    问题:

    诡异的问题,驾驭开源软件需要耐心呐~

    今天帮朋友给装一LNMP环境 

    CentOS6 64bit  

    其中, 在编译安装PHP5扩展模块:

     imagick    ImageMagick 

    下载地址:http://pecl.php.net/package/imagick

    tar xvzf imagick-3.1.0RC2.tgz 

    cd imagick-3.1.0RC2/  

    /usr/local/webserver/php/bin/phpize  

    ./configure --with-php-config=/usr/local/webserver/php/bin/php-config  

    make; make install  

    (#注: 出现大量的报错信息:

    /root/soft/imagick-3.1.0RC2/php_imagick.h:49:31: error: wand/MagickWand.h: No such file or directory

    In file included from /root/soft/imagick-3.1.0RC2/php_imagick_file.h:24,

                     from /root/soft/imagick-3.1.0RC2/imagick_file.c:22:

    /root/soft/imagick-3.1.0RC2/php_imagick_defs.h:72: error: expected specifier-qualifier-list before ‘MagickWand’

    ... ...

    /root/soft/imagick-3.1.0RC2/imagick_file.c:318: error: ‘php_imagick_object’ has no member named ‘magick_wand’

    /root/soft/imagick-3.1.0RC2/imagick_file.c:326: error: ‘MagickFalse’ undeclared (first use in this function)

    make: *** [imagick_file.lo] Error 1

    很是困惑,根据错误提示:

    /root/soft/imagick-3.1.0RC2/php_imagick.h:49:31: error: wand/MagickWand.h: No such file or directory

    感觉或许是64位系统,安装脚本按照32位系统的目录来寻找,所以找不到所需要的库文件......

    于是,我将 /usr/local/include/ImageMagick/   目录下的 wand、magick 子目录都copy到 imagick-3.1.0RC2/ 目录下,再编译。通过了~~

    看到这,想来你是明白了

    7、zbar扩展

    官网 http://zbar.sourceforge.net/

    wget http://nchc.dl.sourceforge.net/project/zbar/zbar/0.10/zbar-0.10.tar.bz2

    yum -y install gtk+ qt4

    export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/

    tar -jxvf zbar-0.10.tar.bz2; cd zbar-0.10; ./configure --disable-video --without-gtk --without-qt; make; make install

    #这里建议 zbar安装的目录最好默认,若使用 prefix指定了安装目录,则在安装 php-zbarcode扩展时寻找 zbar依赖时麻烦

    遇到错误:

    1、

    checking for linux/videodev.h... no

    configure: error: in `/usr/local/src/zbar-0.10':

    configure: error: test for video support failed!

    rebuild your kernel to include video4linux support or

    configure --disable-video to skip building video support.

    See `config.log' for more details.

    [root@CentOS7 zbar-0.10]# find / videodev.h |grep videodev.h

    find: ‘videodev.h’: No such file or directory

    解决:配置时添加   --disable-video

    2、

    checking for MAGICK... no

    configure: error: in `/usr/local/src/zbar-0.10':

    configure: error: Unable to find ImageMagick >= 6.2.6:

    No package 'MagickWand' found

    * Ensure that you installed any "development" packages for ImageMagick.

    * Consider adjusting the PKG_CONFIG_PATH environment variable if you

      installed software in a non-standard prefix.

    * You may set the environment variables MAGICK_CFLAGS and MAGICK_LIBS

      to avoid the need to call pkg-config.

      See the pkg-config man page for more details.

    * To avoid using ImageMagick altogether you may add the --without-imagemagick

      flag to the configure command; the zbarimg program will not be built.

    See `config.log' for more details.

    解决方法:

    export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/

    3、

    checking for python extension module directory... ${exec_prefix}/lib64/python2.7/site-packages

    checking for PYGTK... configure: error: Package requirements (pygtk-2.0) were not met:

    No package 'pygtk-2.0' found

    Consider adjusting the PKG_CONFIG_PATH environment variable if you

    installed software in a non-standard prefix.

    Alternatively, you may set the environment variables PYGTK_CFLAGS

    and PYGTK_LIBS to avoid the need to call pkg-config.

    See the pkg-config man page for more details.

    解决方法:添加 --without-gtk --without-qt

    8、php-zbarcode

    此扩展模块依赖 ZBar 、ImageMagick模块,所以要先安装 ZBar 、ImageMagick模块

    从https://github.com/mkoppanen/php-zbarcode 下载源源

    unzip  php-zbarcode-master.zip; cd php-zbarcode-master; /usr/local/php/bin/phpize; ./configure --with-php-config=/usr/local/php/bin/php-config --with-zbarcode-imagemagick-dir=/usr/local/imagemagick/; make; make install

    php.ini文件中添加如下扩展

    extension = zbarcode.so

    重启php-fpm即可

    9、ZendOptimizer-3.3.9安装

    php5.4扩展ZendOptimizer请参见  http://hi.baidu.com/hanxiao2100/item/6fd8632b0a55280c77272c12

    cd /usr/local/src; tar -zxvf ZendOptimizer-3.3.9-linux-glibc23-x86_64.tar.gz; cp /usr/local/src/ZendOptimizer-3.3.9-linux-glibc23-x86_64/data/5_2_x_comp/ZendOptimizer.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ZendOptimizer.so;

    修改php.ini在最后加入

    [Zend]

    zend_extension="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"

    保存即可,运行usr/local/php/bin/php -v    有with Zend Optimizer v3.3.9,说明成功,最重 service php-fpm restart 重启php-fcgi

    10、php zip扩展

    cd /usr/local/src/php-5.4.8/ext/zip

    /usr/local/php/bin/phpize

    ./configure --prefix=/usr/bin/zip --with-php-config=/usr/local/php/bin/php-config

    make; make install

    安装完之后,屏幕上会提示zip.so的位置。然后将其记录下来,如:/usr/local/php5.2/lib/php/extensions/no-debug-non-zts-20060613/zip.so

    使用root权限修改php.ini(通常可能会在/usr/local/lib/文件夹下,不过视当初安装php而定,可以通过phpinfo()来查看):

    编辑 php.ini文件

    extension = /usr/local/php5.2/lib/php/extensions/no-debug-non-zts-20060613/zip.so

    然后同样在php.ini文件中,将 

    zlib.output_compression = Off    改成

    zlib.output_compression = On 

    php.ini中不能禁用函数proc_open

    disable_functions =           此行不包含 proc_open

    11、XCache组件

    cd /usr/local/src

    tar zxvf xcache-3.1.0.tar.gz

    cd xcache-3.1.0

    /usr/local/php/bin/phpize

    ./configure -with-php-config=/usr/local/php/bin/php-config -enable-xcache -enable-xcache-coverager -enable-inline-optimization -disable-debug

    make; make install

    vi /usr/local/php/etc/php.ini

    在文件末尾添加:

    extension = "xcache.so" ;#你的安装路径

    xcache.admin.auth = On

    xcache.admin.user = "xcache"

    xcache.admin.pass = "5f4dcc3b5aa765d61d8327deb882cf99"  ;#password  is password

    xcache.size        = 32M

    xcache.shm_scheme  = "mmap"

    ;cpu number (cat /proc/cpuinfo |grep -c processor)

    xcache.count        = 4

    xcache.slots        = 8K

    xcache.ttl          = 0

    xcache.gc_interval  = 0

    xcache.var_size    = 16M

    xcache.var_count    = 1

    xcache.var_slots    = 8K

    xcache.var_ttl      = 0

    xcache.var_maxttl  = 0

    xcache.var_gc_interval =    300

    xcache.test        = Off

    xcache.readonly_protection = Off

    xcache.mmap_path    =  "/dev/zero"

    xcache.coredump_directory =  ""

    xcache.cacher      = On

    xcache.stat        = On

    xcache.optimizer    = Off

    [xcache.coverager]

    xcache.coverager    = On

    xcache.coveragedump_directory = ""

    另一例:

    wget http://xcache.lighttpd.net/pub/Releases/1.3.0/xcache-1.3.0.tar.gz

    /usr/local/php5/bin/phpize

    ./configure –enable-xcache --enable-xcache-coverager --with-php-config=/usr/local/php/bin/php-config --enable-inline-optimization --disable-debug

    make && make install

    /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/xcache.so

    vi /usr/local/php5/lib/php.ini

    [xcache-common] 

    zend_extension = /usr/local/php/lib/php/extensions/xcache.so 

    [xcache.admin] 

    ; Change xcache.admin.user to your preferred login name 

    xcache.admin.user = "admin" 

    ; Change xcache.admin.pass to the MD5 fingerprint of your password 

    ; Use md5 -s "your_secret_password" to find the fingerprint 

    xcache.admin.pass = "e10adc3949ba59abbe56e057f20f883e" 

    [xcache]

    xcache.cacher = On

    xcache.shm_scheme = "mmap"

    ;XCache的内存缓存大小,小内存VPS建议设为16M,普通网站建议设置为64MB,如果是IDC服务器,可以设置成256MB 

    xcache.size = 64M

    ; cpu number (cat /proc/cpuinfo |grep -c processor)

    xcache.count = 2

    xcache.slots = 8k

    xcache.ttl = 0

    xcache.gc_interval = 0

    xcache.var_size = 2M

    ; cpu number (cat /proc/cpuinfo |grep -c processor)

    xcache.var_count = 2

    xcache.var_slots = 8K

    xcache.var_ttl = 0

    xcache.var_maxttl = 0

    xcache.var_gc_interval = 300

    xcache.readonly_protection = Off

    xcache.mmap_path = "/dev/zero" 

    重启PHP模块

    正常load之后,

    在phpinfo显出的信息内

    Zend这快应该会加上XCache的内容

    This program makes use of the Zend Scripting Language Engine:

    Zend Engine v2.2.0, Copyright (c) 1998-2007 Zend Technologies

    with XCache v1.2.1, Copyright (c) 2005-2007, by mOo

    配置解释

    [xcache-common]

    extension=xcache.so

    [xcache.admin]

    xcache.admin.enable_auth = On

    xcache.admin.user = "xcache"

    xcache.admin.pass = "21232f297a57a5a743894a0e4a801fc3"

    [xcache]

    xcache.shm_scheme ="mmap"      ;决定 XCache 如何从系统分配共享内存

    xcache.size=60M                            ;0 禁止, 非 0 则启用缓存器. 请注意您系统所允许的 mmap 最大值.

    xcache.count =1                            ;指定将 cache 切分成多少块

    xcache.slots =8K                            ;只是作为 hash 槽个数的参考值, 您可以放心地缓冲超过这个个数的项目.

    xcache.ttl=0                                   ;设置缓冲项目的 Ttl (Time To Live) 值, 0=永不过期.

    xcache.gc_interval =0                    ;检查过期项目, 回收内存空间的间隔.

    ;xcache.cacher=on                   ;使用/不使用 opcode 缓存器. xcache.size = 0 时无效.

    ;xcache.stat=on                       ;使用 stat() 发现检查脚本更新.

    ;设置为On,则每次回去检查文件是否修改,如果修改会将修改过的文件重新编译然后存进opcode缓存来替代旧的opcode缓存,为Off则不进行检查直接使用旧的opcode缓存,注意这时候如果修改文件则响应不会马上发生改变,除非重启服务器。

    xcache.var_size=4M

    xcache.var_count =1               ;//同xcache.count,不过是变量缓存的个数

    xcache.var_slots =8K

    xcache.var_ttl=0

    xcache.var_maxttl=0

    xcache.var_gc_interval =300      ;垃圾回收间隔时间

    xcache.test =Off

    xcache.readonly_protection = On    ;如果启用了将会略微降低性能, 但是会提高一定的安全系数. 这个选项对于 xcache.mmap_path = /dev/zero 无效.

    xcache.mmap_path ="/tmp/xcache" 

    xcache.coredump_directory =""

    [xcache.coverager]

    xcache.coverager=On ;启用代码覆盖信息采集到启用后 xcache.coveragedump_directory 设置以及xcache_coverager_start/stop/get/clean()才可以使用(启用后会对降低影响)

    xcache.coveragedump_directory=""

    xcache.coverager_autostart=on  ;每个页面请求自动调用 xcache_coverager_start

    拷贝htdocs到WWW目录

    cp -R htdocs  /var/www/webroot

    cd /var/www/webroot

    cp config.example.php config.php

    在文件末尾添加:

    $_SERVER["PHP_AUTH_USER"] = "xcache";

    $_SERVER["PHP_AUTH_PW"] = "password"

    打开浏览器访问http://10.0.0.17/htdocs,输入帐号xcache 密码password 进入

    12、php mssql扩展

    1>、安装FreeTDS 

    http://www.freetds.org

    wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-0.91.83.tar.gz

    tar -zxvf freetds-0.91.83.tar.gz

    cd freetds-0.91.83

     ./configure --prefix=/usr/local/freetds --with-tdsver=8.0 --enable-msdblib 

    make && make install

    yum -y install unixODBC*

    在/etc/profile

    中加入export PATH="$PATH:/usr/local/freetds/bin"

    #echo "/usr/local/freetds/lib" >> /etc/ld.so.conf

    source /etc/profile

    #ldconfig

    cd /usr/local/src/php-5.4.13/ext/mssql 

    /usr/local/php/bin/phpize 

    ./configure --with-php-config=/usr/local/php/bin/php-config --with-mssql=/usr/local/freetds

    make &&  make install

    在 php.ini  中的  Dynamic Extensions 加入下面这行

    extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/mssql.so

    2>配置freetds.conf

    vi /usr/local/freetds/etc/freetds.conf

    输入以下内容:

    #   $Id: freetds.conf,v 1.12 2007-12-25 06:02:36 jklowden Exp $

    #

    # This file is installed by FreeTDS if no file by the same

    # name is found in the installation directory.

    #

    # For information about the layout of this file and its settings,

    # see the freetds.conf manpage "man freetds.conf".

    # Global settings are overridden by those in a database

    # server specific section

    [global]

            # TDS protocol version

    ;       tds version = 4.2

            # Whether to write a TDSDUMP file for diagnostic purposes

            # (setting this to /tmp is insecure on a multi-user system)

    ;       dump file = /tmp/freetds.log

    ;       debug flags = 0xffff

            # Command and connection timeouts

    ;       timeout = 10

    ;       connect timeout = 10

            # If you get out-of-memory errors, it may mean that your client

            # is trying to allocate a huge buffer for a TEXT field.

            # Try setting 'text size' to a more reasonable limit

            text size = 64512

    # A typical Sybase server

    [egServer50]

            host = symachine.domain.com

            port = 5000

            tds version = 5.0

    # A typical Microsoft server

    [egServer70]

            #host = ntmachine.domain.com

            host = 192.168.0.63

            port = 1433

            tds version = 8.0

    3>、重启php并验证扩展模块加载是否成功

    service php-fpm restart

    [root@mssql]# /usr/local/php/bin/php -m 

    [PHP Modules] 

    bcmath 

    ctype 

    curl 

    date 

    dom 

    eAccelerator 

    filter 

    gd 

    hash 

    iconv 

    imagick 

    json 

    libxml 

    mbstring 

    mcrypt 

    memcache 

    memcached 

    mssql 

    mysql 

    mysqli 

    openssl 

    pcre 

    PDO 

    pdo_sqlite 

    posix 

    Reflection 

    session 

    shmop 

    SimpleXML 

    soap 

    sphinx 

    SPL 

    SQLite 

    standard 

    sysvsem 

    tokenizer 

    xhprof 

    xml 

    xmlreader 

    xmlwriter 

    zip 

    zlib   

    [Zend Modules] eAccelerator

    4>、测试连接   在网站目录下建立   sql.php  ,内容如下

    <?php

    $conn=mssql_connect("egServer70","sql_user",sql_password);

           //test

               if($conn)

           {

           echo "ok";

           } else

              

               {

               echo "no";

               }

    ?>

    最后访问测试 http://ServerIP/sql.php  如果显示 OK  表示连接成功

    问题:PHP中用freetds连接到mssql中文乱码问题

    解决:

    在PHP平台上用freetds连接到mssql数据库时出现了乱码问题。具体是用freetds连接调用一个mssql的存储过程,但是返回的结果却出现了乱码,PHP端是UTF-8。刚开始以为是mssql的编码问题,因为在mssql中就是GB2312的。后来查了一下资料发现可以修改freetds的配置文件来解决这个问题。在Freetds的配置文件中  添加 client charset = GB2312 一行。

    vi /usr/local/freetds/etc/freetds.conf

    #   $Id: freetds.conf,v 1.12 2007/12/25 06:02:36 jklowden Exp $

    #

    # This file is installed by FreeTDS if no file by the same 

    # name is found in the installation directory.  

    #

    # For information about the layout of this file and its settings, 

    # see the freetds.conf manpage "man freetds.conf".  

    # Global settings are overridden by those in a database

    # server specific section

    [global]

            # TDS protocol version

    ;       tds version = 4.2

            # Whether to write a TDSDUMP file for diagnostic purposes

            # (setting this to /tmp is insecure on a multi-user system)

    ;       dump file = /tmp/freetds.log

    ;       debug flags = 0xffff

            # Command and connection timeouts

    ;       timeout = 10

    ;       connect timeout = 10

            # If you get out-of-memory errors, it may mean that your client

            # is trying to allocate a huge buffer for a TEXT field.  

            # Try setting 'text size' to a more reasonable limit 

            text size = 64512

            client charset = GB2312

    # A typical Sybase server

    [egServer50]

            host = symachine.domain.com

            port = 5000

            tds version = 5.0

    # A typical Microsoft server

    [egServer70]

            host = ntmachine.domain.com

            port = 1433

            tds version = 7.0

    如果设置成GB2312不行的话,可以试试GBK、cp936。记住,不要以为要满足PHP端需求设置成UTF-8,这样我试过是不行的。重启PHP-FPM和nginx,问题解决

    注意, client charset 必需大于或等于服务端数据库使用的字符集.

    例如,服务端数据库是 MS SQL Server 2000, 字符集是 GB2312.

    那么 client charset 可以设置为 GB2312(等于), GB18030(大于),UTF-8(大于)

    但不能设为ISO-8859-1(小于), Shift_JIS(不等于).

    由于 UTF-8 是所由字符集的超集,因此设置为 UTF-8 总是可行的.

    此外, FreeTDS的client charset不能设置为 UTF16. 这时目前该软件设计的局限,

    其官方网站称,在未来版本中可能会增加对client charset UTF16的支持.

    关于字符集:

    FreeTDS能够自动识别服务器端的charset. 因此 FreeTDS 需要用户设定客户端的

    charset. 这也就是客户端应用程序期待从FreeTDS获得的数据所应该使用的charset.

    一旦client charset设定, FreeTDS将实现从 server charset <--> client charset

    的转换.

    如果有两个客户应用程序都要访问同一个 MS SQLServer, 但很不幸,这两个客户程序所

    接受的字符集分别是 UTF-8 和 GB2312. 那么解决的办法是在FreeTDS.conf中设置

    两组DataSource,它们的服务器设置相同,但client charset分别设为 UTF-8和GB2312. 在 

    odbc.ini中也设置两组不同的DSN 分别指向这两组DataSource. 而最终两个客户程序

    各自使用与之相应的DSN即可.

    [sql1]

    host = 192.168.0.5    ; MS SQL Server 的 IP 或者域名

    port = 1433

    tds version = 8.0

    client charset = UTF-8  ; 客户端软件可识别的字符集.

    [sql1]

    host = 192.168.0.6    ; MS SQL Server 的 IP 或者域名

    port = 1433

    tds version = 8.0

    client charset = GB2312  ; 客户端软件可识别的字符集.

    法二:配置php的php.ini中关于mssql设置

    在对mssql进行配置的相关内容中有如下这么一条:

    ; Specify client character set.

    ; If empty or not set the client charset from freetds.comf is used

    ; This is only used when compiled with FreeTDS

    ;mssql.charset = "ISO-8859-1"

    从说明中可以看到这个是专门针对FreeTDS的,如果freetds.comf为空或者没有设置client charset时,可以在这块起用mssql.charset这个进行设置。因为SQLServer的编码是GBK,所以我将变量设置为GBK,如下:

    mssql.charset = "GBK"

    然后在将SQLServer中的数据进行读取、显示、插入到Mysql中的时候,使用下面的 charset_convert 函数对其进行转码

    functioncharset_convert($string,$input='GBK',$output='UTF-8'){if(function_exists('mb_convert_encoding')){$output=mb_convert_encoding($string,$output,$input);}elseif(function_exists('iconv')){$output=iconv($input,$output,$string);}else{exit('charset_convert() needs mb_convert_encoding or iconv function support.');}      return$output;}

    service php-fpm restart 即可以正常显示了。

    旧版php安装,这里以php5.2.17(php-fpm)为例

    cd /usr/local/src

    tar -zxvf php-5.2.17.tar.gz

    gzip -cd php-5.2.17-fpm-0.5.14.diff.gz | patch -d php-5.2.17 -p1                        #给php源码打上PHP-FPM补丁

    ./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-iconv-dir=/usr/local --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-discard-path --enable-safe-mode --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --with-curlwrappers --enable-mbregex --enable-fastcgi --enable-fpm --enable-force-cgi-redirect --enable-mbstring --with-mcrypt --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc --enable-zip --enable-soap  --enable-pdo=shared --with-pdo-mysql=shared --enable-mssql=shared --with-sqlite=shared --with-pdo-sqlite=shared

    接下来的安装就跟php5.4的是一样的了

    修改 /usr/local/php/etc/php-fpm.conf  取消以下两个注释,并把用户与组改成 nginx 用户

    <!--    <value name="user">nobody</value>                               -->

                            Unix group of processes

                    <!--    <value name="group">nobody</value>              -->

    php-fpm添加系统服务并设置开机启动

    cp /usr/local/src/php-5.2.17/sapi/cgi/fpm/init.d/php-fpm.in /etc/rc.d/init.d/php-fpm     #拷贝php-fpm到启动目录

    vi /etc/rc.d/init.d/php-fpm

    #! /bin/sh

    php_fpm_BIN=@prefix@/bin/php-cgi

    php_fpm_CONF=@php_fpm_conf_path@

    php_fpm_PID=@php_fpm_pid_path@

    改成

    #! /bin/sh

    ### BEGIN INIT INFO

    # Provides:          php-fpm

    # Required-Start:    $remote_fs $network

    # Required-Stop:     $remote_fs $network

    # Default-Start:     2 3 4 5

    # Default-Stop:      0 1 6

    # Short-Description: starts php-fpm

    # Description:       starts the PHP FastCGI Process Manager daemon

    ### END INIT INFO

    prefix=/usr/local/php

    exec_prefix=${prefix}

    php_fpm_BIN=${exec_prefix}/bin/php-cgi

    php_fpm_CONF=${prefix}/etc/php-fpm.conf

    php_fpm_PID=${prefix}/logs/php-fpm.pid

    chmod +x /etc/rc.d/init.d/php-fpm          #添加执行权限

    chkconfig php-fpm on           #设置开机启动

    cp php.ini-recommended  /usr/local/php5.2/etc/php.ini       #php.ini配置文件

    service php-fpm start             #启动服务

    /usr/local/php/sbin/php-fpm start    #启动php-fpm服务,也可以用此命令

    最后注意:

    安装pdo、pdo_mysql  = 扩展在配置 php.ini时,应这样

    echo "/usr/local/php/sbin/php-fpm start"  >> /etc/rc.local

    extension_dir=/usr/local/php5.2/lib/php/extensions/no-debug-non-zts-20060613

    extension=pdo.so

    extension=pdo_mysql.so

    extension=mssql.so

    要不有可能报

    ]# /usr/local/php5.2/bin/php -v             或 /usr/local/php/sbin/php-fpm start  启动php-fpm

    PHP Warning:  PHP Startup: Unable to load dynamic library './/usr/local/php5.2/lib/php/extensions/no-debug-non-zts-20060613/pdo.so' - .//usr/local/php5.2/lib/php/extensions/no-debug-non-zts-20060613/pdo.so: cannot open shared object file: No such file or directory in Unknown on line 0

    PHP 5.2.17 (cli) (built: Apr 25 2013 20:38:04)

    Copyright (c) 1997-2010 The PHP Group

    Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies

    /usr/local/php/sbin/php-fpm 启动 php-fpm命令过长  可把它添加到别名到系统环境 

    vi /etc/profile

    alias 'php-fpm=/usr/local/php/sbin/php-fpm'

    然后 source /etc/profile 让它生效,此时 php-fpm 命令相当于 /usr/local/php/sbin/php-fpm

    php-fpm start | stop |restart  可 启动 | 停止 | 重启 php-fpm

    Linux上安装多版本php

    (安装时注意--prefix、--with-config-file-path及安装扩展时注意指定路径的正确性),如  

    php5.2.17安装于   /usr/local/php5.2    设置php-fpm端口9000

    php5.3.24安装于   /usr/local/php5.3    设置php-fpm端口9003

    php5.4.x安装于   /usr/local/php5.4    设置php-fpm端口9004

    php-fpm端口在  php安装目录下的 etc/php-fpm 中 listen 参数指定,如

    listen = 127.0.0.1:9000

    然后nginx中可以针对不同虚拟主机使用不同版本的php,这里主要通过 nginx.conf 中Server {location ~ .php$ {fastcgi_pass   127.0.0.1:9004;}}指定不同端口来使用不同版本php

            location ~ .php$ {

                root           /var/webSite/win1;

                #fastcgi_pass   127.0.0.1:9000;

                #fastcgi_pass   127.0.0.1:9003;

                fastcgi_pass   127.0.0.1:9004;

                fastcgi_index  index.php;

            #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

                include        fastcgi_params;

            }

    nginx-php配置例子:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    server {
        listen 80;
        server_name foo.com;
      
        root /path;
        index index.html index.htm index.php;
      
        location / {
            try_files $uri $uri/ /index.php;
        }
      
        location ~ .php$ {
            try_files $uri =404;
      
            include fastcgi.conf;
            fastcgi_pass 127.0.0.1:9000;
        }
    }

    这里做一个WEB服务器(WEB的搭建上面已经配置完成),phpMyAdmin管理Mysql数据库,用户通过FTP更新网站

  • 相关阅读:
    判断touchmove上下的方向
    this的指向
    JS 判断浏览器是否安装Flash 兼容IE、firefox
    Array类型
    addEventListener()与removeEventListener()
    tap 点透问题
    ts 接口
    ts 类型断言
    ts学习
    vue时间戳转换(10位数)/(13位)
  • 原文地址:https://www.cnblogs.com/linkenpark/p/7283346.html
Copyright © 2011-2022 走看看