Сохраняйте изображения из URL в форме через php - PullRequest
1 голос
/ 28 марта 2011

У меня есть скрипт php, который берет изображение с внешнего URL, читает его и сохраняет в каталог на моем сервере.Скрипт находится в php-файле и содержит:

<?php 
$image_url = "http://example.com/image.jpg"; 
$ch = curl_init(); 
$timeout = 0; 
curl_setopt ($ch, CURLOPT_URL, $image_url); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 

// Getting binary data 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 

$image = curl_exec($ch); 
curl_close($ch); 

$f = fopen('/home1/path/public_html/path/saved/image.jpg', 'w');
fwrite($f, $image);
fclose($f);
?>

Там все отлично работает ...

Я хотел бы, чтобы скрипт делал это для нескольких URL-адресов.URL-адреса будут записаны в виде textarea, разделенных запятыми (или иначе).

Кнопка отправки затем сообщит сценарию, что нужно выполнить трюк со всеми URL-адресами в форме и сохранить их под любым именем, это не важно (случайный вариант подойдет).

Я все еще новичок и изучаю PHP.

Заранее спасибо за помощь!

РЕДАКТИРОВАТЬ

Мой код выглядит следующим образом:

<?php 
error_reporting(E_ALL);
$image_urls = explode('\n', $_POST['urls']); 



foreach ($image_urls as $image_url) {
$ch = curl_init(); 
$timeout = 0; 
curl_setopt ($ch, CURLOPT_URL, $image_url); 
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 

  $image = curl_exec($ch); 
  curl_close($ch); 

  $f = fopen('/home1/path/public_html/path/saved/'.rand().time().".jpg", 'w');
  fwrite($f, $image);
  fclose($f);

}
?>

Работаеттолько для первого и не возвращает ошибок ... Есть идеи?

Спасибо за вашу большую помощь!

1 Ответ

1 голос
/ 28 марта 2011

Вам нужно извлечь URL-адреса из текстовой области и затем выполнить цикл по нему:

<?php 
$image_urls = explode('\n', $_POST['urls']); # Will create a list of urls, if each line contains one url.

#Basic settings and initializers need to be ran only once. 
$sequencer = 1;
$timeout = 0;

foreach ($image_urls as $image_url) {
  $ch = curl_init(); 

  curl_setopt ($ch, CURLOPT_URL, $image_url); 
  curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout); 

  // Getting binary data 
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
  curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 

  $image = curl_exec($ch); 
  curl_close($ch); 

  $f = fopen("/home1/path/public_html/path/saved/image_$sequencer.jpg", 'w');
  fwrite($f, $image);
  fclose($f);
  $sequencer++;
}
?>

Очевидно, что вы должны очистить, проверить и перепроверить введенную информацию: не только для того, чтобы избежать козлов, нотакже, чтобы избежать записей, которые нарушают ваше приложение (например, белые линии).

...