Chinaunix首页 | 论坛 | 博客
  • 博客访问: 27618
  • 博文数量: 4
  • 博客积分: 125
  • 博客等级: 入伍新兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-13 08:08
文章分类
文章存档

2012年(4)

我的朋友

分类: LINUX

2012-08-13 22:17:58

需要说明以下几点:
php在编译安装时,nginx要想能够调用php提供动态php格式的网页,必须用FastCGI来实现,但FastCGI只是一个框架,实现FastCGI框架的有PHP-FPM,但对于5.2.x版本的php来说 默认是不支持PHP-FPM的,需要打上php-fpm的补丁,对于5.3.2之前版本的也是需要打补丁的,而且打补丁的过程比较麻烦。好在5.4.4版本的PHP-FPM被直接做进了源代码包中,在编译安装时只需启用PHP-FPM功能即可。
但如果要使用PHP-FPM的话,还需要提供以下几个功能:
a.需要提供可以解析xml格式的文档,需要安装libxml2 和libxml2-devel这两个包,好在这两个包在安装完开发环境后这两个包是默认安装过的。
b. libiconv 用来提供网络连接方式的功能组件,可以实现更快速的网络访问,这个组件系统上是没有装的,需要手动编译安装。


查看是否安装gcc openssl-devel zlib-devel pcre-devel
rpm -qa | grep gcc 等。


一、编译安装PHP所需的支持库:
安装libevent库文件
tar zxvf libevent-2.0.18-stable.tar.gz
cd libevent-2.0.18-stable
./configure
make
make install

安装libiconv库文件
tar zxvf libiconv-1.14.tar.gz
cd libiconv-1.14/
/sbin/ldconfig
./configure --prefix=/usr/local  #必须安装在此目录
make
make install

安装libmcrypt库文件     (libmcrypt是加密算法扩展库。支持DES, 3DES, RIJNDAEL, Twofish, IDEA, GOST, CAST-256, ARCFOUR, SERPENT, SAFER+等算法)
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install
/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install

安装mhash库文件
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make
make install

ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make
make install

安装autoconf库文件
tar jxvf autoconf-2.68.tar.bz2
cd autoconf-2.68/
./configure
make
make install

安装freetype库文件
tar jxvf freetype-2.4.6.tar.bz2
cd freetype-2.4.6/
./configure --prefix=/usr/local/freetype
make
make install

安装libxml2库文件 (libxml2是一个xml的c语言版的解析器,不仅支持c语言,还支持c++、php、Pascal、Ruby、Tcl等语言的绑定)
tar zxvf libxml2-2.7.8.tar.gz
cd libxml2-2.7.8/
./configure --prefix=/usr/local/libxml2
make
make install

安装zlib库文件       (zlib是提供数据压缩用的函式库)
tar zxvf zlib-1.2.7.tar.gz
cd zlib-1.2.7/
CFLAGS="-O3 -fPIC" ./configure --prefix=/usr/local/zlib  //使用64位 的方法进行编译 (一般只需要./configure)(CFLAGS="-O3 -

fPIC" 64位系统要加这个参数)
make
make install

安装curl库文件
tar jxvf curl-7.24.0.tar.bz2
cd curl-7.24.0/
./configure --prefix=/usr/local/curl
make
make install

安装libpng库文件
tar xvf libpng-1.5.8.tar.xz
cd libpng-1.5.8
./configure --prefix=/usr/local/libpng
make
make install

安装jpeg7库文件
tar zxvf jpegsrc.v7.tar.gz
cd jpeg-7/
mkdir /usr/local/jpeg7            //建立jpeg7软件安装目录
mkdir /usr/local/jpeg7/bin    //建立存放命令的目录
mkdir /usr/local/jpeg7/lib     //创建jpeg7库文件所在目录
mkdir /usr/local/jpeg7/include      //建立存放头文件目录
mkdir -p /usr/local/jpeg7/man/man1 //建立存放手册的目录
./configure  \
> --prefix=/usr/local/jpeg7/ \            
> --enable-shared \                     //建立共享库使用的GNU的libtool
> --enable-static                       //建立静态库使用的GNU的libtool
make
make install

