次のコラム composer チュートリアル では、Composer コマンドの実行時に応答がない問題 (open_basedir の問題) の解決策を紹介します。必要としている!
環境
CentOS 7
Nginx 1.12.0
PHP 7.1.6
問題
元々は正常に動作していましたが、新規プロジェクトを作成する必要があったため、Composerを使用してプロジェクトを作成しましたが、何も表示されず、連続してプロジェクトが作成されませんでした。他のプロジェクトの作成を実行しましたが、こちらも応答がありませんでした。 -vvv オプションを追加しても結果に変化がないため、composer -h、composer self update などのコマンドを実行しようとしましたが、プロンプト メッセージが表示されません。
Composer 関連のコマンドを再度実行した後、echo $? を実行したところ、結果は 255 でした。
Composer をインストールしようとしたところ、open_basedir に関するエラー メッセージが表示されました。すぐに問題がわかりました。今回は新しいプロジェクトを作成する前に、php.ini の open_basedir オプションを設定しました。値はプロジェクトです。ディレクトリと /tmp/ の場合、Composer の作業ディレクトリはプロジェクト ディレクトリです。
open_basedir にコメントを付けて PHP を再起動した後、Composer を使用することに問題はありませんでした。しかし、それでも open_basedir を設定したいのですが、これが答えです。
Nginx の使用
外部リクエスト サーバーの解析であっても、ターミナル PHP コマンドであっても、php.ini ファイルが使用されますが、Composer の実行はローカルです。システムに。つまり、Nginx から設定した場合、ローカルでの Composer の実行は影響を受けません。
Nginx が設定を追加しました
fastcgi_param PHP_ADMIN_VALUE "open_basedir=项目目录/:/tmp/";
Nginx と PHP を再起動した後、ターミナルで Composer を実行しようとしても例外は発生しません。 Nginx の設定で open_basedir を設定する際の注意点が 2 つあります。
プログラムがフレームワークの場合、$document_root/ を記述することはお勧めできません。これはルート値であり、この値はフレームワークへの入り口のディレクトリであり、動作中にエラーが発生します。 。理解できれば、$document_root/ と記述することもできますが、Web サイト全体が配置されているディレクトリを追加することを忘れないでください。
ディレクトリの最後に「/」を忘れずに追加してください。たとえば、次のように記述します。 「/tmp」ではなく「/tmp/」、「/tmp」と書けば「/tmp1」も許容範囲内です
php.iniを使いたいだけです
当たり前のことですが、Composer コマンドの実行に必要なディレクトリは、プロジェクト ディレクトリ (Composer コマンドを実行する作業ディレクトリでもあります) と tmp ディレクトリだけではありません。結果は見つかりませんでした。最後に、アイデアを整理し、php.ini に open_basedir の元の値を追加しました。Composer コマンドが配置されているディレクトリと Composer ファイル ディレクトリを見つけた後、PHP を再起動すると Composer が正常に動作します。
以上がComposer コマンドの実行時に応答しない問題の解決 (open_basedir 問題)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。