zoukankan      html  css  js  c++  java
  • Linux下编译、安装php

    一、apache环境下php的安装步骤如下:注意:编译安装php前,应先安装好apache,因为编译php时要用到apache的路径

    1. 在http://www.php.net/downloads.php下载php源代码,并存至/usr/local/src下

    2. 切换至/usr/local/src下,解压php源码,并切换至解压后的php目录下

    3.  ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --enable-mysqlnd      

    【配置时,可能会报错configure: error: xml2-config not found. Please check your libxml2 installation.--------解决方法: 需安装libxml2作为依赖(centos和ubuntu上安装libxml2的方式不太一样)】

    4. make

    5. make install

    6. 配置http.conf,主要是整合php作为apache的模块出现(有时会自动帮我们配置好),在http.conf里加一句 AddType application/x-httpd-php .php

    7. 复制php源码包中的 php.ini-development到指定目录(此处为:/usr/local/php/lib/)下的php.ini

    cp php.ini-development /usr/local/php/lib/php.ini

    8. 在/usr/local/httpd/htdocs下新建test.php文件,并输入 <?php phpinfo(); ?>

    9. 重启apache,访问test.php文件,显示正常

    至此,apache环境下的php已成功安装!

    ------------------------ 单独编译php的扩展----------------------

    注意:考虑到要连接数据库,通过phpinfo查看mysqli扩展,发现mysqli没有打开,于是需单独编译下mysqli;步骤如下:独立编译php的扩展的通用办法

    a. 解压php的源码安装包,切换至已解压目录,然后进入 ext/mysqli/ 目录

    b. 执行: /usr/local/php/bin/phpize       //会在该目录下生成configure等文件 [如果提示没有autoconf、m4错误,用 apt-get install 就行了]

    c. 然后执行: ./configure --with-php-config=/usr/local/php/bin/php-config --with-mysqli     

    d. 最后执行: make && make install 

    此时会在扩展目录中生成mysqli.so,

    如图所示:

    这里写图片描述 


    使用ls查看该目录可以看到会有一个.so结尾的文件mysqli.so,相当于windows下的.dll文件,如图:

    这里写图片描述

    还有一点很重要不要忘记了,就是把生成的mysqli.so文件加入到php.ini的配置中。 
    使用vi /usr/local/lib/php.ini编辑php.ini, 
    编辑php.ini 
    在最后面加入:extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/mysqli.so如图: 
    加入配置文件php.ini中

    最后重启下apache服务就OK了!

    在程序中使用phpinfo();就能看到有mysqli这项扩展的内容了:

    编译安装pdo.so、pdo_mysql.so等都一样(但是为了防止其他扩展编译出错所影响,最好重新解压php源码安装包,在新的安装包里在编译所需的扩展,我就遇见了此问题),进入ext/下对应的目录,执行上面操作,只需要换成对应的 --with-pdo、--with-pdo-mysql就好

    -----------------------------------------------------------------------------------------------------

    知识总结:

    php5.3版本开始,使用的mysql扩展是集成在php源码中发布。


    1.版权考虑:原来与mysql进行通信的库(mysql Client Library),是由mysqlAB公司(现在是甲骨文)所写,那么就是在该公司的协议下发布(版权)。那么有些功能就会被禁用掉。

     mysqlnd这个驱动,是由zend 公司开发的MySQL数据库驱动,采用PHP开源协议(即 PHP license)避免了任何可能存在的版权问题。而旧的libmysql是有Mysql AB公司(现在的Oracle Corporation)开发,依照mysql license。

    还记得我们在编译php的时候,如果需要php链接mysql数据库,那么必须编译的时候指定一个项:

    --with-mysql=/usr/local/mysql 这里是指定mysql客户端库的位置。

    后面就是mysql的安装目录。因为与mysql进行通信,需要按照mysql的协议来进行通信,而mysql官方是发布了客户端((libmysqlclient库),所以这里就是指定去mysql的安装目录下搜索客户端库的位置。

    这样的确麻烦。

    现在写入php源码一部分,会解决过去的版本发布的问题。相当于安装了php源码,就安装了与mysql进行通信的库。

    是这样编译了


    ./configure --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd

    上面的结果是,mysql、mysqli、pdo这三个操作mysql的扩展,都配置使用mysqlnd库来操作mysql

        --with-mysql项指定使用mysqlnd客户端库了,根本不需要依赖于mysql的安装路径了。因为是使用php源码中自己的的库。

         这个库是一个c语言编写的,以扩展形式加入php引擎。

         这个库就在php的源码包中,自己编译安装,就生成在自己在php中,根本不需要依赖于神马mysql提供的客户端了

        所以顾名思义,叫做Native driver,本地驱动(操作mysql的驱动)。

       


    2.内存使用效率提高。以前是复制数据两份,现在只需一份。


    新版本由于扩展集成在php源码中,是php一部分。mysql_fetch_assoc()是复制一份数据到php中了。以前就是复制一份到扩展中,同时复制一份到php中。所以是两份。

     总结一句话就是:操作mysql有三个可供选择的扩展,mysql、mysqli、pdo。而mysqli and PDO MYSQL作为推荐的扩展。而不是mysql原来的扩展

    -----------------------------------------------------------------------------------------------------------------------------------

    二、nginx环境下的php的安装步骤如下:

    1、查看当前系统版本

     # cat /etc/redhat-release
    CentOS Linux release 7.2.1511 (Core)

    2、yum安装依赖的程序包

    yum install zlib libxml libjpeg freetype libpng gd curl libiconv zlib-devel libxml2-devel libjpeg-devel freetype-devel libpng-devel gd-devel curl-devel openssl openssl-devel libxslt-devel

    3、安装libiconv程序包

    wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz
    tar zxf libiconv-1.15.tar.gz
    cd libiconv-1.15
    ./configure --prefix=/usr/local/libiconv
    make
    make install

    4、配置编译安装PHP-5.6.30.tar.gz

    wget http://tw1.php.NET/get/php-5.6.30.tar.gz/from/this/mirror

    mv mirror php-5.6.30.tar.gz

    tar xzvf php-5.6.30.tar.gz

    ./configure
     --prefix=/usr/local/php
     --enable-fpm
     --with-mysql=mysqlnd

     --with-pdo-mysql=mysqlnd

     --with-mysqli=mysqlnd

     --with-openssl
     --with-zlib
     --with-gd
     --with-jpeg-dir
     --with-png-dir
     --with-iconv=/usr/local/libiconv
     --enable-short-tags
     --enable-sockets
     --enable-zend-multibyte
     --enable-soap
     --enable-mbstring
     --enable-static
     --with-curl
     --enable-ftp
     --with-libxml-dir

    make
    make install

    注意: 以上若php版本是5.3以下的话,mysql需使用 --with-mysql=/usr/local/mysql 和--with-pdo-mysql=/usr/local/mysql 

     5.配置相关

    php.ini配置

    首先我们需要配置的是php.ini这个文件

    安装目录有2个文件:php.ini-development和php.ini-production

    php.ini-production 线上版本使用

    php.ini-development 开发版本使用

    我们选择development进行配置

    # cp php.ini-development /usr/local/php/lib/php.ini

    php-fpm配置

    拷贝php-fpm配置文件

    #cp -R ./sapi/fpm/php-fpm.conf /usr/local/php/etc/php-fpm.conf

    将php给我们准备好的init.d.php-fpm。

    #cp ./sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

    将php-fpm服务添加到chkconfig列表

    #chkconfig --add php-fpm

    设置开机自启动

    #chkconfig php-fpm on

    以后重启和停止php的方式为

    #service php-fpm start
    #service php-fpm stop
    #service php-fpm restart
    #service php-fpm reload

    配置Nginx支持PHP

    进入nginx主目录,/usr/local/nginx;

    #cd /usr/local/nginx

    进入配置目录

    #cd conf

    Nginx支持PHP需要修改nginx.conf

    #vim nginx.conf

    代开下面代码,让Nginx支持PHP,在server代码段里

    修改完,这段代码变为,红色部分为我们主机目录为/usr/www,需要修改fastcgi_param SCRIPT_FILENAME指向对应目录即可:

    然后在server代码段里设置主目录设置为/usr/www。

    注释掉root那行,新增一行:root /usr/www;

    保存退出。

    重启Nginx服务

    # /usr/local/nginx/sbin/nginx -s reload

     重启成功!下面我们在/usr/www目录下添加一个新文件。

    #vim /usr/www/phpinfo.php

    插入以下内容

    <?php  
    phpinfo();  
    ?>  

    在浏览器中打开http://远程ip/phpinfo.php

    到此步,nginx与php配置完成,接下来测试数据库是否连接成功:

    在/usr/www目录下添加一个新文件db_test.php,然后输入下面代码:

    可能会出现

    php-mysql

    mysql_connet等系列函数用不了,这种warning信息,证明mysql驱动是装上了的。因为他毕竟不是报的undefined function mysql_connet…,这种情况是因为php找不到mysql.sock的连接。启动mariadb(mysql)进入,输入status,记住unix socket的路径

    mysql.sock

    mysql.sock

    然后把他配置到php.ini里面:

    vim /usr/local/lib/php.ini找到mysql.default_socket,加上刚才的sock文件位置

    mysql.default_socket

    mysql.default_socket

    然后看看phpinfo页面,mysql扩展中mysql.default_socket就有值了。最一开始是没有的,配置了之后才有的,当然如果是yum安装的话,不用去配置,php也是找的到这个mysql.sock的。当然mysqli和pdo-mysql都要这样配一下

    phpinfo mysql

    phpinfo mysql

    然后,就能正常输出了

    mysql连接成功

    mysql连接成功

    因为不是yum安装的,nginx还没有成为系统服务,在/etc/rd.d/init.d下新建一个nginxd的脚本,方便开机自启以及使用service nginxd start/stop/restart来管理nginx

    service nginxd start

    service nginxd start

    ok,终于完成了lnmp环境的搭建!nginx也支持php了。nginx和php都是源码方式安装的,mariadb是用yum源安装的。好好体会一下nginx的魅力以及最新版php带来的新功能,准备用这个服务器做个备份的,有想过主从服务器,分布式部署,负载均衡,可惜这两台云服务器不在一个内网。

    --------------------------------------------------------------------------------------------------------------------------------------

    注意: 

    rpm -qa|grep 包名 (centos下)和 dpkg -l|grep 包名   (ubuntu下) 两者功能一样

    参见:

    CentOS 7源码编译安装最新版php5.6和nginx1.7.9及mysql(搭建lnmp环境)

    http://blog.feehi.com/linux/222.html

  • 相关阅读:
    JDA 8.0.0.0小版本升级
    Mybatis中的resultType和resultMap
    FP硬绑
    消息 14607,级别 16,状态 1,过程 sp_send_dbmail,第 141 行 profile 名称无效
    检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 8000401a 因为配置标识不正确,系统无法开始服务器进程。请检查用户名和密码。 (异常来自 HRESULT:0x8000401A)。 在 BatchImportEntryTable.GetExcelData(String FileName)
    工单重复回写
    ORACLE 对一个表进行循环查数,再根据MO供给数量写入另一个新表
    siebel切换数据源
    MYSQL TIMESTAMP with implicit DEFAULT value is deprecated.
    多账户的统一登录 (转)
  • 原文地址:https://www.cnblogs.com/eaglezb/p/6432252.html
Copyright © 2011-2022 走看看