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

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

ただいまの
回答率

90.01%

Linux環境で、PHP extensionを有効化したい

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 5,533

YO14

score 28

 前提・実現したいこと

PHPで、Linux環境にとあるシステムを設置するにあたって、
composerをインストールし、Laravelコマンドである php artisan key:generate を実行したいです。
(composer.jsonが予め用意されており、Laravelもインストールの対象に設定されています)

が、現状、以下記載するエラーが発生します。ネットで調べましたが、古い情報が多く問題解決できていません。
ご存じの方、ご教示宜しくお願いいたします。

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

composer installを実行したところ、以下のようなエラーが発生します。

Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - Installation request for laravel/framework v5.2.39 -> satisfiable by laravel/framework[v5.2.39].
    - laravel/framework v5.2.39 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
  Problem 2
    - Installation request for league/commonmark 0.13.4 -> satisfiable by league/commonmark[0.13.4].
    - league/commonmark 0.13.4 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
  Problem 3
    - Installation request for simplesoftwareio/simple-qrcode 1.3.3 -> satisfiable by simplesoftwareio/simple-qrcode[1.3.3].
    - simplesoftwareio/simple-qrcode 1.3.3 requires ext-gd * -> the requested PHP extension gd is missing from your system.
  Problem 4
    - laravel/framework v5.2.39 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.
    - roumen/feed v2.10.4 requires illuminate/support ^5.0 -> satisfiable by laravel/framework[v5.2.39].
    - Installation request for roumen/feed v2.10.4 -> satisfiable by roumen/feed[v2.10.4].

 試したこと

mbstringがPHPの拡張機能であり、それが私のシステムで有効化されていない為にエラーが発生している、と読み取れましたので、インターネットにて関連していそうな情報を集め、
「php.iniにおいて、 ;extension=php_mbstring.dll のセミコロンを外し、httpdを再起動する」という記述を発見しました。
実際は、サーバーのphp.iniには上記の記載がなかったため、セミコロンを外すのではなく新規に記載しました。
また、実際はサーバーにはphp.iniとphp7.0.iniと2つあったため、両方に同じ事を行いました。

しかし、結果として全く同じエラーメッセージが出現します。

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

PHP7.0.3
Composer1.6.5
Linuxのディストリビューション・・・Amazon LInux AMI

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Kosuke_Shibuya

    2018/07/30 23:33

    linux のディストリビューションを明記してください。

    キャンセル

  • YO14

    2018/07/31 09:46

    ` cat /etc/issue `を実行したところ、Amazon Linux AMIでした。

    キャンセル

回答 3

checkベストアンサー

+3

まず、PHPが読み込んでいる ini ファイルがどこにあるのかを特定します。

php --ini

で、読み込まれている ini ファイルが一覧で出力されます。

これは、私が使っている環境(Amazonではありません)での出力です。

$ php --ini

Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      /etc/php.d/10-opcache.ini,
/etc/php.d/15-xdebug.ini,
/etc/php.d/20-bcmath.ini,
/etc/php.d/20-bz2.ini,
/etc/php.d/20-calendar.ini,
/etc/php.d/20-ctype.ini,
/etc/php.d/20-curl.ini,
/etc/php.d/20-dom.ini,
/etc/php.d/20-exif.ini,
/etc/php.d/20-fileinfo.ini,
/etc/php.d/20-ftp.ini,
/etc/php.d/20-gd.ini,
/etc/php.d/20-gettext.ini,
/etc/php.d/20-gmp.ini,
/etc/php.d/20-iconv.ini,
/etc/php.d/20-imap.ini,
/etc/php.d/20-intl.ini,
/etc/php.d/20-json.ini,
/etc/php.d/20-ldap.ini,
/etc/php.d/20-mbstring.ini,
/etc/php.d/20-mysqlnd.ini,
/etc/php.d/20-pdo.ini,
/etc/php.d/20-phar.ini,
/etc/php.d/20-posix.ini,
/etc/php.d/20-shmop.ini,
/etc/php.d/20-simplexml.ini,
/etc/php.d/20-sockets.ini,
/etc/php.d/20-sqlite3.ini,
/etc/php.d/20-sysvmsg.ini,
/etc/php.d/20-sysvsem.ini,
/etc/php.d/20-sysvshm.ini,
/etc/php.d/20-tokenizer.ini,
/etc/php.d/20-xml.ini,
/etc/php.d/20-xmlwriter.ini,
/etc/php.d/20-xsl.ini,
/etc/php.d/30-mysqli.ini,
/etc/php.d/30-pdo_mysql.ini,
/etc/php.d/30-pdo_sqlite.ini,
/etc/php.d/30-wddx.ini,
/etc/php.d/30-xmlreader.ini,
/etc/php.d/40-apfd.ini,
/etc/php.d/40-imagick.ini,
/etc/php.d/40-oauth.ini,
/etc/php.d/40-propro.ini,
/etc/php.d/40-raphf.ini,
/etc/php.d/40-smbclient.ini,
/etc/php.d/40-zip.ini,
/etc/php.d/50-http.ini,
/etc/php.d/50-json_post.ini,
/etc/php.d/crack.ini,
/etc/php.d/opcache.ini,
/etc/php.d/phalcon.ini,
/etc/php.d/subversion.ini,
/etc/php.d/uploadprogress.ini,
/etc/php.d/xhprof.ini

