83 votes

Copier l'Image du Serveur Distant via HTTP

Je suis à la recherche d'un moyen simple d'importer/copier des images à partir d'un serveur distant vers un dossier local à l'aide de PHP. Je n'ai pas d'accès FTP au serveur, mais toutes les images à distance peut être consulté via HTTP (c'est à dire http://www.mydomain.com/myimage.jpg).

Exemple d'utilisation: l'utilisateur souhaite ajouter une photo à son profil. L'image existe déjà sur le web et l'utilisateur fournit avec une URL directe. Je ne veux pas de hotlink de l'image mais à l'importation et à servir de mon domaine.

157voto

Ciaran McNulty Points 10503

Si vous avez PHP5 et le flux HTTP wrapper activé sur votre serveur, il est incroyablement simple à copier dans un fichier local:

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

Cela va prendre soin de tout le pipelining etc. ce qui est nécessaire. Si vous avez besoin de fournir certains paramètres HTTP il y a une troisième " contexte de flux de paramètre que vous pouvez fournir.

32voto

dazzafact Points 192

utilisation

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

8voto

Georg Schölly Points 63123

Vous avez au sujet de ces quatre possibilités:

4voto

Oli Points 65050

Voici la façon la plus simple:

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

Mais si vous faites beaucoup de cette (ou de votre hôte bloque l'accès aux fichiers à distance des systèmes), pensez à utiliser CURL, qui est plus efficace, légèrement plus rapide et disponible sur de plus des hôtes.

Vous pouvez également usurpation de l'agent utilisateur pour ressembler à un bureau plutôt qu'un bot!

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

Avec les deux cas, vous pouvez passer à travers GD pour s'assurer qu'il est vraiment une image.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X