2014-11-05 163 views
0

我正在构建一个讨论论坛作为我正在构建的一个更大的应用程序的一部分,论坛只是应用程序的一部分。使用Image URL和PHP从远程服务器上传/下载/保存图像到本地服务器?

对于发布新主题或发布回复时的TextArea字段,我决定没有什么比PageDown Markdown Library好。这与StackOverflow在其所有网站上使用的是相同的,并且它比许多竞争对手的效果更好。

图书馆出货的方式,我不喜欢默认的Insert Image功能。您点击按钮插入图像,它允许您输入图像的URL,然后插入适当的MarkDown语法来显示链接的图像。

这只是不会削减它。我需要您在StackOverflow上看到的功能!无论如何非常相似。

我需要它来显示一个对话框,当您单击插入图像按钮,像现在这样,但不是只是一个图片URL输入字段,将有2个提起选项...

  • 从您的计算机上传图片
  • 插入一个图片网址,然后它将从该网址下载图片并将其插入帖子,就像您从计算机上传图片一样。这一点很重要,不要混淆这一步骤。 IT不应该简单地插入将其链接到原始图像URL的图像。相反,它将采用该URL并将图像下载/上传到与upload from computer选项相同的服务器上,然后它会插入指向新上传图像的新图像URL!

基于一些简单的HTML,如下面的一个对话框窗口,其中提供了一个用于从计算机上载功能的功能,我已经工作了。我需要提供一些JavaScript和PHP,当只使用URL文本输入字段内的URL单击按钮时,会将远程图像下载/保存到我的服务器上的我的上传文件夹中。

所以需要做一些事情......

  • 获取并保存图像文件给我的文件夹上传使用PHP当PHP函数将收到的唯一的事情是图像的URL可能位于同一台服务器上,或者很可能位于远程服务器上。
  • 成功保存/上传URL中的图像后,PHP函数将返回一个带有状态/错误的JSON字符串,如果成功,它将返回新图像保存在本地的实际URL和文件名服务器。 JavaScript/AJAX脚本将收到此JSON响应并将该图像的Markdown语法插入到PageDown编辑器中。
  • PHP函数将需要确保它试图保存/下载的URL是一个有效的图像文件,而不是一些恶意文件!除非我们允许文件类型,否则不仅仅是像非图像文件那样的错误文件类型的文件。
  • 它将成为安装在许多恐龙服务器上的模块的一部分,因此它需要在尽可能多的服务器上工作!

    从网络

    从您的计算机

我将不胜感激的任何帮助,提示,代码片段或任何帮助与此有关。在这个阶段,我真的只需要构建一个nie PHP函数,它将从远程URL上传图像,并确保传入的URL是真实图像文件,或者更好,它位于允许的文件类型数组中!

几年前,我已经开始这个,但现在已经失去了它,我重新开始,并不记得我是如何去做的。

回答

2

从远程服务器下载文件的最简单方法是使用复制(http://php.net/manual/en/function.copy.php):

copy('http://someurl.com/image.png', '/var/www/uploads/image.png'); 

由于此函数返回一个布尔值,很容易确定操作是否成功,并创建一个JSON响应。

要验证该文件是一个实际的图像,不幸的是没有办法是100%确定。虽然它可能足以检查mimetype。您可以使用FINFO为(http://php.net/manual/en/function.finfo-file.php):

$finfo = finfo_open(FILEINFO_MIME_TYPE); 
echo finfo_file($finfo, $filename); 
finfo_close($finfo); 

对于GIF,这将返回图像/ GIF例如。你将不得不硬编码你想要允许的所有mimetypes列表。

+0

请注意,您可以使用php库检查图像格式,例如使用getImageFormat()的Imagick。 – technico 2016-08-03 20:08:07

相关问题