`mkdir()`:使用 PHP 创建文件夹的权限被拒绝

ltd*_*dev 3 php permissions

我有这个 PHP 脚本:

$dir = FCPATH . 'uploads' . DIRECTORY_SEPARATOR . 'posts'; // is in CodeIngiter
if (!is_dir($dir)) {
    mkdir($dir, 755);
}
Run Code Online (Sandbox Code Playgroud)

这将创建一个用于存储帖子图像的文件夹。但是我收到此错误/警告:

Severity: Warning
Message:  mkdir(): Permission denied
Run Code Online (Sandbox Code Playgroud)

我无法创建该文件夹。

我怎样才能解决这个问题?我的文件夹结构如下所示:

/opt/lampp/htdocs/www/my-site/public/ (uploads/posts) // all folders inside files will generate in php
Run Code Online (Sandbox Code Playgroud)

一些进一步的信息:如果我评论此代码,手动创建posts文件夹,然后尝试上传文件,我会收到一条错误消息,指出目标路径不可写。

输出ls -l /opt/lampp/htdocs/www/my-site/

drwxrwxr-x 15 lykos lykos 4096 Sep 17 23:08 application
drwxrwxrwx 6 lykos lykos 4096 Sep 29 22:00 public
drwxrwxr-x 8 lykos lykos 4096 Sep 7 12:31 system
Run Code Online (Sandbox Code Playgroud)

输出ls -l /opt/lampp/htdocs/www/my-site/public

drwxr-xr-x 4 lykos lykos 4096 Sep 18 21:48 css
drwxr-xr-x 2 lykos lykos 4096 Sep 27 19:18 img
-rwxrwxr-x 1 lykos lykos 9872 Sep 17 23:04 index.php
drwxr-xr-x 8 lykos lykos 4096 Sep 27 20:06 js
drwxr-xr-x 2 lykos lykos 4096 Sep 29 20:34 uploads
Run Code Online (Sandbox Code Playgroud)

kos*_*kos 5

问题出在你的mkdir()调用中,而不是在 Ubuntu 中。

根据您的评论ls -l /opt/lampp/htdocs/www/my-site/public/uploads不存在,因此您应该调用mkdir()传递recursive参数:

$dir = '/uploads/posts';
if (!is_dir($dir)) {
    mkdir($dir, 755, true);
}
Run Code Online (Sandbox Code Playgroud)