本系列的lnmp的大框架基本上是按照http://www.linuxzen.com/lnmphuan-jing-da-jian-wan-quan-shou-ce-si-lnmpda-jian-yuan-ma-an-zhuang.html来写的

#########################update-2015-11-29##########################################

下面的nginx配置文件和php配置文件都有一个小错误,之前误打误撞通过了,今天复习的时候发现又报 connect() to unix:/var/run/php-fpm/php-fpm.sock failed (2: No such file or directory) 这个错误,然后就开始了艰苦卓绝的找错。后来在stack overflow上找到了一个解决方法:

http://serverfault.com/questions/477630/impossible-to-run-php-fpm-on-server-restarts-ubuntu-12-04-x64

大意是在/usr/local/php/etc/php-fpm.conf中listen的目录在/var/run/php-fpm/php-fpm.sock中,但是/var/run是个动态目录,开机后目录下的文件都会重新加载初始化,而php-fpm这个目录根本就不存在,系统也不会为你自动创建,所以改成listen=/var/run/php-fpm.sock即可。同时/usr/local/nginx/nginx.conf的内容也要改。把fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;改成fastcgi_pass   unix:/var/run/php-fpm.sock;

user和group网上都是www或者www-data而我用会报错permission denied,用nobody可以通过。

#########################update-2015-11-29##########################################

今天又花了一天时间装了php,感觉php的源码安装也挺麻烦的,整个过程各种报错。

下篇文章准备整合所有查找到的报错和解决方法。

php和nginx一样,在安装前需要装一堆的依赖。有libmcrypt、mcrypt、mhash。其实远不止这三个包,在后面的configure和make中还会陆陆续续安装一些依赖。

1、安装libmcrypt、mcrypt、mhash(整个过程都在/usr/local/src/php目录下)

  1. #创建/usr/local/src/php目录并进入
    mkdir /usr/local/src/php
    cd /usr/local/src/php
    #下载libmcrypt,解压,编译,安装
    wget http://sourceforge.net/projects/mcrypt/files/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
  2. tar -xzvf libmcrypt-2.5..tar.gz
  3. cd libmcrypt-2.5.
  4. ./configure
  5. make -j2
  6. make install
  7. #下载mhash,解压,编译,安装
  8. wget http://sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz
  9. tar -xzvf mhash-0.9.9.9.tar.gz
  10. cd mhash-0.9.9.9
  11. ./configure
  12. make -j2
  13. make install
  14. # 这两个包安装完成后要把动态链接库做一个软连接到/usr/lib,以为接下来的mcrypt依赖于这两个包
  15. ln -s /usr/local/lib/libmcrypt* /usr/lib
  16. ln -s /usr/local/lib/libmhash.* /usr/lib/
  17. ln -s /usr/local/bin/libmcrypt-config /usr/bin/libmcrypt-config
  18. #下载mcrypt,解压,安装,编译
  19. wget http://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download
  20. tar -zxvf mcrypt-2.6..tar.gz
  21. cd mcrypt-2.6.
  22. ./configure
  23. make -j2
  24. make install

2、生成配置文件(整个过程都在/usr/local/src/php/php-5.6.15目录下)

  1. wget http://cn2.php.net/distributions/php-5.6.15.tar.gz
  2. tar -xzvf php-5.6..tar.gz
  3. cd php-5.6.
  4. sudo ./configure --prefix=/usr/local/php --with-mysql=/usr/local/mysql/ --with-zlib --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --with-curl --enable-fpm --with-mcrypt --with-gd --with-openssl --with-mhash --enable-sockets --with-ldap --with-ldap-sasl --with-xmlrpc -enable-zip --enable-soap

在configure的时候要注意,--enable-safe-mode --enable-discard-path --enable-fastcgi --enable-force-cgi-redirect参数从5.3版本开始就默认开启了,5.4开始不支持这些选项,所以在参考其他教程时要注意有些选项不需要写到自己的configure中了。我看到的90%的参考教程都写了一两个不支持的参数的。当然你如果写了也没关系,系统不会计算进去。

