Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |finished | checked

mkdir – Creando un directorio con PHP

Para crear un directorio con PHP tenemos que usar la función mkdir de PHP, está acepta 4 parámetros, aunque uno solo es necesario, el resto de los parámetros son opcionales, la sintaxis sería:

Sintaxis
 mkdir ( string $pathname [, int $mode = 0777 [, bool $recursive = FALSE [, resource $context ]]] ) : bool

El código anterior lo copié directamente de la documentación.

Veamos que representan las variables que le pasamos por parámetro a mkdir():

  • $pathname – sería toda la ruta hacia la carpeta a crear
  • $mode – son los permisos que tendría está carpeta
  • $recursive es si será recursivo en todos sus subcarpetas y archivos.

Y por último tenemos $context de tipo resource que no veremos en este momento. Talvez más adelante lo agregue.

La función mkdir nos devolverá un valor booleano en caso de que se cree con éxito el directorio nos devolverá true en caso contrario false.

Algo que tenemos que tener en cuenta al usar esta función es si apache o el servidor que usemos tiene permiso para escribir si no nos dará un error de PHP mkdir: Permission denied problem.

PHP mkdir: Permission denied problem.(linux), en Windows el siguiente ejemplo funcionará correctamente.

En el caso de linux tendríamos que hacer lo siguiente:

  1. Make sure all files are owned by the Apache group and user. In Ubuntu it is the www-data group and user chown -R www-data:www-data /path/to/webserver/www
  2. Next enabled all members of the www-data group to read and write files chmod -R g+rw /path/to/webserver/www

Hagamos un ejemplo sin permisos:

Primero crearé una carpeta para este ejemplo tal cual haría un sitio en mí LAMP(Linux Apache PHP server). Así que iré a mi carpeta /var/www/html y crearé una carpeta llamada create_file_con_php.

/var/www/html
mkdir create_file_con_php

Dentro de create_file_con_php crearé 2 archivos de PHP solo para mostrar que la carpeta será creada cuando corra el archivo file.php.

En el archivo <strong>index.php</strong> crearé un formulario para crear la carpeta que quiera.

/var/www/html/create_file_con_php/index.php
<html>
  <head>
    <title>Crear un directorio o carpeta con PHP</title>
  </head>
  <body>
    <h1>Creacón de directorio o carpeta con php</h1>
    <form action="file.php" method="post">
    <input type="text" name="name" placeholder="nombre de directorio"/>
    <input type="submit" value="submit">
    </form>
  </body>
</html>

Finalmente en el file usaré mkdir para crear el directorio

/var/www/html/create_file_con_php/file.php
<?php
  error_reporting(E_ALL);
  ini_set("display_errors", 1);
  $result = mkdir($_SERVER['DOCUMENT_ROOT']."/create_file_con_php/".$_POST['name']);
  if(!$reult):
    echo "no pudo crear la carpeta</br>";
    echo $_SERVER['DOCUMENT_ROOT']."/create_file_con_php/".$_POST['name']."</br>";
  else:
    header("Location: index.php");
  endif;
 ?>
mkdir permisson denied

Ahora haremos lo anterior explicado sobre los permisos en Linux, en mi consola pondré las siguientes líneas y las ejecutaré.

/var/www/html/
sudo chown -R www-data:www-data /var/www/html/create_directory_con_php 
sudo chmod -R g+rw /var/www/html/create_directory_con_php 

En este momento ya debería de andar chequeamos y

Utilizando file_exists

Por último, si queremos hacer algo más elaborado podemos usar la función file_exists.

Su sintaxis es la siguiente:

Sintaxis
file_exists(string $filename) :bool

Esta función recibe un string que viene a ser el path o ruta a la carpeta en mí caso sería:"var/www/html/create_directory_con_php/nombre_de_la carpeta"

Obviamente esta función retorna un booleano de si existe o no veamos como quedo el archivo directory

directory.php
<?php
  error_reporting(E_ALL);
  ini_set("display_errors", 1);

  $path = $_SERVER['DOCUMENT_ROOT']."/create_directory_con_php/".$_POST['name'];

  if(file_exists($path)){
    echo "la carpeta a crear ya existe<br/>";
    echo "<a href=\"index.php\"> <- back</a>";
  }else{

    if(create_directory($path)){
      header("Location: index.php");
    }else{
      echo "no pudo crear la carpeta</br>";
      echo $path."</br>";
    }
  }

  function create_directory($path){
    $result = mkdir($path);
    if(!$result):
      return false;
    else:
      return true;
    endif;
  }

?>
Descargar repo en github
Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category