zl程序教程

您现在的位置是:首页 >  其他

当前栏目

PHPchmod函数与批量修改文件目录权限

批量权限 函数 修改 文件目录
2023-06-13 09:14:18 时间
语法
chmod(file,mode)参数描述
file必需。规定要检查的文件。
mode可选。规定新的权限。
mode参数由4个数字组成:
第一个数字永远是0
第二个数字规定所有者的权限
第二个数字规定所有者所属的用户组的权限
第四个数字规定其他所有人的权限
可能的值(如需设置多个权限,请对下面的数字进行总计):
1-执行权限
2-写权限
4-读权限
来看个简单的实例
复制代码代码如下:

<?php
chmod("/somedir/somefile",755);//十进制数,可能不对
chmod("/somedir/somefile","u+rwx,go+rx");//字符串,不对
chmod("/somedir/somefile",0755);//八进制数,正确的mode值
?>

改进递归文件模式@infosoft....,这是一个小短,应处理的Linux文件系统的所有文件类型。这个可以批量更改文件或目录的权限
复制代码代码如下:

<?php
functionchmodr($path,$filemode){
if(!is_dir($path))
returnchmod($path,$filemode);
$dh=opendir($path);
while(($file=readdir($dh))!==false){
if($file!="."&&$file!=".."){
$fullpath=$path."/".$file;
if(is_link($fullpath))
returnFALSE;
elseif(!is_dir($fullpath)&&!chmod($fullpath,$filemode))
returnFALSE;
elseif(!chmodr($fullpath,$filemode))
returnFALSE;
}
}
closedir($dh);
if(chmod($path,$filemode))
returnTRUE;
else
returnFALSE;
}
?>

如果你目录太多的话可以用
复制代码代码如下:
<?php
$iterator=newRecursiveIteratorIterator(newRecursiveDirectoryIterator($pathname),RecursiveIteratorIterator::SELF_FIRST);
foreach($iteratoras$item){
chmod($item,$filemode);
}
?>

这段代码来修改目录的权限
哈哈,我们不只是讲chmod简单语法,而且还做了复杂的关于chmod使用实例

说明
boolchmod(string$filename,int$mode)
尝试将filename所指定文件的模式改成mode所给定的。

注意mode不会被自动当成八进制数值,而且也不能用字符串(例如"g+w")。要确保正确操作,需要给mode前面加上0:

mode参数包含三个八进制数按顺序分别指定了所有者、所有者所在的组以及所有人的访问限制。每一部分都可以通过加入所需的权限来计算出所要的权限。数字1表示使文件可执行,数字2表示使文件可写,数字4表示使文件可读。加入这些数字来制定所需要的权限。有关UNIX系统的文件权限可以阅读手册“man1chmod”和“man2chmod”。
复制代码代码如下:

<?php
//Readandwriteforowner,nothingforeverybodyelse
chmod("/somedir/somefile",0600);

//Readandwriteforowner,readforeverybodyelse
chmod("/somedir/somefile",0644);

//Everythingforowner,readandexecuteforothers
chmod("/somedir/somefile",0755);

//Everythingforowner,readandexecuteforowner"sgroup
chmod("/somedir/somefile",0750);
?>

如果成功则返回TRUE,失败则返回FALSE。

Note:当前用户指的是执行PHP的用户。很可能和通常的shell或者FTP用户不是同一个。在大多数系统下文件模式只能被文件所有者的用户改变。


Note:本函数不能作用于远程文件,被检查的文件必须通过服务器的文件系统访问。

Note:当安全模式打开的时候,PHP会检查所操作的文件是否和正在执行的脚本具有相同的UID(所有者)。要注意的是,不能修改SUID,SGID和stickybits。