首頁 後端開發 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 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
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教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
說明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 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行動:現實世界中的示例和應用程序 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和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

See all articles