🍑

[PhpSpreadsheet]PHPのバージョンに合わせてアップグレード or ダウングレードする

2022/09/12に公開

PhpSpreadsheetをPHPのバージョンに合わせてアップグレード or ダウングレードする手順の覚書き

前提条件

  • PHPをインストール済であること
  • 必要なモジュール(ext-gd, ext-zipなど)をインストール済であること
  • PHPのバージョン: 7.2.34以上(以下の手順の場合、サポート切れバージョンな点はご了承を)

手順

1. Composerのインストール

PhpSpreadSheetのライブラリ用のディレクトリを作成し、インストールします

# PhpSpreadsheetのライブラリ用のディレクトリを作成し、そこにインストール
$ mkdir phpspreadsheet && cd phpspreadsheet
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"

2. ライブラリのインストール

PhpSpreadsheetのライブラリをインストールします
PHPのバージョンとしては古いですが、今回は7.1.14に対応したものを入れます。

# composer.jsonの作成と追記
vi composer.json
# -- 以下の内容を追記: PHP7.1.15環境で実行する場合
{
    "config": {
        "platform": {
            "php": "7.1.15"
        }
    }
}
# -- 追記内容この上まで

# PhpSpreadsheettのダウンロード&インストール
php composer.phar require phpoffice/phpspreadsheet

# 完了すると、PhpSpreadsheetのバージョンが指定したPHPのバージョンに対応した内容に指定されます(※1)

# パッケージのバージョン確認
$ php composer.phar show
# 以下実際の出力結果
markbaker/complex        1.5.0  PHP Class for working with complex numbers
markbaker/matrix         1.2.3  PHP Class for working with matrices
phpoffice/phpspreadsheet 1.12.0 PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine
psr/simple-cache         1.0.1  Common interfaces for simple caching

※1: PhpSpreadsheetダウンロード&インストール完了後のcomposer.json

composer.json
{
    "config": {
        "platform": {
            "php": "7.1.15"
        }
    },
    "require": {
        "phpoffice/phpspreadsheet": "^1.12"
    }
}

→ 指定したPHPで使える最新のリリース番号が指定されている(PHP7.1系は1.13でサポート外になるので、その手前の1.12まで)
https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/1.12.0
https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/1.13.0

3. ライブラリのアップグレード

今回はPhpSpreadsheetをアップグレードして、PHP.7.2.34で使えるようにします
手順的には、ダウングレードでも同じです

# composer.jsonの内容を変更
vi composer.json
# -- 以下の内容に変更: PHP7.2.34での実行用に変更、requireセクションは削除
{
    "config": {
        "platform": {
            "php": "7.2.34"
        }
    }
}
# -- 変更内容この上まで

# composer.jsonに記載の内容をもとに、依存性とcomposer.lockの内容を更新(※2)
php composer.phar upgrade

# PhpSpreadsheetのダウンロード&インストール
php composer.phar require phpoffice/phpspreadsheet

# 完了すると、PhpSpreadsheetのバージョンが指定したPHPのバージョンに対応した内容に指定されます(※3)

# パッケージのバージョン確認
$ php composer.phar show
# 以下実際の出力結果
ezyang/htmlpurifier       v4.14.0 Standards compliant HTML filter written in PHP
maennchen/zipstream-php   2.1.0   ZipStream is a library for dynamically streaming dynamic zip files from PHP without writing to the dis...
markbaker/complex         3.0.1   PHP Class for working with complex numbers
markbaker/matrix          3.0.0   PHP Class for working with matrices
myclabs/php-enum          1.7.7   PHP Enum implementation
phpoffice/phpspreadsheet  1.19.0  PHPSpreadsheet - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine
psr/http-client           1.0.1   Common interface for HTTP clients
psr/http-factory          1.0.1   Common interfaces for PSR-7 HTTP message factories
psr/http-message          1.0.1   Common interface for HTTP messages
psr/simple-cache          1.0.1   Common interfaces for simple caching
symfony/polyfill-mbstring v1.26.0 Symfony polyfill for the Mbstring extension

※2: composerコマンド実行時にエラーが出た場合は手順1の方法で再度インストールするか、以下のコマンドで更新してください

# バージョンを指定して更新(以下は2.2)
php composer.phar self-update --2.2
# 最新の安定版に更新
php composer.phar self-update --stable
# 元に戻したいとき
php composer.phar self-update --rollback

※3: PhpSpreadsheetダウンロード&インストール完了後のcomposer.json

composer.json
{
    "config": {
        "platform": {
            "php": "7.2.34"
        }
    },
    "require": {
        "phpoffice/phpspreadsheet": "^1.19"
    }
}

→ 指定したPHPで使える最新のリリース番号が指定されている(PHP7.2系は1.20でサポート外になるので、その手前の1.19まで)
https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/1.19.0
https://github.com/PHPOffice/PhpSpreadsheet/releases/tag/1.20.0

補足事項

composer.jsonでのPHPのバージョン指定は、以下のコマンドでも可能ですが、ファイルにあらかじめ、{}を記載しておかないとエラーになるので要注意です。

実行コマンド
composer config platform.php 7.2.34

以下の通り、{}を記載しておかないとエラーになる

composer.json
{
}

終わりに

PhpSpreadsheetは、現状PHP7.4以降をサポートしている模様(2022年9月現在)
とはいえ、composerでPHPのバージョンを指定してあげれば対応するリリース番号のものをひっぱってきてくれるので、それ以前のバージョンでも開発はできそうです

※README上はPHP7.3までサポート、となってますが、以下によればPHP7.3のサポートは2022年7月6日(PHP7.3.33のサポート期限2021年12月6日の6ヶ月後)までのようです
https://github.com/PHPOffice/PhpSpreadsheet/blob/master/docs/index.md

参考

Discussion