安装说明:
- 通过bash一键安装,可更改需要安装的扩展及php版本
- 需要在当前的脚本文件中创建一个conf目录,并且在目录中包含php.ini和php-fpm.conf文件
- 配置文件可以参考如下
#/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