zoukankan      html  css  js  c++  java
  • 编译搭建Lamp服务器

    Lamp 是目前倍受欢迎的一种网站服务器。其主要有linux+apache+mysql+php 组成。由于其组成成员都是开源免费的产品,所以被作为中小型网站服务器的选择。
    LZ之前在学校学linux的时候搭建过一次PHP。那时只知道Lamp是由什么组成的,却不知道其中的联系,最后在搭建lamp的时候,用rpm的方式安装,几个模块之间相互独立,根本就达不到服务器的效果,后来尝试用yun搭建,成功了,却不明其原理。
    这篇文章,是LZ理清思路,用源码编译安装Lamp之后的笔记。

    首先,理清思路。Lamp的组成,其实也是我们网站开发初期所需要考虑的四大要素:系统、环境、数据库、开发语言。而在搭建这的个环境的过程中,有两点是需要提到的。一、在apache 刚安装的时候,它是不支持PHP的。Apache 要支持PHP需要加载PHP指定的模块,这个模块,是不会默认加载的,所以如果源码编译的话,后期是要手动加载模块的。二、PHP在安装的时候,不仅要安装PHP本身,还要安装相应的库文件,否则很多功能会得不到实现或者制约。同时,PHP在安装的过程中,需要产生支持apache 的模块文件,同时还有mysql。所以PHP的安装,是整个Lamp安装的最重要的一个环节。

    因为是源码编译,所以有些环境需要体检准备。Linux下的源码,大都是用c编写的,所以在编译的时候,需要查看是否安装了gcc编译环境。
    Linux 下 控制台输入 gcc -v 如果出现以下结果,就说明已经安装了gcc 了

       使用内建 specs。
       COLLECT_GCC=gcc
       COLLECT_LTO_WRAPPER=/usr/lib/gcc/i686-linux-gnu/4.7/lto-wrapper
       目标:i686-linux-gnu
       配置为:../src/configure -v --with-pkgversion='Ubuntu/Linaro 4.7.3-1ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages=c,c++,go,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.7 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.7 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --enable-plugin --with-system-zlib --enable-objc-gc --enable-targets=all --with-cloog --enable-cloog-backend=ppl --disable-cloog-version-check --disable-ppl-version-check --enable-multiarch --disable-werror --with-arch-32=i686 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=i686-linux-gnu --host=i686-linux-gnu --target=i686-linux-gnu
       线程模型:posix
    gcc 版本 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1) 
    

     
    大部分情况下linux会默认带有gcc的,如果没有,需要自行下载安装

    接下来,需要卸载已经安装的低版本的PHP,Mysql,Apache,以免在安装过程中出现冲突。

    Redhat 版本的linux 可以如下卸载:
    查询是否安装 :rpm -qa|grep -i httpd ·「 mysql,php」
    停止服务:service httpd 「 mysql,php」 stop 
    卸载软件包:rpm -e 查询到的软件包名 --nodep

    Debian 版本的linux 可以如下卸载:
    显示软件信息 :apt-cache show 软件名 或者dpkg -l |grep -i "软件包名" 
    卸载软件包: apt-get remove 软件包 或者dpkg -r 卸载软件包

    建议卸载之后,查看配置文件或者文件夹是否存在,并一并删除,免得干扰
       
    卸载完成后,接下来下载所需要的安装包。以下是所需要的源码包,其中包括安装PHP 时需要的库文件和主要的安装包
    PHP所需要的库文件,需要先安装,安装的顺序建议按排序安装
    libxml2-2.9.0 
    libmcrypt-2.5.8
    zlib-1.2.7
    libpng-1.5.14
    jpegsrc.v8b
    freetype-2.4.10
    autoconf-2.69
    gd-2.0.35
    主要安装包
    httpd-2.4.3
    mysql-5.0.41
    php-5.4.11
    phpMyAdmin-3.5.6-all-languages
    额外代码包:
    apr-1.4.6
    apr-util-1.5.1
    m4-1.4.9
    pcre 
    以上安装包都可以从开源网站下载,以下是网上找到的比较全的安装包下载地址:http://pan.baidu.com/share/link?shareid=1389731276&uk=437486341

    下载完安装包后,建议将安装包存放在统一的目录(如/usr/local )下,然后将其解压。以上面给出的资源为例:

    Unzip Lamp_All_file.zip -d /usr/local/src //将文件解压到指定目录
    cd /usr/local/src  
    ls *.tar.gz |xargs -n1 tar xzvf //解压该目录下所有的tar.gz 包。(有点占内存)

    解压完成后,开始对源代码进行配置与安装。


    Linux 下源代码的配置与安装大体都是使用 ./configure 、make 和 make install命令
    在源码包的目录下,首先./configure 配置相应的路径,如:
    ./configure --prefix=/usr/local/lamp/libxml2
    然后就运行make 命令 在运行make install 进行安装,make和make install 安装可以同时进行,如:
    make && make install

     顺序安装源码包:
    libxml2-2.9.0
    ./configure --prefix=/usr/local/lamp/libxml2-2.9.0
    make && make install
    libmcrypt-2.5.8
    ./configure --prefix=/usr/local/lamp/libmcrypt-2.5.8
    make && make install

    zlib-1.2.7
    ./configure --prefix=/usr/local/lamp/zlib-1.2.7
    make && make install

    libpng-1.5.14
    ./configure --prefix=/usr/local/lamp/libpng-1.5.14
    make && make install

    jpegsrc.v8b(注意;jpeg 源码包安装的时候是不会自动生成目录的,所以需要在安装之前先创建相应的目录。同时需要将其设置成共享库和静态库,因为接下来gd安装的时候需要用到jpeg库,如果没有设置的话,最后检测的时候会检测不到jpeg库的)

    mkdir /usr/local/lamp/jpeg
    mkdir /usr/local/lamp/jpeg/bin
    mkdir /usr/local/lamp/jpeg/lib
    mkdir /usr/local/lamp/jpeg/include
    mkdir /usr/local/lamp/jpeg/man
    mkdir /usr/local/lamp/jpeg/man/man1
    ./configure --prefix=/usr/local/lamp/jpeg/ --enable-shared --enable-static
    make && make install

    freetype-2.4.10
    ./configure --prefix=/usr/local/lamp/freetype
    make && make install
    autoconf-2.69(autoconf 安装的时候,可能会提示找不到M4,如果出现这样的情况的话,需要下载M4 的源文件并安装)
    ./configure --prefix=/usr/local/lamp/autoconf
    make && make install

    gd-2.0.35(gd库在安装的时候,除了需要配置安装路径,还需要将前面安装jpeg库和freetype库的路径也给附上)

    ./configure --prefix=/usr/local/lamp/gd2 --with-jpeg=/usr/local/lamp/jpeg8/ --with-freetype=/usr/local/lamp/freetype/
    make && make install

    以上是PHP所需的库文件的安装过程,接下来需要安装主要的代码包:
    Apache (在安装apache 之前,为了保证成功,建议配置apr和apr-util,主要是将下载原来的源代码包放到apache 的源代码包的指定目录中去。同时还要编译安装pcre 包)

    cp -r apr httpd-2.4.3/srclib/apr
    cp -r apr-util httpd-2.4.3/srclib/apr-util

    进入pcre目录
    ./configure --prefix=/usr/local/pcre
    make && make install
    进入apache目录
    ./configure --prefix=/usr/local/lamp/httpd/ --sysconfdir=/etc/httpd --with-included-apr --disable-userdir --enable-so --enable-deflate=shared --enable-expires=shared --enable-rewrite=shared --enable-static-support --with-pcre=/usr/local/pcre/
    make && make install

    mysql数据库的安装在http://www.cnblogs.com/Seanit/p/3706238.html  中已经说过,在此不做赘述。接下来便是安装PHP

    ./configure 
    --prefix=/usr/local/lamp/php/
    --with-config-file-path=/usr/local/lamp/php/etc/ --with-apxs2=/usr/local/lamp/httpd/bin/apxs
    --with-mysql=/usr/local/lamp/mysql/
    --with-libxml-dir=/usr/local/lamp/libxml2/
    --with-jpeg-dir=/usr/local/lamp/jpeg/
    --with-freetype-dir=/usr/local/lamp/freetype/
    --with-gd=/usr/local/lamp/gd2/
    --with-mcrypt=/usr/local/lamp/libmcrypt/ --with-mysqli=/usr/local/lamp/mysql/bin/mysql_config
    --enable-soap --enable-mbstring=all --enable-sockets

    make && make install(此处可能会出错)

    安装完成后,需要拷贝php.ini 文件到php的安装目录下
    cp php.ini-dist(php.ini-production) /usr/local/lamp/php/etc/php.ini
       
    最后,整合lamp 环境。Apache 和PHP安装完成之后,其实并没有相互关联,apache并没有加载PHP模块,所以并不能打开php。因此,接下来需要配置apache 加载php模块。
    vi /etc/httpd/httpd.conf
    在文件中加入如下语句:
    AddType application/x-httpd-php .php .phtml
    重启apache 服务器
    /usr/local/lamp/apache2/bin/apachectl restart(注意,httpd 默认情况下开启的是80端口,可是linux默认情况下开启1024以内端口号,需要用到root权限,所以此处如果用普通账户可能会报bind错误。)
       
    至此,Lamp的开发环境就搭建成功了
    后期配置:
    配置默认首页(在DirectoryIndex 中加入index.php):
    vi /etc/httpd/httpd.conf
    DirectoryIndex index.php index.Html index.html

       

    以下是LZ 安装时曾经遇到过的错误以及解决方案:
    1、安装php时出错:
       

    In file included from /usr/local/src/php-5.4.6/ext/gd/gd.c:103:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_putc’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:51: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_putbuf’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:58: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_stream_ctxfree’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:67: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:68: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:69: 错误:‘struct gdIOCtx’没有名为‘data’的成员
       In file included from /usr/local/src/php-5.4.6/ext/gd/gd.c:103:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c: 在函数‘_php_image_output_ctx’中:
       /usr/local/src/php-5.4.6/ext/gd/gd_ctx.c:153: 错误:‘gdIOCtx’没有名为‘data’的成员
       make: *** [ext/gd/gd.lo] 错误 1

     
    这个是php5.4的一个bug,需要修改gd的一个文件
    解决方法:
       

    vi /usr/local/gd2/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);
      
       int (*seek) (struct gdIOCtx *, const int);
      
       long (*tell) (struct gdIOCtx *);
       void (*gd_free) (struct gdIOCtx *);
      
       void (*data);
      
      }
      
      gdIOCtx;
      

    在该文件中加入红色字体的语句,在重新make即可
       

    2、httpd 启动时错误
       

    (98)Address already in use: make_sock: could not bind to address [::]:80 
       (98)Address already in use: make_sock: could not bind to address 0.0.0.0:80 
       no listening sockets available, shutting down 
       Unable to open logs


    解决方案:
    此处显示的是80端口已被调用,需要kill掉进程即可
       
    3、访问php 文件时打开下载窗口显示下载该PHP页面
    这种情况是PHP模块未被加载的原因造成的
    解决方案:
    在httpd.conf 中查看是否存在以下语句:
    LoadModule php5_module modules/libphp5.so
    如果不存在,则添加,然后重启
       
    4、http 无法加载模块错误
    Httpd 启动的时候提示
    Cannot load /usr/local/apache/modules/libphp5.so
    这个显示的是httpd 无法加载libphp5.so模块,libphp5.so是php安装的时候生成的。
    解决方案:
    查看modules/libphp5.so 文件是否存在,如果不存在,既有可能是在配置php的时候出错了,可能在--with-apxs2=/usr/local/lamp/apache2/bin/apxs 上面出错,重新配置一下,在make 就能产生libphp5.so文件了。
         
    5、编译PHP 时出现libtool 错误
    libtool: link: `ext/date/lib/astro.lo' is not a valid libtool object
     解决方案:重新安装libtool 然后make clean 再 make 即可
      
    本文是在LZ参考了网络上的一些博文和视频之后实践后写的,主要参考了Lamp兄弟连视频教程和http://www.cnblogs.com/hanganglin/articles/3328223.html这篇文章,在此进行声明与感谢

  • 相关阅读:
    Ajax调用处理页面错误信息500的解决思路
    PHP数据库的增删改
    PHP登录及处理
    PHP数据访问
    PHP数组(正则表达式、数组、预定义数组)
    php函数
    45
    数据库_CRUD操作之读取数据之高级读取
    数据库_CRUD操作之读取数据
    数据库_CRUD操作之修改数据
  • 原文地址:https://www.cnblogs.com/Seanit/p/3749168.html
Copyright © 2011-2022 走看看