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/