HTTP Üzerinden Uzak Server Copy Image

9 Cevap php

I / PHP kullanarak bir yerel klasöre uzak sunucudan görüntüleri kopyalamak almak için basit bir yol arıyorum. Ben sunucuya hiçbir FTP erişimi var, ama tüm uzaktan görüntüleri HTTP üzerinden erişilebilir (yani http://www.mydomain.com/myimage.jpg).

Örnek kullanın: Bir kullanıcı profiline bir resim eklemek istiyor. Görüntü zaten web üzerinde bulunan ve kullanıcı doğrudan bir URL ile sağlamaktadır. Ben görüntüyü hotlink istemeyen ama benim etki ithal ve hizmet etmek.

9 Cevap

Eğer PHP5 ve sunucusu üzerinde etkin HTTP akışı sarıcı varsa, yerel bir dosyaya kopyalamak için son derece basit:

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

Bu ihtiyaç duyduğu herhangi bir ardışık vb ilgilenir. Bazı HTTP parametreleri sağlamak için gerekiyorsa sağlayabilir üçüncü bir 'akımı bağlamı' parametre vardır.

kullanmak

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

Bu dört olanakları hakkında var:

  • Remote files. Bu allow_url_fopen php.ini etkin olması gerekiyor, ama bu kolay yöntem bu.

  • PHP kurulum destekliyorsa Alternatif cURL kullanabilirsiniz. Hatta bir example var.

  • Ve gerçekten elle yapmak HTTP module kullanmak istiyorsanız.

  • Hatta use sockets directly kalkmayın.

Bu file_get_contents kullanarak son derece basit. Sadece ilk parametre olarak url sağlar.

Burada en temel yolu:

$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);

Eğer çok ve bu çok (ya da uzak sistemlere için, ana blokları dosya erişimi) yapıyoruz ama, daha hızlı ve daha fazla mevcut paylaşılan ana hafif, daha verimli olduğu, CURL kullanarak düşünün.

Ayrıca yerine bir bot daha masaüstüne gibi bakmak için kullanıcı ajan parodi olabilir!

$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);

Her iki durumda ile, bunun gerçekten bir görüntü yapmak için GD aracılığıyla geçmek isteyebilirsiniz.

make folder and name it foe example download open note pad and insert this code

sadece http://www.google.com/aa.zip dosyanıza değiştirmek ve örneğin m.php kaydedebilirsiniz

777 666 php dosya ve klasör indir chamod

<?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);
?>

finally from your browser enter to these URL http://www.example.com/download/m.php

Eğer indirme klasöründe diğer sunucudan dosya indirmeyi göreceksiniz

teşekkürler

. Eğer olmayabilir NET kullanarak varsayarak:

WebClient wc = new WebClient();
byte[] data = wc.DownloadData(path);
MemoryStream ms = new MemoryStream(data);
return (Bitmap)Bitmap.FromStream(ms);

Görüntüyü indirmek ve sunucu üzerindeki bir web erişilebilir dizine kaydetmek için bir GET isteği kullanın.

PHP kullanarak olduğundan, curl diğer sunucudan dosya indirmek için kullanabilirsiniz.

Eğer soru 'php' etiketli beri, ben senin sunucu üzerinde çalışan php kabul edeceğiz. Yapabileceğiniz en iyi şey, kendi web sunucusunu kontrol, sonra php içine cURL derlemek. Bu web sunucusu diğer web sunucularına isteklerini yapmak için izin verecektir. Bu yüzden en temel web barındırma sağlayıcıları bu seçenek etkin olmaz, bakış güvenlik açısından oldukça tehlikeli olabilir.

İşte php man page on using cURL bulunuyor. Yorumlarında bir örnek indirme ve görüntü dosyası bulabilirsiniz.

Eğer libcurl kullanmak istemiyorsanız, size fsockopen kullanarak şey kod olabilir. Bu php yerleşik olan (ancak ana devre dışı bırakılmış olabilir), doğrudan okumak ve prizler yazabilirsiniz. Bkz Examples on the fsockopen man page.