PHP7源码编译安装

安装说明:

  1. 通过bash一键安装,可更改需要安装的扩展及php版本
  2. 需要在当前的脚本文件中创建一个conf目录,并且在目录中包含php.ini和php-fpm.conf文件
  3. 配置文件可以参考如下
#/bin/bash
PHP_VERSION=7.4.7
PHP_INSTALL_PATH=/usr/local/php-${PHP_VERSION}
PHP_CONFIG_PATH=${PHP_INSTALL_PATH}/etc

function init()
{
	yum install -y gcc gcc-c++ make automake cmake libxml2-devel \
		openssl openssl-devel which curl curl-devel  autoconf \
		libjpeg libjpeg-devel libpng libpng-devel freetype \
		freetype-devel libxml2 libxml2-devel zlib zlib-devel \
		glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \
		ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
		krb5 krb5-devel libidn libidn-devel openssl openssl-devel openldap \
		openldap-devel nss_ldap openldap-clients openldap-servers gd gd2 \
		gd-devel gd2-devel perl-CPAN pcre-devel git unzip sqlite-devel

	echo "下载 libmcrypt "
	if [ -e libmcrypt-2.5.8.tar.gz ]
	then 
		echo "libmcrypt-2.5.8.tar.gz exist!"
	else
		curl -o libmcrypt-2.5.8.tar.gz https://udomain.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
	fi
	echo "解压 libmcrypt "
	tar -zxvf libmcrypt-2.5.8.tar.gz
	cd libmcrypt-2.5.8 && ./configure && make && make install && cd - && rm -rf  libmcrypt-2.5.8
	
	yum -y install http://down.24kplus.com/linux/oniguruma/oniguruma-6.7.0-1.el7.x86_64.rpm
	yum -y install http://down.24kplus.com/linux/oniguruma/oniguruma-devel-6.7.0-1.el7.x86_64.rpm
	
	echo "安装依赖完成"
}

