2010-08-31 86 views
1

在過去的十五天,我打破了我的頭來解決這個問題。我有一個連接到遠程mysql服務器的PHP應用程序,但應用程序不能直接訪問遠程mysql服務器,它必須通過socks代理連接。請任何人都可以幫我解決這個問題。php - 襪子代理

在此先感謝。

+0

哪個mysql軟件包你使用'pdo_mysql','mysqli','mysql'嗎? – prodigitalson 2010-08-31 16:25:46

+0

我正在使用PDO,我也可以使用其他人。 – Kaartz 2010-08-31 16:35:59

回答

0

我想你需要通過SOCKS代理設置端口轉發。用這個,你打開一個本地端口(例如在3306上),它通過SOCKS代理轉發到遠程主機和端口(數據庫主機:3306)的連接。你在後臺運行,這一點,使PHP連接到本地主機:3306(然後將被轉發/隧道傳輸到databasehost:3306)

+0

如何做到這一點?請你能幫助我嗎? – Kaartz 2010-08-31 16:51:19

+0

如果您可以設置與該機器的SSH連接並讓SSH轉發該端口,將會更容易(也更安全)。這對你來說是一種選擇嗎? – schuilr 2010-08-31 18:31:15

+0

我有權訪問mysql服務器,但我無法SSH進入該服務器。 – Kaartz 2010-08-31 19:19:50

2

我一直在尋找,看看別人做了這個,但我想不會。我爲PHP提供了SOCKS4a的接口。這裏是。

function fsocks4asockopen($proxyHostname, $proxyPort, $targetHostname, $targetPort) 
{ 
    $sock = fsockopen($proxyHostname, $proxyPort); 
    if($sock === false) 
     return false; 
    fwrite($sock, pack("CCnCCCCC", 0x04, 0x01, $targetPort, 0x00, 0x00, 0x00, 0x01, 0x00).$targetHostname.pack("C", 0x00)); 
    $response = fread($sock, 16); 
    $values = unpack("xnull/Cret/nport/Nip", $response); 
    if($values["ret"] == 0x5a) return $sock; 
    else 
    { 
     fclose(sock); 
     return false; 
    } 
} 

它不完全是任何形式的最終產品,但它可以讓你打開從PHP一個SOCKS4A代理的連接,並得到相同類型的插槽,你會用的fsockopen