有一个选项需要强调一下,就是--enable-fpm,如果你在搭建环境时是需要php和nginx结合的,那么这个选项必写。由于我是搭建的LNMP,所以这个参数加上了。想要详细了解选项的,使用./configure -h查看。

我在configure遇到的问题:

①configure: error: Please reinstall the libcurl distribution -easy.h should be in <curl-dir>/include/curl/

  解决方法:需要安装curl-devel,ubuntu源中没有,去官网下载并编译安装(也可以直接apt-get下载php5-curl、curl、libcurl4-gnutls-dev)

  1. cd /usr/local/src/php
    wget http://curl.haxx.se/download/curl-7.45.0.tar.gz
  2. sudo tar xzvf curl-7.45..tar.gz
  3. cd curl-7.45..tar.gz
  4. sudo ./configure
  5. sudo make -j2
  6. sudo make install

再次configure又遇到问题

②configure: error: sasl.h not found!

  解决方法:sudo apt-get install libsasl2-dev

再次使用上面的configure,生成配置文件,没有再报错了。

3、编译安装(在/usr/local/src/php/php-5.6.15下)

  cd /usr/local/src/php/php-5.6.15

  sudo make -j2

报错①:

usr/bin/ld: ext/ldap/.libs/ldap.o: undefined reference to symbol 'ber_strdup@@OPENLDAP_2.4_2'
//usr/lib/x86_64-linux-gnu/liblber-2.4.so.2: error adding symbols: DSO missing from command line

解决方法:

一开始我查资料说是没有安装openldap,然后就查了openldap的安装方法,结果openldap用db做存储方案,就是说还要编译安装db(这个db不是mysql,就叫db)。结果搞了半天db和openldap都安装完再编译发现还是报这个错。最后在网上一个一个试,找到了一个解决方法。原文是这么说的

  1. 遇到这种类似的情况,说明「./configure 」沒抓好一些环境变数值。
  2. PHP源码目录下 vi Makefile 找到 EXTRA_LIBS 行,在行末添加 -llber 保存退出再次make即可。
    cd /usr/local/src/php/php-5.6.15
    vim Makefile
    EXTRA_LIBS行,在末尾添加--llber

希望遇到这个问题的同学可以引以为戒不要走弯路了。

再次编译,又报错②:

/usr/local/src/php/php-5.6.15/sapi/cli/php: error while loading shared libraies: libmysqlclient.so.20: cannot open shared object file: No such file or directory

解决办法:

找到libmysqlclient.so.20,并做软链接

  1. shell> find / -name "libmysqlclient.so.20"
  2. /usr/local/mysql/lib/libmysqlclient.so.
  3. /usr/local/src/mysql-5.7./libmysql/CMakeFiles/CMakeRelink.dir/libmysqlclient.so.
  4. /usr/local/src/mysql-5.7./libmysql/libmysqlclient.so.
  5. shell> echo "/usr/local/lib" >>/etc/ld.so.conf
  6. shell> echo "/usr/local/mysql/lib" >>/etc/ld.so.conf
  7. shell> sudo ldconfig
  8. shell> make

再次编译,又他妈报错了,此时我的心情真的是崩溃的

报错③:

  chmod: 无法访问"ext/phar/phar.phar": 没有那个文件或目录

解决办法:

  mkdir -p ext/phar/phar.phar

再次编译,没有错了。

make install

4、配置php(在/usr/local/src/php/php-5.6.15下)  

  1. cd /usr/local/src/php/php-5.6.15
    cp php.ini-production /usr/local/php/php.ini # 如果是开发就复制php.ini-development
  2. cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
  3. ln -s /usr/local/php/bin/php /usr/bin/
    echo "listen = /var/run/php-fpm/php-fpm.sock" >>/usr/local/php/etc/php-fpm.conf
    echo listen = /var/run/php-fpm.sock >> /usr/local/php/etc/php-fpm.conf

