web-dev-qa-db-ja.com

`mkdir()`:PHPでフォルダーを作成する権限が拒否されました

このPHPスクリプトがあります:

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

投稿の画像を保存するためのフォルダーを作成します。しかし、私はこのエラー/警告を受け取っています:

Severity: Warning
Message:  mkdir(): Permission denied

フォルダーを作成できません。

どうすれば修正できますか?私のフォルダ構造は次のようになります。

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

さらなる情報:このコードをコメント化する場合、手動で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

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
1
ltdev

問題は、Ubuntuではなく、mkdir()呼び出しにあります。

コメント に従って、ls -l /opt/lampp/htdocs/www/my-site/public/uploadsは存在しないため、recursiveパラメーターを渡してmkdir()を呼び出す必要があります。

$dir = '/uploads/posts';
if (!is_dir($dir)) {
    mkdir($dir, 755, true);
}
2
kos