使用以下方法在PHP中检索文件我继续点击反链接安全图片而不是我正在寻找的图像。奇怪的是,当我在Firefox / IE或者Internet Download Manager中手动输入url时,我确实得到了正确的文件,所以到目前为止我尝试过的方法一定有问题。
file_put_contents:
file_put_contents($localpath, file_get_contents($remoteURL));
以下功能也不起作用:
function save_image($inPath,$outPath)
{ //Download images from remote server
$in= fopen($inPath, "rb");
$out= fopen($outPath, "wb");
while ($chunk = fread($in,8192))
{
fwrite($out, $chunk, 8192);
}
fclose($in);
fclose($out);
}
save_image($remoteURL,$localpath);
和fopen()
$tag = fopen($remoteURL, 'rb');
if($tag){
while(!feof($tag)) {
$imgt = $imgt . fread($tag, 1024);
}
}
和imagecreatefromjpeg()没有做到这一点
function LoadJpeg($imgname)
{
/* Attempt to open */
$im = @imagecreatefromjpeg($imgname);
/* See if it failed */
if(!$im)
{
/* Create a black image */
$im = imagecreatetruecolor(150, 30);
$bgc = imagecolorallocate($im, 255, 255, 255);
$tc = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 150, 30, $bgc);
/* Output an error message */
imagestring($im, 1, 5, 5, 'Error loading ' . $imgname, $tc);
}
return $im;
}
我还有其他选择吗?
答案 0 :(得分:1)
如果这不是您的网站,那么您几乎无能为力。该网站已设置为阻止人们删除图片或在链接中使用图片。
但是,您可以使用curl语句而不是file_get_contents,如果不起作用,请使用curl向请求发送一些浏览器标头。
如果这是您的网站,如果您在cPanel上运行,则安全部分中有一个选项。我忘了确切的位置。
答案 1 :(得分:1)
由于您写道allow_url_fopen
为on
并且功能不起作用,您可以试试卷曲。
function save_image($inPath,$outPath){
$ch = curl_init ($inPath);
curl_setopt($ch, CURLOPT_HEADER, 0); // required
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); // required for images
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // maybe redirect on other side?
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en; rv:1.9.2.3) Gecko/20100401 Firefox/3.6.3'); // or user agent checks?
$rawdata=curl_exec($ch);
curl_close ($ch);
if(file_exists($outPath)){
@unlink($outPath);
}
$fp = fopen($outPath,'x');
fwrite($fp, $rawdata);
fclose($fp);
}
答案 2 :(得分:0)
他们可能有一些检查,他们可能会得到用户代理,引用。尝试将此用于fake浏览器的行为