linux源码包安装php中的./configure选项详解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux源码包安装php中的./configure选项详解相关的知识,希望对你有一定的参考价值。

Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
--主安装目的目录 [/usr/local]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--bin目录
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--sbin目录
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names

那些参数的具体意思是什么意思?
上面的帮助文档中
--bindir=DIR user executables in DIR [EPREFIX/bin]
1.这个默认的bin目录是在哪个地方的bin?
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
2.这个默认的sbin目录是在哪个地方的sbin?
3.EPREFIX和PREFIX有什么区别?是不是大致意思就是一个相对路径一个绝对路径?

问这个问题是因为要求在一个linux 系统里搭建两套Apache+mysql+php环境,
Apache和mysql都搞定了,就剩下一个PHP的,
4.不知道PHP的安装路径有哪些目录是可以公用的,那些必须是区分开的,
注意,我说的这两套环境是完全的用源码包安装的两套,也就是说有两个Apache的目录及配置文件,同样mysql也是(包括数据库目录,配置文件路径等等,),还是最后剩下的PHP,装了两套,但是貌似有些默认的目录是在公用的地方放着的,比如那个php.ini文件,默认的是放在/usr/local/bin下面,但是现在有两套系统,所以,放在这个路径下就不可以了,懂我的意思???
QQ/E-mail:dydzdc@163.com

擦。。。没人研究过么。。。还是我被无视了。???

PREFIX是程序安装位置,前面那个没用过。
sbindir默认会放在PREFIX/bin目录,所以不需要特别指定。
这是我安装时的例子:
./configure --prefix=/usr/local/server/php --enable-fpm --with-fpm-user=www --with-fpm-group=www --with-config-file-path=/usr/local/server/php/etc --with-config-file-scan-dir=/usr/local/server/php/etc/php.d --enable-mbstring --with-mysql=/usr/local/server/mysql --with-pgsql=/usr/local/server/postgresql --with-pdo-pgsql=/usr/local/server/postgresql --with-pdo-mysql=/usr/local/server/mysql --enable-sockets --enable-sqlite-utf8 --enable-zip --enable-zend-multibyte --with-mysql-sock --with-gd --with-mcrypt --with-mysqli=/usr/local/server/mysql/bin/mysql_config
安装结果是php被安装到了/usr/local/server/php 目录,sbin文件在/usr/local/server/php/sbin,php默认配置文件需要放到 /usr/local/server/php/etc 文件夹(etc默认不存在,新建一个,把php.ini放进去就可以了),配置文件扫描目录是 /usr/local/server/php/etc/php.d (php.d目录也需要手动建立)。
这样一来就可以和系统目录独立了,然后编译第二个php,指定prefix,例如 --prefix=/usr/local/server/php2 ,其他参数依样修改,就可以安装两套php,启动脚本自己建立一个就可以了,但是两个php-fpm配置需要改动其中一个默认监听端口,默认是9000 。其他服务软件道理是一样的,主要还是更改第二套服务软件默认监听端口,否则无法启动,会提示端口已被占用。
参考技术A 1、Linux下,默认是在/usr/local/bin/,假如你设置--prefix=/usr/local/php那么就在/usr/local/php/bin/
2、sbin道理相同。sbin的意思就是server bin
3、EPREFIX没用过
4、如果要用2套版本,用prefix区分开不同的安装目录。php.ini默认在/usr/local/php/etc/本回答被提问者采纳

Linux 编译安装 php 扩展包 curl

php源码目录:/root/php

php编译目录:/usr/local/webserver/php/

curl源码目录:/root/curl

1.curl,主要用于发送http请求,是php的一个扩展包。

2.安装过程:
(1)curl下载:http://curl.haxx.se/download.html
(2)具体安装过程:
  • 解压:tar -zxvf curl.tar.gz
  • cd  /(php源码目录,不是php编译目录)/ext/curl
  • 运行phpize: /(php编译目录)/bin/phpize
  • ./configure --with-php-config=/(php编译目录)/bin/php-config  --with-curl=/(curl源码目录)
  • make && make install
  • 修改php.ini,增加:extension=curl.so(如果没有安装过其他php扩展,则需要同时配置extension_dir="/(php编译后目录)/lib/php/extensions/no-debug-non-zts-20121212/",上一个步骤生成.so文件的时候,会输出extension_dir目录)
(3)检验是否安装成功:
  • /(php编译后目录)/bin/php -m | grep curl ——正常打印curl,则表示安装成功(php -m会打印出已安装的扩展模块)
3.踩过的坑:
(1)直接在curl的源码目录最上层,运行phpize,提示如下错误:
Cannot find config.m4. 
Make sure that you run ‘/home/zhuyx/local/php-5.5.3/bin/phpize‘ in the top level source directory of the module
原因:
  phpize扩展安装,源包需要有config.m4这个配置文件;当前扩展的源码包不包含(memcache的就包含)。
 
解决方法:
(1)进入php源码包的 ext/curl 下面运行phpize,再进行安装
(2)./configure --with-php-config=/php编译后目录/bin/php-config  --with-curl=curl源码目录
 
问题扩展:
  安装其他的php扩展的时候,遇到类似问题,都可以采取上述解决方案。
 
(2)关于php.ini
  楼主一开始修改的是 php编译后目录/lib/php.ini 这个文件,修改之后新增模块并不生效。后来才知道,前面这个是默认(编译时候不指定)的扩展配置目录,如果编译的时候指定了php.ini的目录,以后都需要修改指定目录下的php.ini,例如楼主的是 php编译后目录/php.ini 
 
(3)调用curl()的php脚本,命令行可以运行,浏览器访问提示如下错误:
  Fatal Error:Call to undefined function curl()
 
原因:
  楼主的服务器是nginx,安装了curl扩展后,没有重启php-fpm导致。
 
解决方法:
  重启php-fpm.
  ps aux | grep php-fpm (找到master进程)
  kill -SIGINT master进程
  进入php-5.5.3/sbin,执行  ./php-fpm(启动)


以上是关于linux源码包安装php中的./configure选项详解的主要内容,如果未能解决你的问题,请参考以下文章

linux apache 不解析php文件显示源码

Linux下利用phpize安装memcashe的php源码扩展包

Linux 操作系统,安装了PHP后apache2无法解析,老提示下载,请问啥原因/

Linux 编译安装 php 扩展包 curl

linux 下 php 安装 ZeroMQ 扩展

linux源码安装php7.2.0