Копирование изображения с удаленного сервера по протоколу HTTP



Я ищу простой способ импорта / копирования изображений с удаленного сервера в локальную папку с помощью PHP. У меня нет FTP-доступа к серверу, но все удаленные изображения могут быть доступны через HTTP (т. е. http://www.mydomain.com/myimage.jpg).



пример использования: пользователь хочет добавить изображение в свой профиль. Изображение уже существует в интернете, и пользователь предоставляет прямой URL-адрес. Я не хочу, чтобы hotlink изображение, но импортировать и обслуживать из моего домена.

878   12  

12 ответов:

Если у вас есть PHP5 и HTTP stream wrapper включен на вашем сервере, это невероятно просто скопировать его в локальный файл:

copy('http://somedomain.com/file.jpeg', '/tmp/file.jpeg');

Это будет заботиться о любых конвейеризация и т. д. это необходимо. Если вам нужно предоставить некоторые параметры HTTP, вы можете предоставить третий параметр "контекст потока".

использовать

$imageString = file_get_contents("http://example.com/image.jpg");
$save = file_put_contents('Image/saveto/image.jpg',$imageString);

PHP имеет встроенную функцию file_get_contents (), которая считывает содержимое файла в строку.

//хранить в файловой системе. $fp = fopen ("/location/to/save/image.jpg", " w"); fwrite($fp, $content); fclose($fp); ?> Если вы хотите сохранить файл в базе данных, просто используйте переменную $content и не сохраняйте файл на диск.

У вас есть примерно эти четыре возможности:

вот самый простой способ:

$url = "http://other-site/image.png";
$dir = "/my/local/dir/";

$rfile = fopen($url, "r");
$lfile = fopen($dir . basename($url), "w");

while(!feof($url)) fwrite($lfile, fread($rfile, 1), 1);

fclose($rfile);
fclose($lfile);

но если вы делаете много и много этого (или ваш хост блокирует доступ к файлам удаленных систем), рассмотрите возможность использования CURL, который более эффективен, мягко быстрее и доступен на более общих хостах.

вы также можете изменить агента пользователя, чтобы выглядеть как рабочий стол, а не бот!

$url = "http://other-site/image.png";
$dir = "/my/local/dir/";
$lfile = fopen($dir . basename($url), "w");

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)');
curl_setopt($ch, CURLOPT_FILE, $lfile);

fclose($lfile);
curl_close($ch);

в обоих случаях вы можете передать его через GD, чтобы убедиться, что это действительно изображение.

Это очень просто с помощью функции file_get_contents. Просто укажите URL в качестве первого параметра.

создать папку и назвать ее например скачать откройте блокнот и вставьте этот код

только изменить http://www.google.com/aa.zip в ваш файл и сохраните его m.php например

chamod php файл до 666 и папку скачать до 777

<?php
define('BUFSIZ', 4095);
$url = 'http://www.google.com/aa.zip';
$rfile = fopen($url, 'r');
$lfile = fopen(basename($url), 'w');
while(!feof($rfile))
fwrite($lfile, fread($rfile, BUFSIZ), BUFSIZ);
fclose($rfile);
fclose($lfile);
?>

наконец, из Вашего браузера введите эти URL http://www.example.com/download/m.php

вы увидите в папке загрузки файл загрузки из других сервер

спасибо

Я попытался скопировать / загрузить удаленные файлы, используя функцию копирования за прокси, но копия подключается напрямую без прокси.

Я попытался установить Мои настройки в качестве контекста по умолчанию и дал его как 3. параметр функции для копирования.

но похоже, что контекст никогда не используется, но readfile или get_headers используйте тот же контекст успешно.

вот мой код:

$url = "http://myserver.com/testfile";
$context_opts = array(
     "http" => array(
       "proxy" => "tcp://myProxy:8080",
       "request_fulluri" => True,
       "ignore_errors"   => true
     )
  );

stream_context_get_default($context_opts); 
print_r(get_headers($url,1));

copy($url,$filename, stream_context_create($context_opts));

мой сервер работает с:

  • Windows XP Пакет обновления 3
  • Apache 2.2.12 (работает как Служба)
  • PHP 5.3.0 (API20090626, TS, VC6) (настроен как модуль apache)

urlfopen включена потоки http и https зарегистрированы для php

используйте запрос GET, чтобы загрузить изображение и сохранить его в веб-доступном каталоге на вашем сервере.

Как вы используете PHP, вы можете использовать curl для загрузки файлов с другого сервера.

поскольку вы отметили свой вопрос "php", я предполагаю, что вы используете php на своем сервере. Лучше всего, если вы управляете своим собственным веб-сервером, а затем компилируете cURL в php. Это позволит вашему веб-серверу выполнять запросы к другим веб-серверам. Это может быть довольно опасно с точки зрения безопасности, поэтому большинство основных поставщиков веб-хостинга не включена эта опция.

здесь страница PHP на человека с помощью curl. В комментариях вы можете найти пример, который загрузка и файл изображения.

Если вы не хотите использовать libcurl, вы можете закодировать что-то с помощью fsockopen. Это встроено в php (но может быть отключено на вашем Хосте) и может напрямую читать и записывать в сокеты. Смотрите примеры на странице fsockopen man.

для тех, кому нужно сохранить исходное имя файла и расширение

$origin = 'http://example.com/image.jpg';

$filename = pathinfo($origin, PATHINFO_FILENAME);
$ext = pathinfo($origin, PATHINFO_EXTENSION);

$dest = 'myfolder/' . $filename . '.' . $ext;

copy($origin, $dest);

ответ помог мне скачать изображение с сервера на клиентскую сторону.

<a download="original_file.jpg" href="file/path.jpg">
  <img src="file/path.jpg" class="img-responsive" width="600" />
</a>

Comments

    Ничего не найдено.