我正在使用下面代码的函数将图像从url复制到我的web目录,但我不知道为什么有些图像不是100%复制的。
以下是我的网络目录http://www.aligatoor.pl/uploads/deals/2632b3802e8ed7abe83788dab605bbf7.jpg
中错误图片的副本这里是原始图片http://infobuzer.pl/img/r4d3k/voucher/50e35a84c9038.jpg
function upload_file($file_path)
{
$deal_img_data=file_get_contents($file_path);
$file_name=md5($file_path).".jpg";
if(!file_exists($file_name))
{
$file=fopen($file_name,"w+");
fwrite($file,$deal_img_data);
}
}
我也尝试使用CURL,但它仍然没有正确复制一些图像。
CURL代码:
$ch = curl_init ($url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
$raw=curl_exec($ch);
curl_close ($ch);
$saveto=md5($url).".jpg";
if(file_exists($saveto)){
unlink($saveto);
}
$fp = fopen($saveto,'x');
fwrite($fp, $raw);
fclose($fp);
答案 0 :(得分:0)
您的功能正常
只需删除旧图片并尝试重新下载。
还添加:
fclose($file);
答案 1 :(得分:0)
我不确切知道你问题的原因,但我遇到了类似的文件处理问题,我用这种方法解决了这个问题:
if( $handle =fopen($filename, "wb+") ){
if(flock($handle, LOCK_EX))
{
fseek($handle, 0);
ftruncate($handle, 0);
fwrite($handle, $newcontent);
fflush($handle);
flock($handle, LOCK_UN);
}
fclose($handle);
}
编辑:为了处理图像,最好使用imagejpeg()和imagecreatefromjpeg()等图像功能,以获得更好的安全性和准确的结果。
实施例
$im = @imagecreatefromjpeg($image);
if(is_bool($im)){
die("Invalid Image detected!");
}
else{
if(!imagejpeg($im, $newpath)){
die("Image not saved!");
}
else{
die("Image saved!");
}
}
Edit2:添加此项而不是使用file_get_contents()
<?php
$handle = fopen($file_path, "rb");
$deal_img_data = stream_get_contents($handle);
fclose($handle);
?>
答案 2 :(得分:0)
我找到了怎么做的方法,所以如果有人遇到类似的问题,他可以尝试使用这个功能:
function grab_image($url){
$ch = curl_init ($url);
$saveto = md5($url).".jpg";
$fp = fopen($saveto,'wb');
curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);
}
答案 3 :(得分:-2)
尝试在函数开头添加set_time_limit(0)