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

时间:2015-08-14 00:45:18

标签: 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);

    }

}

在我的localhost中它正常工作,但是当我上传它时有错误。 你能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您是否尝试使用前导零的八进制数指定权限?
The PHP manual for mkdir说......

  

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

...试

mkdir($directory, 0777);

答案 1 :(得分:1)

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

来自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
?>

旁注:

就我个人而言,我认为PHP.net上的人应该更新他们关于“可能不正确”的页面添加一些说明。