php文件夹0777,PHP代码mkdir(‘images’,’0777’)创建一个具有411个权限的文件夹! 为什么?...

我可以发誓昨天这个工作了。 现在,下面的代码可以毫无问题地破坏该文件夹,但是当它应为777时创建一个具有411权限的新文件夹。我的代码昨天已在执行此操作。

这样做的目的是压缩一个文件夹,传送它,删除图像,然后为图像创建一个新目录。

有人可以告诉我我做错了或应该做些什么吗? 谢谢

function delete_directory($dirname) {

if (is_dir($dirname))

$dir_handle = opendir($dirname);

if (!$dir_handle)

return false;

while($file = readdir($dir_handle)) {

if ($file !="." && $file !="..") {

if (!is_dir($dirname."/".$file))

unlink($dirname."/".$file);

else

delete_directory($dirname.'/'.$file);

}

}

closedir($dir_handle);

rmdir($dirname);

return true;

}

$directoryToZip="jigsaw/"; // This will zip all the file(s) in this present working directory

$outputDir="/"; //Replace"/" with the name of the desired output directory.

$zipName="jigsaw.zip";

include_once("createzipfile/CreateZipFile.inc.php");

$createZipFile=new CreateZipFile;

/*

// Code to Zip a single file

$createZipFile->addDirectory($outputDir);

$fileContents=file_get_contents($fileToZip);

$createZipFile->addFile($fileContents, $outputDir.$fileToZip);

*/

//Code toZip a directory and all its files/subdirectories

$createZipFile->zipDirectory($directoryToZip,$outputDir);

/*

$rand=md5(microtime().rand(0,999999));

$zipName=$rand."_".$zipName;

*/

$fd=fopen($zipName,"wb");

$out=fwrite($fd,$createZipFile->getZippedfile());

fclose($fd);

$createZipFile->forceDownload($zipName);

@unlink($zipName);

delete_directory('jigsaw/assets/images/jigsaw_image');

mkdir('jigsaw/assets/images/jigsaw_image','0777');

因为您应该使用八进制立即数0777,而不是字符串中的数字"0777"(实际上是八进制的01411)。

哦,该死的! 我确信这是一个掩盖问题。

请注意,mkdir(path, 777)也将导致八进制01411。

我有一个同样的问题,但是即使删除引号,该权限也不会设置为0777。

mkdir("infosheets/c/" , 0777);

但是创建的文件夹设置为0755!

多数民众赞成在解决方案:

$test="infosheets/c/";

mkdir($test);

chmod($test,0777);

您应该首先制作该文件夹,然后将其权限设置为0777。由于我的未知原因,应该分别进行处理!奇怪!

我也有同样的问题

这可能是由于umask设置为非0的原因。您的解决方案可用于创建单个目录,但是使用mkdir(递归)创建完整的目录树时,您需要将umask设置为零(也许 再次返回),例如 $old_umask = umask(0); mkdir($test); umask($old_umask)

bool mkdir(string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context]]])

$mode参数是整数,而不是字符串。 :)

例子如下:

mkdir("/path/to/my/dir", 0700);

?>

您必须使用:

mkdir('jigsaw/assets/images/jigsaw_image', 0777);

因此,如果您喜欢我尝试将诸如设置之类的内容从应用程序移至配置文件[strings]中,则这是另一种解决方案。

重要的是要知道,权限系统是八进制的!并使用以三胞胎000 111 111 100分组的位标记系统,该系统等于以8为底的整数0774。

如果我们跳过前3个二进制数字并考虑声明性表示形式" rwx",即"写""读""执行",而您基本上只是将每个用户,组将所有它们都切换为"开",并且只允许对"其他"。

因此,如果您考虑一个字节,则它具有8位,这是存储255(2 ^ 8)-1个不同可能性的一种非常有效的方法。特别是当您考虑Unix的编写时间时。

如果将其转换为十进制(以10为底)表示形式,则只需更改视觉分组,然后根据大小端或大小端系统(https://en.wikipedia.org/wiki/Endianness)填充丢失的零位。

作为小端顺序示例的32位表示形式

00000000 00000000 00000001 11111100

aka 508,您实际上可以将其转换为整数,它将正常工作。即使您不强制转换,解释器也可以进行类型推断。

他们很可能使用small-int,它只会使用16位而不是32位:),但这更不是话题了...

更详细的信息可以在这里找到:)或google

https://zh.wikipedia.org/wiki/文件系统_权限

这只是作为上下文信息,因此请了解发生了什么以及以下解决方案将如何工作。

TL; DR

octdec("0774")

绝招

http://php.net/manual/zh/function.mkdir.php

第二个参数应该是一个整数,而不是字符串。取出报价。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值