Saxon / C PHP расширение имени (ext-саксонский / c против ext-саксонский c) - PullRequest
1 голос
/ 24 апреля 2020

Я создал расширение Saxon / C PHP в образе PHP -FPM docker. Текущее имя расширения - ext-saxon/c, в то время как PhpStorm и composer ожидают, что имя расширения будет ext-saxonc. Можно ли изменить / переопределить это в процессе сборки Saxon или в PhpStorm?

enter image description here

Когда я использую код в PhpStorm, я получаю следующая ошибка:

enter image description here

Чтобы PhpStorm знал о расширении Saxon, я должен вручную включить его в настройках PHP Runtime, потому что это интерпретатор не распознает автоматически:

enter image description here

Но теперь я получаю сообщение о том, что расширение ext-saxonc PHP отсутствует в моем composer.json file.

enter image description here

В моем файле composer.json я могу сделать следующее:

"require": {
    "ext-saxon/c": "*",
}

Но я не могу сделать ниже, потому что это расширение не распознается как установленное.

"require": {
    "ext-saxonc": "*",
}

Мой docker код для создания расширения:

FROM php:7.4.5-fpm

ARG saxon='libsaxon-HEC-setup64-v1.2.1'
RUN set -eux; \
    apt-get update && apt-get install -y --no-install-recommends wget; \
    cd /tmp && wget --quiet https://www.saxonica.com/saxon-c/${saxon}.zip; \
    unzip ${saxon}.zip; \
    ./${saxon} -batch -dest /tmp/saxon; \
    cp /tmp/saxon/libsaxonhec.so /usr/lib/; \
    cp -r /tmp/saxon/rt /usr/lib; \
    ldconfig; \
    cd /tmp/saxon/Saxon.C.API/; \
    phpize; \
    ./configure --enable-saxon; \
    make -j$(nproc); \
    make install; \
    docker-php-ext-enable saxon; \
    rm -rf /tmp/${saxon} /tmp/${saxon}.zip /tmp/saxon /var/lib/apt/lists/*;

1 Ответ

1 голос
/ 25 апреля 2020

Измените строку 147 из Saxon.C.API\php_saxon.h (или, возможно, Saxon.C.API\php5_saxon.h для PHP5) с:

#define PHP_SAXON_EXTNAME "Saxon/C"

на

#define PHP_SAXON_EXTNAME "SaxonC"

, используя

sed -i 's/#define PHP_SAXON_EXTNAME  "Saxon\/C"/#define PHP_SAXON_EXTNAME  "SaxonC"/g' php_saxon.h; \

Новый docker код:

FROM php:7.4.5-fpm

ARG saxon='libsaxon-HEC-setup64-v1.2.1'
RUN set -eux; \
    apt-get update && apt-get install -y --no-install-recommends wget; \
    cd /tmp && wget --quiet https://www.saxonica.com/saxon-c/${saxon}.zip; \
    unzip ${saxon}.zip; \
    ./${saxon} -batch -dest /tmp/saxon; \
    cp /tmp/saxon/libsaxonhec.so /usr/lib/; \
    cp -r /tmp/saxon/rt /usr/lib; \
    ldconfig; \
    cd /tmp/saxon/Saxon.C.API/; \
    sed -i 's/#define PHP_SAXON_EXTNAME  "Saxon\/C"/#define PHP_SAXON_EXTNAME  "saxonc"/g' php_saxon.h; \
    phpize; \
    ./configure --enable-saxon; \
    make -j$(nproc); \
    make install; \
    docker-php-ext-enable saxon; \
    rm -rf /tmp/${saxon} /tmp/${saxon}.zip /tmp/saxon /var/lib/apt/lists/*;
...