linux zephir 編寫 php 擴展 (docker篇)

鑑於編譯各版本的PHP擴展, 需要安裝與切換不同PHP版本後進行編譯, 很麻煩, 於是有了用 docker 編譯的想法. 搜索相關資源發現已經有很多大牛們寫出來了, 就不重複造輪子了(其實就是自己菜寫不出)


方法1

不BB, 直接放代碼, p神寫的 zephir 快速編譯生成5.4~7.2版本下所有擴展的 Dockfile 文件, 本人就多加了一行 WORKDIR /zephir

php5.6 爲例, Dockfile 文件

FROM php:5.6

LABEL maintainer="phithon <[email protected]>"

ARG ZEPHIR_VERSION=0.11.1
ARG ZEPHIR_PARSER_VERSION=1.1.2

ENV PATH=${PATH}:/root/.composer/vendor/bin

RUN set -ex \
    && apt-get update \
    && apt-get install -y --no-install-recommends git unzip ca-certificates wget \
    && curl -sL https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
    && rm -rf /var/lib/apt/lists/*

RUN set -ex \
    && composer global require phalcon/zephir:${ZEPHIR_VERSION} \
    && composer clearcache -n

RUN set -ex \
    && mkdir -p /usr/share/zephir \
    && curl -sL https://github.com/phalcon/php-zephir-parser/archive/v${ZEPHIR_PARSER_VERSION}.tar.gz \
        | tar xz --strip-components=1 -C /usr/share/zephir \
    && cd /usr/share/zephir \
    && ./install \
    && { \
        echo '[Zephir Parser]'; \
        echo 'extension=zephir_parser.so'; \
    } >> /usr/local/etc/php/conf.d/zephir_parser.ini \
    && { \
        echo '#!/usr/bin/env bash'; \
        echo 'exec "$@"'; \
    } >> /usr/bin/sudo \
    && chmod +x /usr/bin/sudo \
    && rm -rf /usr/share/zephir

WORKDIR /zephir
CMD ["zephir"]

前提 linux 已安裝好 docker
執行命令 docker build -t zephirphp:5.6 . 構建鏡像 zephirphp:5.6
可掛載目錄創建容器 docker run -it --rm --name zephir $(pwd):/zephir zephir-php:5.6 /bin/sh
在容器裏面進行 zephir init 擴展名zephir build 等命令操作
不同PHP版本修改 Dockfile 文件第一行 FROM php:5.6 爲你想編譯的版本, 例如 FROM php:7.2, 支持PHP版本: 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, latest

如有現成的 zephir 項目, 也可以直接在項目裏執行 docker run -it --rm --name zephir $(pwd):/zephir zephir-php:5.6 zephir build


方法2

當然嫌棄上面方法需要構建鏡像很麻煩的話, 有現成的鏡像, 直接 docker run -it --rm --name zephir -v $(pwd):/zephir tuwen/zephir:5.6 /bin/sh, 在容器裏進行操作
支持PHP版本: 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, latest


方法3

要是大哥您還是嫌棄的話, 用小弟copy回來的腳本吧
github: https://github.com/Gekkoou/docker-zephir
文件裏 hello.zep 爲簡單例子, 可修改代碼嘗試編譯一下

編譯生成5.4~7.2版本下所有擴展:

bash builds.sh

只生成某個PHP版本的擴展:

docker run -it --rm --name zephir -v $(pwd):/zephir tuwen/zephir:5.6 bash /zephir/build-ext.sh

命令執行完畢後會在根目錄創建文件夾 lib, 裏面有已經生成好的不同版本的php擴展


p神博客: https://www.leavesongs.com/
docker hub: https://hub.docker.com/r/tuwen/zephir/





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章