【PHP】gmp関数で最大公約数・最小公倍数を求める

【PHP】gmp関数で最大公約数・最小公倍数を求める サーバー

最大公約数を求めるためにgmp_gcd()を利用した際、次のエラーが出ることがあります。

PHP Fatal error:  Uncaught Error: Call to undefined function gmp_gcd()

このエラーが出た場合には、この記事の内容が役に立ちます。
この記事では、PHPでgmp関数を利用する方法を解説しています。
gmp関数が使えれば、PHPで最大公約数・最小公倍数を簡単に求めることができます。

本記事の内容

  • gmp関数でエラーが出る原因
  • PHP gmp拡張モジュール(php-gmp)のインストール
  • PHP gmp拡張モジュールの有効化
  • gmp関数の動作確認

それでは、上記に沿って解説していきます。

gmp関数でエラーが出る原因

gmp関数でエラーが出るとは、PHPでgmp関数が使えないということです。
PHPでgmp関数が使えない原因は、以下の2つが考えられます。

  • PHP gmp拡張モジュールがインストールされていない
  • PHP gmp拡張モジュールが有効化されていない

それぞれを下記で説明します。

PHP gmp拡張モジュールがインストールされていない

まずは、gmp拡張モジュールのインストール状況を確認します。
インストールの有無は、次の方法で確認できます。

$ ls /usr/lib/php/20190902 | grep gmp

gmp拡張モジュールが存在していれば、共有ライブラリが存在しています。
あとは、パッケージのインストール状況を確認します。

$ apt list php-gmp
一覧表示... 完了
php-gmp/groovy,groovy 2:7.4+76 all

apt(パッケージ管理システム)では、該当パッケージを認識しています。
ただ、まだインストール済みではありません。

インストール済みの場合、[インストール済み]と記載されます。

PHP gmp拡張モジュールが有効化されていない

インストールしただけでは、gmp関数は使えません。
PHP gmp拡張モジュールを有効化して初めて、gmp関数可能となります。

PHP gmp拡張モジュールの状況は、以下の方法で確認できます。

  • 「php -m」でロードされているモジュール一覧を確認する
  • 「phpinfo()」で出力される情報から確認する

それぞれの方法で確認してみましょう。

「php -m」でロードされているモジュール一覧を確認する

モジュール一覧をgrepします。

$ php -m | grep 'gmp'

PHP gmp拡張モジュールが有効化されていれば、「gmp」と表示されます。

「phpinfo()」で出力される情報から確認する

phpinfo()の結果を確認する方法です。

$ php -r 'phpinfo();' | grep 'gmp'

まとめ

gmp拡張モジュールの状況を確認しました。
すでにインストール済みなら、あとはそれを有効化するだけです。

インストールがまだなら、まずはインストールから行います。
以下では、インストール・有効化の方法をそれぞれ説明します。

PHP gmp拡張モジュール(php-gmp)のインストール

インストールするパッケージを確認します。
パッケージ名は、「php-gmp」となります。

$ sudo apt show php-gmp
Package: php-gmp
Version: 2:7.4+76
Priority: optional
Section: php
Source: php-defaults (76)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <team+pkg-php@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 13.3 kB
Depends: php-common, php7.4-gmp
Download-Size: 1,996 B
APT-Sources: http://old-releases.ubuntu.com/ubuntu groovy/main amd64 Packages
Description: GMP module for PHP [default]
 This package provides a GMP module for PHP.
 .
 PHP (PHP: Hypertext Preprocessor の再帰的頭字語) は広く使われている
 オープンソースな汎用スクリプト言語で、特にウェブ開発に適しており、 HTML に組み込むことができます。
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.4).

パッケージのバージョンは、PHPのバージョンによって変わってきます。
バージョンを指定する必要はありません。

PHPのバージョンに適したモノが、インストールされます。
よって、php-gmpのインストールは、以下のコマンドで行います。

$ sudo apt-get install php-gmp

インストールは、少し時間がかかります。
まずは、パッケージの状況から確認します。

$ apt list php-gmp
一覧表示... 完了
php-gmp/groovy,groovy,now 2:7.4+76 all [インストール済み]

[インストール済み]が、記載されるようになりました。
では、モノ(共有ライブラリ)を確認しておきます。

$ ls /usr/lib/php/20190902 | grep 'gmp'
gmp.so

PHP gmp拡張モジュール(php-gmp)のインストールは、これで完了です。

PHP gmp拡張モジュールの有効化

有効化の際には、php.iniに以下の記述を追加します。

extension=gmp.so

しかし、今回はその必要がありません。
「/etc/php/7.4/apache2/conf.d」の下に、「/etc/php/7.4/apache2/conf.d/20-gmp.ini」が存在しています。

$ ls /etc/php/7.4/apache2/conf.d | grep 'gmp'
20-gmp.ini

そして、そのファイルの内容は以下。

20-gmp.ini

$ cat /etc/php/7.4/apache2/conf.d/20-gmp.ini
; configuration for php gmp module
; priority=20
extension=gmp.so

このファイルが存在するため、php.iniへの追記が不要となります。
ここまでの処理は、php-gmpインストールすれば済みとなっています。

では、設定を反映するためにApacheの再起動を行います。

$ sudo systemctl restart apache2

再起動が完了したら、モジュールの状況を確認しましょう。
コマンドでできる確認から、行います。

$ php -m | grep 'gmp'
gmp
$ php -r 'phpinfo();' | grep 'gmp'
/etc/php/7.4/cli/conf.d/20-gmp.ini,
gmp
gmp support => enabled

OKですね。
次は、ブラウザでphpinfo()の結果を確認します。

これで、PHP gmp拡張モジュールの有効化まで終わりました。
次は、gmp関数の動作確認を行います。

gmp関数の動作確認

gmp関数により、最大公約数と最小公倍数を求めてみましょう。
それらを求めるコードは、以下。

<?php
$gcd = gmp_gcd("12", "21");
echo "【最大公約数】" . gmp_strval($gcd) . PHP_EOL;

$lcm = gmp_lcm("12", "21");
echo "【最小公倍数】" . gmp_strval($lcm) . PHP_EOL;
?>

上記コードを実行した結果は、以下。

【最大公約数】3
【最小公倍数】84

コードが、スッキリしていますね。
最大公約数や最小公倍数ぐらいなら、自分でコーディング可能です。

しかし、ライブラリが存在するなら、そちらを利用するようにしましょう。
探すことも、プログラマーの重要な仕事の一部です。

以上、gmp関数の動作確認を説明しました。

タイトルとURLをコピーしました