首页 后端开发 php教程 一次源码编译PHP折腾记

一次源码编译PHP折腾记

Jun 23, 2016 pm 01:27 PM

前言
LINUX环境下编译安装是很折腾人的一件事情,如果没有C/C++功底,碰到编译器报错,肯定要抓狂了 :):),有些软件需要依赖其它库,必须先把依赖库安装好才能进行软件安装。当你学会了编译安装神技之后,LINUX系统运维会比较轻松,总之值得付出时间折腾。

环境
操作系统

[root@vm ~]# lsb_release -aLSB Version:	:core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarchDistributor ID:	CentOSDescription:	CentOS release 5.4 (Final)Release:	5.4Codename:	Final
登录后复制

GCC版本

[root@vm ~]# gcc -vUsing built-in specs.Target: x86_64-redhat-linuxConfigured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --disable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=x86_64-redhat-linuxThread model: posixgcc version 4.1.2 20080704 (Red Hat 4.1.2-54)
登录后复制

Nginx版本

[root@vm sbin]# ./nginx -vnginx version: nginx/0.8.55
登录后复制

步骤
1.从PHP官网下载PHP源码
http://www.php.net/downloads.php php-5.6.12.tar.gz
2.比较文件md5值 计算值跟网站不一致说明下载的源码有问题

[root@vm ~]# md5sum -b php-5.6.12.tar.gz
登录后复制

3.源码解压到指定的目录(根据个人喜好) /usr/local/src/

[root@vm ~]# cd /usr/local/src/[root@vm ~]# tar -xzvf ~/php-5.6.12.tar.gz
登录后复制

4.进入源码目录,执行configure脚本(生成编译配置文件Makefile,依赖环境检查)

[root@vm src]# cd php-5.6.12/[root@vm php-5.6.12]# ./configure --prefix=/usr/local/php-5.6.12 --with-config-file-path=/usr/local/php-5.6.12/etc --with-mysql=/usr/local/mysql --with-mysqli=mysqlnd --without-iconv --with-freetype-dir=/usr/local/freetype --with-jpeg-dir=/usr/local/libjpeg --with-png-dir=/usr/local/libpng --with-zlib --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt --with-openssl --with-mhash --enable-pcntl --enable-sockets --enable-soap --without-pear --enable-zip --with-bz2 --enable-calendar --enable-ftp --enable-ctype --enable-exif --disable-ipv6 --with-sqlite3 --enable-pdo --with-pdo-mysql=/usr/local/mysql --enable-phar
登录后复制

(备注:1.编译时需要哪些扩展根据实际情况而定 2.configure脚本选项查看 ./configure --help)
5.编译安装

[root@vm src]# make clean[root@vm src]# make && make install
登录后复制

 

问题
1.编译iconv扩展源码报错 提示有些宏找不到
可能是libiconv依赖库没有安装或者版本太低 重新编译安装libiconv-1.14问题解决
2.编译GD扩展,configure脚本依赖配置检查提示libgd依赖库库版本太低
重新源码安装libgd-gd-2.1.1.tar.gz问题解决
3.编译libxml扩展源码提示有些宏未定义
找到报错包含头文件 直接注释报错的部分 问题解决

/usr/include/libxml2/libxml/encoding.h:136: error: expected specifier-qualifier-list before conv_tmake: *** [ext/libxml/libxml.lo] Error 1struct _xmlCharEncodingHandler {char *name;xmlCharEncodingInputFunc input;xmlCharEncodingOutputFunc output;/*#ifdef LIBXML_ICONV_ENABLEDiconv_t iconv_in;iconv_t iconv_out;#endif*/ /* LIBXML_ICONV_ENABLED */};
登录后复制

4.重启PHP后,浏览器访问报500错误
Web服务器与PHP脚本采用FastCGI方式通信,检查NGINX错误日志,发现SOCKET文件没有读写权限,需要配置php-fpm.conf
5.源码安装gd扩展依赖时 源码目录configure配置脚本不存在
咨询了公司的运维大神,提示我看下源码目录的README文件,里面提示说执行源码目录的SHELL脚本bootstrap.sh生成configure脚本。
执行的过程中,各种提示报错,最后把生成脚本使用到的工具(autoconf,automake,libtool)都升级了,问题才解决,期间快崩溃鸟。

其他

configure脚本选项

