2012-12-30 37 views
0

我學習PHP,並試圖使用此代碼上傳文件:PHP move_uploaded_file許可被拒絕,雖然現在看來,這應該

$destination = "uploads/".$_FILES['userfile']['name']; 
move_uploaded_file($_FILES['userfile']['tmp_name'], $destination); 

,但我面對

未能打開流:權限被拒絕

我可以將「uploads」目錄的權限更改爲可由所有人寫入,但這當然是不好的做法。 文件夾的權限是:

drwxr-xr-x 2 loai loai 4096 Dec 30 12:44 uploads 

和運行ps aux | grep httpd產生

loai  6728 0.0 0.0 4368 832 pts/1 S+ 18:37 0:00 grep --colour=auto httpd 

所以不宜apache進程能夠在給定的目錄寫? 感謝

+0

PHP進程的工作目錄可能不是你認爲它是。 – Pointy

+1

您的腳本對目錄遍歷和遠程腳本注入攻擊是開放的。請記住,來自用戶的所有內容都可以包含蘋果數據,包括'$ _FILES'數組的'name'字段。 – hakre

+1

Ohai than loai does not write access to the directory。請查看訪問權限。 – hakre

回答

2

首先,在註釋中的問題指出,你ps輸出顯示grep進程本身,而不是httpd進程(或任何您的Web服務器)。所以這可能意味着你的Web服務器運行作爲不同的用戶,而不是loai。在uploads文件夾的要麼改變所有權或使其組可寫,然後Web服務器的用戶添加到相應的組

+0

但如何知道網絡服務器用戶?我正在自己的機器上運行它。 –

+1

@LoaiGhoraba它應該在一個配置文件中。如果您使用Apache,開拓'的/ etc /阿帕奇/ apache2.conf'或'的/ etc /阿帕奇/ httpd.conf',並搜索從'User'開頭的行,一般是像'用戶www數據'。 – galymzhan

+0

非常感謝:) –

1

你可以嘗試使用完整路徑的目的地。喜歡的東西:

/var/www/project/uploads 
+0

感謝球員,我想正確的原因是Barmar,我認爲PS表明,apache進程被loai資,但是,誰擁有apache進程?或者它是作爲獨立用戶推出的? –

0

如果能夠從相對路徑目錄讀取,那麼就執行chown它:

cd $path_to_your_site_root 
chown -R loai:loai uploads