使用nginx服务器等待检测php是否安装成功

编辑nginx配置文件:

  1. shell> vi /usr/local/nginx/conf/nginx.conf
  2. location ~ \.php$ {
  3. fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
    fastcgi_pass  unix:/var/run/php-fpm.sock;
  4. fastcgi_index index.php;
  5. fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
  6. include fastcgi_params;
  7. include fastcgi.conf;
  8. }

在/usr/local/nginx/html下创建index.php

  1. shell> cd /usr/local/nginx/html
  2. shell> vi /usr/local/nginx/html/index.php
  3.       <?php
  4.         phpinfo();
  5.       ?>

5、启动php

  1. mkdir /var/run/php-fpm(这一步在每次启动系统时都要做,因为/var/run是个动态目录,系统重启php-fpm就没了).
  2. /usr/local/php/sbin/php-fpm

报错①:

ERROR: [pool www] cannot get gid for group 'nobody'

解决方法:

groupadd nobody

关闭php在开启(不知道php有没有重启选项,只能这样做了)

  1. sudo killall php-fpm
  2. /usr/local/php/sbin/php-fpm

没报错了,此时我以为我已经成功了,呵呵,too young too simple

开始检测是否安装成功。

开启nginx:

  sudo /usr/lcoal/nginx/nginx

在浏览器输入localhost/index.html

结果:

呵呵呵。。。。。。。。。。。。。。。。。。。。。。。。。

就快要成功了我会轻易放弃?果断点了个error log,以为他会引领我找到错误日志,结果是这么个鸟玩意

等于没说。后来我一想这是nginx服务器啊,应该看nginx的错误日志,进入nginx,果然发现了logs

tail -f error.log,实时查看错误日志。再打开一个终端,执行php-fpm,此时error.log刷出了这样的信息:

此时报错:connect() to unix:/var/run/php-fpm/php-fpm.sock failed (13: Permission denied) while connecting to upstream

我检查了一下 /tmp/php-cgi.sock 发现该文件拥有者是root,而nginx和php-fpm都是www用户来运行的,按理讲,这个sock文件也应该是www才对。于是修改php-fpm.conf文件

  1. sudo vim /usr/local/php/etc/php-fpm.conf
  2. user=nobody
    group=nobody
    listen.owner = nobody
  3. listen.group = nobody
  4. listen.mode =

结果如下图:

成功了,但是没有www用户,猛然想起之前增加的组是nobody,于是又把php-fpm.conf改了

  1. sudo vim /usr/local/php/etc/php-fpm.conf
  2. listen.owner = www
  3. listen.group = www
  4. listen.mode =

在浏览器中输入localhost/index.php

如图,成功!!!!!!!!

