Composerも最新バージョン(本稿執筆時点で2.2.22)にしたし、PhpSpreadsheetをインストールしようと、次のコマンドを入力した。
composer require phpoffice/phpspreadsheet
ところがエラーが出てインストールができない。
無事に解決したが、備忘録として書いておけばきっと誰かの役に立つだろう(多分)。
発生したエラー
Installation failed, deleting ./composer.json.
インストールに失敗し、./composer.json が削除されました。
[RuntimeException]
No composer.json present in the current directory (./composer.json), this may be the cause of the following exception.
[ランタイム例外]
現在のディレクトリ(./composer.json)にcomposer.jsonがありません。という例外が発生します。
[InvalidArgumentException]
Package phpoffice/phpspreadsheet has requirements incompatible with your PHP version, PHP extensions and Composer version:
- phpoffice/phpspreadsheet 1.29.0 requires php ^7.4 || ^8.0 which does not match your installed version 5.4.16.
[無効な引数例外]
phpoffice/phpspreadsheet パッケージは、使用している PHP のバージョン、PHP 拡張モジュール、および Composer のバージョンと互換性のない要件を含んでいます:
- phpoffice/phpspreadsheet 1.29.0
php バージョン 7.4 または バージョン 8.0 が必要ですが、インストールされているバージョン 5.4.16 と一致しません。
赤い背景色で怒られて、ちょっとビックリした。
要するに、
- composer.jsonがないから無理
- PHPのバージョンは7.4系か8.0系が必要だが、インストールされているバージョンが5.4系だから無理
無理無理いうなぁ!
composer.jsonを作成する
Composerをインストールしたディレクトリ(例:$HOME/bin)に移動し、
上記のようにviでcomposer.jsonを新規作成する。
PhpSpreadsheetの最新バージョンは1.29.0(本稿執筆時点)なので、具体的には次のように書いて保存する。
$HOME/bin
{
"require": {
"phpoffice/phpspreadsheet": "^1.29.0"
}
}
PhpSpreadsheet(リンク先は公式ドキュメント)を読んでもよーワカランのだが、PHPの最小バージョンが8.0系だとか、composer.jsonが必要らしいことが書いてある(英語とスキルの壁)。
Composerもv2系はv1系とでは(当たり前ではあるが)機能が違うようだし、この辺は試行錯誤して知見を得にゃならんな。
PHPのバージョンを変更する
それにしても、なんでインストールされてるPHPが5.4系だって怒られるんだ?
エックスサーバー のサーバーパネルでPHPのバージョンを確認しても、現在のバージョンは7.4系になってるのに?
調べてみると、エックスサーバー にSSH接続でコマンドを実行する場合、適用されるPHPのバージョンのデフォルトが5.4.16のようだ。
そこで「php -v」で確認すると・・・
$HOME
php -v
PHP 5.4.16 (cli) (built: Apr 1 2020 04:07:17)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
with Zend OPcache v7.0.5, Copyright (c) 1999-2015, by Zend Technologies
/(^o^)\ナンテコッタイ
とにかくPHPのバージョンを変更しなければPhpSpreadsheetがインストールできないので、その手順を解説する。
① ホームディレクトリに「bin」ディレクトリを作成する
私のようにComposerを最新にした人は作成済みだと思うが、そうでない人は次のコマンドでホーム直下に「bin」ディレクトリを作成する。
mkdir $HOME/bin
② シンボリックリンクを作成する
私は諸事情からPHPは7.4系(正確には7.4.33)を利用している。
そこで、次のコマンドでシンボリックリンク(Windowsで例えると「ショートカット」)を作成する。
ln -s /usr/bin/php7.4 $HOME/bin/php
本稿執筆時点でエックスサーバー の推奨バージョンは8.1.22なので、上記コマンドの「php7.4」を「php8.1」にすればOKだ。
なお、「php7.4.33」としても良いが、「php7.4」でもPHPのバージョンは7.4.33が適用される。
③ .bashrcにパスを通す記述を追加する
私のようにComposerを最新にした人は(以下略)そうでない人はviで.bashrcにパスを通す記述を追加する必要がある。
vi ~/.bashrc
上記コマンドを実行し、最終行に次の内容を追加して保存・終了する。
export PATH=$HOME/bin:$PATH
④ .bashrcの変更内容を反映させる
お約束で、次のコマンドを実行して変更内容を反映させる。
なお、すでに手順③の.bashrcにパスを通す記述が追加されていて手順を飛ばした場合でも、手順②のシンボリックリンクを有効にするには、このコマンドを実行する必要がある。
source ~/.bashrc
⑤ PHPのバージョンを確認する
ここまでの手順が反映されているか、次のコマンドでPHPのバージョンを確認する。
php -v
$HOME
php -v
PHP 7.4.33 (cli) (built: Aug 15 2023 10:32:32) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
無事、バージョン7.4.33が適用された。
おわりに
肝心のPhpSpreadsheetのインストールはどうなったんだ?と疑問に思われそうだが、ちゃんと無事にインストールが完了した。
$HOME
composer require phpoffice/phpspreadsheet
Using version ^1.29 for phpoffice/phpspreadsheet
./composer.json has been created
Running composer update phpoffice/phpspreadsheet
Loading composer repositories with package information
Updating dependencies
Lock file operations: 11 installs, 0 updates, 0 removals
- Downloading myclabs/php-enum (1.8.4)
(中略)
- Installing phpoffice/phpspreadsheet (1.29.0): Extracting archive
6 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
3 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
私は普段SSH接続でコマンドラインを叩かないため、コマンドは忘れかけてるわ、viの使い方も怪しいわで、我ながら「初心者かよ!」と思ってしまった。
新しくPHPのライブラリをインストールしようとすると、割と色々面倒だ。
Warning: strpos() expects parameter 1 to be string, array given in /home/eware/dajya-ranger.com/public_html/wp-includes/compat.php on line 498
Warning: preg_match_all() expects parameter 2 to be string, array given in /home/eware/dajya-ranger.com/public_html/wp-includes/shortcodes.php on line 155
Array