[英]Recursively chmod/chown/chgrp all files and folder within a directory
我正在一個構建其他站點的站點上工作。 有些時候我使用copy()創建文件和目錄,其他時候我在 php 中構建 XML 文件並使用DOMDocument::save保存它們。 最終結果是一個具有各種混亂權限的根文件夾。 我一直在修改文件和文件夾,因為我是 go,這在某種程度上是這樣的,但是在使用copy()
時我特別遇到了麻煩。
(到目前為止,這是我所在的位置http://pastebin.com/SBE8vtFX ,收件人: function modPath($path)
)
我想采用不同的方法,並遞歸地一次將我的文檔根目錄中的所有文件和文件夾chmod/chown/chgrp更改為我的規范。
以文檔根目錄為例
/home/mysite/public_html
在public_html
我有
-rwxrwxrwx 1 mysite mysite 348 Aug 31 10:49 index.php
d--------x 5 root root 4096 Aug 30 10:21 folder1
drwxrwxrwx 2 mysite mysite 4096 Aug 30 09:41 folder2
如何一次修改指定目錄中的所有文件? 我也想區分目錄和文件夾之間的不同 chmod 設置。 這需要一個 PHP 解決方案。
這是我能得到的
<?php
function modAll($root) {
$aPath = explode("/", $root);
$user = $aPath[2];
/* Some sort of looping through $root */ {
$mod = (is_dir($thisfileorfolder) ? 0755 : 0644);
chmod($thisfileorfolder, $mod);
chown($thisfileorfolder, $user);
chgrp($thisfileorfolder, $user);
}
}
?>
這應該會有所幫助。 已編輯:更正了一些語法錯誤
function fsmodify($obj) {
$chunks = explode('/', $obj);
chmod($obj, is_dir($obj) ? 0755 : 0644);
chown($obj, $chunks[2]);
chgrp($obj, $chunks[2]);
}
function fsmodifyr($dir)
{
if($objs = glob($dir."/*")) {
foreach($objs as $obj) {
fsmodify($obj);
if(is_dir($obj)) fsmodifyr($obj);
}
}
return fsmodify($dir);
}
您可以執行系統調用
system("/bin/chmod -R $mod $root");
system("/bin/chown -R $user $root");
system("/bin/chgrp -R $user $root");
當然你使用escapeshellarg()或escapeshellcmd()是為了避免執行任意命令
system("/bin/chmod -R $mod $root");
system("/usr/bin/find -type d $root -print0 | xargs -0 | /bin/chmod $moddir");
system("/bin/chown -R $user $root");
system("/bin/chgrp -R $user $root");
無效模式 493 表示您以十進制形式傳遞了您的模式。 首先轉換為八進制字符串。
我為此編寫了一個庫。
使用示例:
<?php
use MathiasReker\FilePerm;
require __DIR__ . '/vendor/autoload.php';
(new FilePerm([__DIR__])) // <-- root directory
->setDefaultModeFile(0644) // <-- file permission
->setDefaultModeFolder(0755) // <-- folder permission
->scan()
->fix();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.