勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHPにてhosts設定を行った上で他サイト・サーバにアクセスする方法

   2023/08/12  PHP

開発中の案件だとhosts設定を行ってサーバにアクセスする、ということがある。作業用PC→開発用サーバ間のアクセスだと普通にwindowsのhostsファイルを書き換えれば良いが、別サーバ→開発用サーバ間のアクセス(file_get_contentsとかcurlでのアクセス)が必要になり困った。以下に対応方法をメモ。

 

対応方法

cURLのCURLOPT_RESOLVEを使用する

<?php
$data = [];

$ch = curl_init();

$hosts_opt = array(
    'hoge.com:443:111.222.333.444', //接続先のドメイン:ポート番号:IPアドレスの順に記述する
    'www.hoge.com:443:111.222.333.444',
);

curl_setopt($ch, CURLOPT_RESOLVE, $hosts_opt);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_URL, 'https://hoge.com/hogehoge.php');
$response = curl_exec($ch);

CURLOPT_RESOLVEについてはリファレンスを参照。

注意点

コメントにも書いたがhosts設定部分は「接続先のドメイン:ポート番号:IPアドレス」の順に設定する。また、ポート番号はhttp接続の場合は80、https接続の場合は443になるので注意すること。

 

所感

とりあえず解決したのは良いものの本番環境実装時はhosts設定を外す必要が出てくると思われ、そうなると本番用のコードも必要になってきそうでちょっと難儀かも。本番orテスト環境フラグを用意しておいて分岐させるような形で書いた方が無難かもしれない。

 

参考サイト

https://www.softel.co.jp/blogs/tech/archives/6082

 - PHP

  関連記事

Codeigniter3で外部ファイル(CSS / JS)の読み込みと共通パーツ化する方法

CodeigniterでCSSやJSファイル等の外部ファイル読み込みたかった。ま ...

レンタルサーバでPHPのsystem関数やexec関数が使用できずにエラーが出力される

レンタルサーバ上でPHPのsystem関数を実行しようとすると「Fatal er ...

PHPでURLを解析してクエリ(GETパラメータ)を抽出する方法

formからGETで送信したクエリ(パラメータ)を、受信した側で抽出し、キーと値 ...

PHPで画像のフォーマット(拡張子)の変換

画像のアップロードでjpg/png/gif形式を受け付けつつ、 最終的にjpgで ...

PHPで土日祝日及び営業時間を考慮した上で翌○営業日を計算する方法

PHPで翌○営業日を計算したい。例えば本日が2021/04/15で翌5営業日を計 ...