1

セットアップ:1。LAMPサーバー上のJoomla 1.5 Webサイト(CentOS 5.2 / Apache 2.2 / PHP 5.2.9 / mysql 5)2.通貨変換用のJoomlaモジュールが追加されました。モジュールはグーグルファイナンスを使用して通貨3を変換します。LAMPスタックはプロキシの背後にあるイントラネットにあります。http_proxy、yum.confプロキシのサーバー環境変数がセットアップされ、カーネルが正常に更新されました。4. phpinfo()は、curlがインストールされていることを明確に示しています。5。「2」で説明したモジュール。3つのメソッドがgooglefinance、fread()、file_get_contents()に接続し、cURLライブラリを使用できるようにします。ボックスはプロキシの背後にあるため、cURLライブラリメソッドのみが機能するはずです。

問題:WAMPスタックでは、curlライブラリメソッドは正常に機能します。ただし、ランプスタックでは、モジュールはgoogle Financeと通信できず、接続がタイムアウトしたことを示すエラーがスローされます。わかりやすくするためのコードを次に示します。

if (isset($_GET['process'])) {        
$url = "http://finance.google.com/finance/converter?a={
$_GET['a']}&from={$_GET['from']}&to={$_GET['to']}";
$app->get_page($url);
$data = $app->process();
}  

function get_page($url) {
if ($url!='') {
echo $url;
$ch = curl_init ();
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_URL, $url);
                    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
                    curl_setopt($ch, CURLOPT_BINARYTRANSFER, $this->binary);
                    $this->html = curl_exec($ch);
                    curl_close($ch);
            }
    }

curl_setopt($ ch、CURLOPT_PROXY、 '10.x.xx.xx:8080');を追加してみました。curl_init()の後、役に立たない。libcurlとphpを有効にしてapacheをコンパイルしましたが、次のことを知っておく必要があります。1. phpに送信要求(ストリーム)をプロキシ経由でルーティングするように指示する方法は?2.プロキシ名とポートを使用してcURL(libcurl)を構成する必要がありますか?3. iptablesをオフにしたので、Linuxファイアウォールはもう見えませんが、送信要求を許可するために他に何かする必要がありますか?4.すべてのコンテンツでLAMPスタックのブロックが解除されるようにプロキシを設定しました。cURLはコマンドラインからは機能しますが、php/apacheからは機能しません。私は何が欠けていますか?環境変数はありますか?スイッチはありますか?

よろしくお願いします。

Shrinivas

4

1 に答える 1

1

ポート 1090 でローカル SOCKS5 プロキシを使用する例を次に示します。

<?php
$url = 'www.whatismyip.com/automation/<your unique whatismyip hash>';

function get_page($url, $proxy=true) {
    if ($url!='') {
        $ch = curl_init ();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
        if ($proxy) {
            curl_setopt($ch, CURLOPT_PROXY, 'localhost');
            curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
            curl_setopt($ch, CURLOPT_PROXYPORT, 1090);
        }
        $html = curl_exec($ch);
        curl_close($ch);
        return $html;
    }
}


var_dump(get_page($url));
var_dump(get_page($url, false));

curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);代わりにandを使用することをお勧めしますcurl_setopt($ch, CURLOPT_PROXYPORT, 8080);

于 2009-09-25T14:42:10.130 に答える