安装GD库文件
tar zxvf gd-2.0.33.tar.gz
cd gd-2.0.33/
./configure  \    //配置命令
--prefix=/usr/local/gd2/  \                //指定软件安装的位置
--with-zlib \                          
--with-jpeg=/usr/local/jpeg7/  \           //指定到哪去找jpeg库文件的位置
--with-png=/usr/local/libpng/  \           //指定到哪去找png库文件的位置
--with-freetype=/usr/local/freetype/       //指定到哪去找freetype 2.x字体库的位置
make
make install



二、安装Nginx
1、安装Nginx库所需的pcre库    (支持nginx伪静态)
tar jxvf pcre-8.30.tar.gz
cd pcre-8.30/
./configure --prefix=/usr/local/pcre
make && make install

2、安装Nginx
tar zxvf nginx-1.2.2.tar.gz
cd nginx-1.2.2
useradd -s /sbin/nologin -M nginx  # 添加一个不能登录的且没有家目录 名为nginx的用户

./configure --user=nginx --group=nginx --prefix=/usr/local/nginx \
--with-openssl= \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-pcre=/usr/local/LNMP/pcre-8.30      注意:--with-pcre=/usr/local/LNMP/pcre-8.30指向的是源码包解压的路径,而不是安装的路径,否则会报错
 
   编译完成后没有报错就可以安装了。
{ nginx path prefix: "/usr/local/nginx"
  nginx binary file: "/usr/local/nginx/sbin/nginx"
  nginx configuration prefix: "/usr/local/nginx/conf"
  nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
  nginx pid file: "/usr/local/nginx/logs/nginx.pid"
  nginx error log file: "/usr/local/nginx/logs/error.log"
  nginx http access log file: "/usr/local/nginx/logs/access.log"
  nginx http client request body temporary files: "client_body_temp"
  nginx http proxy temporary files: "proxy_temp"
  nginx http fastcgi temporary files: "fastcgi_temp"
  nginx http uwsgi temporary files: "uwsgi_temp"
  nginx http scgi temporary files: "scgi_temp"
}

   make
   make install

编译安装完成后为了让nginx开机启动,笔者提供个systemV风格的脚本

vi /etc/init.d/nginxd

 

把以下内容粘贴进去

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid
 
# Source function library.
. /etc/rc.d/init.d/functions
 
# Source networking configuration.
. /etc/sysconfig/network
 
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
 
nginx=/usr/local/nginx/sbin/nginx
prog=$(basename $nginx)

NGINX_CONF_FILE=/usr/local/nginx/conf/nginx.conf
nginx_pid=/usr/local/nginx/logs/nginx.pid

lockfile=/var/lock/subsys/nginx
 
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
 
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
 
restart() {
    configtest || return $?
    stop
    start
}
 
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
 
force_reload() {
    restart
}
 
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
 
rh_status() {
    status $prog
}
 
rh_status_q() {
    rh_status >/dev/null 2>&1
}
 
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

 

 

保存退出 并给/etc/init.d/nginxd 赋予执行权限

chmod 775 /etc/init.d/nginxd

chkconfig --add nginxd        ##让入开机启动选项中

chkconfig nginxd on          #让其开机自动启动 

/usr/local/nginx/sbin/nginx       //启Nginx   (service nginxd  start       #立即启动nginx 服务)

echo “/usr/local/nginx/sbin/nginx” >>/etc/rc.local

