Help us understand the problem. What is going on with this article?

cliとphp-fpmでPHPのバージョンが異なるときのcomposer require方法

TL;DR

php-fpmで使用されてるのと同じPHPバージョンを使用してphp composer.phar requireを実行する。

$ php7.2 composer.phar require abraham/twitteroauth

環境説明

今回の環境では、cliはPHP8.0が使用されていて、

$ php --version
PHP 8.0.2 (cli) (built: Feb 14 2021 14:21:15) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.2, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.2, Copyright (c), by Zend Technologies

php-fpmではPHP7.2が使用されていた
スクリーンショット 2021-02-23 11.03.16.png

そのため、composerがインストール時に参照するphpバージョン(cli: PHP8.0)と、サーバがPHPを実行するときに使用するphpバージョン(php-fpm: PHP7.2)が異なってしまい、互換性の問題が発生した。

設定方法

1. composerのインストール

現在(2021/2/23)最新版のcomposer v2.0.9PHP7.2の組み合わせではサポート外というエラー(Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 7.3.0".)が出たので、Composer本体のバージョンを1系に固定化するを参考に、composer v1.10.20をインストールした。
(composer v1.10.20PHP7.2の組み合わせではエラーは発生しなかった。)

$ curl -sS https://getcomposer.org/installer | php -- --version=1.10.20

2. composer.pharでライブラリをインストール

composerがインストールできたら以下のコマンドでライブラリをインストールできるが、

$ php composer.phar require abraham/twitteroauth

先程も書いたように、cliとphp-fpmで使用するPHPのバージョンが異なっているのでこれでは問題が起きる。

それを回避するにはcliとphp-fpmで同じPHPのバージョンを使用する。今回の環境ではphp-fpmはPHP7.2が使用されているのでcliでもPHP7.2を使用する。

$ php7.2 composer.phar require abraham/twitteroauth

あとは通常通りrequire_once "vendor/autoload.php";でライブラリを使用できる

<?php
require_once "vendor/autoload.php";
use Abraham\TwitterOAuth\TwitterOAuth;

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token, $access_token_secret);
$content = $connection->get("account/verify_credentials");
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away