PHP での接続
割り当て済みの静的エンドポイントから通信します。環境変数で認証情報を読み込み、既定では HTTP プロキシサーバー経由で HTTPS にアクセスします。IP の取得や切り替え処理は含みません。
接続前の準備
実行するターミナル・コンテナー・配備先で PROXY_HOST、PROXY_PORT、PROXY_USERNAME、PROXY_PASSWORD を設定します。管理画面の現在の情報と対応ポートを使い、実際のパスワードをリポジトリー、ログ、フロントエンドへ含めないでください。
実行環境と依存関係
cURL 拡張を有効にした PHP 8 以降を使い、proxy_example.php に保存します。
sh
php proxy_example.php設定手順
php
<?php
function requiredEnv(string $name): string {
$value = getenv($name);
if ($value === false || $value === '') {
throw new RuntimeException('Missing environment variable: ' . $name);
}
return $value;
}
$host = trim(requiredEnv('PROXY_HOST'), '[]');
$host = str_contains($host, ':') ? '[' . $host . ']' : $host;
$port = filter_var(requiredEnv('PROXY_PORT'), FILTER_VALIDATE_INT,
['options' => ['min_range' => 1, 'max_range' => 65535]]);
if ($port === false) throw new RuntimeException('Invalid PROXY_PORT');
$scheme = getenv('PROXY_SCHEME') ?: 'http';
if (!in_array($scheme, ['http', 'socks5h'], true)) {
throw new RuntimeException('PROXY_SCHEME must be http or socks5h');
}
$handle = curl_init('https://ip123.in/ip.json');
curl_setopt_array($handle, [
CURLOPT_PROXY => $host,
CURLOPT_PROXYPORT => $port,
CURLOPT_PROXYTYPE => $scheme === 'socks5h' ? CURLPROXY_SOCKS5_HOSTNAME : CURLPROXY_HTTP,
CURLOPT_PROXYUSERNAME => requiredEnv('PROXY_USERNAME'),
CURLOPT_PROXYPASSWORD => requiredEnv('PROXY_PASSWORD'),
CURLOPT_NOPROXY => '',
CURLOPT_CONNECTTIMEOUT => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => true,
]);
$body = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
$errorCode = curl_errno($handle);
curl_close($handle);
if ($body === false || $status < 200 || $status >= 300) {
fwrite(STDERR, 'Request failed; cURL code: ' . $errorCode . '; HTTP status: ' . $status . PHP_EOL);
exit(1);
}
echo $body, PHP_EOL;PROXY_SCHEME の既定は http です。SOCKS5 では socks5h と対応ポートを指定し、接続先の名前をリモートで解決します。プロトコル変更による静的出口の切り替えはありません。
うまく接続できない場合
例だけ成功する場合は、実際の通信プロセス、SDK の設定、タイムアウト、再試行を確認します。TLS 証明書の検証は有効なままにしてください。例は認証情報を含むエラーを出力しません。調査ログも伏せ字にします。よくある質問を参照してください。