上传外部图像并将其保存在我的服务器上


upload external image and save it on my server

我希望能够上传图像或只是粘贴图像的URL,以便为我的网站用户上传sa个人资料图片。

关键是我不想存储url但我想在服务器上保存该图像的副本因为如果外部图像丢失了我也不想丢失它。

我相信facebook和tumblr等都是这样做的。PHP脚本或最佳实践是什么?

谢谢!

您可以使用PHP函数(http://php.net/manual/en/function.file-get-contents.php)从图像中获取内容(字节)

$contents = file_get_contents('http://www.google.com/images/logos/ps_logo2.png');

你也可以使用CURL库…下面是一个如何下载adimagefromurl并将其保存在本地SaveLocation的示例

function downloadImageFromUrl($imageLinkURL, $saveLocationPath) {
   $channel = curl_init();
   $curl_setopt($channel, CURLOPT_URL, $imageLinkURL);
   $curl_setopt($channel, CURLOPT_POST, 0);
   $curl_setopt($channel, CURLOPT_RETURNTRANSFER, 1);
   $fileBytes = curl_exec($channel); 
   curl_close($channel);
   $fileWritter = fopen($saveLocationPath, 'w');
   fwrite($fileWritter, $fileBytes);
   fclose($fileWritter); 
}

你可以这样使用:

downloadImageFromUrl("http://www.google.com/images/logos/ps_logo2.png", "/tmp/ps_logo2.png")

您也可以通过解析URL来获得相同的图像名称…

我想这就是你要找的:通过HTTP从远程服务器复制图像

你可以使用一个叫做imagecreatefromjpeg之类的函数。它接受图像的URL路径,并以此创建一个新图像。看看http://php.net/manual/en/function.imagecreatefromjpeg.php

对于不同的扩展有不同的函数(如果你喜欢这样的话)。我想,您可能需要检查URL中的图像扩展名并使用适当的函数。

处理上传将在本文档中讨论,如果用户粘贴URL,我建议使用file_get_contents将图像的副本保存到您的服务器,然后您可以简单地存储该图像的路径,而不是外部图像。