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