mkdir ("dir", 0777) и chmod ("dir", 077) не работают - PullRequest
0 голосов
/ 13 марта 2019

Короче говоря, следующий код предназначен для создания структуры каталогов:

>Attachments
  >Lot
    >Layer

Каталог вложений исправлен. Лот выходит с разрешениями 0777. Каталог Layer этого не делает. Я добавил строки chmod после опасений, что, возможно, виноват umask, но это ничего не изменило.

// Create directory for this entry's attachments if needed.
  $attachment_dir = $config_ini['OOCDB_defaults']['attachment_dir'];
  $attachment_lot_dir = $attachment_dir.$txtLotID."/";
  $attachment_lot_layer_dir = $attachment_lot_dir . $txtLayer."/";


  if(!is_dir($attachment_lot_dir)){
      mkdir($attachment_lot_dir , 0777);
  }

  if(!is_dir($attachment_lot_layer_dir )){
      mkdir($attachment_lot_layer_dir , 0777);
  }

  chmod($attachment_lot_dir ,0777);
  chmod($attachment_lot_layer ,0777);   
  $sleuthFile = $attachment_lot_layer_dir . "makeSleuthImg.txt";
  $fp = fopen($sleuthFile,"w") or die("unable to open File! <br>");
  //Write the string to the file and close it.

1 Ответ

1 голос
/ 14 марта 2019

У вас есть типографская ошибка:

$attachment_lot_layer_dir = $attachment_lot_dir . $txtLayer."/";
...
chmod($attachment_lot_layer ,0777);

Эта переменная не существует, так что да, это никогда не сработает.Mkdir из PHP уважает umask в Linux (при условии, что вы работаете в Linux, иначе этого не произойдет), поэтому ваши каталоги не создаются в маске 0777 в соответствии с запросом;однако chmod не учитывает umask, поэтому ваш первый вызов chmod на самом деле меняет маску этого каталога на 0777. Второй вызов не выполняется из-за неверного имени переменной.Отсюда и поведение, которое вы видите.

FWIW, mkdir имеет второй необязательный логический параметр, который позволит вам рекурсивно создать структуру каталогов за один вызов, передав ему полный путь к каталогу (см. здесь ).Вам также следует взглянуть на этот вопрос, чтобы понять, что делать с umask перед вызовом mkdir, если вы хотите полностью избежать последующих вызовов chmod.

...