2014-11-05 149 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

相關問題