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