我在PHP-FPM docker镜像中构建了SaxonC PHP扩展。当前的扩展名是 ext-saxon/c
而 PhpStorm
和 composer
希望扩展名是 ext-saxonc
. 能否在Saxon的构建过程或PhpStorm中更改覆盖?
当我在PhpStorm中使用这些代码时,我得到以下错误。
为了让PhpStorm知道Saxon扩展,我必须在PHP运行时设置中手动启用它,因为解释器不会自动识别它。
但现在,我得到的信息是 ext-saxonc
我的PHP扩展不见了 composer.json
文件。
在我的 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/*;
更改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/*;