梅子CMSのHTML生成機能を作っていたとき、「ローカル環境で、プログラムを使って自分自身のドメインにアクセス」したらcURLのエラーになりました。
cURL error 6: Could not resolve host: xxx.local (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://xxx.local/
Laravelのhttp::get($url)でホスト名の解決ができなかったようです。
解決方法 – hostsに仮想ホスト名を追記する
hostsファイルに仮想ホストを追加します。場所は「/etc/hosts」でした。
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
127.0.1.1 xxx.local
書いて保存することで、cURLの「ホスト名が解決できない」エラーがなくなりました。
原因 – DNSサーバーに情報がない
「ホスト名が解決できない」は「ホスト名をIPアドレスに変換できない」問題です。
cURLする先が公開されている場所なら問題なく動作します。が、今回は「公開していないローカル開発環境にcURLでアクセス」なので、一般のDNSサーバーにはありません。自分だけで使っているものですから。
自分だけが使っている環境のではDNSサーバーに解決依頼するのではなく、自分のhostsファイルで解決することになります。
hostsファイルは名前解決するときに最優先で参照するものですので、ここに書いてあれば大丈夫です。
file_get_contentsで取得できない場合でも同じようなエラーが起きるかと思います(試していません)。
ちょっと使うだけならオプションで実行するのも有効
一時的にcURLをするなら、コマンドオプション「–resolve」をつければこの名前解決問題を回避できるようです。
--resolve ホスト名:ポート番号:IPアドレス アクセスするURL
--resolve xxx.local:80:127.0.0.1 http://xxx.com/test
動作環境
uname -a
Linux raspberrypi 6.1.21-v8+ #1642 SMP PREEMPT Mon Apr 3 17:24:16 BST 2023 aarch64 GNU/Linux
nginx -v
nginx version: nginx/1.18.0
php -v
PHP 8.4.4 (cli) (built: Mar 9 2025 16:57:34) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.4.4, Copyright (c) Zend Technologies
with Zend OPcache v8.4.4, Copyright (c), by Zend Technologies
with Xdebug v3.4.1, Copyright (c) 2002-2025, by Derick Rethans
- ローカルの開発環境
- Nginxの仮想ホスト
を使用していました。