2011-05-16 81 views
2

我有一個相當莫名其妙的問題/問題,讓我爲你解決它。PHP上傳和htaccess密碼問題

我有兩個目錄 - 畫廊和上傳

的上傳目錄htaccess的密碼保護。這是幾個PHP頁面和PHP文件上傳器所在的地方。當我在目錄中加載索引時訪問索引PHP文件時,輸入我的憑據。

問題是上傳者正在上傳文件,然後將其移動到圖庫目錄(而不是密碼保護)。然後運行其他腳本來複制該圖像,調整其大小,然後刪除原始圖像。直到我將htaccess密碼放在uploader目錄中,這個過程才能正常運行。因此,出於某種原因,受保護目錄中的PHP上傳器無法移動/處理上傳的圖像,然後將其複製到未受保護的目錄中。

任何想法,我需要做什麼?我不確定問題是PHP上傳者在受保護的目錄中調用了其他腳本,或者在將其移動到未受保護的目錄時遇到問題。

編輯: 下面是一些示例代碼,正如你可以看到URL沒有被使用(也不是在resizeMyImageTN方法中)。

//WHERE THE SAVE HAPPENS! 


move_uploaded_file($_FILES['Filedata']['tmp_name'], '../../uploads/'.$folder.'/'.$new_index.'-' . $_FILES['Filedata']['name']); 


//Call function to resize images pass in path 

resizeMyImageTN($_FILES['Filedata']['name'],$folder, $new_index); 


unlink('../../uploads/'.$folder.'/'.$new_index.'-' . $_FILES['Filedata']['name']); 

回答

0

我忘了回答這個(我的壞)。最後,我只能通過沒有上傳目錄.htaccess保護來實現它。這並不理想,但我似乎無法解決其他任何問題。由於我問了這個問題,我把這個網站改成了Django,並且解決了我所有的問題。

1

.htaccess保護在網絡服務器級別工作。但是,除非您在各種文件操作調用中使用URL,否則PHP腳本將在文件系統級別工作,並且永遠不會看到.htaccess保護。

move_uploaded_file($_FILES['uploaded']['tmp_name'], '/some/dir/that/is/protected/newname.txt'); 

不會涉及HTTP層,這意味着沒有保護。但是,如果你嘗試

move_uploaded_file($_FILES['uploaded']['tmp_name'], 'http://myserver.com/newname.txt'); 

將涉及新的HTTP請求,重新上傳文件,並接受在服務器上發生的任何URL限制。

沒有看到一些代碼,我們很可能無法回答你的問題。

+0

我編輯了與示例代碼的原始帖子。 – Fernker 2011-05-16 21:32:34

+0

如果上傳者腳本正在調用其他腳本,正如你所說,我會檢查是否有任何這些被通過http調用(在網站的access_log中會有這種證據)。 – 2011-05-16 21:39:28

+0

另一個被調用的是另一個PHP文件,我使用標準的PHP include語句。 (它位於同一個受保護目錄內的子文件夾中)。它是一個PHP圖像調整器,並使用相對路徑作爲參數來保存圖片(即../../gallery/upload) – Fernker 2011-05-16 21:41:50