2016-01-29 101 views
0

當通過PHP上傳圖片時,生成的文件的權限不允許Apache在稍後的請求中讀取文件。PHP正在上傳沒有讀取權限的文件

--w-rw----+ 1 www-data www-data 76551 Jan 29 19:52 original.jpeg 

上包含文件夾的權限是這樣的:

drwxr-xr-x+ 41 www-data www-data 4096 Jan 29 19:52 media 

Apache是​​運行爲www數據這個問題只發生在分期(用於上傳的文件看起來像本例中的權限當然)。在我的開發環境中,文件上傳沒有問題,所以它不可能是代碼問題。我正在使用Ubuntu的ACL,我懷疑這可能與它有關。

getfacl的上傳目錄結果:

# file: web/media 
# owner: www-data 
# group: www-data 
user::rwx 
user:ubuntu:rwx   #effective:r-x 
group::r-- 
mask::r-x 
other::r-x 
default:user::-wx 
default:user:www-data:rwx 
default:user:ubuntu:rwx 
default:group::r-- 
default:mask::rwx 
default:other::--x 

getfacl文件本身的結果:

# file: web/media/original.jpeg 
# owner: www-data 
# group: www-data 
user::-w- 
user:www-data:rwx  #effective:rw- 
user:ubuntu:rwx   #effective:rw- 
group::r-- 
mask::rw- 
other::--- 

任何想法?

+0

什麼是php的[umask](http://php.net/manual/en/function.umask.php)設置? –

+0

我的第一個想法是使用umask,但你也可以嘗試setfacl:http://unix.stackexchange.com/questions/1314/how-to-set-default-file-permissions-for-all-folders-files- IN-A-目錄 – MortenSickel

回答

2

我想通了。懷疑這是一個ACL問題。上傳目錄中的ACL的default:user::-wx行指示應使用-wx作爲用戶權限創建新文件。運行sudo setfacl -d -m u::rwx <upload dir>修復了這個問題。

0

什麼是你的umask?

<?php 

umask(0022); //unset the write bits, should yield rw-r-r- 

//Then your file magic 
file_put_contents($filename, $content);