Leer parámetros en script de PHP usando getopt



Si estás escribiendo una aplicación de consola en PHP, la mejor forma de leer los parámetros que recibes, es usando la función getopt.

Cómo trabajar con opciones

Veamos un ejemplo sencillo, imagina que tu aplicación puede recibir 2 opciones: a y b. Deseas que tu programa pueda ser invocado de cualquiera de estas formas: cmd.php -ab cmd.php -a -b cmd -a

Entonces el código que debes escribir es algo como esto:

<?php
  $opc = getopt('ab');
  if (isset($opc['a']))
  {
    //Codigo a ejecutar cuando se envia parametro a
      print("Se recibe parametro 'a' \n" );
  }
  if (isset($opc['b']))
  {
      //Codigo a ejecutar cuando se envia parametro b
      print("Se recibe parametro 'b' \n" );
  }
 ?>

Ahora puedes probar el programa y verás que detecta cuando has enviado las opciones que esperas.

Ejemplo de función getopt en php
Ejemplo de función getopt

En el código anterior cuando llamamos a la función getopt('ab') recibimos un arreglo (array) en donde nos incluye las opciones con que se llamó el programa, y le decimos que las opciones válidas son a y b

Podemos usar la función var_dump para consultar el resultado de la función y así tener una mejor idea de como trabaja.

Cómo trabajar con opciones que incluyen un valor

Ahora veremos otro ejemplo, imagina que estás haciendo un programa para crear un archivo de log, y tienes un parámetro -n en donde debes recibir el nombre del archivo y además puedes recibir un parámetro -s el cual indica que si el archivo ya existe, puedes sobreescribirlo. El código seria algo como esto:

<?php
  $opc = getopt("sn:");
  $sobrescribir = false;
  if (isset($opc['s']))
  {
      $sobrescribir = true;
  }
  if ( isset($opc['n']) &&  $opc['n'] != "")
  {
      print("Se crear el archivo " . $opc['n'] . ' con opcion sobreescribir: ' . ($sobrescribir ? 'Si' : 'No' )  );
  }
  else {
     print("ERROR: Se requiere el nombre del archivo");
  }
 ?>
Ejemplo de uso de getopt con valores en php
Ejemplo de getopt con valores

La diferencia ahora está en que llamamos a la función de esta forma: getopt("sn:"), esos dos puntos después de la letra n significa que ese parámetro puede recibir un valor adicional. Para leer el valor que nos envían usamos $opc['n']

Cómo trabajar con argumentos con nombres largos

Cuando trabajamos con programas de consola, existe otro tipo de argumentos con un nombre más largo, por ejemplo cmd.php --add o cmd.php --nombre="Luis" --sobrescribir

Aquí hay un ejemplo de cómo trabajar con versiones largas:

<?php
  $opc = getopt("", array('sobreescribir', 'nombre:'));
  //Trasladar nombres largos a cortos...
  $sobrescribir = false;
  if (isset($opc['sobreescribir'])  )
  {
      $sobrescribir = true;
  }
  if ( isset($opc['nombre']) &&  $opc['nombre'] != "")
  {
      print("Se crear el archivo " . $opc['nombre'] . ' con opcion sobreescribir: ' . ($sobrescribir ? 'Si' : 'No' )  );
  }
  else {
     print("ERROR: Se requiere el nombre del archivo");
  }
 ?>
Parámetros con nombres largos en funcion getopt
Parámetros con nombres largos

La diferencia aquí, es que usamos el segundo parámetro de la función getopt y el enviamos un array con los parámetros que podemos recibir: $opc = getopt("", array('sobreescribir', 'nombre:'));

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *