Я могу поклясться, что это работало вчера. Однако теперь код ниже разрушает папку без проблем, но создает новую папку с разрешениями 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');
Потому что вы должны использовать восьмеричный литерал 0777
, а не номер в строке "0777"
, который на самом деле 01411
в восьмеричном.
У меня была одна и та же проблема, но даже после удаления кавычек разрешение не будет установлено на 0777.
mkdir("infosheets/c/" , 0777);
но созданная папка установлена на 0755!
это решение:
$test="infosheets/c/"; mkdir($test); chmod($test,0777);
вы должны сначала сделать папку и установить ее разрешение 0777. Они должны быть сделаны отдельно по неизвестной причине для меня! странный!
bool mkdir(string $pathname [, int $mode = 0777 [, bool $recursive = false [, resource $context]]])
Параметр $mode
является целым числом, а не строкой. 🙂
Вот пример :
<?php mkdir("/path/to/my/dir", 0700); ?>
Вы должны использовать:
mkdir('jigsaw/assets/images/jigsaw_image', 0777);
http://php.net/manual/en/function.mkdir.php
Второй аргумент должен быть int, а не строкой. Выньте цитаты.
так что вот еще одно решение, если вам нравится, что я пытаюсь переместить такие вещи, как настройки из приложения, в файл конфигурации [строки].
важно понимать, что система разрешений является восьмеричной! и использует систему бит-флагов, сгруппированную в триплеты 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://en.wikipedia.org/wiki/Filesystem_permissions
это просто означает контекстную информацию, чтобы понять, что происходит и как будет работать следующее решение.
TL; DR
octdec("0774")
делает трюк