2013-01-22 30 views
0

自定义代理这是我在这里,所以是很好的第一个问题....html2canvas在PHP

我试图用html2canvas最终得到一个远程网站(用户提交的URL)的屏幕截图。

的问题是跨域安全功能。我无法从画布上读取,因为它被非现场资产锁定。

的解决方案是使用内置在库中的代理功能。

有一些github项目python和node.js版本,但我需要在PHP中做到这一点。

有关于如何实现该功能,以及如何得到它的工作,但没有真正解释如何使自己代理的很多话题。

我的问题是双重的,还有在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)"); 
+0

我有一个可行的解决方案。我会在8小时之后发布它...... FNG在这里。 –

回答

0

我已经找到了答案,我的问题。 代理功能接受一个带有url代理映像的jsonp元素。 他们确实需要保存在服务器上,而

这是生的,我稍后会更新,但在这里是html2canvas

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) . ")"; 
0

万一别人是找工作的PHP代理脚本一个简单的PHP代理,这里是一个很好的一个由“牛仔”本Alman链接:

Simple PHP proxy