2012-03-29 39 views
0

我有一個簡單的問題,但沒有在Google上找到答案。我正在構建一個應用程序,它將不得不在各種服務器上運行,我不知道它是以root,subdir還是以任何其他方式安裝。另外我不知道它是否會安裝在IIS,Apache或其他類型的od服務器上。我有一個真正令人討厭的問題。如何建立一個永遠不錯的上傳目錄。該上傳目錄將在一個應用程序文件夾中,所以我有一些啓動點,但我無法弄清楚如何編寫適當的上傳目錄。move_uploaded_file如何構建上傳目錄

//tried this for first time 
$upload_dir = getcwd().'upload/img'; 
//then tried this 
$upload_dir = 'upload/img'; 
//and tried couple of others, but more lame, so I will not post it... 

的事情是,則會出現警告,上面寫着未能打開流:沒有這樣的文件或目錄,而另一個無法移動$ temp_name到「上傳/ IMG」。

真的不知道哪裏出了問題。我相信這是一個蹩腳的問題,但不知道如何做到這一點。

+0

解決方法是在getcwd()和內部路徑之間添加一個缺失的'/'。這完成了這個伎倆。不知道爲什麼我錯過了ID。 – 2012-04-04 08:53:36

回答

1

使用魔術宏__FILE__獲取當前文件的路徑,即腳本的絕對路徑。要獲取當前文件夾,請使用dirname(__FILE__)

您應該能夠將其他路徑邏輯放在最上面。

+0

我試過了,但是代碼是在dir樹的class depper中的,所以它讓我找到了那個文件的位置,這對我沒有好處。我嘗試getcwd()。'upload/img'更好... – 2012-03-29 23:11:01

0

首先,作爲應用程序設計師,您必須爲您的上傳目錄選擇合適的位置(或讓用戶在安裝時選擇一個)。這個位置通常選擇在您的Web目錄根目錄之外,以便沒有人可以輸入URL並獲得對上傳文件的直接訪問權限,但是也可以通過其他方式來安排。

然後你必須確保這個directory existsis writable由網絡服務器;可以通過要求用戶將其作爲手動安裝步驟或通過在應用程序中包含「安裝程序」腳本來適當地創建和設置目錄。

最後,當一個文件實際上傳時,您必須構建上傳目錄的路徑。有很多方法可以做到這一點(這也取決於你選擇的位置,如果允許管理員選擇他們自己的位置等),但通常這是通過讀取寫入某個配置文件的變量的值來完成的,例如

// config.php 
$DIR_UPLOAD = '/var/www/upload/'; 

此值將由您的安裝程序腳本放置或由管理員在安裝時手動放置。

+0

有沒有一些很好的參數來隱藏來自url的文件?因爲無論如何,我需要網址做他們? – 2012-03-29 23:11:47

+0

@neosatan:通常你會將這個url作爲一個PHP腳本,它接受一個'$ _GET'參數,並用['readfile']傳遞目標文件的內容(http://www.php.net/manual/ EN/function.readfile.php)。如果您這樣做,您的腳本可以在授予對該文件的訪問權限之前執行訪問控制。另一方面,如果文件可以直接訪問,那麼具有該URL的任何人都可以訪問它,並且您無法控制該文件。 – Jon 2012-03-29 23:16:03

+0

這是個好主意。通常,我實施了一些訪問控制,但只適用於不需要直接URL的文件,例如可訪問來自設計的圖像。爲每個上傳的文件做這件事的想法對我來說仍然是新的,但我想知道它是如何執行的?它是不是浪費CPU週期來訪問必須可訪問的文件?或者我錯了? – 2012-03-29 23:20:22