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,
在最后面加入:extension = /usr/local/lib/php/extensions/no-debug-non-zts-20100525/mysqli.so如图:
最后重启下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
然后把他配置到php.ini里面:
vim /usr/local/lib/php.ini找到mysql.default_socket,加上刚才的sock文件位置
mysql.default_socket
然后看看phpinfo页面,mysql扩展中mysql.default_socket就有值了。最一开始是没有的,配置了之后才有的,当然如果是yum安装的话,不用去配置,php也是找的到这个mysql.sock的。当然mysqli和pdo-mysql都要这样配一下
phpinfo mysql
然后,就能正常输出了
mysql连接成功
因为不是yum安装的,nginx还没有成为系统服务,在/etc/rd.d/init.d下新建一个nginxd的脚本,方便开机自启以及使用service nginxd start/stop/restart来管理nginx
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
Linux下编译、安装php的更多相关文章
- LINUX下编译安装PHP各种报错大集合
本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. nginx1.6.2-mysql5.5.32二进制,php安装报错解决: 123456 [root@clien ...
- linux下编译安装vim7.4并安装clang_complete插件
linux下编译安装vim7.4并安装clang_complete插件 因为debian里软件仓库中下载安装的vim是不支持python写的插件的(可以打开vim,在命令模式先输入:py测试一下),导 ...
- linux下编译安装curl
linux下编译安装curl 1.下载curl git clone https://github.com/curl/curl.git 2.在curl目录下生成configure文件 ./buldcon ...
- linux下编译安装boost库
linux下编译安装boost库 linux下编译安装boost库 1.下载并解压boost 1.58 源代码 下载 解压 2.运行bootstrap.sh 3.使用b2进行构建 构建成功的提示 4. ...
- Linux下编译安装Apache Http Server
Linux下编译安装Apache Http Server [TOC] 1.下载httpd-2.4.12.tar.bz2 wget http://mirror.bit.edu.cn/apache/htt ...
- Linux下编译安装qemu和libvirt
目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3 ...
- linux下编译安装nginx
1.首先下载稳定版nginx1.10.2 使用wget命令下载 wget http://nginx.org/download/nginx-1.10.2.tar.gz 2.然后解压 tar -zxvf ...
- Linux下编译安装qemu和libvirt【转】
转自:http://www.cnblogs.com/findumars/p/5679742.html 目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 ...
- (转)Linux下编译安装log4cxx
Linux下编译安装log4cxx 一个项目的服务器端在Linux平台下,用到了开源日志库log4cxx,这个库是apache项目的一个子库.功能很不错.下面记录下它的编译和安装过程. log4cxx ...
- linux安装软件的几种方法----linux下编译安装软件的一般步骤
linux安装软件的几种方法: 一.rpm包安装方式步骤: 1.找到相应的软件包,比如soft.version.rpm,下载到本机某个目录: 2.打开一个终端,su -成root用户: 3.cd so ...
随机推荐
- apt-get -f install
http://zhidao.baidu.com/link?url=tZLEfm1Ycc1pWS67-95fXU596CtwA_1l2pPfzINUTxvOCvWdf3JZsWuZNxsxn0Jv6Om ...
- 【剑指offer】二叉树的镜像,C++实现(先序遍历)
原创博文,转载请注明出处!github地址 博客文章索引地址 1.题目 输入一颗二叉树,将二叉树变换为原二叉树的镜像,如下图所示: 2.思路 二叉树有0个节点 二叉树有1个节点 二叉树有 ...
- HDU2037 今年暑假不AC
解题思路:贪心问题,关键突破口是,先将节目的结束时间 从小到大排个序,然后依次判断后面一个节目的开始时间 是否大于或等于前一个符合条件的节目的结束时间.见代码: #include<cstdio& ...
- 字符串处理scanf("%d%*c",&n);
"*"表示该输入项读入后不赋予任何变量,即跳过该输入值.这在减小内存开支上面还是有一点用处的,不需要的字符直接跳过,免得申请没用的变量空间 你的例子中的%*c的作用是读入'\n', ...
- Quartz 2D编程指南(7) - 阴影(Shadows)
阴影是绘制在一个图形对象下的且有一定偏移的图片,它用于模拟光源照射到图形对象上所形成的阴影效果,如果7-1所示.文本也可以有阴影.阴影可以让一幅图像看上去是立体的或者是浮动的. 阴影有三个属性: 1. ...
- PHP 生成类似 SqlServer NEWID() 全局唯一标识符
最近在对接SqlServer中对方有一个字段要求 SqlServer 中 有一个 NEWID() 就是生成36位的 唯一标识符 -> 8CBD3198-297D-4037-A859-B27BB ...
- Tornado之架构概述图
一.Tornado之架构概述图 二.Application类详细分析: #!/usr/bin/env python # -*- coding: utf8 -*- # __Author: "S ...
- pid参数调节的几句话
如果参数上升太快,降低Kp值,如果震荡太剧烈(振荡幅度过大),降低Ki值,如果曲线震荡部分上升下降太快则尝试调整Kd值.
- CH1802 表达式计算4
题意 给出一个表达式,其中运算符仅包含+,-,*,/,^(加 减 乘 整除 乘方)要求求出表达式的最终值 数据可能会出现括号情况,还有可能出现多余括号情况 数据保证不会出现>=2^31的答案 数 ...
- 洛谷 P1098 字符串的展开
题目描述 在初赛普及组的“阅读程序写结果”的问题中,我们曾给出一个字符串展开的例子:如果在输入的字符串中,含有类似于“d-h”或者“4-8”的字串,我们就把它当作一种简写,输出时,用连续递增的字母或数 ...