2013-05-04 85 views
1

嘗試構建一個表單,通過url上傳圖像並從那裏複製到我的服務器。從URL複製圖像到Web服務器文件系統

搜索follwoing線程:

我已經試過這樣:

$pic = Submitted image URL 
$pic = Submitted image name . ".jpg" 

copy($pic, $_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname); 

結果在:

警告:複製(MYDIR/mypic.jpg)[function.copy]:未能打開流:在/home/user/public_html/mysite.ca/upload.php沒有這樣的文件或目錄第42行

此:

$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname, "w"); 
fwrite($fp, $pic); 
fclose($fp); 

結果:

警告:fwrite的()預計參數1是資源,博olean在/home/user/public_html/mysite.ca/upload.php在線47

警告:fclose()期望參數1是資源,布爾在/home/user/public_html/mysite.ca/中給出在線48上傳.php

目錄權限是777,它們在服務器上的任何地方都沒有個人信息。在任何日誌中都沒有錯誤,我不知道如何解決此問題?

回答

0

$fp = fopen($_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname, "w");這似乎是問題。 這樣做在兩個部分,如$path = $_SERVER['DOCUMENT_ROOT'] . '/mydir/'.$picname; $fp = fopen($path, "w");。現在你可以echo $path看看它是否正確?如果仍然存在問題,請嘗試使用相對路徑,如$path = "./mydir/$picname"; echo $path;它並直接轉到該文件夾​​以檢查文件夾是否存在。

0

警告:複製(MYDIR/mypic.jpg)[function.copy]:未能打開流:在/home/user/public_html/mysite.ca/upload.php沒有這樣的文件或目錄第42行

這聽起來像你試圖複製文件的目標路徑是錯誤的。

您是否檢查過路徑實際包含的內容?

var_dump($_SERVER['DOCUMENT_ROOT'] . '/mydir/' . $picname); 

除了當前的錯誤,你,如果你接受任何路徑/文件名信息的客戶端發送來構建名稱保存圖像抓取您的服務器一個巨大的安全漏洞沒有任何進一步的控制/限制。

+0

目錄名稱是在公共目錄之外定義的常量,只是更容易用這種方式描述。此表格僅供我用來上傳大量圖片。 – HandsomeRob 2013-05-04 17:41:47

+0

var_dump()字符串(79)「/home/user/public_html/mysite.ca/mydir/mypic.jpg」 – HandsomeRob 2013-05-04 17:51:04

+0

而您正在運行腳本的同一文件夾中的'mydir'文件夾已存在...?如果沒有,您必須先創建它('mkdir'),然後才能將文件複製到它中! – CBroe 2013-05-04 18:30:29

1

只有當您的服務器啓用allow_url_fopen選項時,才能直接打開文件類似URL的URL。

fopen()失敗並返回FALSE但您沒有檢查。您的文件名或目錄權限有問題。

+0

如果在localhost上工作,這將在php.ini?在網上的cPanel上找不到對它的任何引用,管理員可以做些什麼? – HandsomeRob 2013-05-04 17:57:36

+0

'allow_url_fopen = off'會在使用'copy'時產生不同的錯誤信息,但... – CBroe 2013-05-04 18:29:19

相關問題