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

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

ただいまの
回答率

90.23%

composer installでエラー

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,385

Tatsuo_Iriyama

score 48

現状

現在ブラウザアクセスができない状態で調査をしていたら、どうやら

// You can remove this if you are confident you have intl installed.
if (!extension_loaded('intl')) {
    trigger_error('You must enable the intl extension to use CakePHP.', E_USER_ERROR);
}

bootstrap.phpに記載されている内容です

intlが存在していない為エラーになっている事が判明しました。

対象プロジェクトでcomposer installをしたところ

[vagrant@local profile]$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.1.14 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.14 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - Installation request for cakephp/cakephp 3.1.14 -> satisfiable by cakephp/cakephp[3.1.14].

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php.ini
    - /etc/php.d/20-bz2.ini
    - /etc/php.d/20-calendar.ini
    - /etc/php.d/20-ctype.ini
・
・
・
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
[vagrant@local profile]$ 

このようなエラーが表示されたので、対象の.iniファイルの対応をしなくてはならないのかなという感覚を得ている状況です。

質問

  1. 対象となる.iniファイルでは主にどういう事をすれば良いのでしょうか?
    そもそもエラー内容に対するアプローチ方法、解釈等間違っていたらご指摘下さい。

よろしくお願い致します。

追記

ログ1

・intlが存在していないので、yumでinstall
・phpのバージョンが7.1.25なのでphp-71を選択
sudo yum install php71-php-intl.x86_64でインストール
→正常にインストール完了
・intl有効化の為に/etc/php.iniファイルのextensionを確認したが、extension=php_intl.dllの記載が無かったため、追記。
→追記後、httpdを再起動sudo service httpd restart
php -i | grep intlコマンドでintlが存在しているか確認
・PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php_intl.dll' - 
/usr/lib64/php/modules/php_intl.dll: cannot open shared object file: No such file or directory in Unknown on line 0
エラーが表示
php_intl.dllが/usr/lib64/php/modules/配下に存在していない事によるエラー
ll /usr/lib64/php/modules/ | grep php_intl.dllで再度確認
→レスポンスは何もないため、存在していない事を確認
find / -name php_intl.dllでphp_intl.dllを検索
・色々表示されたが許可が無いというエラーが表示された
・スーパーユーザーで再度実行
→レスポンスは何もなく

ログ2

Apacheのerror.log

PHP Fatal error:  You must enable the intl extension to use CakePHP. in /vagrant/sample.com/profile/config/bootstrap.php on line 38

対象箇所のコード

// You can remove this if you are confident you have intl installed.
if (!extension_loaded('intl')) {
    trigger_error('You must enable the intl extension to use CakePHP.', E_USER_ERROR);
}

intlが存在していないという問題は解決してない。

ログ3

sudo yum install php71-php-intl.x86_64intlをインストール
・インストール後sudo service httpd restartでApacheの再起動
・再起動後、対象ディレクトリでcomposer install実行
→実行後、下記のエラー表示

[vagrant@local profile]$ composer install
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php_intl.dll' - /usr/lib64/php/modules/php_intl.dll: cannot open shared object file: No such file or directory in Unknown on line 0
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - cakephp/cakephp 3.1.14 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - cakephp/cakephp 3.1.14 requires ext-intl * -> the requested PHP extension intl is missing from your system.
    - Installation request for cakephp/cakephp 3.1.14 -> satisfiable by cakephp/cakephp[3.1.14].

  To enable extensions, verify that they are enabled in your .ini files:
    - /etc/php.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-iconv.ini
    - /etc/php.d/20-json.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-simplexml.ini
    - /etc/php.d/20-sockets.ini
    - /etc/php.d/20-sqlite3.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
  You can also run `php --ini` inside terminal to see which files are used by PHP in CLI mode.
[vagrant@local profile]$ 

php --iniで設定ファイル確認
レスポンスは下記

[vagrant@local profile]$ php --ini
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php_intl.dll' - /usr/lib64/php/modules/php_intl.dll: cannot open shared object file: No such file or directory in Unknown on line 0
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/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-iconv.ini,
/etc/php.d/20-json.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-simplexml.ini,
/etc/php.d/20-sockets.ini,
/etc/php.d/20-sqlite3.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

[vagrant@local profile]$ 

一行目にWarning
/usr/lib64/php/modules/配下に、php_intl.dllが存在していないことによるエラー。

ログ4

php -m | grep intlで、intlを検索
-mオプションは、読み込まれているモジュールの一覧を表示する
レスポンスは下記

[vagrant@local profile]$ php -m | grep intl
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php_intl.dll' - /usr/lib64/php/modules/php_intl.dll: cannot open shared object file: No such file or directory in Unknown on line 0
[vagrant@local profile]$ 

ログ3のphp --iniを実行したレスポンスのWarningと同様のWarningが表示

ログ5

sudo yum install php71-php-intl.x86_64intlをインストールするまでの手順は、

1. 'php -v' でPHPのバージョン確認
2. 'yum list | grep intl' で 'yum' でインストールできる 'intl' のバージョン検索
3. PHPのバージョンに対応する 'intl' を選択し、 'yum' でインストール

php -vのレスポンスは下記

[vagrant@local etc]$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php_intl.dll' - /usr/lib64/php/modules/php_intl.dll: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 7.1.25 (cli) (built: Dec  8 2018 13:52:58) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
[vagrant@local etc]$


