我正在尝试在创建新帐户时创建目录 该目录应位于我的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上工作。
有什么想法吗?
答案 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上忽略模式。