PHP7.3.5编译

源码包都放在/usr/local/src/下。安装目录均在/usr/local/下。

  1. 解压tar包&安装依赖包

    cd /usr/local/src/
    tar -xf php-7.3.5.tar.gz -C /usr/local/
    tar -xf libzip-1.5.2.tar.gz -C /usr/local/
    tar -xf cmake-3.14.4.tar.gz -C /usr/local/
    #CentOS6 去掉systemd-devel
    #CentOS7中之所以安装systemd-devel是为了规避报错:系统不支持systemd
    yum install -y gcc libxml2-devel openssl-devel  curl-devel libwebp-devel libjpeg-devel libpng-devel libXpm-devel freetype-devel systemd-devel
    
  2. 编译安装选项:

    #CentOS6不要加--with-fpm-systemd选项
    cd /usr/local/php-7.3.5/
    ./configure \
    --with-libdir=/lib64 \
    --with-config-file-path=/usr/local/etc/php \
    --with-config-file-scan-dir=/usr/local/etc/php/conf.d \
    --enable-cli \
    --disable-cgi \
    --enable-fpm \
    --with-fpm-systemd \
    --with-fpm-user=nginx \
    --with-fpm-group=nginx \
    --enable-phar \
    --with-pear  \
    --disable-all \
    --enable-pdo  \
    --enable-mysqlnd \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --with-mysql-sock=/var/lib/mysql/mysql.sock \
    --enable-hash \
    --enable-zip \
    --with-zlib \
    --with-zlib-dir \
    --with-pcre-jit \
    --with-pcre-regex \
    --with-iconv \
    --enable-ctype \
    --enable-json  \
    --enable-session \
    --enable-xml \
    --enable-libxml \
    --enable-simplexml \
    --enable-mbstring \
    --with-curl \
    --enable-fileinfo \
    --with-openssl \
    --with-gd \
    --with-webp-dir  \
    --with-jpeg-dir \
    --with-png-dir \
    --with-xpm-dir  \
    --with-freetype-dir \
    
    make 
    make install
    
  3. 关于libzip的安装:
    CentOS7自带的libzip版本太低。
    去官网下载最新版。使用Cmake编译。

    编译安装Cmake:

    cd /usr/local/cmake-3.14.4/
    ./bootstrap
    make 
    make install
    

    编译安装libzip:

    cd /usr/local/libzip-1.5.2/
    mkdir build
    cd build
    cmake ..
    make 
    make install
    
  4. 环境配置

    #安装完成后,
    #php --ini
    #Configuration File (php.ini) Path: /usr/local/lib
    #Loaded Configuration File:         (none)
    #Scan for additional .ini files in: (none)
    #Additional .ini files parsed:      (none)
    #复制PHP配置文件
    cp /usr/local/php-7.3.5/php.ini-production /usr/local/lib/php.ini
    #vim /usr/local/lib/php.ini
    date.timezone = Asia/Shanghai
    #关于日志的说明:
    #如果在php.ini中没有定义error_log,PHP默认为空,
    #则会将错误日志写到Nginx中的error_log配置项指定的日志中
    #如果是`error_log = syslog`,会将日志写在/var/log/messages中
    #还是自己给出绝对路径吧。
    #有了php.ini中error_log,就不会把错误信息写进Nginx中的error_log指定文件了
    #如果没有事先创建目录,即使定义了这个选项,
    #还是不会写日志
    mkdir /var/log/php
    chown nginx. /var/log/php
    error_log = /var/log/php/php_errror.log
    #防止arbitrarily script injection
    cgi.fix_pathinfo=0
    #HTTP X-Powered-By头中不暴露php版本
    expose_php = Off
    
    #如何看出php-fpm的配置文件应该放在哪里?
    #php-fpm
    #ERROR: failed to open configuration file '/usr/local/etc/php-fpm.conf': No such file or directory (2)
    #ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf'
    #ERROR: FPM initialization failed
    #得出,php-fpm默认的配置文件路径为/usr/local/etc/php-fpm.conf
    #find / -type f -name  php-fpm.conf*
    #/usr/local/etc/php-fpm.conf.default
    #/usr/local/php-7.3.5/sapi/fpm/php-fpm.conf.in
    #/usr/local/php-7.3.5/sapi/fpm/php-fpm.conf
    #这几个文件基本都一样
    #使用/usr/local/etc/php-fpm.conf.default
    cp /usr/local/etc/php-fpm.conf.default /usr/local/etc/php-fpm.conf
    #vim /usr/local/etc/php-fpm.conf
    pid = run/php-fpm.pid
    error_log = /var/log/php/php-fpm_error.log
    include=etc/php-fpm.d/*.conf
    #然后
    #php-fpm
    #WARNING: Nothing matches the include pattern '/usr/local/etc/php-fpm.d/*.conf' from /usr/local/etc/php-fpm.conf at line 143.
    #ERROR: No pool defined. at least one pool section must be specified in config file
    #ERROR: failed to post process the configuration
    #ERROR: FPM initialization failed
    cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf 
    #如果提示不存在nginx这个用户,
    useradd -rs /bin/false nginx
    
  5. php-fpm启动配置

    如果在编译时添加了--with-fpm-systemd选项,只能选择Systemd启动方式,如果没有添加,只能选择SystemV启动方式。
    CentOS6使用SystemV方式,CentOS7使用Systemd方式

    • SystemV
    #php-fpm启动脚本复制
    cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    #添加php-fpm服务和自启动
    chmod u+x /etc/init.d/php-fpm
    chkconfig --add php-fpm
    chkconfig php-fpm on 
    service php-fpm start/restart/status
    
    • Systemd
    cp /usr/local/php-7.3.5/sapi/fpm/php-fpm.service /usr/lib/systemd/system/
    systemctl enable php-fpm
    systemctl start php-fpm
    
    
  6. PS
    在编译PHP时,--enable-fileinfo需要较大内存,在我自己的单核1G阿里云主机上失败,提示内存不够。
    经测试得知,大约需要1300M左右内存。

    #给出临时SWAP分区
    dd if=/dev/zero of=/tmp/swapfile bs=1M count=500
    mkswap /tmp/swapfile
    swapon /tmp/swapfile
    #编译完成后,卸载临时SWAP分区
    swapoff /tmp/swapfile
    rm -f /tmp/swapfile
    
  7. 遗留问题:

    • --with-fpm-acl这个选项的作用是什么?
    • --with-pcre-jit这个选项的作用是什么?
  8. 参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,904评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,581评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,527评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,463评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,546评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,572评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,582评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,330评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,776评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,087评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,257评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,923评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,571评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,192评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,436评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,145评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,127评论 2 352