読み込まれている ini ファイルは、ご覧のように、php.ini だけではありません。

/etc/php.d/ ディレクトリ以下にも、様々なファイルがあることがわかりますね。

mbstring がインストールされていれば、/etc/php.d/20-mbstring.ini が出力されると思います。
インストールされていないのであれば、インストールする必要があります。

インストールされているかどうかを確認します。

$ yum list installed | grep mbstring
php-mbstring.x86_64 7.1.20-1.el6.remi @remi-php71 // 出力される。インストールされていない場合は何も出力されない。

インストールされていない場合、パッケージを検索します。

$ yum search mbstring
読み込んだプラグイン:fastestmirror, security
Repository pgdg93 is listed more than once in the configuration
Repository pgdg93-source is listed more than once in the configuration
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * epel: mirror.dmmlabs.jp
 * extras: ftp.iij.ad.jp
 * remi: ftp.riken.jp
 * remi-php70: ftp.riken.jp
 * remi-php71: ftp.riken.jp
 * remi-safe: ftp.riken.jp
 * rpmforge: ftp.riken.jp
 * updates: ftp.iij.ad.jp
Webmin                                                                                                             119/119
epel                                                                                                           12516/12516
wandisco-svn                                                                                                       115/115
================================================== N/S Matched: mbstring ==================================================
php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php54-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php55-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php56-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php70-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php71-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php72-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling
php73-php-mbstring.x86_64 : A module for PHP applications which need multi-byte string handling

  Name and summary matches only, use "search all" for everything.

お使いのPHPバージョンが7.0 ということなので、この場合、php70-php-mbstring をインストールすれば良いことがわかります。

$ yum install php70-php-mbstring

を実行すれば良いことがわかりますね。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/31 16:33

    ありがとうございます。
    ご回答いただいた内容を参考にし、mbstringをインストールすることができました。

    キャンセル

  • 2018/07/31 16:35

    解決したようで何よりです。

    キャンセル

0

「php.iniにおいて、 ;extension=php_mbstring.dll のセミコロンを外し、httpdを再起動する」という記述を発見しました。
実際は、サーバーのphp.iniには上記の記載がなかったため、セミコロンを外すのではなく新規に記載しました。


php.iniのphp_mbstring.dllの有効化だけではなく、php-mbstringをインストールされているか確認する必要があります。

Linuxのディストリビューション(UbuntuとかCentOSとか)がご質問の内容だけでは把握できないので、このコマンドと示ませんが、UbuntuとCentOSのPHP(とmbstringなど)のインストールの一例の記事を挙げてみます。

Ubuntu
https://qiita.com/yamatmoo/items/b9e8035c55032de88084
CentOS
https://qiita.com/ozawan/items/caf6e7ddec7c6b31f01e

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/31 09:59

    ご回答ありがとうございます。Linuxのディストリビューションは、Amazon Linuxでした。
    ご提示いただいた記事だとどちらを参照すればよろしいでしょうか。

    キャンセル

  • 2018/07/31 11:42 編集

    AmazonLinuxだと↓とかでどうしょうか
    https://lab.maro-log.net/post-12390/
    (手順中yum list php7.1* => yum list php71*としてください)

    おそらくCentOSの方でもできると思いますが、こちらでもmbstringのインストールができると思います。

    キャンセル

  • 2018/07/31 16:33

    ありがとうございます。参考にさせていただきます。

    キャンセル

0

Linux 環境なら共有ライブラリは .dll ではなくて .so です。
参考にされたサイトは Windows 用の記述ですね。

というわけで、追加した記述は意味がありません。
普通 mbstring のロード記述はあるはずなので、探してコメントを外してみてください。
※mbstring で php.ini を検索してみるのです

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/07/30 21:43

    yum など リポジトリからphpだけをインストールしたものにはないですよ。

    [root@2964a2c33157 /]# php -m
    [PHP Modules]
    bz2
    calendar
    Core
    ctype
    curl
    date
    exif
    fileinfo
    filter
    ftp
    gettext
    hash
    iconv
    json
    libxml
    openssl
    pcntl
    pcre
    Phar
    readline
    Reflection
    session
    sockets
    SPL
    standard
    tokenizer
    zlib

    [Zend Modules]

    [root@2964a2c33157 /]# cat /etc/php.ini | grep extension=
    ; extension=modulename.extension
    ; extension=msql.dll
    ; extension=msql.so
    ; extension=/path/to/extension/msql.so
    [root@2964a2c33157 /]#

    キャンセル

  • 2018/07/31 09:58

    PHPは、yum install php php-mbstring php-pear php-fpm php-mcrypt php-mysqlを実行してインストールしました。
    おっしゃる通り、php.ini内に、extension=mbstring的な記述はありません。どこを探して修正すべきでしょうか。

    キャンセル

  • 2018/07/31 16:34 編集

    間違って投稿したので削除です。

    キャンセル

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

  • ただいまの回答率 90.01%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる