私はvagrant boxでUbuntuを実行し、LAMPアプリケーションを正常に実行して開発しています。
mbstring
背景:Composerを使用してLaravelをインストールしようとすると、「要求されたPHP拡張機能がシステムにありません」というメッセージが表示されます。
私の/etc/php
ディレクトリには、7.0と7.1という2つのディレクトリがあります。
ただし、ファイルを実行するとphpinfo()
実行中というメッセージが表示されます。PHP Version 5.5.9-1ubuntu4.20
ただし、実行するとphp -v
バージョン7.0.14が実行中であることが示されます。
root@vagrant-ubuntu-trusty-64:/var/www/homebase/src# php -v
PHP 7.0.14-2+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.14-2+deb.sury.org~trusty+1, Copyright (c) 1999-2016, by Zend Technologies
質問:違いが見えるのはなぜですか?
答え1
phpinfo()
で提供されているApache PHPモジュールのバージョンを表示しますlibapache2-mod-php
。アップグレードする必要があります(または特定のバージョンのいずれかをインストールする必要がありますlibapache2-mod-php7.1
)。
答え2
違いが見えるのはなぜですか?
コンパイルmake
時() - PHPのソース設定は複数のSAPIビルドをトリガします。たとえばphp-cli
、php-cgi
その他のphp-debug
項目はコンパイル時の設定によって異なります。
注:パッケージマネージャは過去にコンパイル印刷を抑制する変更を行ったため(まだ適用されているかどうかはわかりません)、PHPのDebianまたはUbuntuパッケージのバージョンを使用してコンパイル時設定オプションにアクセスできない可能性があります。時間構成(使用量php-config
)を参照:https://lists.ubuntu.com/archives/ubuntu-server-bugs/2010-April/034631.html
そうでない場合、各 SAPI は PHP インタプリタで PHP コードを実行したいすべてのエントリの対話ポイントを提供するバイナリ実行可能ファイルです。make install
あるいは、パッケージの構成中に、checkinstall --pkgname=php-self-compiled
これらの SAPI はファイルシステムの他の場所に配置されます。
cli SAPI - 実行php -v
時に取得することは、または同じ場所に配置することができます。したがって、PHPスクリプトを実行しようとしているWebサーバーは、事前起動されたSAPIインスタンスを使用し、実行するスクリプトを渡します。このSAPIには独自のランタイム構成があります(以下を使用してサーバーを起動すると表示されます)。/bin/php
/usr/bin/php
php-cgi
strace
php
strace php -v
各SAPIは通常同じコンパイル操作で開始されるため、多くのコンパイル時の構成(たとえば、追加する拡張子、静的にコンパイルするかランタイムにリンクする必要があるかなど)とバージョン番号などを共有します。
これがPHP設定を調べようとしたときに動作が発生する理由です。どちらも同じプログラムだと思うほど似ていますが、ある意味ではまだ一貫性がありません。フードオブジェクトですが、構成が異なり、さまざまな環境を提供するように設計されています。たとえば、PHP-cli(作曲家が実行するプログラム)がエラーメッセージを印刷すると、エラーメッセージが端末に印刷されると予想されるため、次の場合にプレーンテキストを印刷します。php-fpm
または、php-cgi
同じエラーを印刷すると、一部のWeb関連プロセスとやり取りすると仮定するため、これをHTMLでラップします。 php-debugは、ポート9000でデータ接続をリッスンするなど、さまざまな方法で対話を再予測します。
答え3
私はこの問題がコマンドラインで使用されているphp-cgiと直接phpの違いに関連していると思います(確認するUbuntuボックスはありません)。 UbuntuがLAMPスタックをインストールするときにphpX-cgiを使用したようです。 cgi バージョンは php.ini ファイルを使用します。これは cwd へのパスを変更するため、問題をさらに複雑にします。