コアサーバーのphp7.4で無理やりxmlwriterを有効にする方法

PHP コアサーバー サービス プログラミング

2020年2月現在、コアサーバーのphp7.2以降ではxmlwriterが有効になっていません。

このためphp7.2以降の環境でxmlwriterを必要とするパッケージ類がcomposerでインストールできません。

インストールしようとすると以下のようなエラーが出ます。

xmlwriterが無効なためパッケージがインストールできないという内容です。

そのうちコアサーバー側で対応してもらえるかもしれませんが、いつになるか分からないので自力で強引にxmlwriterを有効にしてみます。

この方法はcli版phpのみ使えると思います。

fcgi版phpはiniファイルのextensionの項目をいじれないため、今の所解決策は思いつきません。

コアサーバーのphp7.2以降でxmlwriterを有効にする手順

今回の解決方法は以下です。

  1. 最新のphpをソースコードからコンパイルする
  2. コンパイルして出来たxmlwriter.soをcli版php実行時に使う

コアサーバーのphp7.2以降でも使えるxmlwriter.soを手に入れるには、phpごとコンパイルしてそこからxmlwriter.soを取り出す必要があります。

xmwriterはphp5.1.2以降はphp本体に組み込まれるようになったため、xmlwriter単体では入手できません。

その旨は以下のURLで確認できます。

PHP: インストール手順 – Manual

以下、phpをコンパイルしてxmlwriterを有効にする手順を細かく書きます。

phpの最新版をソースからコンパイルする

php7.4のソースコードを入手し、手動でコンパイルします。

ソースからコンパイルする方法は以下でも書いています。

任意の作業ディレクトリに移動し、以下のコマンドを打っていきます。

configureに--enable-xmlwriter=sharedをつけることで、modules/xmlwriter.soが出力されるのでこれを使います。

php7.2や7.3を使いたい場合はバージョンの部分を適宜読み替えてください。

コンパイルして出来たxmlwriter.soをcli版phpで使う

cli版phpを実行する時に、コンパイルして出来たxmlwriter.soを指定します。

これでxmlwriterが必要なパッケージもインストールできるかと思います。

php本体もコンパイルしたものを使っても良いと思いますが、パスを通すなど不要な手間がかかるため試していません。

ダメな方法1:php実行時にインストール済のxmlwriterを有効にする

同じことをして困る人がいるかもしれないので、上手くいかなかった方法も書きます。

コアサーバー内に古いphp用のxmlwriter.soが既に存在するのでそれを利用してみます。

以下のように、cli版phpの実行時に-dオプションでxmlwriterのエクステンションを有効にしてみます。

コアサーバーにインストールされているxmlwriter.soとphpのAPIバージョンが一致しないため動かないようです。

ダメな方法2:xmlwriterのみを自力でコンパイルする

xmlwriterを単体でビルドしてsoファイルを入手する方法もうまくいきません。

peclで管理されているソースはメンテナンスされておらず、php7の環境ではコンパイルエラーになります。

xmlwriterのページには以下の記載があります。

This package is not maintained anymore and has been superseded. Package has moved to channel http://www.php.net/xmlwriter package XmlWriter in Core.

このパッケージはもうメンテナンスされておらず、置き換えられています。パッケージは、コアのチャネルhttp://www.php.net/xmlwriterパッケージXmlWriterに移動しました。

PECL :: Package :: xmlwriter

コアサーバー上でコンパイルしようとすると以下のようなエラーになります。

zend_rsrc_list_entryという型はphp7では廃止されているため、コンパイルできません。

php7でもコンパイルが通るようにソースコードを修正するという方法も考えられますが、どれだけの手間になるか分からないのであきらめました。

コアサーバーのphp7.2以降で無理やりxmlwriterを有効にする方法は以上です。

コメント/ピンバック

タイトルとURLをコピーしました