2015-02-19 1 views
0

Я пытаюсь скопировать кучу файлов ссылок на файлы изображений в данных mysql с одного сервера на другой, что похоже на работу cron, выполняемую в фоновом режиме, которая проверяет для внешних ссылок и скопировать его на сервер. Несколько ссылок, которые показывают, когда просматривается вручную, работают, но когда я пытаюсь скопировать файл через php-код, ничего не происходит. Он просто выводит пустую строку.Невозможно скопировать изображение с внешнего URL-адреса на мой сервер

Ниже приведены несколько ссылок, которые я пытаюсь скопировать на свой сервер.

  1. http://crm.propspace.com/watermark?c_id=1646&l_id=2300187&aid=1444765&id=14181282100524636&image=09_12_2014-16_53_34-1646-b15d08432d253ac710dc7bea47bf67c9.png
  2. http://crm.propspace.com/watermark?c_id=1646&l_id=2257894&aid=1444765&id=14169037278702926&image=25_11_2014-12_29_24-1646-67974878d8b7abd86d86c93527e15ebd.jpg
  3. http://crm.propspace.com/watermark?c_id=1646&l_id=2257894&aid=1444765&id=14169037278702926&image=25_11_2014-12_29_31-1646-0cf46efe5b2f89214001a2e050353736.jpg
  4. http://crm.propspace.com/watermark?c_id=1646&l_id=2282465&aid=1444765&id=14176053840492751&image=03_12_2014-16_36_29-1646-46cd5f89122e6899f8185e20bd942dd7.png

Звенья открывает и показывает изображение, но когда я пытаюсь скопировать через 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

plz проверить сейчас я упомянул методы, которые я использовал ... –

+0

если у вас проблема с размещением контента на сервере, тогда это может привести к разрешению проблем, значит у вас нужно установить 777 для папки, где вы пытаетесь сохранить изображение на сервере. –

ответ

0

Вы пытаетесь загрузить общие изображения, которые доступны только в том случае, если вы вошли в систему. Вам придется «войти» с вашим сервером, и тогда вы сможете это сделать. Я сделал это один раз с cURL.

+0

ну эти образы можно получить без входа ... даже я попытался использовать cURL, но я получаю пустую строку/данные ... –

+0

Мы не можем получить доступ к вашим URL-адресам. Это 0 размерных изображений. Кроме того, вы, похоже, не используете файлы cookie в своем завитке и не запрашиваете логин. – Daniel

+1

только что нашел вещь, которая делает изображение, чтобы показать размер 0. Он доступен только из сетей Дубая или ОАЭ.если я попытаюсь подключиться к другому серверу через vpn, даже если я получаю одинаковое изображение размера 0 ... есть ли способ преодолеть это? –

0

Ну, это может иметь много причин. Получали ли вы какие-либо предупреждения/ошибки? Возможно, «allow_url_fopen» в вашем php.ini установлен в «off»

Не могли бы вы предоставить пример кода?

+0

Я сделал проверку на «allow_url_fopen», и он находится в состоянии «Вкл.» ... И никаких предупреждений или ошибок, то есть странная часть ....: D –

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(); 
      }  
    }