簡體   English   中英

Mkdir()設置權限777

[英]Mkdir() set permission 777

如何設置777以下文件夾的權限?

 mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true);
 mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/patients', 0777, true);
 mkdir(getcwd() . '/public/profile/usr'.$user->getId() . '/picture', 0777, true);

這些文件夾的權限為以下類型:

drwxr-xr-x

我希望將其設置為:

drwxrwxrwx

你能告訴我如何解決這個問題嗎?

首先, 永遠沒有充分的理由將文件夾或文件權限設置為777。感到需要這樣做的人們通常要么盲目地關注(糟糕的)在線教程,要么遇到無法解決的潛在安全性/權限問題。固定。 通常,可以通過在文件夾(通常是www-data或apache用戶)上設置適當的所有者/組來解決任何上載/寫入問題。777表示任何人都可以在這些文件夾中寫入或執行任何操作。 基本上,您是在一個不好的鄰居中打開后門並解鎖。 另請參閱chmod 777如何使服務器容易受到攻擊? 有關更多詳細信息。

話雖如此,我以前在mkdir()已經遇到過類似的問題,通常是由於設置了系統上的某個umask ,迫使新創建的文件夾具有755權限。 進行特定的chmod()調用可以解決問題:

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0777, true);
chmod(getcwd() . '/public/profile/usr'.$user->getId(), 777);
// And so on...

但是, 更好的解決方案 :解決權限/安全性問題。 只需設置適當的所有者(運行PHP的進程),就可以避免設置777權限,但可以進行正確的上傳處理。 這應該已經是默認設置,但是您可以使用以下命令強制使用它:

// This will get the user the PHP process is running under on Linux machines:
$user = `whoami`;

mkdir(getcwd() . '/public/profile/usr'.$user->getId(), 0755, true);
chown(getcwd() . '/public/profile/usr'.$user->getId(), $user);
// And so on

這將在文件夾上設置755權限,並將所有權設置為PHP進程,這意味着PHP對文件夾具有完全權限,而其他任何用戶則沒有。 這樣更安全,但同樣方便。

該問題也可能是由SELinux引起的,在這種情況下,chmod 777不會對您有太大幫助。 通常,上傳文件夾上需要httpd_public_content_rw_t上下文。

檢查這篇文章: http : //php.net/manual/de/function.mkdir.php

從那里回答...

使用遞歸參數時,請記住,如果在mkdir()之后使用chmod()來設置模式,而無需通過uchar()的值對其進行修改,則需要在所有創建的目錄上調用chmod()。 即:

<?php
mkdir('/test1/test2', 0777, true);
chmod('/test1/test2', 0777);
?> 

可能導致mkdir()調用中的“ / test1 / test2”的模式為0777,但“ / test1”的模式仍然為0755。 您需要執行以下操作:

<?php
mkdir('/test1/test2', 0777, true);
chmod('/test1', 0777);
chmod('/test1/test2', 0777);
?>

這是執行此操作的許多可能方法之一:

    <?php
        $baseDir    = getcwd() . '/public/profile/usr'. $user->getId();
        $arrFolders = array('/patients', '/picture');

        // FIRST chmod THE BASE DIRECTORY TO HAVE THE PERMISSIONS YOU WANT:
        chmod($baseDir, 0777);

        // LOOP THROUGH THE ARRAY OF FOLDERS YOU WANT TO CREATE & CREATE THEM WITH APPROPRIATE PERMISSIONS:         
        foreach($arrFolders as $folder){
            try{
                mkdir($baseDir . $folder, 0777, true);
            }catch(Exception $e){
                // HANDLE ANY EXCEPTION SHOULD ONE OCCUR...
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM