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

时间:2010-02-12 11:02:47

标签: php

我发誓这是昨天的工作。然而,现在下面的代码破坏文件夹没有问题,但创建一个具有411权限的新文件夹应该是777.我的代码昨天这样做。

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

有人能告诉我我做错了什么或我应该做什么?感谢

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');

5 个答案:

答案 0 :(得分:31)

因为你应该使用八进制文字0777,而不是字符串数"0777",实际上是01411八进制。

答案 1 :(得分:6)

我有同样的问题,但即使删除引号后,权限也不会设置为0777.

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

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

这就是解决方案:

$test="infosheets/c/";
mkdir($test);
chmod($test,0777);

你应该首先制作文件夹,然后将它的权限设置为0777.它们应该由于一个未知的原因单独完成!奇怪!

答案 2 :(得分:2)

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

$mode param是一个整数,而不是一个字符串。 :)

这是example

<?php
mkdir("/path/to/my/dir", 0700);
?>

您必须使用:

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

答案 3 :(得分:1)

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

第二个参数应该是int,而不是字符串。取出引号。

答案 4 :(得分:1)

所以这是另一个解决方案,如果你喜欢我尝试将类似应用程序的设置移动到配置文件[strings]中。

重要的是要明白,权限系统是八进制的!并使用以三元组000 111 111 100分组的位标志系统,它等于基数8整数0774.

如果我们跳过前三个二进制数字并考虑声明性表示&#34; rwx&#34;这是&#34;写&#34; &#34;读&#34; &#34;执行&#34;而你基本上只是将所有这些都转换为&#34; on&#34;每个用户,组和仅允许读取&#34;其他&#34;。

因此,如果您考虑一下,一个字节有8位,这是一种非常有效的方式来存储255(2 ^ 8)-1种不同的可能性。特别是如果你考虑unix写的时候。

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

作为小端实例的32位表示 00000000 00000000 00000001 11111100 又名508,你实际上可以转换为整数,它将工作。即使您没有将其转换为类型推断,解释器也会起作用。

它们可能使用的是small-int,它只使用16位而不是32位:)但这更偏离主题...

更详细的信息可以在这里找到:)或谷歌 https://en.wikipedia.org/wiki/Filesystem_permissions

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

<强> TL; DR

octdec("0774")

诀窍