ubuntu php5.6源码安装的更多相关文章

  1. 烂泥:php5.6源码安装与apache集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. apache对php的支持是通过apache的mod_php5模块来支持的,这点与nginx不同.nginx是通过第三方的fastcgi处理器才可以对p ...

  2. 在 Ubuntu 上使用源码安装 OpenResty

    镜像下载.域名解析.时间同步请点击 阿里云开源镜像站 本文将介绍如何在 Ubuntu 上使用源码安装 OpenResty. 目标 Ubuntu 18.04 OpenResty 1.19.3.2 安装依 ...

  3. 烂泥:php5.6源码安装及php-fpm配置与nginx集成

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. LNMP环境的搭建中,现在只有php没有源码安装过.这篇文章就把这个介绍下. 注意本篇文章使用的centos 6.5 64bit. 登陆centos下载 ...

  4. 烂泥:php5.6源码安装及php-fpm配置

    LNMP环境的搭建中,现在只有php没有源码安装过.这篇文章就把这个介绍下. 注意本篇文章使用的centos 6.5 64bit. 登陆centos下载php5.6的安装包.php的软件包可以去国内的 ...

  5. [笔记] Ubuntu 18.04源码安装caffe流程

    虽然Ubuntu 18.04可以通过apt安装caffe,但是为了使用最新的代码,还是值得从源码安装一遍的. 安装环境 OS: Ubuntu 18.04 64 bit 显卡: NVidia GTX 1 ...

  6. 在Ubuntu Server上源码安装OpenERP 8.0,并配置wsgi和nginx运行环境

    原文: How to install OpenERP 8.0 Alpha on a fresh Debian / Ubuntu server. OpenERP的安装,可以有多种方式,通过添加源,到 h ...

  7. ubuntu mysql5.7源码安装

    本系列的lnmp的大框架基本上是按照http://www.linuxzen.com/lnmphuan-jing-da-jian-wan-quan-shou-ce-si-lnmpda-jian-yuan ...

  8. 简单说说Ubuntu利用bzr源码安装OpenERP7.0的操作步骤

    1.修改Ubuntu国内更新源,具体方法自己baidu.google. 修改更新源后,更新系统 sudo apt-get update sudo apt-get upgrade 复制代码 2.安装Po ...

  9. ubuntu vim8.0源码安装

    安装篇 从https://github.com/vim/vim下载相应zip源码文件,利用unzip vim-master.zip 命令解压到当前用户目录,即~: 解压后进入vim的src目录,首先, ...

随机推荐

  1. webservice学习第二天

    1 课程回顾 l 什么是webservice 远程调用技术:系统和系统之间的调用,获取远程系统里的业务数据 Webservice使用http传输SOAP协议的数据的一种远程调用技术 l Webserv ...

  2. eclipse pom.xml 报错org.apache.maven.plugin.war.WarMojo的解决办法

    如题,maven项目eclipse提示pom.ml有错,提示信息就是org.apache.maven.plugin.war.WarMojo. 然后执行 maven install 出现如下错误提示 [ ...

  3. CPU问题定位与解决

    CPU问题定位基本流程:   性能计数器诊断 主要用到的性能计数器 %Process Time 全实例 (主要用于查看当前服务器的CPU 情况) %Process Time sqlservr (主要用 ...

  4. 前端的指导方针---css篇

    英语是渣渣,想学英语,又不想花钱报培训班.看不懂的文章,还是翻译一下留着自己看吧. 引自   :  https://github.com/bendc/frontend-guidelines HTML ...

  5. SUSE linux使用zypper 安装软件-比yum更好用

    1. How to install "wget" command in Linux and how to use multiple : https://www.cyberciti. ...

  6. 跨多种环境部署 Gearman -改善应用程序性能和降低服务器负载

    您可能想要将工作扩散到一个大型机器群体中,或者想要在不同语言和环境之间共享功能,那么开放源码的 Gearman 服务可以让您轻松地将工作分布到网络中的其他机器.本文将介绍 Gearman 的一些典型应 ...

  7. php责任链模式

    php 责任链模式 又叫职责链模式.包含了一些命令对象和一些处理对象,每个处理对象决定它能处理那些命令对象,它也知道应该把自己不能处理的命令对象交下一个处理对象,该模式还描述了往该链添加新的处理对象的 ...

  8. OC-category 为什么不能添加成员变量

    以下的答案是百度的,仅做记录而已: 1. 利用运行时实际上也不是添加成员变量.已编译的类的内存布局是不变的,Class就是一个结构体,里面的成员不能改变.但是通过运行时可以将一个对象或基础类型变成指定 ...

  9. Topcoder 2015_1C

    A:大水题; B:求一颗树中,有多少条路径 不存在路径中一点是另外一点的祖先,(后面废话说了很多) 其实一个点 可以到它本身也可以是一条路径结论是:统计叶子的节点.(真简单粗暴 C:题目不说,说也说不 ...

  10. [Bzoj1767][Ceoi2009]harbingers (树上斜率优化)

    1767: [Ceoi2009]harbingers Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 451  Solved: 120[Submit][S ...