mv /usr/local/nginx/html/*  /var/www/html   Web页面放置路径
出现OK字样 并且通过web浏览器 访问该主机出现以下画面 表示nginx 编译完成并成功启动

3、每天定时切割 nginx 日志
(1)创建脚本
vi /usr/local/nginx/sbin/cut_nginx_log.sh
#!/bin/bash
# This script run at 00:00

# The Nginx logs path
logs_path="/usr/local/nginx/logs/"

mkdir -p ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${logs_path}access.log ${logs_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday"

+"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

(2)设置 crontab,每天 00:00 切割nginx访问日志
crontab -e
00 00 * * * /bin/bash  /usr/local/webserver/nginx/sbin/cut_nginx_log.sh

三、编译安装MySQL
1、安装cmake
tar zxvf cmake-2.8.8.tar.gz
cd /cmake-2.8.8/
./configure
make #编译
make install #安装

2、安装MySQL
/usr/sbin/groupadd mysql                               #添加mysql组
/usr/sbin/useradd -g mysql mysql -s /bin/false         #创建用户mysql并加入到mysql组,不允许mysql用户直接登录系统       
mkdir -p /var/lib/mysql
mkdir -p /usr/local/mysql
chown -R mysql:mysql /var/lib/mysql/
tar -zxvf mysql-5.5.25tar.gz
cd ./mysql-5.5.25
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/var/lib/mysql -DSYSCONFDIR=/etc \     
-DDEFAULT_CHARSET=utf8 \
-DWITH_EXTRA_CHARSETS=utf8,gbk,gb2312 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_LIBWRAP=1 \
-DWITH_SSL=yes \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1

make
make install

cd /usr/local/mysql
cp ./support-files/my-huge.cnf /etc/my.cnf
cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld
chown -R mysql:mysql /var/lib/mysql/
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --user=mysql 
/usr/local/mysql/bin/mysqld_safe datadir=/var/lib/mysql/ --user=mysql              以mysql用户帐号的身份建立数据表
{./scripts/mysql_install_db --user=mysql
./bin/mysqld_safe --user=mysql }
chmod 755 /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 2345 mysqld on

vi /etc/my.cnf

[mysqld]
#character-set-server = utf8
basedir = /usr/local/mysql
datadir = /var/lib/mysql
max_connections = 5000
max_connect_errors = 6000

vi /etc/rc.d/init.d/mysqld

basedir=/usr/local/mysql
datadir=/var/lib/mysql

直接修改密码/usr/bin/mysqladmin(/usr/local/mysql/bin/mysqladmin) -u root -p password 'password_for_root'
或者通过命令行登录管理MySQL服务器(提示输入密码时直接回车):
/usr/local/mysql/bin/mysql -u root -p -S /tmp/mysql.sock
输入以下SQL语句,创建一个具有root权限的用户(admin)和密码(12345678):
create database admin;
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' IDENTIFIED BY '12345678';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' IDENTIFIED BY '12345678';
flush privileges;
quit

/etc/init.d/mysqld start(stop|restart|reload)


四、编译安装PHP
1、编译安装PHP  (PHP 5.4.X有Bugs,解决见方法)
tar jxvf php-5.4.4.tar.bz2
cd php-5.4.4
./configure --prefix=/usr/local/php/ --with-config-file-path=/usr/local/php/etc --with-openssl --with-iconv-

dir=/usr/local/libconv --with-libxml-dir=/usr/local/libxml2/ --with-curl=/usr/local/curl --with-jpeg-dir=/usr/local/jpeg7/ \
--with-png-dir=/usr/local/libpng/ --with-freetype-dir=/usr/local/freetype/ --with-gd --with-zlib-dir=/usr/local/zlib \
--with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mcrypt --enable-fpm --with-mhash --

enable-soap --enable-ftp \
--enable-gd-native-ttf --with-openssl --enable-mbstring --enable-sysvsem --enable-inline-optimization --with-xmlrpc --

enable-zip --enable-sockets

make ZEND_EXTRA_LIBS='-liconv'
make test
make install

PHP编译时报gd错误
In file included from /usr/local/src/php-5.4.3/ext/gd/gd.c:103:
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c: In function '_php_image_stream_putc':
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c:51: error: 'struct gdIOCtx' has no member named 'data'
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c: In function '_php_image_stream_putbuf':
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c:58: error: 'struct gdIOCtx' has no member named 'data'
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c: In function '_php_image_stream_ctxfree':
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c:67: error: 'struct gdIOCtx' has no member named 'data'
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c:68: error: 'struct gdIOCtx' has no member named 'data'
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c:69: error: 'struct gdIOCtx' has no member named 'data'
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c: In function '_php_image_output_ctx':
/usr/local/src/php-5.4.3/ext/gd/gd_ctx.c:153: error: 'gdIOCtx' has no member named 'data'
gmake: *** [ext/gd/gd.lo] Error 1
---

解决方法:
I made php-5.3.13 with same configure options.So I investigated the cause.
In php-5.4.3/ext/gd/libgd/gd_io.h
typedef struct gdIOCtx {
        int     (*getC)(struct gdIOCtx*);
        int     (*getBuf)(struct gdIOCtx*, void*, int);

        void    (*putC)(struct gdIOCtx*, int);
        int     (*putBuf)(struct gdIOCtx*, const void*, int);

        int     (*seek)(struct gdIOCtx*, const int);
        long    (*tell)(struct gdIOCtx*);

        void    (*gd_free)(struct gdIOCtx*);

        void    *data;
} gdIOCtx;
But in /usr/local/include/gd_io.h
typedef struct gdIOCtx
{
  int (*getC) (struct gdIOCtx *);
  int (*getBuf) (struct gdIOCtx *, void *, int);

  void (*putC) (struct gdIOCtx *, int);
  int (*putBuf) (struct gdIOCtx *, const void *, int);

  /* seek must return 1 on SUCCESS, 0 on FAILURE. Unlike fseek! */
  int (*seek) (struct gdIOCtx *, const int);

  long (*tell) (struct gdIOCtx *);

  void (*gd_free) (struct gdIOCtx *);

}
gdIOCtx;
These isn't void    *data;.In some gd versions (ex:gd-2.0.36RC,gd-2.0.34)
there ins't void    *data;.

