PHP:Linux下源码配置安装PHP环境

```

2017年11月1号

说明:PHP环境搭建时,采用源码安装的方法失败,最后使用的yum云安装成功(详见另外一篇日志),后面看到一篇更详细的源码安装方法,先行转载记录下来,供后期尝试学习。

2017年12月4号

说明:(1)手动搭建两次PHP运行环境之后,针对原来的博客做了部分修改;(2)由于前后端分离,因此我自己搭建的环境并没有安装数据库,关于数据库的安装操作不能保证完全正确;

```


安装配置apache

一般linux服务器上都已经有apache环境了,如果有可以跳过这一步。如果要查看linux 是否已经安装apache,可以用下面的命令:

[root@localhost htdocs]# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

[root@localhost htdocs]# apachectl -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

两个命令都行。几乎所有的linux版本都自带apache, 名字一般是httpd,不叫apache。

/etc/init.d/httpd是它的启动脚本。

有时候我们不想用自带的apache,这样可能需要先删除自带的,再安装自己的。

删除的步骤如下:


1 查看与httpd相关软件包。 
# rpm -qa|grep httpd
httpd-2.2.3-11.el5_2.centos.4

2 然后删除httpd:
# rpm -e httpd

可能出现问题:
error: Failed dependencies:
httpd >= 2.2.0 is needed by (installed) gnome-user-share-0.10-6.el5.i386

3 还有一个依赖的软件包没有删除
# rpm -e gnome-user-share

4 再删除httpd
# rpm -e httpd
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

下载地址

http://httpd.apache.org/

我下载的是

httpd-2.2.31.tar.gz

切换到root用户,后面的所有操作都用root进行。

新建目录

mkdir /usr/local/apache2
  • 1

安装的apache2要安装到这个文件夹里面。这个目录其实不新建也可以,后面编译安装时没有的话也会动态创建

另外,也可以把目录指定在/home/目录下的某个用户下。

解压,配置,编译安装

[root@localhost /]# tar -zxvf httpd-2.2.31.tar.gz 

[root@localhost httpd-2.2.31]#  ./configure --prefix=/usr/local/apache2 --enable-module=shared

[root@localhost httpd-2.2.31]# make
[root@localhost httpd-2.2.31]# make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

完成后如下

[root@localhost apache2]# pwd
/usr/local/apache2
[root@localhost apache2]# ll
总用量 60
drwxr-xr-x.  2 root root  4096 920 15:00 bin
drwxr-xr-x.  2 root root  4096 920 15:00 build
drwxr-xr-x.  2 root root  4096 920 15:00 cgi-bin
drwxr-xr-x.  4 root root  4096 920 15:00 conf
drwxr-xr-x.  3 root root  4096 920 15:00 error
drwxr-xr-x.  2 root root  4096 716 2015 htdocs
drwxr-xr-x.  3 root root  4096 920 15:00 icons
drwxr-xr-x.  2 root root  4096 920 15:00 include
drwxr-xr-x.  4 root root  4096 920 15:00 lib
drwxr-xr-x.  2 root root  4096 920 15:00 logs
drwxr-xr-x.  4 root root  4096 920 15:00 man
drwxr-xr-x. 14 root root 12288 716 2015 manual
drwxr-xr-x.  2 root root  4096 920 15:00 modules
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

启动遇到错误:

[root@localhost bin]# ./apachectl start
httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain for ServerName
  • 1
  • 2

解决这个问题需要编辑httpd.conf文件(/apache2/conf/目录下),找到:

#ServerName www.example.com:80 
修改为: 
ServerName 127.0.0.1:80或者ServerName localhost:80

然后重新启动:

[root@localhost bin]# ./apachectl start
  • 1

打开浏览器,地址输入localhost,可以看到启动成功了。

这里写图片描述

如果启动时报如下的错误:

