我试图将一堆图像文件链接存储在mysql数据中,从一台服务器复制到另一台服务器,有点像在后台运行的cron作业,它检查外部链接并将其复制到服务器。手动查看时显示的链接很少但当我尝试通过php代码复制文件时没有任何反应。它只输出空字符串。
以下是我尝试复制到服务器的几个链接。
链接打开并显示图像,但是当我尝试通过php代码复制时,我只得到空数据。我尝试了所有类型的方法来复制图像,如
1. copy()
2. fopen()
3. file_get_contents()
4. curl_init()
但一切都以空字符串或数据结束。任何人都可以帮我解决这个问题。
用于检索图像文件的方法
$img_link = "image from link";
$upload_link = "image to save link";
Method 1
------------------------------------------------------------------------------
$img_cont = file_get_contents($img_link);
file_put_contents($upload_link, $img_cont);
Method 2 - (This method gives me an image with 0 bytes)
------------------------------------------------------------------------------
copy($img_link, $upload_link);
Method 3
------------------------------------------------------------------------------
$img_file = fopen($img_link, 'r');
$img_data = '';
while($chunk = fread($img_file, 8192))
$img_data .= $chunk;
fclose($img_file);
Method 4
------------------------------------------------------------------------------
$img_stream = fopen($img_link, 'r');
$img_data = stream_get_contents($img_stream);
fclose($img_stream);
Method 5
------------------------------------------------------------------------------
$referer = "http://www.propspace.com/"
$headers = array(
'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg, image/png',
'Connection: Keep-Alive',
'Content-type: application/x-www-form-urlencoded;charset=UTF-8'
);
// Initialize cURL Connection
$conn = curl_init();
// Set cURL Options
curl_setopt($conn, CURLOPT_URL, $img_link);
// Add Headers
if(is_array($headers) && count($headers) > 0){
curl_setopt($conn, CURLOPT_HTTPHEADER, $headers);
}
// Add References
if($reference != "")
curl_setopt($conn, CURLOPT_REFERER, $reference);
// Other Options
curl_setopt($conn, CURLOPT_RETURNTRANSFER, true);
curl_setopt($conn, CURLOPT_BINARYTRANSFER, true);
curl_setopt($conn, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($conn, CURLOPT_FAILONERROR, true);
curl_setopt($conn, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($conn, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($conn, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
curl_setopt($conn, CURLOPT_HEADER, 0);
curl_setopt($conn, CURLOPT_FOLLOWLOCATION, 1);
// Execute Request
$img_cont = curl_exec($conn);
谢谢。
更新:刚刚发现一个让图像显示0大小的东西。它只能从迪拜或阿联酋网络访问。我怎么能让它工作呢?
答案 0 :(得分:0)
您尝试下载只有在正确登录后才能访问的通用图像。你必须登录"登录"与您的服务器,然后您可能能够这样做。我用cURL做了一次。
答案 1 :(得分:0)
那可能有很多原因。你有没有得到任何警告/错误? 也许" allow_url_fopen"在你的php.ini中设置为" off"
你能提供一些示例代码吗?
答案 2 :(得分:0)
我使用此方法复制外部图像
public function update_pics($url)
{
$image_array=explode('/',$url);
if($image_array[0]!='http:')
{
$url='http:'.$url;
}
$image_name=strtolower($image_array[count($image_array)-1]);
$supported_image = array(
'gif',
'jpg',
'jpeg',
'png'
);
$ext = strtolower(pathinfo($image_name, PATHINFO_EXTENSION));
if (!in_array($ext, $supported_image)) {
$image_name=$image_name.'.jpg';
}
if(copy($url, './uploads/'.$image_name))
{
$target = 'uploads/';
$config['image_library'] = 'gd2';
$config['source_image'] = $target.$image_name;
$config['create_thumb'] = FALSE;
$config['maintain_ratio'] = FALSE;
$config['width'] = $width;
$config['height'] = $height;
$config['new_image'] = $target.$image_name;
$this->load->library('image_lib', $config);
$this->image_lib->initialize($config);
$this->image_lib->resize();
$this->image_lib->clear();
}
}