I think that php-5.4.X was required extended gd library.
Shuold we configure --with-gd not --with-gd=DIR?

cp php.ini-production /usr/local/php/etc/php.ini
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf #拷贝模板文件为php-fpm配置文件

2、编译安装PHP5扩展模块
安装memcached (安装服务器端) 
tar zxvf memcached-1.4.13.tar.gz
cd memcache-1.4.13
./configure
make
make install

安装memcache (安装客户端)    
tar  zxvf memcache-2.2.6.tgz
cd memcache-2.2.6
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make test
make install

安装ZendGuardLoader
tar zxvf ZendGuardLoader-php-5.3-linux-glibc23-i386.tar.gz
cd ZendGuardLoader-php-5.3-linux-glibc23-i386/php-5.3.x/
cp ZendGuardLoader.so /usr/local/php/include/php/Zend/

安装eaccelerator             
tar zxvf eaccelerator-eaccelerator-c5ac10d.tar.gz
cd eaccelerator-eaccelerator-c5ac10d
cp control.php /var/www/html/control.php      //复制控制程序到网站目录,通过http://网站名/control.php 访问,默认帐号为admin 密码为eAccelertor,可编辑此文件修改。
export PHP_PREFIX="/usr/local/php"    (把PHP安装目录导入到环境变量,FreeBSD默认是/usr/local)
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install    (Installing shared extensions:   /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/)

安装PDO_MYSQL
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
make
make install    (Installing shared extensions:     /usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/)

在编译(make)的时候有可能会出现下面的错误:

In file included from /data1/lnmp/PDO_MYSQL-1.0.2/pdo_mysql.c:31:

/data1/lnmp/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:25:19: error: mysql.h: No such file or directory

In file included from /data1/lnmp/PDO_MYSQL-1.0.2/pdo_mysql.c:31:

/data1/lnmp/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:36: error: expected specifier-qualifier-list before ‘MYSQL’

/data1/lnmp/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:48: error: expected specifier-qualifier-list before ‘MYSQL_FIELD’

/data1/lnmp/PDO_MYSQL-1.0.2/php_pdo_mysql_int.h:53: error: expected specifier-qualifier-list before ‘MYSQL_RES’

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

问题原因:

这是因为在编译时需要 MySQL 的头的文件。而它按默认搜索找不到头文件的位置,所以才出现这个问题。

解决方法:

将 /usr/local/mysql/include/ 目录下的 MySQL 头文件链接到 /usr/local/include/ 的目录下。

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


安装PHP扩展imagick,处理图像。
如果PHP版本 >= 5.1.3 依耐的 ImageMagick版本就要大于 >= 6.2.4 。

ImageMagick (Linux下强大的图象处理函数,与GD类似)
tar xvf ImageMagick-6.7.6-9.tar.xz   
cd ImageMagick-6.7.6-9
./configure
make
make install

tar xvf imagick-3.1.0RC2  
cd imagick-3.1.0RC2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install

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


