【问题标题】:mkdir(): Permission denied when making directories using PHPmkdir():使用 PHP 创建目录时权限被拒绝
【发布时间】:2021-12-30 17:27:30
【问题描述】:

我到处寻找,但我仍然可以找到解决这个问题的方法。 我正在尝试在带有一些图像等的专用目录中生成 XML 文件。 但由于警告,我无法创建目录:Warning: mkdir(): Permission denied in C:\wamp64\www\motor\cpanel.php on line 52

/** create XML file */ 
function generisanje(){
$mysqli = OpenCon2();
$mysqli->query("SET NAMES 'utf8'");
$query = "SELECT CONCAT(Ime , Prezime) as Ime, Adresa, broj_Telefona, Drzava, Email, potrosac.id_Potrosaca, Mesto, postanski_Broj, vreme_Narucivanja, proizvodi.Boja, proizvodi.Naziv, proizvodi.Cena, proizvodi.Velicina, proizvodi.Priprema, proizvodi.Primer, proizvodi.Tip, proizvodi.Kolicina FROM potrosac JOIN proizvodi ON potrosac.id_Potrosaca=proizvodi.id_Potrosaca WHERE (SELECT DATE_FORMAT(potrosac.vreme_Narucivanja ,'%d-%m-%y'))=(SELECT DATE_FORMAT(SYSDATE(),'%d-%m-%y')) ";
$narudzbina = array();
//CONCAT(Ime , " ", Prezime)as Ime
if ($result = $mysqli->query($query)) {
  
    /* fetch associative array */
    while ($row = $result->fetch_assoc()) {
       array_push($narudzbina, $row);
    }
    if(count($narudzbina)){
         createXMLfile($narudzbina);
     }
    /* free result set */
    $result->free();
}
/* close connection */
$mysqli->close();
}
function createXMLfile($narudzbina){
   $id="strasilo";
   foreach ($narudzbina as $komad) {
    $ime        =  strval($komad['Ime']);
    mkdir("naruzbine ". date("d-m-Y")."/".$ime."", true);
   }
   }

在上面,您可以看到部分代码从 MySQL 获取查询并返回行,并根据行中的名称 (Ime) 创建目录。 我在我的 Windows 笔记本电脑上使用 WAMP。 这真的很奇怪,因为只要我使用数据库中的单个名称,它就可以工作。我需要将姓名和姓氏显示为目录名称,因此我需要 CONCAT 或将两个字符串放在一起,但每当我尝试类似的警告时,就会弹出这样的警告,我最终没有目录。

编辑:我确信 $ime 可以做到这一点。如果我改变 $ime = strval($komad['Ime']);至 $ime="一些字符串"; 一切都按原样运行,但这并不能算出我的用例。

感谢您的帮助!

【问题讨论】:

  • 两件事:1)它可能没有创建您期望的目录,所以使用绝对路径。 2)确保运行网络服务器的用户对您正在创建的目录具有写入权限。
  • 感谢您的帮助。 1)它像往常一样在我希望创建它的位置创建第一个目录,所以我猜路径没问题?问题是该目录内的其他目录。 2)如何在 WAMP 中检查?
  • 您在编辑中做了哪些更改?看起来你刚刚取消了我所做的缩进改进。
  • 对不起,如果我这样做了。我添加了这句话:这真的很奇怪,因为只要我使用数据库中的单个名称,它就可以工作。我需要将名字和姓氏显示为目录名称,所以我需要 CONCAT 或将两个字符串放在一起,但是每当我尝试类似的警告时,我都会弹出目录。

标签: php mysql wamp mkdir


【解决方案1】:

您缺少mkdir() 的参数。 $recursive 参数是第三个参数,你需要把权限放在它前面。

mkdir("naruzbine ". date("d-m-Y")."/".$ime, 0777, true);

true 被视为$permissions = 0001,因此它正在创建没有写入权限的目录。

【讨论】:

  • 谢谢!我一定是在试图让它工作时失去了它。但不幸的是,它并没有解决问题。我确信这与两个字符串合二为一有关。因此,每当我使用任何其他名称作为目录名称时,一切都会完美运行。只有当我尝试在 MySQL 等中使用 $ime.$prezime 或 CONCAT 时才会出现问题。
  • / 是目录分隔符。所以这是创建两个目录:naruzbineDD-MM-YYYY 和一个子目录$ime。这就是你想要的吗?
  • 您可能需要修复之前创建的naruzbindDD-MM-YYYY 目录的权限。
  • 谢谢。我当前的代码如下所示: mkdir($_SERVER['DOCUMENT_ROOT']."\\naruzbine ". date("d-m-Y")."\\".$ime, 0777, true);当我回显路径时,结果如下: C:\wamp64\www\motor\naruzbine 30-12-2021\Miki Milan - 正是我想要的位置和位置。我现在将尝试先制作 naruzbine ".date("d-m-Y") 文件夹,然后在其中写入。谢谢您的帮助,非常感谢。
  • 更新:我尝试先创建第一个文件夹并设置它的权限,但同样的事情发生了。
【解决方案2】:

我失去了耐心,以一种简单的方式做事。因此,我通过在字符串进入数据库之前联系字符串来解决这个问题。所以我现在只从查询中提取一个变量,一切正常。

【讨论】:

    猜你喜欢
    • 2018-08-15
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2018-09-20
    • 2021-12-11
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多