`configure' configures this package to adapt to many kinds of systems.Usage: ./configure [OPTION]... [VAR=VALUE]...To assign environment variables (e.g., CC, CFLAGS...), specify them asVAR=VALUE.  See below for descriptions of some of the useful variables.Defaults for the options are specified in brackets.Configuration:  -h, --help              display this help and exit      --help=short        display options specific to this package      --help=recursive    display the short help of all the included packages  -V, --version           display version information and exit  -q, --quiet, --silent   do not print `checking ...' messages      --cache-file=FILE   cache test results in FILE [disabled]  -C, --config-cache      alias for `--cache-file=config.cache'  -n, --no-create         do not create output files      --srcdir=DIR        find the sources in DIR [configure dir or `..']Installation directories:  --prefix=PREFIX         install architecture-independent files in PREFIX                          [/usr/local]  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX                          [PREFIX]By default, `make install' will install all the files in`/usr/local/bin', `/usr/local/lib' etc.  You can specifyan installation prefix other than `/usr/local' using `--prefix',for instance `--prefix=$HOME'.For better control, use the options below.Fine tuning of the installation directories:  --bindir=DIR            user executables [EPREFIX/bin]  --sbindir=DIR           system admin executables [EPREFIX/sbin]  --libexecdir=DIR        program executables [EPREFIX/libexec]  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]  --libdir=DIR            object code libraries [EPREFIX/lib]  --includedir=DIR        C header files [PREFIX/include]  --oldincludedir=DIR     C header files for non-gcc [/usr/include]  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]  --infodir=DIR           info documentation [DATAROOTDIR/info]  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]  --mandir=DIR            man documentation [DATAROOTDIR/man]  --docdir=DIR            documentation root [DATAROOTDIR/doc/PACKAGE]  --htmldir=DIR           html documentation [DOCDIR]  --dvidir=DIR            dvi documentation [DOCDIR]  --pdfdir=DIR            pdf documentation [DOCDIR]  --psdir=DIR             ps documentation [DOCDIR]System types:  --build=BUILD     configure for building on BUILD [guessed]  --host=HOST       cross-compile to build programs to run on HOST [BUILD]  --target=TARGET   configure for building compilers for TARGET [HOST]Optional Features and Packages:  --disable-option-checking  ignore unrecognized --enable/--with options  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)  --with-libdir=NAME      Look for libraries in .../NAME rather than .../lib  --disable-rpath         Disable passing additional runtime library                          search paths  --enable-re2c-cgoto     Enable -g flag to re2c to use computed goto gcc extensionSAPI modules:  --with-aolserver=DIR    Specify path to the installed AOLserver  --with-apxs=FILE        Build shared Apache 1.x module. FILE is the optional                          pathname to the Apache apxs tool apxs  --with-apache=DIR       Build Apache 1.x module. DIR is the top-level Apache                          build directory /usr/local/apache  --enable-mod-charset    APACHE: Enable transfer tables for mod_charset (Rus Apache)  --with-apxs2filter=FILE                          EXPERIMENTAL: Build shared Apache 2.0 Filter module. FILE is the optional                          pathname to the Apache apxs tool apxs  --with-apxs2=FILE       Build shared Apache 2.0 Handler module. FILE is the optional                          pathname to the Apache apxs tool apxs  --with-apache-hooks=FILE                          EXPERIMENTAL: Build shared Apache 1.x module. FILE is the optional                          pathname to the Apache apxs tool apxs  --with-apache-hooks-static=DIR                          EXPERIMENTAL: Build Apache 1.x module. DIR is the top-level Apache                          build directory /usr/local/apache  --enable-mod-charset    APACHE (hooks): Enable transfer tables for mod_charset (Rus Apache)  --with-caudium=DIR      Build PHP as a Pike module for use with Caudium.                          DIR is the Caudium server dir /usr/local/caudium/server  --disable-cli           Disable building CLI version of PHP                          (this forces --without-pear)  --with-continuity=DIR   Build PHP as Continuity Server module.                          DIR is path to the installed Continuity Server root  --enable-embed=TYPE     EXPERIMENTAL: Enable building of embedded SAPI library                          TYPE is either 'shared' or 'static'. TYPE=shared  --enable-fpm            Enable building of the fpm SAPI executable  --with-fpm-user=USER    Set the user for php-fpm to run as. (default: nobody)  --with-fpm-group=GRP    Set the group for php-fpm to run as. For a system user, this                          should usually be set to match the fpm username (default: nobody)  --with-fpm-systemd      Activate systemd integration  --with-fpm-acl          Use POSIX Access Control Lists  --with-isapi=DIR        Build PHP as an ISAPI module for use with Zeus  --with-litespeed        Build PHP as litespeed module  --with-milter=DIR       Build PHP as Milter application  --with-nsapi=DIR        Build PHP as NSAPI module for Netscape/iPlanet/Sun Webserver  --enable-phpdbg         Build phpdbg  --enable-phpdbg-debug   Build phpdbg in debug mode  --with-phttpd=DIR       Build PHP as phttpd module  --with-pi3web=DIR       Build PHP as Pi3Web module  --with-roxen=DIR        Build PHP as a Pike module. DIR is the base Roxen                          directory, normally /usr/local/roxen/server  --enable-roxen-zts      ROXEN: Build the Roxen module using Zend Thread Safety  --with-thttpd=SRCDIR    Build PHP as thttpd module  --with-tux=MODULEDIR    Build PHP as a TUX module (Linux only)  --with-webjames=SRCDIR  Build PHP as a WebJames module (RISC OS only)  --disable-cgi           Disable building CGI version of PHPGeneral settings:  --enable-gcov           Enable GCOV code coverage (requires LTP) - FOR DEVELOPERS ONLY!!  --enable-debug          Compile with debugging symbols  --with-layout=TYPE      Set how installed files will be laid out.  Type can                          be either PHP or GNU [PHP]  --with-config-file-path=PATH                          Set the path in which to look for php.ini [PREFIX/lib]  --with-config-file-scan-dir=PATH                          Set the path where to scan for configuration files  --enable-sigchild       Enable PHP's own SIGCHLD handler  --enable-libgcc         Enable explicitly linking against libgcc  --disable-short-tags    Disable the short-form <? start tag by default  --enable-dmalloc        Enable dmalloc  --disable-ipv6          Disable IPv6 support  --enable-dtrace         Enable DTrace support  --enable-fd-setsize     Set size of descriptor setsExtensions:  --with-EXTENSION=shared[,PATH]    NOTE: Not all extensions can be build as 'shared'.    Example: --with-foobar=shared,/usr/local/foobar/      o Builds the foobar extension as shared extension.      o foobar package install prefix is /usr/local/foobar/  --disable-all           Disable all extensions which are enabled by default  --with-regex=TYPE       Regex library type: system, php. TYPE=php                          WARNING: Do NOT use unless you know what you are doing!  --disable-libxml        Disable LIBXML support  --with-libxml-dir=DIR   LIBXML: libxml2 install prefix  --with-openssl=DIR      Include OpenSSL support (requires OpenSSL >= 0.9.6)  --with-kerberos=DIR     OPENSSL: Include Kerberos support  --with-system-ciphers   OPENSSL: Use system default cipher list instead of hardcoded value  --with-pcre-regex=DIR   Include Perl Compatible Regular Expressions support.                          DIR is the PCRE install prefix BUNDLED  --without-sqlite3=DIR   Do not include SQLite3 support. DIR is the prefix to                          SQLite3 installation directory.  --with-zlib=DIR         Include ZLIB support (requires zlib >= 1.0.9)  --with-zlib-dir=<DIR>   Define the location of zlib install directory  --enable-bcmath         Enable bc style precision math functions  --with-bz2=DIR          Include BZip2 support  --enable-calendar       Enable support for calendar conversion  --disable-ctype         Disable ctype functions  --with-curl=DIR         Include cURL support  --enable-dba            Build DBA with bundled modules. To build shared DBA                          extension use --enable-dba=shared  --with-qdbm=DIR         DBA: QDBM support  --with-gdbm=DIR         DBA: GDBM support  --with-ndbm=DIR         DBA: NDBM support  --with-db4=DIR          DBA: Oracle Berkeley DB 4.x or 5.x support  --with-db3=DIR          DBA: Oracle Berkeley DB 3.x support  --with-db2=DIR          DBA: Oracle Berkeley DB 2.x support  --with-db1=DIR          DBA: Oracle Berkeley DB 1.x support/emulation  --with-dbm=DIR          DBA: DBM support  --with-tcadb=DIR        DBA: Tokyo Cabinet abstract DB support  --without-cdb=DIR       DBA: CDB support (bundled)  --disable-inifile       DBA: INI support (bundled)  --disable-flatfile      DBA: FlatFile support (bundled)  --disable-dom           Disable DOM support  --with-libxml-dir=DIR   DOM: libxml2 install prefix  --with-enchant=DIR      Include enchant support.                          GNU Aspell version 1.1.3 or higher required.  --enable-exif           Enable EXIF (metadata from images) support  --disable-fileinfo      Disable fileinfo support  --disable-filter        Disable input filter support  --with-pcre-dir         FILTER: pcre install prefix  --enable-ftp            Enable FTP support  --with-openssl-dir=DIR  FTP: openssl install prefix  --with-gd=DIR           Include GD support.  DIR is the GD library base                          install directory BUNDLED  --with-vpx-dir=DIR      GD: Set the path to libvpx install prefix  --with-jpeg-dir=DIR     GD: Set the path to libjpeg install prefix  --with-png-dir=DIR      GD: Set the path to libpng install prefix  --with-zlib-dir=DIR     GD: Set the path to libz install prefix  --with-xpm-dir=DIR      GD: Set the path to libXpm install prefix  --with-freetype-dir=DIR GD: Set the path to FreeType 2 install prefix  --with-t1lib=DIR        GD: Include T1lib support. T1lib version >= 5.0.0 required  --enable-gd-native-ttf  GD: Enable TrueType string function  --enable-gd-jis-conv    GD: Enable JIS-mapped Japanese font support  --with-gettext=DIR      Include GNU gettext support  --with-gmp=DIR          Include GNU MP support  --with-mhash=DIR        Include mhash support  --disable-hash          Disable hash support  --without-iconv=DIR     Exclude iconv support  --with-imap=DIR         Include IMAP support. DIR is the c-client install prefix  --with-kerberos=DIR     IMAP: Include Kerberos support. DIR is the Kerberos install prefix  --with-imap-ssl=DIR     IMAP: Include SSL support. DIR is the OpenSSL install prefix  --with-interbase=DIR    Include InterBase support.  DIR is the InterBase base                          install directory /usr/interbase  --enable-intl           Enable internationalization support  --with-icu-dir=DIR      Specify where ICU libraries and headers can be found  --disable-json          Disable JavaScript Object Serialization support  --with-ldap=DIR         Include LDAP support  --with-ldap-sasl=DIR    LDAP: Include Cyrus SASL support  --enable-mbstring       Enable multibyte string support  --disable-mbregex       MBSTRING: Disable multibyte regex support  --disable-mbregex-backtrack                          MBSTRING: Disable multibyte regex backtrack check  --with-libmbfl=DIR      MBSTRING: Use external libmbfl.  DIR is the libmbfl base                          install directory BUNDLED  --with-onig=DIR         MBSTRING: Use external oniguruma. DIR is the oniguruma install prefix.                          If DIR is not set, the bundled oniguruma will be used  --with-mcrypt=DIR       Include mcrypt support  --with-mssql=DIR        Include MSSQL-DB support.  DIR is the FreeTDS home                          directory /usr/local/freetds  --with-mysql=DIR        Include MySQL support.  DIR is the MySQL base                          directory, if no DIR is passed or the value is                          mysqlnd the MySQL native driver will be used  --with-mysql-sock=SOCKPATH                          MySQL/MySQLi/PDO_MYSQL: Location of the MySQL unix socket pointer.                          If unspecified, the default locations are searched  --with-zlib-dir=DIR     MySQL: Set the path to libz install prefix  --with-mysqli=FILE      Include MySQLi support.  FILE is the path                          to mysql_config.  If no value or mysqlnd is passed                          as FILE, the MySQL native driver will be used  --enable-embedded-mysqli                          MYSQLi: Enable embedded support                          Note: Does not work with MySQL native driver!  --with-oci8=DIR         Include Oracle Database OCI8 support. DIR defaults to $ORACLE_HOME.                          Use --with-oci8=instantclient,/path/to/instant/client/lib                          to use an Oracle Instant Client installation  --with-odbcver=HEX      Force support for the passed ODBC version. A hex number is expected, default 0x0300.                             Use the special value of 0 to prevent an explicit ODBCVER to be defined.  --with-adabas=DIR       Include Adabas D support /usr/local  --with-sapdb=DIR        Include SAP DB support /usr/local  --with-solid=DIR        Include Solid support /usr/local/solid  --with-ibm-db2=DIR      Include IBM DB2 support /home/db2inst1/sqllib  --with-ODBCRouter=DIR   Include ODBCRouter.com support /usr  --with-empress=DIR      Include Empress support \$EMPRESSPATH                          (Empress Version >= 8.60 required)  --with-empress-bcs=DIR                          Include Empress Local Access support \$EMPRESSPATH                          (Empress Version >= 8.60 required)  --with-birdstep=DIR     Include Birdstep support /usr/local/birdstep  --with-custom-odbc=DIR  Include user defined ODBC support. DIR is ODBC install base                          directory /usr/local. Make sure to define CUSTOM_ODBC_LIBS and                          have some odbc.h in your include dirs. f.e. you should define                          following for Sybase SQL Anywhere 5.5.00 on QNX, prior to                          running this configure script:                            CPPFLAGS=\"-DODBC_QNX -DSQLANY_BUG\"                            LDFLAGS=-lunix                            CUSTOM_ODBC_LIBS=\"-ldblib -lodbc\"  --with-iodbc=DIR        Include iODBC support /usr/local  --with-esoob=DIR        Include Easysoft OOB support /usr/local/easysoft/oob/client  --with-unixODBC=DIR     Include unixODBC support /usr/local  --with-dbmaker=DIR      Include DBMaker support  --enable-opcache        Enable Zend OPcache support  --enable-pcntl          Enable pcntl support (CLI/CGI only)  --disable-pdo           Disable PHP Data Objects support  --with-pdo-dblib=DIR    PDO: DBLIB-DB support.  DIR is the FreeTDS home directory  --with-pdo-firebird=DIR PDO: Firebird support.  DIR is the Firebird base                          install directory /opt/firebird  --with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory                          If no value or mysqlnd is passed as DIR, the                          MySQL native driver will be used  --with-zlib-dir=DIR     PDO_MySQL: Set the path to libz install prefix  --with-pdo-oci=DIR      PDO: Oracle OCI support. DIR defaults to \$ORACLE_HOME.                          Use --with-pdo-oci=instantclient,prefix,version                          for an Oracle Instant Client SDK.                          For example on Linux with 11.2 RPMs use:                            --with-pdo-oci=instantclient,/usr,11.2                          With 10.2 RPMs use:                            --with-pdo-oci=instantclient,/usr,10.2.0.4  --with-pdo-odbc=flavour,dir                          PDO: Support for 'flavour' ODBC driver.			  include and lib dirs are looked for under 'dir'.			  'flavour' can be one of:  ibm-db2, iODBC, unixODBC, generic			  If ',dir' part is omitted, default for the flavour			  you have selected will be used. e.g.:			    --with-pdo-odbc=unixODBC			  will check for unixODBC under /usr/local. You may attempt			  to use an otherwise unsupported driver using the \"generic\"			  flavour.  The syntax for generic ODBC support is:			    --with-pdo-odbc=generic,dir,libname,ldflags,cflags			  When built as 'shared' the extension filename is always pdo_odbc.so  --with-pdo-pgsql=DIR    PDO: PostgreSQL support.  DIR is the PostgreSQL base                          install directory or the path to pg_config  --without-pdo-sqlite=DIR                          PDO: sqlite 3 support.  DIR is the sqlite base                          install directory BUNDLED  --with-pgsql=DIR        Include PostgreSQL support.  DIR is the PostgreSQL                          base install directory or the path to pg_config  --disable-phar          Disable phar support  --disable-posix         Disable POSIX-like functions  --with-pspell=DIR       Include PSPELL support.                          GNU Aspell version 0.50.0 or higher required  --with-libedit=DIR      Include libedit readline replacement (CLI/CGI only)  --with-readline=DIR     Include readline support (CLI/CGI only)  --with-recode=DIR       Include recode support  --disable-session       Disable session support  --with-mm=DIR           SESSION: Include mm support for session storage  --enable-shmop          Enable shmop support  --disable-simplexml     Disable SimpleXML support  --with-libxml-dir=DIR   SimpleXML: libxml2 install prefix  --with-snmp=DIR         Include SNMP support  --with-openssl-dir=DIR  SNMP: openssl install prefix  --enable-soap           Enable SOAP support  --with-libxml-dir=DIR   SOAP: libxml2 install prefix  --enable-sockets        Enable sockets support  --with-sybase-ct=DIR    Include Sybase-CT support.  DIR is the Sybase home                          directory /home/sybase  --enable-sysvmsg        Enable sysvmsg support  --enable-sysvsem        Enable System V semaphore support  --enable-sysvshm        Enable the System V shared memory support  --with-tidy=DIR         Include TIDY support  --disable-tokenizer     Disable tokenizer support  --enable-wddx           Enable WDDX support  --with-libxml-dir=DIR   WDDX: libxml2 install prefix  --with-libexpat-dir=DIR WDDX: libexpat dir for XMLRPC-EPI (deprecated)  --disable-xml           Disable XML support  --with-libxml-dir=DIR   XML: libxml2 install prefix  --with-libexpat-dir=DIR XML: libexpat install prefix (deprecated)  --disable-xmlreader     Disable XMLReader support  --with-libxml-dir=DIR   XMLReader: libxml2 install prefix  --with-xmlrpc=DIR       Include XMLRPC-EPI support  --with-libxml-dir=DIR   XMLRPC-EPI: libxml2 install prefix  --with-libexpat-dir=DIR XMLRPC-EPI: libexpat dir for XMLRPC-EPI (deprecated)  --with-iconv-dir=DIR    XMLRPC-EPI: iconv dir for XMLRPC-EPI  --disable-xmlwriter     Disable XMLWriter support  --with-libxml-dir=DIR   XMLWriter: libxml2 install prefix  --with-xsl=DIR          Include XSL support.  DIR is the libxslt base                          install directory (libxslt >= 1.1.0 required)  --enable-zip            Include Zip read/write support  --with-zlib-dir=DIR     ZIP: Set the path to libz install prefix  --with-pcre-dir         ZIP: pcre install prefix  --with-libzip=DIR       ZIP: use libzip  --enable-mysqlnd        Enable mysqlnd explicitly, will be done implicitly                          when required by other extensions  --disable-mysqlnd-compression-support                          Disable support for the MySQL compressed protocol in mysqlnd  --with-zlib-dir=DIR     mysqlnd: Set the path to libz install prefixPEAR:  --with-pear=DIR         Install PEAR in DIR [PREFIX/lib/php]  --without-pear          Do not install PEARZend:  --with-zend-vm=TYPE     Set virtual machine dispatch method. Type is                          one of "CALL", "SWITCH" or "GOTO" TYPE=CALL  --enable-maintainer-zts Enable thread safety - for code maintainers only!!  --disable-inline-optimization                          If building zend_execute.lo fails, try this switch  --enable-zend-signals   Use zend signal handlingTSRM:  --with-tsrm-pth=pth-config                          Use GNU Pth  --with-tsrm-st          Use SGI's State Threads  --with-tsrm-pthreads    Use POSIX threads (default)Libtool:  --enable-shared=PKGS    Build shared libraries default=yes  --enable-static=PKGS    Build static libraries default=yes  --enable-fast-install=PKGS                          Optimize for fast installation default=yes  --with-gnu-ld           Assume the C compiler uses GNU ld default=no  --disable-libtool-lock  Avoid locking (might break parallel builds)  --with-pic              Try to use only PIC/non-PIC objects default=use both  --with-tags=TAGS        Include additional configurations automaticSome influential environment variables:  CC          C compiler command  CFLAGS      C compiler flags  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a              nonstandard directory <lib dir>  LIBS        libraries to pass to the linker, e.g. -l<library>  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if              you have headers in a nonstandard directory <include dir>  CPP         C preprocessor  YACC        The `Yet Another C Compiler' implementation to use. Defaults to              the first program found out of: `bison -y', `byacc', `yacc'.  YFLAGS      The list of arguments that will be passed by default to $YACC.              This script will default YFLAGS to the empty string to avoid a              default value of `-d' given by some make applications.  CXX         C++ compiler command  CXXFLAGS    C++ compiler flags  CXXCPP      C++ preprocessorUse these variables to override the choices made by `configure' or to helpit to find libraries and programs with nonstandard names/locations.Report bugs to the package provider.
登录后复制

php-fpm配置
1.按照我当前的配置,配置文件在/usr/local/php-5.6.12/etc/php-fpm.conf
2.开发环境可以跑起来需要配置如下选项
(备注:用户以及用户组需要创建并设置好相关权限)

; Unix user/group of processes; Note: The user is mandatory. If the group is not set, the default user's group;       will be used.user = wwwgroup = www; The address on which to accept FastCGI requests.; Valid syntaxes are:;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on;                            a specific port;;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on;                            a specific port;;   'port'                 - to listen on a TCP socket to all IPv4 addresses on a;                            specific port;;   '[::]:port'            - to listen on a TCP socket to all addresses;                            (IPv6 and IPv4-mapped) on a specific port;;   '/path/to/unix/socket' - to listen on a unix socket.; Note: This value is mandatory.listen = /dev/shm/php-5.6.12-cgi.sock; Set permissions for unix socket, if one is used. In Linux, read/write; permissions must be set in order to allow connections from a web server. Many; BSD-derived systems allow connections regardless of permissions.; Default Values: user and group are set as the running user;                 mode is set to 0660;listen.owner = nobody;listen.group = nobody;listen.mode = 0660; When POSIX Access Control Lists are supported you can set them using; these options, value is a comma separated list of user/group names.; When set, listen.owner and listen.group are ignored;listen.acl_users =;listen.acl_groups =listen.owner = wwwlisten.group = wwwlisten.mode = 0666
登录后复制

nginx配置
vhosts目录下某个配置文件加上 fastcgi_pass unix:/dev/shm/php-5.6.12-cgi.sock;
(备注:这个需要根据实际情况调整,我的nginx服务器配置会自动加载vhosts目录下的配置文件)

server{   listen       80;   server_name  learnlaravel.boyaa.com;   index index.html index.htm index.php;   root  /data/wwwroot/learnlaravel5/public;   location ~ .*\.(php|php5)?$   {     fastcgi_pass  unix:/dev/shm/php-5.6.12-cgi.sock;     fastcgi_index index.php;     include fcgi.conf;   }      location / {     try_files $uri $uri/ /index.php?$query_string;   }   access_log /var/log/nginx/vm2.boyaa.com.access.log;}
登录后复制

PHP编译默认安装的模块

[PHP Modules]CorectypedatedomeregfileinfofilterhashiconvjsonlibxmlpcrePDOpdo_sqlitePharposixReflectionsessionSimpleXMLSPLsqlite3standardtokenizerxmlxmlreaderxmlwriter[Zend Modules]
登录后复制

PHP-FPM服务自动启动
编辑/etc/rc.d/rc.local脚本,加上/usr/local/php-5.6.12/sbin/php-fpm

[root@vm ~]# cat /etc/rc.d/rc.local#!/bin/sh## This script will be executed *after* all the other init scripts.# You can put your own initialization stuff in here if you don't# want to do the full Sys V style init stuff.touch /var/lock/subsys/localecho "20000 65535" > /proc/sys/net/ipv4/ip_local_port_range/usr/local/mysql/support-files/mysql.server start/usr/local/php/sbin/php-fpm /usr/local/php-5.6.12/sbin/php-fpm/usr/local/nginx/sbin/nginx
登录后复制

nginx服务管理脚本

[root@vm ~]# cat /etc/rc.d/init.d/nginx#!/bin/sh## nginx - this script starts and stops the nginx daemin## chkconfig:   - 85 15 # description:  Nginx is an HTTP(S) server, HTTP(S) reverse \#               proxy and IMAP/POP3 proxy server# processname: nginx# config:      /usr/local/nginx/conf/nginx.conf# pidfile:     /usr/local/nginx/logs/nginx.pid# Source function library.. /etc/rc.d/init.d/functions# Source networking configuration.. /etc/sysconfig/network# Check that networking is up.[ "$NETWORKING" = "no" ] && exit 0nginx="/usr/local/nginx/sbin/nginx"prog=$(basename $nginx)NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"lockfile=/var/lock/subsys/nginxstart() {    [ -x $nginx ] || exit 5    [ -f $NGINX_CONF_FILE ] || exit 6    echo -n $"Starting $prog: "    daemon $nginx -c $NGINX_CONF_FILE    retval=$?    echo    [ $retval -eq 0 ] && touch $lockfile    return $retval}stop() {    echo -n $"Stopping $prog: "    killproc $prog -QUIT    retval=$?    echo    [ $retval -eq 0 ] && rm -f $lockfile    return $retval}restart() {    configtest || return $?    stop    start}reload() {    configtest || return $?    echo -n $"Reloading $prog: "    killproc $nginx -HUP    RETVAL=$?    echo}force_reload() {    restart}configtest() {  $nginx -t -c $NGINX_CONF_FILE}rh_status() {    status $prog}rh_status_q() {    rh_status >/dev/null 2>&1}case "$1" in    start)        rh_status_q && exit 0        $1        ;;    stop)        rh_status_q || exit 0        $1        ;;    restart|configtest)        $1        ;;    reload)        rh_status_q || exit 7        $1        ;;    force-reload)        force_reload        ;;    status)        rh_status        ;;    condrestart|try-restart)        rh_status_q || exit 0            ;;    *)        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"        exit 2esac
登录后复制

php-fpm服务管理脚本

[root@vm ~]# cat /etc/rc.d/init.d/php-fpm-5.6.12#! /bin/sh### BEGIN INIT INFO# Provides:          php-fpm# Required-Start:    $remote_fs $network# Required-Stop:     $remote_fs $network# Default-Start:     2 3 4 5# Default-Stop:      0 1 6# Short-Description: starts php-fpm# Description:       starts the PHP FastCGI Process Manager daemon### END INIT INFOprefix=/usr/local/php-5.6.12exec_prefix=${prefix}php_fpm_BIN=${exec_prefix}/sbin/php-fpmphp_fpm_CONF=${prefix}/etc/php-fpm.confphp_fpm_PID=${prefix}/var/run/php-fpm.pidphp_opts="--fpm-config $php_fpm_CONF --pid $php_fpm_PID"wait_for_pid () {	try=0	while test $try -lt 35 ; do		case "$1" in			'created')			if [ -f "$2" ] ; then				try=''				break			fi			;;			'removed')			if [ ! -f "$2" ] ; then				try=''				break			fi			;;		esac		echo -n .		try=`expr $try + 1`		sleep 1	done}case "$1" in	start)		echo -n "Starting php-fpm "		$php_fpm_BIN --daemonize $php_opts		if [ "$?" != 0 ] ; then			echo " failed"			exit 1		fi		wait_for_pid created $php_fpm_PID		if [ -n "$try" ] ; then			echo " failed"			exit 1		else			echo " done"		fi	;;	stop)		echo -n "Gracefully shutting down php-fpm "		if [ ! -r $php_fpm_PID ] ; then			echo "warning, no pid file found - php-fpm is not running ?"			exit 1		fi		kill -QUIT `cat $php_fpm_PID`		wait_for_pid removed $php_fpm_PID		if [ -n "$try" ] ; then			echo " failed. Use force-quit"			exit 1		else			echo " done"		fi	;;	force-quit)		echo -n "Terminating php-fpm "		if [ ! -r $php_fpm_PID ] ; then			echo "warning, no pid file found - php-fpm is not running ?"			exit 1		fi		kill -TERM `cat $php_fpm_PID`		wait_for_pid removed $php_fpm_PID		if [ -n "$try" ] ; then			echo " failed"			exit 1		else			echo " done"		fi	;;	restart)		$0 stop		$0 start	;;	reload)		echo -n "Reload service php-fpm "		if [ ! -r $php_fpm_PID ] ; then			echo "warning, no pid file found - php-fpm is not running ?"			exit 1		fi		kill -USR2 `cat $php_fpm_PID`		echo " done"	;;	*)		echo "Usage: $0 {start|stop|force-quit|restart|reload}"		exit 1	;;esac  
登录后复制

PHP安装目录添加到系统环境变量中
文件/etc/profile最后一行加上

PATH=/usr/local/php-5.6.12/bin:$PATHexport PATH
登录后复制

SHELL终端自定义命令别名

[root@vm ~]# cat ~/.bashrc# .bashrc# User specific aliases and functionsalias rm='rm -i'alias cp='cp -i'alias mv='mv -i'alias composer='/usr/local/php-5.6.12/bin/php /usr/local/php-5.6.12/bin/composer'# Source global definitionsif [ -f /etc/bashrc ]; then. /etc/bashrcfi
登录后复制

 

后记
只有经历了尝试过了,才会对一件事情印象比较深刻。经过这一次折腾之后,对LINUX编译安装有了新的认识。期间为了让WEB服务跑起来,碰到了一系列的问题,还好在GOOGLE的帮助下解决了。服务器参数调优,确实需要实战经验总结,没有经过检验的配置都是扯蛋的配置,仅此而已!

 

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1668
14
CakePHP 教程
1427
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型? Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP的持久相关性:它还活着吗? PHP的持久相关性:它还活着吗? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在现代编程领域中依然占据重要地位。1)PHP的简单易学和强大社区支持使其在Web开发中广泛应用;2)其灵活性和稳定性使其在处理Web表单、数据库操作和文件处理等方面表现出色;3)PHP不断进化和优化,适用于初学者和经验丰富的开发者。

PHP与其他语言:比较 PHP与其他语言:比较 Apr 13, 2025 am 12:19 AM

PHP适合web开发,特别是在快速开发和处理动态内容方面表现出色,但不擅长数据科学和企业级应用。与Python相比,PHP在web开发中更具优势,但在数据科学领域不如Python;与Java相比,PHP在企业级应用中表现较差,但在web开发中更灵活;与JavaScript相比,PHP在后端开发中更简洁,但在前端开发中不如JavaScript。

PHP和Python:解释了不同的范例 PHP和Python:解释了不同的范例 Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

See all articles