如何使用PHP创建目录后设置权限


How to set a permission after creating a directory using PHP?

我的代码有问题。在我的代码中,有一部分可以在服务器中生成目录,当我检查FTP中的目录时,生成了初始文件夹,但子文件夹没有,当我试图打开主文件夹时,有一个日志说:

Response:   550 /httpdocs/ecommerce/image/catalog/sellers/826: Permission denied
Error:  Failed to retrieve directory listing

当我检查新创建的主文件夹时,它包含以下权限:

e(01411)

在我的代码中,我有这个:

public function addUser($data) {
    $this->db->query("INSERT INTO `" . DB_PREFIX . "user` SET username = '" . $this->db->escape($data['username']) . "', shop_name = '" . $this->db->escape($data['shop_name']) . "', user_group_id = '" . (int)$data['user_group_id'] . "', salt = '" . $this->db->escape($salt = substr(md5(uniqid(rand(), true)), 0, 9)) . "', password = '" . $this->db->escape(sha1($salt . sha1($salt . sha1($data['password'])))) . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', image = '" . $this->db->escape($data['image']) . "', status = '" . (int)$data['status'] . "', date_added = NOW()");
    $get_customer_id = $this->db->getLastId();
    $directory = DIR_IMAGE . 'catalog/sellers/' . $get_customer_id;
    if(!file_exists($directory)) {
        mkdir($directory, 777);
        mkdir($directory . '/profile', 777);
        mkdir($directory . '/banner', 777);
        mkdir($directory . '/products', 777);
    }
}

在我的本地主机它工作正常,但当我上传它有一个错误。你能帮我一下吗?

您的所有权限设置都缺少前导(八进制)零。

从chmod的手册:

<?php
chmod("/somedir/somefile", 755);   // decimal; probably incorrect
chmod("/somedir/somefile", "u+rwx,go+rx"); // string; incorrect
chmod("/somedir/somefile", 0755);  // octal; correct value of mode
?>
  • http://php.net/manual/en/function.chmod.php

旁注:

我个人认为PHP.net的人应该更新他们的页面关于"可能不正确"添加一些澄清

您是否尝试使用前导为零的八进制数指定权限?
mkdir的PHP手册说…

请注意,您可能希望将模式指定为八进制数,这意味着它应该有一个前导零。

试试……

mkdir($directory, 0777);