在将URL从URL复制到远程服务器时获取损坏的映像文件

时间:2016-11-20 01:31:54

标签: php server

尝试了所有可能的方法,将图像从URL复制到远程服务器。

这就是我在做的事情:

$fp = fopen("photo/pqr.png", "w");
$url = "http://raghavrao.com/homeimage/reasontorely/infra1.png";

$handle = curl_init();

curl_setopt($handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($handle, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2 GTB5');
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($handle, CURLOPT_FAILONERROR, true);
curl_setopt($handle, CURLOPT_FILE, $fp);
curl_exec($handle);
curl_close($handle);
fclose($fp);

它也尝试过这样:

$content = file_get_contents("http://raghavrao.com/homeimage/reasontorely/infra1.png");
//Store in the filesystem.
$fpe = fopen("photo/image.png", "w");
fwrite($fpe, $content);
fclose($fpe);

也喜欢:

copy('http://raghavrao.com/homeimage/reasontorely/infra1.png', 'photo/file.png');

在所有3种方式中,我在服务器上获取图像,但图像已损坏,并且通过所有3种方法复制的图像大小为857字节。

帮助!

我有" allow_url_fopen = On"在我的php.ini文件中也是。

我有时需要通过HTTPS复制图像。

编辑:

在文本编辑器中打开图像文件显示以下内容:

<html><body><script type="text/javascript" src="/aes.js" ></script><script>function toNumbers(d){var e=[];d.replace(/(..)/g,function(d){e.push(parseInt(d,16))});return e}function toHex(){for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);return e.toLowerCase()}var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("79970eac6e958aea6b0d6577c65d6dc2");document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; location.href="http://raghavrao.com/homeimage/reasontorely/infra1.png?i=1";</script><noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript></body></html>

1 个答案:

答案 0 :(得分:0)

如果没有大量的工作,你将无法做到这一点。

如果您查看使用CURL获取的857字节文件,您将看到以下内容(我将其格式化以便于阅读):

<html>
<body>
<script type="text/javascript" src="/aes.js" ></script>
<script>
function toNumbers(d){
    var e=[];
    d.replace(/(..)/g,function(d) { e.push(parseInt(d,16)) });
    return e
}
function toHex(){
    for(var d=[],d=1==arguments.length&&arguments[0].constructor==Array?arguments[0]:arguments,e="",f=0;
    f<d.length;f++)e+=(16>d[f]?"0":"")+d[f].toString(16);
    return e.toLowerCase()
}
var a=toNumbers("f655ba9d09a112d4968c63579db590b4"),b=toNumbers("98344c2eee86c3994890592585b49f80"),c=toNumbers("9f38f758d71e0c6e0e935c8c90e0cce1");
document.cookie="__test="+toHex(slowAES.decrypt(c,2,a,b))+"; 
expires=Thu, 31-Dec-37 23:55:55 GMT; path=/"; 
location.href="http://raghavrao.com/homeimage/reasontorely/infra1.png?i=1";
</script>
<noscript>This site requires Javascript to work, please enable Javascript in your browser or use a browser with Javascript support</noscript>
</body></html>

当您的浏览器加载它时,它会进行一些数学计算,然后设置一个具有适当值的cookie,然后重定向请求并提供图像。这是网站检查您是否实际使用网络浏览器查看网站的一种方式。

您可以在PHP中重写JavaScript代码,在CURL请求中设置相应的cookie,然后获取您的图像。

附加说明:JavaScript中生成的数字根据您的源IP更改。

相关问题