1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        PHPMicromicro 自執(zhí)行 SAPI

        聯(lián)合創(chuàng)作 · 2023-10-01 09:16

        microphp 自執(zhí)行 SAPI

        micro 自執(zhí)行 SAPI 提供了 php“自執(zhí)行文件”的可能性

        你只需要將構(gòu)建的 micro.sfx 文件與任意 php 文件或者 phar 包拼接(cat 或者 copy /b)為一個(gè)文件就可以直接執(zhí)行這個(gè) php 文件

        兼容性

        目前兼容 PHP7.4 與 8.0;兼容 Windows、Linux、macOS。

        構(gòu)建

        準(zhǔn)備源碼

        1.將本倉(cāng)庫(kù)clone到php源碼的sapi/micro下

        # 在php源碼目錄下
        git clone <url for this repo> sapi/micro

        2.打patch

        patch文件在patches目錄下,選擇patch文件:

        patch文件 平臺(tái)/PHP版本 是否必須 作用
        disable_huge_page.patch Linux 可選 禁用linux構(gòu)建的max-page-size選項(xiàng),縮減sfx體積(典型的, 10M+ -> 5M)
        vcruntime140_<php version>.patch Windows 必選 禁用sfx啟動(dòng)時(shí)GetModuleHandle(vcruntime140(d).dll)
        win32_<php version>.patch Windows 必選 修改構(gòu)建系統(tǒng)以靜態(tài)構(gòu)建
        zend_stream.patch Windows 必選 修改構(gòu)建系統(tǒng)以靜態(tài)構(gòu)建
        phar.patch * 可選 實(shí)現(xiàn)phar的支持

        并分別進(jìn)行patch:

        # 在php源碼目錄下
        patch -p1 < sapi/micro/patches/<name of patch>

        unix-like 構(gòu)建

        0.參考官方構(gòu)建說(shuō)明準(zhǔn)備PHP構(gòu)建環(huán)境

        1.buildconf

        # 在php源碼目錄下
        ./buildconf --force

        2.configure

        # 在php源碼目錄下
        ./configure <options>

        參考的選項(xiàng):

        --disable-phpdbg --disable-cgi --disable-cli --disable-all --enable-micro --enable-phar --with-ffi --enable-zlib

        3.make

        # 在php源碼目錄下
        make micro

        make all(或者make) 或許也可以,但建議還是只構(gòu)建micro SAPI

        生成的文件在 sapi/micro/micro.sfx

        Windows 構(gòu)建

        0.參考官方構(gòu)建說(shuō)明準(zhǔn)備PHP構(gòu)建環(huán)境

        1.buildconf

        # 在php源碼目錄下
        buildconf

        2.configure

        # 在php源碼目錄下
        configure <options>

        參考的選項(xiàng):

        --disable-all --disable-zts --enable-micro --enable-phar --with-ffi --enable-zlib

        3.make 由于構(gòu)建系統(tǒng)的實(shí)現(xiàn)問(wèn)題, Windows下不能使用nmake命令直接構(gòu)建,使用nmake sfx來(lái)構(gòu)建

        # 在php源碼目錄下
        nmake sfx

        生成的文件在 <架構(gòu)名>\<配置名>\micro.sfx

        使用

        將micro.sfx和php文件拼接即可

        例如:myawesomeapp.php內(nèi)容為

        <?php
        echo "hello, this is my awesome app." . PHP_EOL;

        linux下

        cat /path/to/micro.sfx myawesomeapp.php > myawesomeapp
        chmod 0755 ./myawesomeapp
        ./myawesomeapp
        # 回顯 "hello, this is my awesome app."

        或者Windows下

        COPY /b \path\to\micro.sfx + myawesomeapp.php myawesomeapp.exe
        myawesomeapp.exe
        REM 回顯 "hello, this is my awesome app."

        優(yōu)化

        linux下php對(duì)于hugepages優(yōu)化導(dǎo)致了生成的文件很大,如果不考慮對(duì)hugepages的優(yōu)化,使用disable_huge_page.patch來(lái)來(lái)減小文件尺寸

        linux下靜態(tài)構(gòu)建需要包含c標(biāo)準(zhǔn)庫(kù),常見(jiàn)的glibc較大,推薦使用musl,手動(dòng)安裝的musl或者某些發(fā)行版會(huì)提供gcc(或clang)的musl wrapper:musl-gcc或者musl-clang。在進(jìn)行configure之前,通過(guò)指定CC和CXX變量來(lái)使用這些wrapper

        例如

        # ./buildconf things...
        export CC=musl-gcc
        export CXX=musl-gcc
        # ./configure balabala
        # make balabala

        linux下構(gòu)建時(shí)一般希望是純靜態(tài)的,但構(gòu)建使用的發(fā)行版不一定提供依賴(lài)的庫(kù)(zlib libffi等)的靜態(tài)庫(kù)版本,這時(shí)考慮自行構(gòu)建依賴(lài)庫(kù)

        以libffi為例:

        # 通過(guò)git獲取源碼
        git clone https://github.com/libffi/libffi
        cd libffi
        git checkout <version you like, v3.3 for example>
        autoreconf -i
        # 或者直接下載tarball解壓
        wget <url>
        tar xf <tar name>
        cd <extracted name>
        # 如果使用musl的話
        export CC=musl-gcc
        export CXX=musl-gcc
        # 構(gòu)建安裝
        ./configure --prefix=/my/prefered/path &&
        make -j`nproc` &&
        make install

        然后使用以下export命令來(lái)構(gòu)建micro:

        # ./buildconf things...
        # export CC=musl-xxx things...
        export PKG_CONFIG_PATH=/my/prefered/path/lib/pkgconfig
        # ./configure balabala
        # make balabala
        瀏覽 17
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            亚洲精品图| 成人久久精品人妻一区二区三区 | 成人毛片一区二区三区四区 | 中文字幕精品av乱喷 | 99久久久久无码国产精品免费 | 米奇色色 | 少妇体内灌满精子 | 国产日韩欧美大片 | 男女拍拍视频免费 | 色噜噜在线播放 |