mkdir(“ dir”,0777)和chmod(“ dir”,077)不起作用

时间:2019-03-13 18:39:57

标签: php chmod mkdir

简而言之,以下代码旨在创建类似的目录结构:

>Attachments
  >Lot
    >Layer

附件目录是固定的。拍卖品带有0777权限。层目录没有。在担心umask可能有问题之后,我添加了chmod行,但是它没有任何改变。

// 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 个答案:

答案 0 :(得分:1)

您有一个印刷错误:

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

该变量不存在,所以是的,它将永远无法工作。 PHP的mkdir尊重Linux中的umask(假设您使用的是Linux,否则不会发生),因此不会按要求在0777 mask创建目录。但是chmod不尊重umask,因此您对chmod的第一次调用实际上是将该目录的掩码更改为0777。第二次调用由于变量名错误而失败。因此,您所看到的行为。

FWIW,mkdir具有第二个可选的布尔参数,该参数可让您通过向其传递完整的目录路径来在单个调用中递归创建目录结构(请参见here)。如果您想完全避免随后对chmod的调用,则还应该查看this问题,以了解在调用mkdir之前如何处理umask。