Último carácter de una cadena en PHP: 5 formas sencillas y errores comunes

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Crear una carpeta en PHP si no existe: la evolución de una pregunta



Si alguna vez has escrito un script que sube archivos, guarda caché o genera informes, probablemente te hayas encontrado con la situación: "¡Pero la carpeta no existe!". Un error que detiene todo el script, dejando al usuario mirando una pantalla en blanco o (peor aún) un críptico error de PHP.



La pregunta "Crear una carpeta si ya no existe" en Stack Overflow acumula miles de visitas. Y con razón. Parece simple, ¿verdad? Pero el diablo, como siempre, está en los detalles: permisos, recursividad, manejo de excepciones, codificación de nombres de carpeta. En 2025, a medida que los proyectos se vuelven más complejos y los requisitos de seguridad más estrictos, la creación adecuada de directorios es una habilidad fundamental que todo desarrollador PHP debe conocer.



En este artículo, cubriremos 5 mejores prácticas para crear una carpeta en PHP si no existe. Desde una solución simple para principiantes hasta código de nivel de producción con protección contra condiciones de carrera. ¡Vamos allá!



¿Por qué mkdir() simple es malo? (historia de un error)



Al principio, muchos escriben esto:



<?phpmkdir('/path/to/my/folder');?>


Y obtienen:



  • Warning: mkdir(): No such file or directory — si la carpeta padre no existe.
  • Warning: mkdir(): File exists — si la carpeta ya existe.


Ambas advertencias no son solo "texto amarillo". En modo producción, pueden convertirse en errores fatales si el reporte de errores estricto está habilitado. También es un agujero de seguridad: un atacante podría crear una carpeta con el mismo nombre antes de que tu script lo haga (condición de carrera).



Por lo tanto, el enfoque moderno siempre implica verificación, recursividad y control de permisos.



Método 1: Clásico con is_dir() y mkdir() (para principiantes)



La forma más simple y comprensible es primero verificar si la carpeta existe, y luego crearla.



<?php$folder = '/var/www/uploads/images';

if (!is_dir($folder)) { mkdir($folder, 0755, true); echo "¡Carpeta creada!";} else { echo "La carpeta ya existe.";}?>


Lo importante aquí:

  • is_dir() — devuelve verdadero si la ruta existe y es un directorio.
  • mkdir($folder, 0755, true) — el tercer parámetro true habilita la creación recursiva. Si la carpeta padre no existe, PHP creará toda la cadena (/var/www/uploads/images → crea uploads, luego images).
  • 0755 — permisos: el propietario puede hacer todo, otros pueden leer y ejecutar.


Inconveniente: este código no está protegido contra condiciones de carrera. Si dos solicitudes verifican simultáneamente is_dir() y ambas intentan crear la carpeta, la segunda generará una advertencia.



Método 2: Enfoque de producción con @mkdir() y verificación de errores



Los desarrolladores experimentados a menudo usan el operador de supresión de errores @ y luego verifican explícitamente el resultado.



<?php$folder = '/var/www/uploads/images';

if (!is_dir($folder)) { // Suprime la advertencia si la carpeta ya existe if (!@mkdir($folder, 0755, true) && !is_dir($folder)) { throw new \\RuntimeException('Error al crear la carpeta: ' . $folder); }}?>


¿Por qué es mejor?

  • Suprimimos la advertencia pero no ignoramos el error — si la creación falla, se lanza una excepción.
  • La doble verificación !is_dir($folder) después de mkdir() protege contra condiciones de carrera: si otro proceso creó la carpeta entre nuestra verificación y la llamada a mkdir(), no fallaremos.


Nota: El operador @ reduce el rendimiento porque PHP aún genera el error pero lo oculta. En proyectos de alta carga, es mejor usar el método 3.

Blogs

Book Recommendations