Skip to content

Instantly share code, notes, and snippets.

@alelazcano
Last active April 14, 2023 21:41
Show Gist options
  • Save alelazcano/0fa6d0e019332d0166a1a2896438a394 to your computer and use it in GitHub Desktop.
Save alelazcano/0fa6d0e019332d0166a1a2896438a394 to your computer and use it in GitHub Desktop.
Funciones útiles y curiosas en PHP

Podemos ejecutar una búsqueda parametrizada por la extensión de archivo que necesitemos.

Para buscar archivos solo de extensión PHP (o la que necesites, jpg, gif, html, etc).

<?php
     $files = glob('*.php');
    print_r($files);
?>

Resultado:

Array
(
  [0] => index.php
  [1] => config.php
)

Para buscar archivos de varias extensiones: php, jpg, gif, html... las vas agregando.

<?php
     $files = glob('*.{php,txt}', GLOB_BRACE);
    print_r($files);
?>

Resultado:

Array
(
  [0] => index.php
  [1] => config.php
  [2] => readme.txt
  [3] => licence.txt
)

Créditos

<?php
  
  $codidoParaColorear = "<?php echo "hola mundo" ?>"
  
  highlight_string($codidoParaColorear);
  
?>

Ver captura de pantalla con el resultado: https://snipboard.io/EG6CTx.jpg

También puede usarse para colorear archivos completos al mostrarse:

<?php
  
  highlight__file("./archivo.php");
  
?>

Créditos

Estas funciones de PHP permiten comprimir texto para ahorrar la cantidad de caracteres, y también revertir luego para poder visualizarlo de manera normal.

<?php
     $texto = "Lorem ipsum dolor sit, amet consectetur adipisici...";
    //print_r(strlen($texto)) => da 481 caracteres

     $compress = gzcompress($texto);
    //print_r(strlen($compress)); => ahora comprimida va a dar 259 caracteres
    
    // la compresión por defecto es 6, pero se puede especificar un valor de 0 a 9 de esta manera
    // gzcompress('Texto que se quiere comprimir', 9);

     $original = gzuncompress($compress);
    print_r(strlen($original)); // regresa la frase inicial
?>

Nota: no debe confundirse este método usado para comprimir cadenas de texto, con el gZip que comprime archivos

Otra función útil es el minificado, esto quita comentarios y espacios blancos, reduciendo el peso/tamaño de archivos para ciertos usos.

Créditos

Hay una colección de constantes útiles, para ciertos casos de uso, que pueden servirnos:

En este caso _FUNCTION_ devolverá el nombre de la función en donde estamos.

<?php
     function calcular(){
        echo
              _FUNCTION_;
     }
    calcular();
 ?>

Resultado:

// devolverá
calcular

Ej: cuando vemos mensajes de tipo "error XX ocurrido cerca de la línea YY".


Las funciones // nótese que son dos guines bajos a cada lado

__LINE__ devolverá la línea del archivo en donde está.

__DIR__ devuelve el directorio o carpeta en donde está el archivo en cuestión.

__FILE__ lo mismo, pero va a devolver la ruta incluido el nombre del archivo (ej: `/app/config/config.php´)

__CLASS__ y METHOD sirven para exponer el nombre de la clase o método donde se está ejecutando la constante.

Ejemplo:

<?php
     class HTTP{
         function init O)
             echo
                  __CLASS__
                  __METHOD__
         }
     }
    $http = new НТТР();
     $http
            init();
?>

Resultado:

__CLASS__ => HTTP
__METHOD__ => HTTP::init

Créditos Documentación PHP

La función PHP func_get_args() expone y cuenta la cantidad de argumentos pasados a una función. En este caso tomará los argumentos pasados a saludo()y los expondrá con el print_r.

<?php
    function saludo(){
      
      $args = func_get_args();
      
      print_r($args);
  
  }

  saludo("Marcos", "Rivas", "Lena");

?>

Resultado:

Array
(
  [0] => Marcos
  [1] => Rivas
  [2] => Lena
)

Créditos

Por si necesitamos crear un ID único de forma rápida, fácil y a la vez "ordenable", en vez de ir por randomizar una función matemática o hacer un hash rebuscado, esta es una mejor opción en la mayoría de casos de uso.

<?php
     echo uniqid('id_');
 ?>

Resultado:

// primera generación
  6095c350540547
// segunda generación a pocos segundos
 6095c3529ea207
// tercera generación agregando el prefijo id_
  id_6095c3870e7dc2

¿Por qué son similares unos de otros?

Si leemos la documentación PHP vemos la lógica de generación de estos ID únicos, y se basan en el tiempo del servidor, entonces cada milésima de segundo que pasa es diferente.

Admite los parámetros prefix para añadir una frase o dato arbitrario que necesitemos y more_entropy que aumenta la confiabilidad. Aún así, NO debe usarse como aleatorio "de seguridad" ni en reemplazo de hashes seguros, etc (ver documentación).

Lógica de como se genera: first 8 hex chars = Unixtime, last 5 hex chars = microseconds

Caso de uso práctico:

  • Ponerlo como ID de pedido, en un ecommerce.
  • Número de consulta en un formulario de contacto.
  • Confirmación de trámite o turno médico.
  • Simplemente como complemento o reemplazo de timestamp, donde no sea necesario guardar la fecha, pero si diferentes versiones y reconocer antiguas y más recientes.
  • Como versiones en cambios de una información o documento, etc.

En definitiva, donde necesitamos un número más o menos aleatorio, que no sea un autoincremental tan sencillo como el de una tabla mysql, pero donde si podamos hacer un rastreo de la antiguedad sabiendo que no son consecutivos pero si incrementales a grandes rasgos, y con cierta aleatoriedad.

Ejemplo:

prefijo turno_orl_ uniqid 6095c350540547 => turno_orl_6095c350540547

podemos luego rastrear primero por "turno", luego por "orl" y finalmente por ID; sino también sólo por ID, en caso de un totem o buscador de turnos, etc.

al mismo tiempo vamos a saber que el 6095c3529ea207 que quizás se dio para otro servicio médico, es posterior, ya que inicia por 6095c35 pero luego el resto finaliza distinto y con tendencia menor.

Créditos

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment