这是我在这里的第一个问题,所以很好....
我正在尝试使用html2canvas最终获取远程站点的屏幕截图(用户提交的网址)。
问题是跨域安全功能。我无法从画布中读取,因为它被非现场资产锁定。
解决方案是使用库中内置的代理功能。
有一些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 :(得分: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) . ")";
答案 1 :(得分:0)
如果其他人正在寻找一个简单的PHP代理,这里有一个链接到一个很好的“Cowboy”Ben Alman: