1. 程式人生 > >linux zephir 編寫 php 擴充套件 (docker篇)

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 "[email protected]"'; \ } >> /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/