function install_php()
{
	echo "安装php-"${PHP_VERSION}
	if [ -e php-${PHP_VERSION}.tar.gz ]
	then 
		echo php-${PHP_VERSION}.tar.gz exist!
	else
		curl -o  php-${PHP_VERSION}.tar.gz http://mirrors.sohu.com/php/php-${PHP_VERSION}.tar.gz
	fi

	tar -zxvf php-${PHP_VERSION}.tar.gz
	cd php-${PHP_VERSION} && export LD_LIBRARY_PATH=/lib/:/usr/lib/:/usr/local/lib/

	./configure --prefix=${PHP_INSTALL_PATH} \
	--with-config-file-path=${PHP_CONFIG_PATH} \
	--enable-exif \
	--with-mysqli=mysqlnd \
	--with-pdo-mysql=mysqlnd \
	--with-iconv-dir \
	--with-freetype-dir \
	--with-jpeg-dir \
	--with-png-dir \
	--with-zlib \
	--with-libxml-dir \
	--enable-xml \
	--disable-rpath \
	--enable-bcmath \
	--enable-shmop \
	--enable-sysvsem \
	--enable-inline-optimization \
	--with-curl \
	--with-mcrypt \
	--enable-mbregex \
	--enable-fpm \
	--enable-mbstring \
	--with-gd \
	--enable-gd-native-ttf \
	--with-openssl \
	--with-mhash \
	--enable-pcntl \
	--enable-sockets \
	--with-xmlrpc \
	--enable-zip \
	--enable-soap \
	--without-pear

	make && make install && cd -  && rm -rf ${PHP_VERSION}
	
	rm -rf ${PHP_CONFIG_PATH}/* && \
	cp conf/php.ini ${PHP_CONFIG_PATH}/php.ini && \
	cp conf/php-fpm.conf ${PHP_CONFIG_PATH}/php-fpm.conf
}

function extension_iginary()
{
	echo "安装extension-igbinary"
	if [ -e igbinary-3.1.4.tgz ]
	then 
		echo igbinary-3.1.4.tgz exist!
	else
		curl -o igbinary-3.1.4.tgz https://pecl.php.net/get/igbinary-3.1.4.tgz
	fi
	
	tar -zxvf igbinary-3.1.4.tgz
	cd igbinary-3.1.4
	${PHP_INSTALL_PATH}/bin/phpize
	./configure  --with-php-config=${PHP_INSTALL_PATH}/bin/php-config
	make && make install
	cd -
	rm -rf igbinary-3.1.4/



cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "igbinary.so"
EOF

	kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`

	${PHP_INSTALL_PATH}/bin/php -m | grep igbinary
}

function extension_memcache()
{
	echo "安装extension-memcache"
	if [ -e memcache-4.0.5.2.tgz ]
	then 
		echo memcache-4.0.5.2.tgz exist!
	else
		curl -O https://pecl.php.net/get/memcache-4.0.5.2.tgz
	fi

	tar -zxvf memcache-4.0.5.2.tgz
	cd memcache-4.0.5.2
	${PHP_INSTALL_PATH}/bin/phpize
	./configure  --with-php-config=${PHP_INSTALL_PATH}/bin/php-config
	make && make install
	cd -
	rm -rf memcache-4.0.5.2/



cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "memcache.so"
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi

	${PHP_INSTALL_PATH}/bin/php -m | grep memcache
}

function extension_memcached()
{
	echo "安装 memcached 扩展"
	
	curl -O https://launchpadlibrarian.net/165454254/libmemcached-1.0.18.tar.gz

	tar -zxvf libmemcached-1.0.18.tar.gz
	cd libmemcached-1.0.18
	./configure --prefix=/usr/local/libmemcached-1.0.18 --with-memcached
	make && make install && cd -
	rm -rf libmemcached-1.0.18

	curl -O https://pecl.php.net/get/memcached-3.1.5.tgz
	tar zxvf memcached-3.1.5.tgz
	cd memcached-3.1.5
	${PHP_INSTALL_PATH}/bin/phpize
	./configure --enable-memcached --disable-memcached-sasl --with-php-config=${PHP_INSTALL_PATH}/bin/php-config --with-libmemcached-dir=/usr/local/libmemcached-1.0.18
	make && make install
	cd -
	rm -rf memcached-3.1.5

cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "memcached.so"
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi

	${PHP_INSTALL_PATH}/bin/php -m | grep memcached
}

function extension_protobuf()
{
	curl -O https://pecl.php.net/get/protobuf-3.12.4.tgz
	tar -xvf protobuf-3.12.4.tgz
	cd protobuf-3.12.4
	${PHP_INSTALL_PATH}/bin/phpize
	./configure --with-php-config=${PHP_INSTALL_PATH}/bin/php-config
	make && make install && cd -
	rm -rf protobuf-3.12.4


cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "protobuf.so"
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi

	${PHP_INSTALL_PATH}/bin/php -m | grep protobuf
}

function extension_zookeeper()
{
	curl -O https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
	tar -zxvf zookeeper-3.4.10.tar.gz
	cd zookeeper-3.4.10/src/c
	./configure && make && make install
	cd -
	rm -rf zookeeper-3.4.10

	curl -O https://pecl.php.net/get/zookeeper-0.7.2.tgz
	tar -zxvf zookeeper-0.7.2.tgz
	cd zookeeper-0.7.2
	${PHP_INSTALL_PATH}/bin/phpize
	./configure --with-php-config=${PHP_INSTALL_PATH}/bin/php-config
	make && make install
	cd -
	rm -rf zookeeper-0.7.2


cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "zookeeper.so"
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi
	${PHP_INSTALL_PATH}/bin/php -m | grep zookeeper
}

function extension_rabbitmq()
{
	if [ -e ./popt-1.16.tar.gz ];
	then 
		echo "popt exist!"
	else
		wget https://master.dl.sourceforge.net/project/cdrtfe/tools/source/cygwin/popt-1.16.tar.gz
	fi

	if [ -e ./rabbitmq-c ];
	then 
		echo "rabbitmq-c exist!";
	else
		git clone https://github.com/alanxz/rabbitmq-c  
	fi

	if [ -e ./php-amqp-1.9.1.tar.gz ];
	then 
		echo "php-amqp exist!";
	else
		curl -o php-amqp-1.9.1.tar.gz https://codeload.github.com/pdezwart/php-amqp/tar.gz/v1.9.1
	fi


	rm -rf popt-1.16/
	tar -zxvf popt-1.16.tar.gz 
	cd popt-1.16/
	./configure
	make
	make install
	cd ../

	if [ -d ./rabbitmq-c ];
	then 
		echo "rabbitmq-c exist!";
	else
		echo `pwd`
		unzip  rabbitmq-c.zip
	fi

	cd rabbitmq-c
	if [ ! -e ./build ];
	then 
		mkdir build
	fi
	cd build
	cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rabbitmq-c ..
	cmake --build .
	make
	make install
	cd ../../

	ln -sf /usr/local/rabbitmq-c/lib64/librabbitmq.so.4 /usr/lib64/librabbitmq.so.4
	ln -sf /usr/local/rabbitmq-c/lib64/librabbitmq.so.4 /usr/lib64/librabbitmq.so

	curl -o amqp-1.10.2.tgz https://pecl.php.net/get/amqp-1.10.2.tgz
	rm -rf amqp-1.10.2
	tar -zxvf amqp-1.10.2.tgz
	cd amqp-1.10.2
	${PHP_INSTALL_PATH}/bin/phpize
	./configure --with-php-config=${PHP_INSTALL_PATH}/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c
	make
	make install
	cd -
	rm -rf  amqp-1.10.2


cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "amqp.so"
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi
	${PHP_INSTALL_PATH}/bin/php -m | grep amqp
}

function extension_redis()
{
	curl -O  https://pecl.php.net/get/redis-5.3.1.tgz
	tar -zxvf redis-5.3.1.tgz
	cd redis-5.3.1
	${PHP_INSTALL_PATH}/bin/phpize
	./configure  --with-php-config=${PHP_INSTALL_PATH}/bin/php-config
	make && make install
	cd -
	rm -rf redis-5.3.1



cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "redis.so"
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi
	${PHP_INSTALL_PATH}/bin/php -m | grep redis
}

function extension_swoole()
{
	curl -O https://pecl.php.net/get/swoole-4.5.2.tgz

	tar -zxvf swoole-4.5.2.tgz
	cd swoole-4.5.2
	${PHP_INSTALL_PATH}/bin/phpize
	./configure  --with-php-config=${PHP_INSTALL_PATH}/bin/php-config
	make && make install
	cd -
	rm -rf swoole-src-1.9.1-stable

cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension = "swoole.so"
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi
	${PHP_INSTALL_PATH}/bin/php -m | grep swoole
}

function extension_trie_filter()
{
	wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz 

	echo "安装 ext-trie-filter 扩展"

	echo "安装 ext-trie-filter 扩展依赖: libiconv"

	tar -zxf libiconv-1.14.tar.gz  
	cd libiconv-1.14  
	./configure  
	rm -f srclib/stdio.in.h && cp ../trie_filter_bug/stdio.in.h srclib/stdio.in.h
	make && make install
	cd - && rm -rf libiconv-1.14

	echo "安装 ext-trie-filter 扩展依赖: libdatrie"

	curl -o libdatrie-0.2.4.tar.gz ftp://linux.thai.net/pub/ThaiLinux/software/libthai/libdatrie-0.2.4.tar.gz
	tar -zxf libdatrie-0.2.4.tar.gz  
	cd libdatrie-0.2.4  
  
	./configure --prefix=/usr/local/libdatrie/  
	make ICONV_LIBS='/usr/local/lib/libiconv.so'  
	make install 

	cd - && rm -rf libdatrie-0.2.4

	echo "安装 ext-trie-filter 扩展"

	git clone https://github.com/zzjin/php-ext-trie-filter

	cd php-ext-trie-filter 

	${PHP_INSTALL_PATH}/bin/phpize
	./configure  --with-php-config=${PHP_INSTALL_PATH}/bin/php-config  --with-trie_filter=/usr/local/libdatrie/ 
	make && make install && cd - && rm -rf php-ext-trie-filter

cat <<EOF >> ${PHP_CONFIG_PATH}/php.ini
extension=trie_filter.so
EOF

	if [ `ps -ef|grep php-fpm|grep master|grep -v grep |wc -l` -gt 0 ];then
		kill -USR2 `ps -ef | grep fpm | grep master | grep -v grep | awk '{print $2}'`
	fi
	${PHP_INSTALL_PATH}/bin/php -m | grep trie_filter

	#test ok
	${PHP_INSTALL_PATH}/bin/php  -r "var_dump(\trie_filter_new());"
}

init && \
install_php && \
extension_iginary && \
extension_memcache && \
extension_memcached && \
extension_protobuf && \
extension_zookeeper && \
extension_rabbitmq && \
extension_redis && \
extension_swoole &&  \
extension_trie_filter

php.ini文件

[PHP]
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = 17
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 300
max_input_time = 60
memory_limit = 256M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = On
error_log = /var/log/nobody/php_errors.log
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 50M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
cgi.fix_pathinfo=0
file_uploads = On
upload_max_filesize = 50M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
date.timezone = PRC
[filter]
[iconv]
[intl]
[sqlite]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = On
[SQL]
sql.safe_mode = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQL]
mysql.allow_local_infile = On
mysql.allow_persistent = On
mysql.cache_size = 2000
mysql.max_persistent = -1
mysql.max_links = -1
mysql.default_port =
mysql.default_socket =
mysql.default_host =
mysql.default_user =
mysql.default_password =
mysql.connect_timeout = 60
mysql.trace_mode = Off
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[Sybase-CT]
sybct.allow_persistent = On
sybct.max_persistent = -1
sybct.max_links = -1
sybct.min_server_severity = 10
sybct.min_client_severity = 10
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
[MSSQL]
mssql.allow_persistent = On
mssql.max_persistent = -1
mssql.max_links = -1
mssql.min_error_severity = 10
mssql.min_message_severity = 10
mssql.compatibility_mode = Off
mssql.secure_connection = Off
[Assertion]
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[mcrypt]
[dba]

[opcache]
zend_extension="opcache.so"
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.fast_shutdown=1

[curl]
[openssl]

php-fpm

[global]
 
[www]
user = service
group = service
listen = /dev/shm/php-fpm.sock
listen.backlog = 4096
listen.owner = service
listen.group = service
listen.mode = 0660
 
pm = dynamic
pm.max_children = 100
pm.start_servers = 50
pm.min_spare_servers = 50
pm.max_spare_servers = 100
pm.max_requests = 500
slowlog = /var/log/php-fpm.log.slow
request_slowlog_timeout = 3
request_terminate_timeout = 300

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值