検索
ホームページバックエンド開発PHPチュートリアルPHPをソースコードからコンパイルする際のトラブルに関するメモ

前言
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 までご連絡ください。
PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?PHPセッションを失敗させる可能性のあるいくつかの一般的な問題は何ですか?Apr 25, 2025 am 12:16 AM

PHPSESSIONの障害の理由には、構成エラー、Cookieの問題、セッションの有効期限が含まれます。 1。構成エラー:正しいセッションをチェックして設定します。save_path。 2.Cookieの問題:Cookieが正しく設定されていることを確認してください。 3.セッションの有効期限:セッションを調整してください。GC_MAXLIFETIME値はセッション時間を延長します。

PHPでセッション関連の問題をどのようにデバッグしますか?PHPでセッション関連の問題をどのようにデバッグしますか?Apr 25, 2025 am 12:12 AM

PHPでセッションの問題をデバッグする方法は次のとおりです。1。セッションが正しく開始されるかどうかを確認します。 2.セッションIDの配信を確認します。 3.セッションデータのストレージと読み取りを確認します。 4.サーバーの構成を確認します。セッションIDとデータを出力し、セッションファイルのコンテンツを表示するなど、セッション関連の問題を効果的に診断して解決できます。

session_start()が複数回呼び出されるとどうなりますか?session_start()が複数回呼び出されるとどうなりますか?Apr 25, 2025 am 12:06 AM

session_start()への複数の呼び出しにより、警告メッセージと可能なデータ上書きが行われます。 1)PHPは警告を発し、セッションが開始されたことを促します。 2)セッションデータの予期しない上書きを引き起こす可能性があります。 3)session_status()を使用してセッションステータスを確認して、繰り返しの呼び出しを避けます。

PHPでセッションのライフタイムをどのように構成しますか?PHPでセッションのライフタイムをどのように構成しますか?Apr 25, 2025 am 12:05 AM

PHPでのセッションライフサイクルの構成は、session.gc_maxlifetimeとsession.cookie_lifetimeを設定することで達成できます。 1)session.gc_maxlifetimeサーバー側のセッションデータのサバイバル時間を制御します。 0に設定すると、ブラウザが閉じているとCookieが期限切れになります。

セッションを保存するためにデータベースを使用することの利点は何ですか?セッションを保存するためにデータベースを使用することの利点は何ですか?Apr 24, 2025 am 12:16 AM

データベースストレージセッションを使用することの主な利点には、持続性、スケーラビリティ、セキュリティが含まれます。 1。永続性:サーバーが再起動しても、セッションデータは変更されないままになります。 2。スケーラビリティ:分散システムに適用され、セッションデータが複数のサーバー間で同期されるようにします。 3。セキュリティ:データベースは、機密情報を保護するための暗号化されたストレージを提供します。

PHPでカスタムセッション処理をどのように実装しますか?PHPでカスタムセッション処理をどのように実装しますか?Apr 24, 2025 am 12:16 AM

PHPでのカスタムセッション処理の実装は、SessionHandlerInterfaceインターフェイスを実装することで実行できます。具体的な手順には、次のものが含まれます。1)CussentsessionHandlerなどのSessionHandlerInterfaceを実装するクラスの作成。 2)セッションデータのライフサイクルとストレージ方法を定義するためのインターフェイス(オープン、クローズ、読み取り、書き込み、破壊、GCなど)の書き換え方法。 3)PHPスクリプトでカスタムセッションプロセッサを登録し、セッションを開始します。これにより、データをMySQLやRedisなどのメディアに保存して、パフォーマンス、セキュリティ、スケーラビリティを改善できます。

セッションIDとは何ですか?セッションIDとは何ですか?Apr 24, 2025 am 12:13 AM

SessionIDは、ユーザーセッションのステータスを追跡するためにWebアプリケーションで使用されるメカニズムです。 1.ユーザーとサーバー間の複数のインタラクション中にユーザーのID情報を維持するために使用されるランダムに生成された文字列です。 2。サーバーは、ユーザーの複数のリクエストでこれらの要求を識別および関連付けるのに役立つCookieまたはURLパラメーターを介してクライアントに生成および送信します。 3.生成は通常、ランダムアルゴリズムを使用して、一意性と予測不可能性を確保します。 4.実際の開発では、Redisなどのメモリ内データベースを使用してセッションデータを保存してパフォーマンスとセキュリティを改善できます。

ステートレス環境(APIなど)でセッションをどのように処理しますか?ステートレス環境(APIなど)でセッションをどのように処理しますか?Apr 24, 2025 am 12:12 AM

APIなどのステートレス環境でのセッションの管理は、JWTまたはCookieを使用して達成できます。 1。JWTは、無国籍とスケーラビリティに適していますが、ビッグデータに関してはサイズが大きいです。 2.cookiesはより伝統的で実装が簡単ですが、セキュリティを確保するために慎重に構成する必要があります。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境