コーディング作業の途中、どこからともなく現れるように見える、複雑な例外に遭遇することは珍しいことではありません。次のシナリオを考えてみましょう:
PDO を使用してデータベースに接続しようとしていますが、次の不可解なエラー メッセージが表示されます:
警告: PDO::__construct(): [2002] そのようなファイルまたはディレクトリはありません (unix:///tmp/mysql.sock 経由で接続しようとしています) ...
指定された TCP 接続パラメータにもかかわらず、システムは Unix ソケット経由で接続しようとしているようです。安定したデータベース接続を確立するには、この問題を修正することが不可欠です。では、何が問題だったのでしょうか?
中心的な問題は、ホスト名「localhost」の解釈にあります。デフォルトでは、MySQL クライアント ライブラリは、「localhost」が TCP ホスト名ではなく Unix ソケットを指すと想定します。 TCP 接続を明示的に指定するには、ホスト名として「localhost」の代わりに IP アドレス「127.0.0.1」を使用する必要があります。
あるいは、unix_socket パラメーターを使用して、DSN で Unix ソケット パスを明示的に指定することもできます。
この問題を解決するには、次のことを確認してください。正しいホスト名 (「127.0.0.1」) を使用しているか、DSN で Unix ソケット パスを明示的に指定していることを確認してください。さらに、ソケット パスが php.ini ファイルで正しく定義されているかどうかを確認します (該当する場合)。
IP アドレスを使用した DSN の例:
<code class="php">$dsn = 'mysql:host=127.0.0.1;port=3306;dbname=test';</code>
Unix ソケット パスを使用した DSN の例:
<code class="php">$dsn = 'mysql:unix_socket=/tmp/mysql.sock;dbname=test';</code>
これらを実装することで調整を行うと、安定したデータベース接続を確立し、「そのようなファイルまたはディレクトリはありません」エラーを効果的に軽減できます。
以上がTCP 経由の PDO 接続が、Unix ソケットを参照する「そのようなファイルまたはディレクトリはありません」というエラーで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。