※現状、バージョン確認時も同様のWarningが表示

現在のPHPのバージョンは7.1.25

yum list | grep intlのレスポンスは下記

[vagrant@local etc]$ yum list | grep intl
Repository google-chrome is listed more than once in the configuration
php71-php-intl.x86_64                       7.1.25-2.el7.remi          @remi-safe
intltool.noarch                             0.50.2-7.el7               base     
perl-libintl.x86_64                         1.20-12.el7                base     
php-intl.x86_64                             5.4.16-46.el7              base     
php54-php-intl.x86_64                       5.4.45-16.el7.remi         remi-safe
php55-php-intl.x86_64                       5.5.38-10.el7.remi         remi-safe
php56-php-intl.x86_64                       5.6.39-1.el7.remi          remi-safe
php70-php-intl.x86_64                       7.0.33-1.el7.remi          remi-safe
php72-php-intl.x86_64                       7.2.13-2.el7.remi          remi-safe
php73-php-intl.x86_64                       7.3.0-1.el7.remi           remi-safe
[vagrant@local etc]$ 

PHPのバージョンが7.1.25の為、php71-php-intl.x86_64を選択。

ログ6

sudo find / -name intl.soの実行後レスポンス

[vagrant@local profile]$ sudo find / -name intl.so
/opt/remi/php71/root/usr/lib64/php/modules/intl.so
[vagrant@local profile]$

intl.so/opt/remi/php71/root/usr/lib64/php/modules/配下に存在しているよう。

ログ7

sudo find / -name php71-phpの実行後レスポンス

[vagrant@local profile]$ sudo find / -name php71-php
[vagrant@local profile]$ 


何も表示されず。
インストールされていない。

ログ8

sudo yum remove php71-php-intl.x86_64intlの削除
sudo yum install --enablerepo=remi-php71 php-intlintlのインストール
sudo service httpd restartで再起動
composer installのレスポンス

[vagrant@local profile]$ composer install
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump
> App\Console\Installer::postInstall
Set Folder Permissions ? (Default to Y) [Y,n]? Y
No Security.salt placeholder to replace.
[vagrant@local profile]$ 
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 3

checkベストアンサー

0

システム要件に含まれるintl PHP extensionがインストールされてないようなので、環境(OS等)に合わせてそれをインストールしてみてください。
インストール方法は検索すればいくらでも出てくると思います

追記(1/8 00:45)

質問者さんの場合、現状(php71-php-intl.x86_64をインストールして躓いている状態)を踏まえ、以下の手順で解決されることをおすすめします。
1. intlを再インストール

sudo yum remove php71-php-intl.x86_64
sudo yum install --enablerepo=remi-php71 php-intl


2. httpdを再起動
3. composer installを実行する

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/08 01:17

    ありがとうございます。

    実行結果をログ8に記載いたしました。

    ブラウザアクセスはできるようにはなりました。

    キャンセル

  • 2019/01/08 01:22

    > ブラウザアクセスはできるようにはなりました

    良かったです。
    申し訳ないですが、以降は全く別の問題となりますので、本質問はクローズして別途質問をオープンしていただけますでしょうか。

    キャンセル

  • 2019/01/08 23:15

    長々とありがとうございました!

    キャンセル

0

・q・)・・・・・ はぁ

PHP ファイル内で extension_loaded でチェックできるものや

composer などで ext-* 

でチェックされてるものは

PHPに拡張モジュールを組み込む必要があります。

エラーメッセージを検索すれば対応もでてるし、ここの過去質問にも大量にあったと思います。

PHP のインストールしたときの設定を忘れないでください。

多分今回の場合

su -  # もしくは sudo -s
yum --enablerepo=remi-php71 install php-intl
systemctl restart httpd
  1. 処理ユーザーを root にする
  2. php intl 拡張を remi-php71 Repositoryを有効にして インストール
  3. httpd 再起動 

これで解決します。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/06 17:38

    ご回答ありがとうございます。
    承知しました。

    キャンセル

0

find / -name php_intl.dllでphp_intl.dllを検索

.dllはWindowsの場合ですね
Linuxの場合は.soです。
見た記事がWindowsのだったのでしょう。。この手の環境間違いは良くあるので注意して記事を見た方がいいかもしれません!

.soがこのパスにいってないでしょうか?
/opt/remi/php71/root/usr/lib64/php/modules/intl.so

以下で探してみてください。

sudo find / -name intl.so

もしあればphp.iniにフルパスでextension=""を書いてみてください。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2019/01/07 15:56

    質問の回答が出来てないかもですね。。
    > 対象となる.iniファイルでは主にどういう事をすれば良いのでしょうか?

    iniファイルは単純にphp.iniを分割したファイルだと思えばいいです。

    以下をphp.iniに追記するのと/etc/php.d/intl.iniを新規作成して追記するのは同じことです。
    extension="/opt/remi/php71/root/usr/lib64/php/modules/intl.so"

    拡張.iniにはその拡張モジュールの読み込みと設定を書くことが多いです。

    キャンセル

  • 2019/01/07 23:31

    ご回答ありがとうございます!

    ご回答にあるようにfindでintl.soを検索しまして、そのログを追記しました。

    キャンセル

  • 2019/01/08 11:05 編集

    -

    キャンセル

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

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

同じタグがついた質問を見る