有没有办法在 PHP 中的 mkdir() 或 chmod() 中设置字符串权限模式?
Is there a way to set a string permission mode in mkdir() or chmod() in PHP?
当我查找 mkdir() 和 chmod() 的 PHP 手册时,似乎这两个函数都需要一个整数值(例如 mkdir( 'a/dir/path', 0700, false
); ).我确实看到我可以在模式参数上使用其他模式,例如 inval() 或 ocdec(),所以我想知道...是否有类似的字符串?
例如,mkdir( 'a/dir/path', strval( 'u+rwx' ), false );
。这样做的原因是,当其他(也)没有 PHP 经验的人阅读我的代码时,我设置的权限会更加明显。
据我所知,没有内置的方法可以做到这一点。我也不认为有必要。 link 对文件权限的解释和来自 http://www.onlamp.com/pub/a/php/2003/02/06/php_foundations.html 的评论就足够了:
Value Permission Level
--------------------------
400 Owner Read
200 Owner Write
100 Owner Execute
40 Group Read
20 Group Write
10 Group Execute
4 Global Read
2 Global Write
1 Global Execute
Permission Calculations:
------------------------
400 Owner Read
+ 100 Owner Execute
+ 20 Group Write
+ 4 Global Read
-----------------------------
= 0524 Total Permission Value
这比编写函数正确解析所有可能用作文件权限的字符串更容易。
首先,我认为没有必要实现那种功能:数字权限对于懂得阅读的人来说实际上是直观的。
但是,要回答这个问题,要转换像“-rwxr-xrw-”这样的字符串,您可以使用类似这样的函数:
N.B.: 你真的应该在下面的函数中添加一些输入验证(检查字符串长度、有效字符等)
function format($permissions)
{
//Initialize the string that will contain the parsed perms.
$parsedPermissions = "";
//Each char represents a numeric constant that is being added to the total
$permissionsDef = array(
"r" => 4,
"w" => 2,
"x" => 1,
"-" => 0
);
//We cut the first of the 10 letters string
$permissions = substr($permissions, 1);
//We iterate each char
$permissions = str_split($permissions);
$length = count($permissions);
$group = 0;
for ($i = 0, $j = 0; $i < $length; $i++, $j++) {
if ($j > 2) {
$parsedPermissions .= $group;
$j = 0;
$group = 0;
}
$group += $permissionsDef[$permissions[$i]];
}
$parsedPermissions .= $group;
return $parsedPermissions;
}
当我查找 mkdir() 和 chmod() 的 PHP 手册时,似乎这两个函数都需要一个整数值(例如 mkdir( 'a/dir/path', 0700, false
); ).我确实看到我可以在模式参数上使用其他模式,例如 inval() 或 ocdec(),所以我想知道...是否有类似的字符串?
例如,mkdir( 'a/dir/path', strval( 'u+rwx' ), false );
。这样做的原因是,当其他(也)没有 PHP 经验的人阅读我的代码时,我设置的权限会更加明显。
据我所知,没有内置的方法可以做到这一点。我也不认为有必要。 link 对文件权限的解释和来自 http://www.onlamp.com/pub/a/php/2003/02/06/php_foundations.html 的评论就足够了:
Value Permission Level -------------------------- 400 Owner Read 200 Owner Write 100 Owner Execute 40 Group Read 20 Group Write 10 Group Execute 4 Global Read 2 Global Write 1 Global Execute Permission Calculations: ------------------------ 400 Owner Read + 100 Owner Execute + 20 Group Write + 4 Global Read ----------------------------- = 0524 Total Permission Value
这比编写函数正确解析所有可能用作文件权限的字符串更容易。
首先,我认为没有必要实现那种功能:数字权限对于懂得阅读的人来说实际上是直观的。
但是,要回答这个问题,要转换像“-rwxr-xrw-”这样的字符串,您可以使用类似这样的函数:
N.B.: 你真的应该在下面的函数中添加一些输入验证(检查字符串长度、有效字符等)
function format($permissions)
{
//Initialize the string that will contain the parsed perms.
$parsedPermissions = "";
//Each char represents a numeric constant that is being added to the total
$permissionsDef = array(
"r" => 4,
"w" => 2,
"x" => 1,
"-" => 0
);
//We cut the first of the 10 letters string
$permissions = substr($permissions, 1);
//We iterate each char
$permissions = str_split($permissions);
$length = count($permissions);
$group = 0;
for ($i = 0, $j = 0; $i < $length; $i++, $j++) {
if ($j > 2) {
$parsedPermissions .= $group;
$j = 0;
$group = 0;
}
$group += $permissionsDef[$permissions[$i]];
}
$parsedPermissions .= $group;
return $parsedPermissions;
}