2013-03-20 107 views
-1

讓我先說,我是一個開發者,而不是一個服務器管理員......我PHP不能移動(寫)上傳文件到安裝網絡驅動器

在工作,所以裸,我們發展我們的PHP通過編輯我們的工作文件在我們每個Windows機器上的共享的本地目錄中來創建基於Web的應用程序。 (linux)登臺服務器然後安裝我們的共享驅動器並在子域下爲它們分別提供服務。例如。 joe.work.com將爲Joe的工作目錄提供服務。然後,我們通過編輯我們的主機文件來訪問我們自己的中轉站點,以便將子域指向登臺服務器......所有這些工作都很棒!

我們現在遇到了PHP似乎沒有權限將上傳文件從tmp目錄移動到掛載目錄內的目錄(實際上是共享的Windows驅動器...?)的問題。

windows計算機上的工作目錄設置爲允許所有人rw,並且我已經嘗試將777放置在登臺機器的掛載目錄中,但我仍然獲得權限拒絕。

共享驅動器,例如\\joes_machine\joes_working_dir在登臺服務器上掛載到/var/mnt/joe。文件上傳需要移至/images/common

雖然稍微簡單化了在這個例子中,我沒有做任何幻想代碼明智:

$working_directory = '/var/mnt/joe'; 
$image_directory = '/images/common/'; 
$full_filename = $working_directory . $image_directory . $filename; 
if(move_uploaded_file($_FILES['photo']['tmp_name'], $full_filename)) 
    // do some other stuff 

我當然錯誤是:

Message: move_uploaded_file(/var/mnt/joe/images/common/resulting_filename.jpg): 
    failed to open stream: Permission denied 
Message: move_uploaded_file(): Unable to move '/tmp/phpjsEfBc' to 
    '/var/mnt/joe/images/common/resulting_filename.jpg' 

什麼是我不理解有關文件Linux和PHP需要寫入到網絡上的Windows共享驅動器上安裝的權限?我似乎無法找到掛斷!

一旦我們達到產量,我們將不會使用模式,但是如果有一個簡單的解決方案能夠在我們當前的開發環境中繼續下去,那麼這將是理想的! (我也可能會在這裏學到一些東西:P)

謝謝大家提前!

回答

4

經過幾個小時的面對面,我終於找到了我失蹤的東西。問題是提供的憑據無法按預期寫入掛載的目錄。我能解決這個問題的方法是通過編輯mount命令如下:

mount -t cifs //shared/directory /mount/target 
    -o rw,username=connectionuser,password=password,uid=48 

如此,usernamepassword是要用於連接到驅動器的Windows憑據,但uid指定的唯一標識符Apache運行的登臺服務器上的本地用戶,以便它可以寫入掛載的目錄。

以前,我沒有指定本地用戶的uid,所以當apache嘗試寫入掛載的目錄時,它試圖使用windows憑據(不能寫入'本地'驅動器)

希望這對您有所幫助!