make时可能报错:
In file included from /usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:22:
/usr/local/LNMP/imagick-3.1.0RC2/php_imagick_file.h:43: error: ‘MaxTextExtent’ undeclared here (not in a function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c: In function ‘php_imagick_file_init’:
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:75: error: ‘MagickPath’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:75: error: (Each undeclared identifier is reported only once
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:75: error: for each function it appears in.)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:99: error: ‘HeadPath’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:100: error: ‘TailPath’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c: In function ‘php_imagick_read_image_using_imagemagick’:
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:124: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:124: error: ‘MagickFalse’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:128: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:135: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:137: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c: In function ‘php_imagick_read_image_using_php_streams’:
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:144: error: ‘MagickBooleanType’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:144: error: expected ‘;’ before ‘status’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:177: error: ‘status’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:177: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:179: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:184: error: ‘MagickFalse’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:189: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:196: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c: In function ‘php_imagick_write_file’:
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:247: error: ‘MagickBooleanType’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:247: error: expected ‘;’ before ‘status’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:258: error: ‘status’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:258: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:260: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:264: error: ‘MagickFalse’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c: In function ‘php_imagick_stream_handler’:
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:277: error: ‘MagickBooleanType’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:277: error: expected ‘;’ before ‘status’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:306: error: ‘status’ undeclared (first use in this function)
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:306: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:310: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:314: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:318: error: ‘php_imagick_object’ has no member named ‘magick_wand’
/usr/local/LNMP/imagick-3.1.0RC2/imagick_file.c:326: error: ‘MagickFalse’ undeclared (first use in this function)
make: *** [imagick_file.lo] Error 1

解决方法:
安装gtk
gtk2-2.18.9-6.el6.centos.i686.rpm
gtk2-devel-2.18.9-6.el6.centos.i686.rpm
gtk2-engines-2.18.4-5.el6.centos.i686.rpm
gtk2-immodule-xim-2.18.9-6.el6.centos.i686.rpm

配置 php
1、修改 php.ini 文件,使 php 支持已安装的扩展功能
vi /usr/local/php/etc/php.ini
找到 extension_dir = "/";修改如下:
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525"
extension = "imagick.so"
extension = "memcache.so"
extension = "pdo_mysql.so"
再查找 output_buffering = Off 修改为 output_buffering = On
再查找; cgi.fix_pathinfo=1 修改为cgi.fix_pathinfo= 0,防止Nginx文件类型错误解析漏洞。
short_open_tag = Off 修改为 short_open_tag = On (开启短格式支持)
expose_php = On 修改为 expose_php = Off (在curl中隐藏php版本号)
date.timezone = Asia/Shanghai
upload_max_filesize = 2M 改为5M    //修改上传文件大小
{找到对应域名的server段:修改client_max_body_size的值,默认是2M}     针对虚拟主机

2、配置 eAccelerator  加速PHP
mkdir /var/log/eaccelerator_cache
vi /usr/local/php/etc/php.ini
按shift+g键跳到配置文件的最末尾
在 php.ini 文件末尾加上以下配置:
[eaccelerator]
zend_extension = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20100525/eaccelerator.so"
eaccelerator.shm_size = "64"
eaccelerator.cache_dir = "/var/log/eaccelerator_cache"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "3600"
eaccelerator.shm_prune_period = "3600"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.allowed_admin_path="/usr/local/nginx/control.php"
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=
zend_extension=/usr/local/php/include/php/Zend/ZendGuardLoader.so


3、配置 php-fpm
(1)建立相关配置文件
/usr/local/LNMP/php-5.4.4
cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm
[root@test php-5.4.4]# vi /etc/rc.d/init.d/php-fpm
找到:php_fpm_PID=${prefix}/var/run/php-fpm.pid,删掉${prefix};
修改为:php_fpm_PID=/var/run/php-fpm.pid;
之所以这样修改是因为我在 php-fpm.conf 中设置的pid的位置为:/var/run/php-fpm.pid。
(2)修改 php-fpm.conf 配置文件
vi /usr/local/php/etc/php-fpm.conf
[global]
pid = /var/run/php-fpm.pid
error_log = /var/log/php/php-fpm.log
log_level = notice
[www]
listen = 127.0.0.1:9000
user = nginx #这是因为 nginx web 服务也是个这个用户。
group = nginx
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 5000

/usr/local/php/sbin/php-fpm -t   #测试 php-fpm 配置

(3)设置开机启动 php-fpm (通过管理 FastCGI 进程)
chmod 755 /etc/rc.d/init.d/php-fpm
chkconfig --level 35 php-fpm on
chkconfig --list php-fpm

(4)启动 php-fpm
/etc/init.d/php-fpm start
或 /usr/local/php/sbin/php-fpm

五 整合 nginx 与 PHP
1、编辑 fastcgi.conf 和 fastcgi_params
fastcgi_params 和 fastcgi.conf
默认这两个文件是存在的,不需要修改,默认即可。
文件内容:
vi /usr/local/nginx/conf/fastcgi_params
fastcgi_param  QUERY_STRING       $query_string;
fastcgi_param  REQUEST_METHOD     $request_method;
fastcgi_param  CONTENT_TYPE       $content_type;
fastcgi_param  CONTENT_LENGTH     $content_length;

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
fastcgi_param  REQUEST_URI        $request_uri;
fastcgi_param  DOCUMENT_URI       $document_uri;
fastcgi_param  DOCUMENT_ROOT      $document_root;
fastcgi_param  SERVER_PROTOCOL    $server_protocol;
fastcgi_param  HTTPS              $https if_not_empty;

fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
fastcgi_param  SERVER_SOFTWARE    nginx/$nginx_version;

fastcgi_param  REMOTE_ADDR        $remote_addr;
fastcgi_param  REMOTE_PORT        $remote_port;
fastcgi_param  SERVER_ADDR        $server_addr;
fastcgi_param  SERVER_PORT        $server_port;
fastcgi_param  SERVER_NAME        $server_name;

# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param  REDIRECT_STATUS    200;

2、修改 /usr/local/nginx/conf/nginx.conf 配置文件
(1)使 nginx 支持 php 格式主页
vi /usr/local/nginx/conf/nginx.conf
找到

  location / {
            root   /var/www/html;                                     #必须设置 web 根目录
            index  index.php index.html index.htm;           #添加 php 格式的主页
        }

注意:
nginx 默认的 web 根目录是 /usr/local/nginx/html;它的 nginx.conf 配置文件中 web 的根目录参数默认为:root html;这里使用相对路

径,相对于 nginx 安装目录的路径。

(2)启用如下选项
找到

        location ~ \.php$ {
            root           /var/www/html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            fastcgi_param   QUERY_STRING    $query_string;
            include        fastcgi_params;
        }
#PHP 使用 SCRIPT_FILENAME 参数决定需要执行哪个脚本;这里一定要设为 web 目录的绝对路径或是变量 $document_root。这里非常重要,

配置错误有可能会出现php空白页,或找不到页面的错误。
fastcgi_param   QUERY_STRING    $query_string; #QUERY_STRING 包含请求中的某些参数。
                       include         fastcgi_params;
如果要处理POST请求,则需要另外增加三个参数:
fastcgi_param   REQUEST_METHOD   $request_method;
fastcgi_param   CONTENT_TYPE     $content_type;
fastcgi_param   CONTENT_LENGTH   $content_length;

在/etc/httpd/conf/httpd.conf的配置文件中找到
LoadModule  status_module  modules/mod_status.so
有这一项表示已经支持状态检测模块,所以无需额外添加,直接启动web服务即可.

测试 nginx 与 PHP
vi /usr/local/nginx/html/phpinfo.php
输入以下内容:
phpinfo();
?>
注意:测试php与MySQL
vi /usr/local/nginx/html/phpmysql.php
可以使用下面的php代码用来测试php是否可以连接MySQL数据库:
$link=mysql_connect('localhost','root','数据库密码');
if ($link)
echo "successful";
else
echo "Faile";
mysql_close();
?>


六 优化Linux内核参数
vi /etc/sysctl.conf
在末尾增加 kernel.shmmax = 4294967295

使配置立即生效:
/sbin/sysctl -p

七 在不停止Nginx服务的情况下平滑变更Nginx配置
  1、修改/usr/local/webserver/nginx/conf/nginx.conf配置文件后,请执行以下命令检查配置文件是否正确:
         /usr/local/nginx/sbin/nginx -t

  如果屏幕显示以下两行信息,说明配置文件正确:
  the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
  the configuration file /usr/local/nginx/conf/nginx.conf was tested successfully

  2、平滑重启:
  ①、对于Nginx 0.8.x版本,现在平滑重启Nginx配置非常简单,执行以下命令即可:
       /usr/local/nginx/sbin/nginx -s reload


  ②、对于Nginx 0.8.x之前的版本,平滑重启稍微麻烦一些,按照以下步骤进行即可。输入以下命令查看Nginx主进程号:
        ps -ef | grep "nginx: master process" | grep -v "grep" | awk -F ' ' '{print $2}'

  屏幕显示的即为Nginx主进程号,例如:
  6302
  这时,执行以下命令即可使修改过的Nginx配置文件生效:
     kill -HUP 6302

  或者无需这么麻烦,找到Nginx的Pid文件:
    kill -HUP `cat /usr/local/webserver/nginx/nginx.pid`
阅读(5087) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:SNMP协议配置V2c、V3

给主人留下些什么吧!~~