[root@localhost bin]# ./apachectl start
(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
  • 1
  • 2
  • 3
  • 4
  • 5

这个错误的原因是因为有其他服务正在使用80端口。先用 
[root@localhost bin]# netstat -lnp|grep 80 
查看那个进程使用了80端口。或者: 
ps -ef|grep httpd 
查看有没有httpd进程正在运行。

然后对应杀掉(比如:sudo killall httpd),再重启。

----------如果浏览器无法访问80端口,可能是防火墙没有开启80端口------------------------

可以通过命令去添加端口的方法:

 代码如下 复制代码

[root@centos httpd]# /sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

[root@centos httpd]# /etc/rc.d/init.d/iptables save

[root@centos httpd]# /etc/init.d/iptables restart

这样就搞定了,查看效果

 代码如下 复制代码

[root@centos httpd]# /etc/init.d/iptables status

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

添加php支持

编辑httpd.conf文件,找到

LoadModule php5_module        modules/libphp5.so
  • 1

这个默认应该就是打开的,主要是找到确认下。

添加下面一行(注意.号前面有空格):

AddType application/x-httpd-php .php
  • 1

安装php

下载地址:

http://php.net/

我下载的是

php-5.6.26.tar.gz

新建目录

mkdir /usr/local/php
  • 1

解压,编译,安装

[root@localhost /]# tar -zxvf php-5.6.26.tar.gz 

[root@localhost php-5.6.26]#  ./configure --prefix=/usr/local/php  --with-apxs2=/usr/local/apache2/bin/apxs --with-config-file-path=/usr/local/php/etc  --enable-fpm    // 开启php-fpm支持


[root@localhost php-5.6.26]# make clean
[root@localhost php-5.6.26]# make
[root@localhost php-5.6.26]# make test
[root@localhost php-5.6.26]# make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

–with-config-file-path会指明配置文件的路径(php.ini),很重要,不要忘了

摘自其他网站
注意这里有一个-with-apxs2=/usr/local/apache2/bin/apxs选项,其中apxs是在安装Apache时产生的,apxs是一个为Apache HTTP服务器编译和安装扩展模块的工具,使之可以用由mod_so提供的LoadModule指令在运行时加载到Apache服务器中。我的理解是通过这个工具把PHP模块动态加载到Apache中

在configure阶段,遇到一个错误:

checking for xml2-config path... 
configure: error: xml2-config not found. Please check your libxml2 installation
  • 1
  • 2

运行yum install libxml2,然后再运行yum install libxml2-devel安装完毕后,重新运行上面的./configure命令就可以了。

将源码目录下的 
php.ini-development文件复制到/usr/local/php/etc目录下(注意要和前面指定的–with-config-file-path的值一致),更名为php.ini

$ cd php-5.6.20
$ cp php.ini-development  /usr/local/php/php.ini
$ cp /usr/local/etc/php-fpm.conf.default  /usr/local/etc/php-fpm.conf
$ cp sapi/fpm/php-fpm  /usr/local/bin

需要注意的是:在这里一定要配置php-fpm,因为在安装PHP插件的时候,修改完php.ini之后一定要重启php-fpm新的配置信息才会生效。我曾今在这里卡了很久。

设置当浏览器访问目录时,缺省访问的页面

找到httpd.conf文件,我的在/usr/local/apache2/conf/目录下,找到IfModule dir_module,添加index.php

<IfModule dir_module>
    DirectoryIndex index.html index.php
IfModule>
  • 1
  • 2
  • 3

重启apache,然后在/usr/local/apache2/htdocs下新建一个test.php,代码如下:


      phpinfo();
 ?>
  • 1
  • 2
  • 3

打开浏览器,访问localhost/test.php,成功:

PHP:Linux下源码配置安装PHP环境_第1张图片

注意红色标记的部分就是php.ini的位置,后面还会用到。

修改默认站点目录

缺省的站点目录是:

/usr/local/apache2/htdocs
  • 1

有时候需要改这个目录,比如我的服务器将这个地址改为/home/pony/inn_web目录下。步骤如下:

编辑httpd.conf文件, 
找到 DocumentRoot,目录改为: 
/home/pony/inn_web 
找到

访问oracle数据库支持

php搭配oracle可能比较少见,但是项目中确实用到了,还是要搞一下。

安装instant client

instantclient是oracle的连接数据库的简单客户端,只需下载Basic和Devel两个rpm包。

下载地址:

http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html

我下载的是

oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm 
oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm
  • 1
  • 2

安装

[root@localhost /]# rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:oracle-instantclient11.########################################### [100%]
[root@localhost /]# rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm 
Preparing...                ########################################### [100%]
   1:oracle-instantclient11.########################################### [100%]
[root@localhost /]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

建立软链接

[root@localhost 11.2]# ln -s /usr/lib/oracle/11.2/client64/ /usr/lib/oracle/11.2/client

[root@localhost oracle]# ln -s /usr/include/oracle/11.2/client64/ /usr/include/oracle/11.2/client
  • 1
  • 2
  • 3
  • 4

安装oci

Oracle 调用接口 (OCI) 是最全面、性能最高、基于原生“C”语言的 Oracle 数据库接口,它可以提供 Oracle 数据库的全部功能。OCI 为构建各种语言专用接口(如 Oracle JDBC-OCI、ODP.Net、Oracle 预编译器、Oracle ODBC 和 Oracle C++ Call Interface (OCCI)驱动程序)提供了基础。各种领先的开源接口(如 PHP OCI8 扩展、ruby-oci8、Perl DBD::oracle 和 Python cx_oracle)也都使用 OCI。作为对 Oracle 数据库的原生接口,OCI 还对 Oracle 数据库核心内部发出的查询、语句和调用进行了增强。

找到php源码,进入ext/pdo_oci目录下。

phpize是用来动态增加php扩展模块的

[root@localhost pdo_oci]# /usr/local/php/bin/phpize CFLAGS="-I/usr/lib/oracle/11.2/client" CXXFLAGS="-I/usr/lib/oracle/11.2/client"
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[root@localhost pdo_oci]# 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

配置,编译安装

[root@localhost pdo_oci]# ./configure --with-pdo-oci=instantclient,/usr,11.2 --with-php-config=/usr/local/php/bin/php-config
[root@localhost pdo_oci]# make clean
[root@localhost pdo_oci]# make
[root@localhost pdo_oci]# make install
  • 1
  • 2
  • 3
  • 4

编辑php.ini文件,增加下面两项:

extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/"
extension=pdo_oci.so
  • 1
  • 2

注意确认/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/目录下确实有pdo_oci.so文件

重启apache,然后浏览器打开前面的test.php,往下拉会发现oci已经加成功了:

PHP:Linux下源码配置安装PHP环境_第2张图片

代码示例

$tns = "(DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.86.132)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )";

define('PDO_DB_DNS', "oci:dbname=".$tns);  //数据库dns
define('PDO_DB_USER', 'test');      //登录用户名
define('PDO_DB_PASSWORD', 'test'); //登录密码


class PDOManage{

    private $_pdo = null;
    private static $_instance = null;

    /**
     * 构造方法,私有
     */
    private function __construct(){
        try{
            $this->_pdo = new PDO(PDO_DB_DNS, PDO_DB_USER, PDO_DB_PASSWORD);
            $this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//可以抛出异常

        }catch (PDOException $e)
        {
            user_dump('SQL instance:'.$e->getMessage());
            exit($e->getMessage());
        }
    }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

添加php curl支持

curl是一个强大的开源库,支持http等协议。如果项目中用到curl的话,需要加上curl扩展。不需要单独下载,一般源码包里都有只要编译配置下就行。

windows下似乎是自带的,因为我是移植一个项目到linux下,发现有些页面会报错:

Call to undefined function curl_init()
  • 1

才知道linux下需要单独安装的。

进入php源码下的ext/curl目录,配置安装:


[innpay@localhost curl]$ pwd
/home/innpay/php/soft/php-5.6.26/ext/curl
[innpay@localhost curl]$ 
[innpay@localhost curl]$ /home/inn
inn/    innpay/ 
[innpay@localhost curl]$ /home/innpay/php/php/bin/phpize 
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[innpay@localhost curl]$ ./configure --with-curl=/usr/local/curl --with-php-config=/home/innpay/php/php/bin/php-config

[innpay@localhost curl]$ make
[innpay@localhost curl]$ make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

注意–with-php-config这个要根据自己的php目录实际修改

安装完成后,会提示我们动态库安装到了一个目录下:

我的是在

php安装目录/lib/php/extensions/no-debug-non-zts-20131226/
  • 1

在这个目录下可以找到curl.so文件。


编辑php.ini文件 
找到前面加pdo_oci.so的位置,增加一行: 
extension = curl.so

重启apache即可生效。


添加php openssl 支持

项目中也用到了openssl,所以也要添加openssl扩展,步骤类似上面。

[innpay@localhost openssl]$ mv config0.m4 config.m4
[innpay@localhost openssl]$ /home/innpay/php/php/bin/phpize
Configuring for:
PHP Api Version:         20131106
Zend Module Api No:      20131226
Zend Extension Api No:   220131226
[innpay@localhost openssl]$ 

[innpay@localhost openssl]$ ./configure --with-openssl --with-php-config=/home/innpay/php/php/bin/php-config  

[innpay@localhost openssl]$ make
[innpay@localhost openssl]$ make install
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

编辑php.ini文件 
找到前面加pdo_oci.so的位置,增加一行: 
extension = openssl.so

重启apache即可生效。

```

附上转载的原文链接:

http://blog.csdn.net/pony_maggie/article/details/52758159

```

```

2017年12月4号

推荐三篇博文,基本可以搞定Apache+PHP+PHP插件的安装配置:

(1)源码安装的步骤参考:

https://www.cnblogs.com/zhuque/archive/2012/11/03/2763351.html

(2)但是一定要注意添加php-fpm的配置,具体请参考这篇博文:

http://blog.csdn.net/why_2012_gogo/article/details/51120645

(3)至于PHP插件的安装,譬如常见的openssl、curl、mcrypt等,都可以参照这篇博文:

http://blog.csdn.net/fanyun7654/article/details/20635203

(4)重点截图:

PHP:Linux下源码配置安装PHP环境_第3张图片

```



你可能感兴趣的:(PHP)