2017-08-30 52 views
0

我試圖在我的首選文件夾的子文件夾中使用PHP創建文件。PHP根據新文件的位置創建不同用戶和組的文件

我使用下面的命令:

file_put_contents("/preferred_folder/subfolder/test_A.txt", "test_A"); 

我收到以下錯誤消息:

Warning: file_put_contents(preferred_folder/subfolder/test_A.txt): failed to open stream: Permission denied in /users/service/dummy_username/code.php on line ###. 

我檢查/ preferred_folder /子文件夾的權限/經由膩子,使用以下命令,其中我我以「dummy_username」身份登錄,並收到以下回復:

$ ls -l /preferred_folder/ 
drwxrwxr-x 7 1234567 1000001 120 Apr 30 13:35 subfolder 

針對「其他用戶」的寫入權限未啓用。在另一方面,讓我檢查,我不認識這個用戶或組:

$ groups 1000001 
groups: 1000001: No such user 

此外,「getent passwds 1234567」不返回任何值(和它的「dummy_username」成功一樣)。這裏是奇怪的地方;我嘗試在另外兩個位置創建一個文件作爲完整性檢查:第一個對「其他用戶」具有寫入權限,第二個是我的腳本在過去幾年中成功創建文件的位置。

file_put_contents("/preferred_folder/test_B.txt", "test_B"); 
file_put_contents("https://stackoverflow.com/users/service/dummy_username/test_C.txt", "test_C"); 

在這種情況下,這兩個文件創建成功,但這些文件的用戶和組的不同之處,例如:

$ ls -l /preferred_folder/test_B.txt 
-rw-r--r-- 1 ABCDEFG root 5 Aug 30 08:39 /preferred_folder/test_B.txt 

$ ls -l /users/service/dummy_username/test_C.txt 
-rw-r--r-- 1 dummy_username dummy_group 5 Aug 30 08:39 test_C.txt 

我留下了幾個問題:

1 )爲什麼從此腳本創建的文件的用戶和組僅根據文件位置而不同?我預計他們都將被「dummy_username」所有。

2)什麼/誰是用戶「ABCDEFG」?我已驗證「根」組沒有明確包含這樣的用戶。

3)什麼/誰是組「1000001」,爲什麼用戶「1234567」不知道是該組的一部分?

4)最後,除了chmod 777整個preferred_folder及其多級子文件夾之外,是否有適當的建議方法爲我的「dummy_username」授予對預期文件創建的特定權限?

在此先感謝您的幫助。長期訪客;第三次海報。

回答

0

獲取權限被拒絕的原因是因爲在Web服務器上運行PHP的用戶沒有寫入該目錄的權限。

在許多nginx/apache配置中,Web服務器設置爲允許用戶www-data訪問/var/www/html。您的Web應用程序的根目錄。

在此目錄之外寫入會導致權限錯誤。

除非您正在編寫用於終端的腳本,否則PHP除了訪問/var/www/html之外的目錄外,幾乎沒有什麼原因。

如果您在終端上運行PHP,您可以sudo,或創建一個有權從該目錄讀取/寫入的用戶,並使用該用戶運行該腳本。

+0

感謝您的回覆,@BugHunterUK。我想通過將該用戶添加到擁有「/ preferred_folder /子文件夾」(即 - 「1000001」)的組來授予專門用於「dummy_username」的權限。如前所述,dummy_username可以在preferred_folder中創建文件,儘管它有一個奇怪的用戶/組。我如何知道哪個用戶名適合添加到組1000001?此外,您是否可以提供任何洞察,以瞭解爲什麼在preferred_folder中擁有新創建文件的用戶/組與/ users/service/dummy_username /中的不同?我在哪裏可以找到並更改這些設置?謝謝! –

+0

更新:我剛剛發現了[ACL](https://unix.stackexchange.com/questions/115631/getting-new-files-to-inherit-group-permissions-on-linux),它解釋了文件所有權被指定。 –

相關問題