本文にスキップ

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 証明書の検証は有効なままにしてください。例は認証情報を含むエラーを出力しません。調査ログも伏せ字にします。よくある質問を参照してください。