📑

GAE/SE php7.3でGDが存在しないと怒られる

2022/07/19に公開

現象

ちょっと前まで問題なくデプロイできてたのに、突然↓のエラーが発生するようになった。

Problem 1
    - setasign/fpdf is locked to version 1.8.4 and an update of this package was not requested.
    - setasign/fpdf 1.8.4 requires ext-gd * -> it is missing from your system. Install or enable PHP's gd extension.

※composer installのタイミングでext-gdが存在しない旨のエラーが発生。

CloudBuildの履歴を確認すると、builderのバージョンが変わってた。

  • 成功してた頃
    asia.gcr.io/gae-runtimes/buildpacks/php73/builder:php73_20220620_7_3_33_RC00
  • 現在
    asia.gcr.io/gae-runtimes/buildpacks/php/builder:php81_20220711_8_1_6_RC00

gdが無効になったのかと思ったけど、phpinfo()出力させてみたら有効になっている。

対応内容

対応1. PHPのバージョンアップ

結果:OK
以前からphp7.3はサポート切れてるよと警告が出ていたので、php7.4に上げてみる。
エラーが発生しなくなった。
ただ、それなりに動作確認が必要なので、もう少し影響範囲を狭めたい。

対応2. composer.jsonからgdを除外

結果:OK
setasign/fpdfgdを必要としていたため、エラーが発生していた。
setasign/fpdfは、setasign/fpdiに付随して入れていたけど直接使用していなかったため、削除したところエラーが発生しなくなった。
https://github.com/Setasign/FPDI
影響箇所の動作確認も問題なし。
phpのバージョンアップよりは影響範囲が狭いので、今回はこちらを採用。

対応3. php.iniにgdの定義を追加

結果:NG
デプロイ時に↓のphp.iniを読み込ませてみたが、解消せず。

extension=gd.so

デプロイ時に↓のメッセージが表示されたので、読み込み自体はできているはず。

To enable extensions, verify that they are enabled in your .ini files:
    - 
    - /workspace/php.ini

そもそもphpinfo()したときにGDが有効にはなっているので、対応としてふさわしくなさそう。
https://cloud.google.com/appengine/docs/standard/php-gen2/runtime#dynamically_loadable_extensions

さいごに

取り急ぎ確認したことを書いたので、追加で確認したら更新する。
同じ現象でハマった人がいたら参考になれば幸い。

9/15追記

composer.jsonにgdを戻してデプロイしてみたらエラーが発生しなくなっていました。
単純にバグだったのかもしれない。。。

Discussion