Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP代码mkdir(';images';,';0777';)创建一个具有411权限的文件夹!为什么?_Php - Fatal编程技术网

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

PHP代码mkdir(';images';,';0777';)创建一个具有411权限的文件夹!为什么?,php,Php,我可以发誓这昨天起作用了。然而,现在下面的代码毫无问题地销毁了文件夹,但在应该是777时创建了一个具有411权限的新文件夹。我的代码昨天正在做这件事 这样做的目的是压缩文件夹,传递它,删除图像,然后为图像创建一个新目录 有人能告诉我我做错了什么或者我应该做什么吗?谢谢 function delete_directory($dirname) { if (is_dir($dirname)) $dir_handle = opendir($dirname); if (!$dir_

我可以发誓这昨天起作用了。然而,现在下面的代码毫无问题地销毁了文件夹,但在应该是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');
$mode
参数是一个整数,而不是字符串。:)

以下是:


因为您应该使用八进制文字
0777
,而不是字符串中的数字
“0777”
,它实际上是八进制中的
01411


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

我也有类似的问题,但即使删除引号,权限也不会设置为0777

mkdir("infosheets/c/" , 0777);
但是创建的文件夹设置为0755

这就是解决方案:

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

您应该首先创建文件夹,然后将其权限设置为0777。它们应该分开做,原因我不知道!奇怪

如果您喜欢我尝试将设置等内容从应用程序中移出到配置文件[strings]中,那么这里有另一个解决方案

重要的是要了解权限系统是八进制的!并使用分组在三元组000 111 100中的位标志系统,该三元组等于基8整数0774

如果我们跳过前3个二进制数字,考虑声明性表示“rwx”,即“write”、“read”和“execute”,您基本上只是将每个用户、组和“others”都切换为“on”

所以如果你考虑一下,一个字节有8位,这是一种非常有效的存储255(2^8)-1个不同可能性的方法。特别是当您想到unix是什么时候编写的

如果将其转换为十进制(以10为基数)表示,则只需更改可视分组,并根据小或大端系统()填充缺少的零位

作为little endian示例的32位表示 000000000000000000001111100 aka 508,你可以把它转换成整数,它会工作的。即使您不强制转换它,解释器所做的类型推断也会起作用

很可能他们使用的是小int,它只使用16位而不是32位:),但这更离题了

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

这只是作为上下文信息,以便了解发生了什么以及下面的解决方案将如何工作

TL;DR

octdec("0774")

玩这个把戏

哦,该死!我确信这是一个掩蔽问题。请注意,
mkdir('path',777)
也会导致八进制
01411
。我有同样的问题,这可能是因为设置为0以外的其他值。您的解决方案适用于创建单个目录,但如果您使用mkdir创建完整的目录树(递归),则需要将umask设置为零(可能再次设置),例如,
$old\u umask=umask(0);mkdir($测试);umask($old_umask)
mkdir("infosheets/c/" , 0777);
$test="infosheets/c/";
mkdir($test);
chmod($test,0777);
octdec("0774")