0

基本的に私がやりたいのは、ユーザーがそこにリンクを共有できるようにすることです。私のサイトのコメントや投稿は、ユーザーが外部リンクをクリックしたときに私のサイトにアクセスして、話すことで私のページ内のページを開くようにすることです。 。フェイスブックのようにちょっと。サイト全体が表示されますが、開いたばかりのサイトの上部にFacebookの小さなナビゲーションバーが残ります。

この動作をコピーして、無効または悪意のある場合にフラグを立てるユーザーが共有するリンクをモデレートできるようにします。だから私はそれらをオフにすることができます。現在、リンクをキャッチして、ユーザーごと、リンクごとに保存しているので、必要に応じてモデレートできます。しかし、私のユーザーが現在サイトにフラグを立てるには、自分のサイトに戻って、面倒なプロセスに従う必要があります。私がやりたいのは、ユーザーが望む場合に、基本的にフラグを立てるオプションを備えたミニナビゲーションを提供することです。また、私のサイトに戻る直接リンクを提供する手段でもあります。

だから私は何が最善の方法かを理解しようとしています。cURLのようなものを介してページのコンテンツ全体をプルする必要がありますか、それとも設定のようなフレームに含める必要があります。または、それを行うための最良の方法は、デスクトップブラウザとモバイルブラウザの両方に優しいクロスプラットフォームとクロスブラウザを話すマナーです。私がcURLのようなことをすると、誰かが私を悪意を持って台無しにすることを予見できます。彼らがしなければならないのは、どこかに下品なコードをダンプすることだけです。 、大きなリスクがあるかどうかを知るのに十分な頻度でcURLを使用していません。

それで、あなたは何を積み重ねると言いますか?ある種のcURLメソッド、フレーム、その他?誰かが私を指すことができる良い例を持っていますか?

4

1 に答える 1

0

フレームを使用すると、一部のWebサイトがフレームから飛び出す可能性があります。CURLを使用する場合は、すべてのURL(リンク、画像、スクリプト、css)を解析し、ユーザーをサイト内に留めておきたい場合は、それらを独自のURLに変更する必要があります。したがって、CURLの方が信頼性が高いように見えますが、多くの作業を行う必要があり、サイトにより多くの帯域幅が生成されます。CURLベースのソリューションが必要な場合は、ネットでWebプロキシの例を探すことができます。

開始するための基本的な作業コードは次のとおりです。

$url = isset($_GET['url']) ? $_GET['url'] : 'http://amazon.co.uk/'; 
$html = file_get_contents2($url);


$doc = new DOMDocument();
@$doc->loadHTML($html);
$xml = simplexml_import_dom($doc);

$host = 'http://' .parse_url($url, PHP_URL_HOST);
$proxy = 'http://' . $_SERVER['SERVER_NAME'] . $_SERVER['SCRIPT_NAME'] . '?url=';

$items['a']         = 'href';
$items['img']       = 'src';
$items['link']      = 'href';
$items['script']    = 'src';

foreach ($items AS $tag=>$attr)
{
    $elems = $xml->xpath('//' . $tag);
    foreach ($elems AS &$e)
    {
        if (substr($e[$attr], 0, 1) == '/')
        {
            $e[$attr] = $host . $e[$attr];
        } 
        if ($tag == 'a')
        {
            $e[$attr] = $proxy . urlencode($e[$attr]);
        }   
    }
}

$xmls = $xml->asXml();
$doc->loadXML($xmls);
$html = $doc->saveHTML();
echo $html;


function file_get_contents2($address)
{   
    $useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1"; 

    $c = curl_init(); 
    curl_setopt($c, CURLOPT_URL, $address);
    curl_setopt($c, CURLOPT_USERAGENT, $useragent);     
    curl_setopt($c, CURLOPT_HEADER, 0);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($c, CURLOPT_FRESH_CONNECT, 1);
    if (!$data = curl_exec($c)) 
    {
        return false; 
    } 

    return $data;
}
于 2012-05-20T14:22:03.040 に答える