最大公約数を求めるために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関数の動作確認を説明しました。