質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

2回答

3501閲覧

gmp関数が使えない 使えるようにしたい

bokupiroki

総合スコア54

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

1クリップ

投稿2021/04/13 05:06

編集2021/04/23 02:11

前提・実現したいこと

  • Mac上のdocker環境にてlaravelでアプリを作成中
  • 特定2つのの数値の最小公倍数を計算できるようにしたい

gmp_lcmという関数を使って実現しようとしましたが、エラーが出てしまいます。

発生している問題・エラーメッセージ

Call to undefined function App\Http\Controllers\gmp_lcm()

該当のソースコード

↓コントローラー

php

1$hoge = gmp_lcm("12", "21");

書き方が間違っているというよりは、関数自体が使えないように見受けられます。

php公式のページ
によると、

これらの関数を利用可能とするには、オプション --with-gmp を使用することにより GMP サポートを有効にして PHP をコンパイルする必要が あります。

との記載がありますが、具体的に何をすればいいのかわかりません。
何かしらのコマンドに「オプション --with-gmp」を加えて叩けば、この関数を使える状態にできるということなのでしょうか?

試したこと

####①phpinfoで確認
phpinfo();でgmpが有効になっているか確かめました。
イメージ説明
有効になっているように見えます。

####②php.iniのコメントアウトを外してnginxを再起動
\laradock\php-fpm\php7.3.ini

php

1;extension=php_gmp.dll 23extension=php_gmp.dll
docker-compose restart nginx Restarting laradock_nginx_1 ... done

状況変わらず

####③コンテナ内でphp7.3-gmpインストールコマンド実行

apt-get install php7.3-gmp

念のためnginx再起動するも変わらず

####④コマンドなら関数が使えるか

php artisan tinker Psy Shell v0.9.12 (PHP 7.3.11 — cli) by Justin Hileman >>> gmp_lcm(2,3) PHP Fatal error: Call to undefined function gmp_lcm() in Psy Shell code on line 1

NGです。

###⑤php-fpmの再起動
TakashiAbeさんの回答に基づき、php-fpmも再起動してみました。

MacBook-Pro laradock % docker-compose restart nginx php-fpm Restarting laradock_nginx_1 ... done Restarting laradock_php-fpm_1 ... done

しかし、同じようにCall to undefined function App\Http\Controllers\gmp_lcm() のエラーが出て関数が使えませんでした。

phpinfo();で表示されるGMPのステータスも質問時のスクリーンショットと同じ状態です。

php-fpmの再起動が効いたのか定かではないのですが、1点変化がありました。
php artisan tinkerでコマンドライン上でgmp関数を使うと、動作するようになりました。

Psy Shell v0.9.12 (PHP 7.3.27-9+ubuntu18.04.1+deb.sury.org+1 ― cli) by Justin Hileman >>> gmp_lcm(2,3) => GMP {#3291 value: 6, }

何か方法があるのでしょうか?
それとも私の環境ではできないことをしようとしているのでしょうか?

知恵を貸していただきたいです。

補足情報(FW/ツールのバージョンなど)

docker20.10.0
ubuntu18.04.1
php7.3
laravel6

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ちょっと気になったので私の環境でもためしてみたら、同じようにCall to undefined functionが出て使えませんでした。そのときにphpinfoで確認したら質問者と同じようになっていたので、その表示だけで有効になっているかどうかは判別できないようです。

私の環境はCentOS7でしたので、yum install php-gmpをしたあとに、nginxとphp-fpmを再起動したところ有効化されて使えるようになりました。ということで、apt-get install php7.3-gmpをしたあとに、nginxとphp-fpmを両方再起動してみたらどうでしょう。php-fpmの再起動をされていないようなので、もしかしたらこれが原因の可能性はあります。

追記)
php-gmpが有効化されると以下の表示が追加されます。こちらも合わせてご確認ください。
イメージ説明

投稿2021/04/21 02:13

編集2021/04/21 02:19
AbeTakashi

総合スコア4537

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bokupiroki

2021/04/23 02:11

ありがとうございます。 ⑤php-fpmの再起動 を質問欄に追記したので、ご確認いただけると幸いです。
AbeTakashi

2021/04/23 02:24

なるほど、不思議ですね。Docker環境ということでよく分かりませんが、④と⑤で Psy Shell v0.9.12 (PHP 7.3.11 — cli) Psy Shell v0.9.12 (PHP 7.3.27-9+ubuntu18.04.1+deb.sury.org+1 ― cli) とPHPのバージョンが変わっているのが不思議です。PHP環境が複数あって、php-fpmがgmpがインストールしてない方を参照してるとか?
guest

0

Laravel 環境構築時に GMP を有効にしたい場合

Laravel環境で GMP を使う場合は、あらかじめ Laravel の .env で GMP が有効を有効にする必要があります。

docker-compose.yml のあるディレクトリで、初期設定で .env ファイルを作成すると思います。

もし .env.example をコピーして .env に書き換えられた場合などは、 GMP 関する設定が無効(false)になっている可能性があります。

今回のケースであれば、 .env ファイルのなかで、以下 GMP に関する項目を true に書き換えて、その後 docker-compose up -d workspace nginx などを実行されているかどうか、確認されることをおすすめします。

WORKSPACE_INSTALL_GMP=true PHP_FPM_INSTALL_GMP=true PHP_WORKER_INSTALL_GMP=true

既に設定済みの環境で、GMP を有効にしたい場合

設定を反映するには、.env ファイルは Laravel のビルド時に参照されるため、 Docker イメージも作成し直す必要があります。

(どれを動作するかの依存関係も考慮する必要があるかもしれませんが)ビルド後に Docker Compose でリスータトが必要です。

たとえば、 docker-compose up -d nginx workspace のような構成でのを想定しますと
.env 書き換え後に docker-compose build php-fpmを行います。

それから「docker-compose down」を実行して、関連するものを停止します。

再度docker-compose up -d nginx workspace で起動し直すと、phpinfoの情報も新しいものへと切り替わります。

投稿2021/04/13 21:42

編集2021/04/27 20:44
zembutsu

総合スコア1584

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bokupiroki

2021/04/27 14:45

ありがとうございます。 たしかに.envを確認したところ、ご指摘の部分が3つともfalseになっていました。 しかし、trueに変更してコンテナを立ち上げなおしても結果は同じでした。 phpinfoで表示されるgmpの部分の内容にも変化はありませんでした。
zembutsu

2021/04/27 20:42

設定を反映するには、`.env` ファイルは Laravel のビルド時に参照されるため、 Docker イメージも作成し直す必要があります。 (どれを動作するかの依存関係も考慮する必要があるかもしれませんが)ビルド後に Docker Compose でリスータトが必要です。 たとえば、「 docker-compose up -d nginx workspace」のような構成でのを想定しますと「.env」書き換え後に「docker-compose build php-fpm」を行います。 それから「docker-compose down」を実行して、関連するものを停止します。 再度「docker-compose up -d nginx workspace」で起動し直すと、phpinfoの情報も新しいものへと切り替わります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問