警告:mkdir():权限被拒绝

时间:2015-04-02 13:08:15

标签: php windows apache

我正在尝试在创建新帐户时创建目录 该目录应位于我的images文件夹中,用于更好地分离上传的图像。

//get the ID of the new account that was just created/inserted
$accountID = mysqli_insert_id($dbc);

//create a new directory path for that account
$directoryPath =  "../images/" . $accountID;

// check if the directory exists
if (!is_dir($directoryPath)) {
    //create the directory
    mkdir($directoryPath, 0777);         //breaking here
}      

几天前我没问题,但是今天测试时我遇到了问题。

我在页面中添加了ini_set('display_errors', 'On');,以查看我被抛出的错误,这是一个权限错误。

Warning: mkdir(): Permission denied

images文件夹具有对所有用户和组以及任何父文件夹的完全读/写权限,因此我不明白这将是一个什么问题,而且它之前曾多次工作过。

如果重要的话我在Windows上工作。

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

为避免在CLI用户和Apache用户之间花费太多时间处理权限问题,一个简单的配置就是为这两个进程使用相同的用户。

通过执行

获取您的用户ID和群组
$ id
uid=1000(my_user), gid=1000(my_group), ...

然后:

$ sudo service apache2 stop
$ sudo vi /etc/apache2/envvars
export APACHE_RUN_USER=my_user
export APACHE_RUN_GROUP=my_group
$ sudo chown -R my_user /var/lock/apache2

比将整个目录权限更改为777

更好更安全

答案 1 :(得分:0)

您必须确保父目录允许您创建文件夹,而不是使用 0777 权限创建的自身文件夹...
另外,请检查 Apache 服务器启动的用户 在使用mkdir()

之前,请检查目录是否已存在
if (!is_dir ($directoryPath) ) {
    mkdir($directoryPath, 0777);
}

答案 2 :(得分:0)

我想你应该试试这个 -

mkdir("../images/".$accountID, 0777, 'R');

递归文件夹创建可能会导致问题。 还可以从 - mkdir

获取更多信息

同时检查文件夹权限。

答案 3 :(得分:0)

  

如果重要的话我在Windows上工作。

确实如此。

尝试更改此

if (!is_dir($directoryPath)) {
    //create the directory
    mkdir($directoryPath, 0777);         //breaking here
}   

到此

if (!is_dir($directoryPath)) {
    //create the directory
    mkdir($directoryPath);         //breaking here
}   

您位于 Windows 框中,因此它将忽略chmod模式。也尝试使用完整路径而不是相对路径。

  

默认情况下,模式为0777,这意味着可以进行最广泛的访问。   有关模式的更多信息,请阅读chmod()页面上的详细信息。

     

注意:在Windows上忽略模式

http://php.net/manual/en/function.mkdir.php