`mkdir()`: Permiso denegado para crear carpetas con PHP

`mkdir()`: Permiso denegado para crear carpetas con PHP

Tengo este script PHP:

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

Lo que crea una carpeta para almacenar las imágenes de las publicaciones. Sin embargo, recibo este error/advertencia:

Severity: Warning
Message:  mkdir(): Permission denied

y no puedo crear la carpeta.

¿Cómo puedo arreglar esto? Mi estructura de carpetas se ve así:

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

Alguna información adicional: si comento este código, creo manualmente la postscarpeta y luego intento cargar un archivo, aparece un error que dice que no se puede escribir en la ruta de destino.

Salida de 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

Salida de 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

Respuesta1

El problema está en tu mkdir()llamada, no en Ubuntu.

segúntu comentario, ls -l /opt/lampp/htdocs/www/my-site/public/uploadsno existe, por lo que deberías llamar mkdir()pasando el recursiveparámetro:

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

información relacionada