[英]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.