エックスサーバーでPhpSpreadsheetがインストールできない!?

エックスサーバーでPhpSpreadsheetがインストールできない!?

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 と一致しません。

赤い背景色で怒られて、ちょっとビックリした。
要するに、

  1. composer.jsonがないから無理
  2. PHPのバージョンは7.4系か8.0系が必要だが、インストールされているバージョンが5.4系だから無理

無理無理いうなぁ!

composer.jsonを作成する

Composerをインストールしたディレクトリ(例:$HOME/bin)に移動し、

vi composer.json

上記のように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

この記事が気に入ったら
いいね ! をお願いします


ITで何かお手伝い出来ることはありませんか?

CTA-IMAGE

本サイトでは、外部サービスと連携して「ITの困った」を解決します!

ソフトウェアカテゴリの最新記事