Hola, hay dos cosas acá que son importantes destacar, lo primero es que tienes claramente un problema de permisos de archivos y directorios de lo cual no te recomiendo dar un 777 porque estarás arriesgando la seguridad de tu equipo, a la carpeta donde se crearán. Según tu trozo de código dice:
mkdir($directorio, 0755);
Intenta reemplazarlo por:
mkdir($directorio, 0755, true);
Esto hará que haga los directorios que no existen, probablemente la ruta que le estás dando no existe, y si existe, quiere decir que apache se está ejecutando con permisis totalmente distintos al directorio public_html, o has creado directorios de manera manual y se han creado con permisos de autoría de tu usuario del sistema operativo cuando apache funciona con un usuario totalmente distinto.
chmod -R +777 /opt/lampp/htdocs/
Si realmente quieres solucionar el problema de una manera muy rápida, basta con quitar el signo más y volverlo a intentar, pero el permiso 777 quiere decir que cualquier usuario dentro del sistema tendrá permisos para acceder, modificar y ejecutar archivos, esto quiere decir que alguien sin privilegios en tu pc (ya sea por un hackeo o un pariente que use prestado tu lap) tendrá acceso absoluto a ese directorio.
Lo normal primeramente es que el directorio solo tenga permisos para si mismo, esto quiere decir chmod 644, luego de eso debes decirle al sistema a que usuario le pertenece el archivo, para esto hay que darle un vistazo al directorio de lampp para saber que usuario está utilizando y para ello debes ingresar a tu terminal y ejecutar:
ls -lah /opt/lampp/htdocs
Este te dirá quien es el propietario. Por ejemplo, si el usuario es lampp, entonces debes ejecutar un cambio de propietario de manera recursiva de esta manera:
chown -r lampp:lampp /opt/lampp/htdocs/
Ahora, una ves que hayas solucionado tu problema actual debes asegurarte que no vuelva a suceder y para esto debes trabajar siempre manteniendo los permisos originales de cada archivo y directorio o corregirlos cada ves que haces un cambio. Si no tienes experiencia te recomiendo corregir los permisos en cada modificación, pero si tienes deseos de meter manos a tu sistema entonces debes modificar el archivo de configuración del apache y decirle que cambie los permisos de usuario al arrancar y que en ves de que se ejecute como lampp, que lo haga utilizando tu usuario principal del sistema, sino, también puedes agregar el grupo de lampp a tu usuario y eso se hace utilizando el comando usermod.
Acá te daré algunos enlaces para que investigues un poco más:
Los enlaces son solo para miembros.
Registrate o
iniciá sesiónLos enlaces son solo para miembros.
Registrate o
iniciá sesiónEn un futuro para prevenir estos engorrosos problemas, puedes hacer uso de un servidor virtual utilizando la aplicación llamada VirtualBox. Te recomiendo el uso de un Sistema Operativo acorde a tus proyectos, en este caso CentOS7 + httpd + mysql, de esta manera no ensuciarás tu sistema operativo principal. Acá algunos tutoriales:
Los enlaces son solo para miembros.
Registrate o
iniciá sesiónLos enlaces son solo para miembros.
Registrate o
iniciá sesiónSi tienes más dudas, puedes volver y preguntarnos nuevamente. Saludos.