0

これが私の最初の質問です。

html2canvasを使用して、最終的にリモートサイトのスクリーンショット(ユーザーが送信したURL)を取得しようとしています。

問題は、クロスドメインセキュリティ機能です。オフサイトのアセットによってロックされているため、キャンバスから読み取ることができません。

解決策は、ライブラリに組み込まれているプロキシ機能を使用することです。

pythonとnode.jsバージョンのgithubプロジェクトがいくつかありますが、phpで実行する必要があります。

この機能を実装する方法とその機能を実現する方法については多くのトピックがありますが、独自のプロキシを作成する方法を実際に説明しているものはありません。

私の質問は2つありますが、PHPに既存のソリューションはありますか?そうでない場合は、自分で作成することについていくつか質問があります。1.)プロキシの出力形式は何ですか。jsonオブジェクト?レンダリングされた画像?base64でエンコードされたデータ文字列?2.)これらのファイルはサーバー上に保持する必要がありますか、それとも単にレンダリングしてから消える(上書きする)ことができますか?

これは大まかに私が考えていることです:

$img_url = urldecode($_GET['url']);
$img_data = base64_encode(file_get_contents($img_url));
//shouldn't need it since it's not cross domain now, but a CORS header could be inserted
header('content-type: application/json; charset=utf-8');
json_encode("{$_GET['callback']}($img_data)");
4

2 に答える 2

0

私の質問に対する答えを見つけました。プロキシ機能は、プロキシされた画像へのURLを持つjsonp要素を受け入れます。そして、それらはサーバーに保存する必要があります

これは生です。後で更新しますが、これがhtml2canvas用の動作するPHPプロキシスクリプトです。

session_start();
//parse the url sent by the proxy function
//TODO: scrub the input
$img_url = urldecode($_GET['url']);

//test file type
//TODO: test for other cases that don't have a '.'
$pos = strrpos($img_url, '.', -1);
$ext = substr($img_url, $pos);

//set a dir for this request
function randomNumber()
{
    return substr(sha1(rand()), 0, 15);
}

if (!isset($_COOKIE["img_path"]))
{
    do{
        $random = randomNumber();
    }while (is_dir('images/' . $random));

    setcookie("img_path", $random, time()+3600);

} else {
    $random = $_COOKIE["img_path"];
}

is_dir('images/' . $random) ? '' : mkdir('images/' . $random, 0755);

//TODO:catch cases where a filename isn't the last element
$basename = basename($img_url);

$file = 'images/' . $random . '/' .  $basename;

//save the image
copy($img_url, $file);

//TODO: don't hardcode the url
$test_location = "http://osc.test/html2canvas2/" . $file;

header('Content-Type: application/javascript');

echo  "{$_GET['callback']}(" . json_encode($test_location) . ")";
于 2013-01-24T01:41:57.073 に答える
0

他の誰かが単純なPHPプロキシを探している場合は、「Cowboy」BenAlmanによる素敵なプロキシへのリンクを次に示します。

シンプルなPHPプロキシ

于 2013-05-20T16:56:10.583 に答える