9 Funciones útiles PHP y características que usted necesita saber

Incluso después de usar PHP desde hace años, tropezamos con las funciones y características que no sabía nada. Algunos de estos pueden ser muy útiles, pero subutilizado. Con esto en mente, he compilado una lista de nueve funciones de PHP muy útiles y características que deben estar familiarizados con.

1. Funciones con un número arbitrario de argumentos

Usted puede saber ya que PHP permite definir funciones con argumentos opcionales. Pero también hay un método que permite el número completamente arbitrario de argumentos de función.

En primer lugar, aquí hay un ejemplo con sólo argumentos opcionales:
Ver plaincopy a clipboardprint?
/ / Función con dos argumentos opcionales
function foo ($ arg1 =”, $ arg2 =”) {

echo “arg1: $ arg1 n”;
echo “arg2: $ arg2 n”;

}

foo (‘hola’, ‘mundo’);
/ * Imprime:
arg1: hola
arg2: el mundo
* /

foo ();
/ * Imprime:
arg1:
arg2:
* /

Ahora, vamos a ver cómo podemos construir una función que acepta cualquier número de argumentos. Esta vez vamos a utilizar func_get_args ():
Ver plaincopy a clipboardprint?
/ / Sí, la lista de argumentos puede estar vacío
la función foo () {

/ / Devuelve una matriz de todos los argumentos que se pasan
$ Args = func_get_args ();

foreach ($ args como $ k => $ v) {
echo “arg” ($ k +1) “: $ v n”;..
}

}

foo ();
/ * No imprime * /

foo (‘hola’);
/ * Imprime
arg1: hola
* /

foo (‘hola’, ‘mundo’, ‘nuevo’);
/ * Imprime
arg1: hola
arg2: el mundo
arg3: nuevo
* /
2. Utilizando glob () para buscar archivos

Muchas de las funciones PHP tienen nombres largos y descriptivos. Sin embargo, puede ser difícil saber lo que es una función llamada glob () no hace menos que ya esté familiarizado con ese término de otros lugares.

Piense en ello como una versión más capaz de la función scandir (). Se puede permitir búsquedas de archivos mediante el uso de patrones.
Ver plaincopy a clipboardprint?
/ / Obtener todos los archivos php
$ Archivos = glob (“*. php ‘);

print_r ($ archivos);
/ * La salida se ve así:
Matriz
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
)
* /

Usted puede obtener varios tipos de archivo como este:
Ver plaincopy a clipboardprint?
/ / Obtener todos los archivos php y TXT
$ Archivos = glob (‘*.{ php, txt} ‘, GLOB_BRACE);

print_r ($ archivos);
/ * La salida se ve así:
Matriz
(
[0] => phptest.php
[1] => pi.php
[2] => post_output.php
[3] => test.php
[4] => log.txt
[5] => test.txt
)
* /

Tenga en cuenta que los archivos en realidad pueden ser devueltos con una ruta, dependiendo de su consulta:
Ver plaincopy a clipboardprint?
$ Archivos = glob (‘../ imágenes / a *. jpg ‘);

print_r ($ archivos);
/ * La salida se ve así:
Matriz
(
[0] => .. / images / apple.jpg
[1] => .. / images / art.jpg
)
* /

Si desea obtener la ruta completa a cada fichero, sólo puede llamar a la realpath () sobre los valores devueltos:
Ver plaincopy a clipboardprint?
$ Archivos = glob (‘../ imágenes / a *. jpg ‘);

/ / Aplica la función a cada elemento de la matriz
$ Archivos = array_map (‘realpath, archivos $);

print_r ($ archivos);
/ * La salida se ve así:
Matriz
(
[0] => C: wamp www imagenes apple.jpg
[1] => C: wamp www imagenes art.jpg
)
* /
3. Información sobre el uso de memoria

Al observar el uso de memoria de secuencias de comandos, usted puede ser capaz de optimizar el código mejor.

PHP tiene un recolector de basura y un gestor de memoria bastante complejo. La cantidad de memoria que utiliza el script. puede subir y bajar durante la ejecución de un script. Para obtener el uso de la memoria actual, podemos utilizar el memory_get_usage () la función, y de conseguir la mayor cantidad de memoria utilizada en cualquier momento, podemos utilizar el memory_get_peak_usage () función.
Ver plaincopy a clipboardprint?
echo “inicial:”.. memory_get_usage () “bytes n”;
/ * Imprime
Inicial: 361400 bytes
* /

/ / Vamos a usar un poco de memoria
for ($ i = 0; $ i <100000; $ i + +) {
$ Array [] = md5 ($ i);
}

/ / Vamos a eliminar la mitad de la matriz
for ($ i = 0; $ i <100000; $ i + +) {
unset ($ array [$ i]);
}

echo “Final:”.. memory_get_usage () “bytes n”;
/ * Imprime
Final: 885912 bytes
* /

echo “pico”.. memory_get_peak_usage () “bytes n”;
/ * Imprime
Pico: 13687072 bytes
* /
4. Información sobre el uso de la CPU

Para ello, vamos a utilizar el getrusage () función. Tenga en cuenta que esto no está disponible en plataformas Windows.
Ver plaincopy a clipboardprint?
print_r (getrusage ());
/ * Imprime
Matriz
(
[Ru_oublock] => 0
[Ru_inblock] => 0
[Ru_msgsnd] => 2
[Ru_msgrcv] => 3
[Ru_maxrss] => 12692
[Ru_ixrss] => 764
[Ru_idrss] => 3864
[Ru_minflt] => 94
[Ru_majflt] => 0
[Ru_nsignals] => 1
[Ru_nvcsw] => 67
[Ru_nivcsw] => 4
[Ru_nswap] => 0
[Ru_utime.tv_usec] => 0
[Ru_utime.tv_sec] => 0
[Ru_stime.tv_usec] => 6269
[Ru_stime.tv_sec] => 0
)

* /

Que puede parecer un poco críptico, a menos que usted ya tiene un fondo de administración del sistema. Aquí está la explicación de cada valor (no es necesario memorizar estos):
ru_oublock: las operaciones del bloque de salida
ru_inblock: las operaciones del bloque de entrada
ru_msgsnd: los mensajes enviados
ru_msgrcv: los mensajes recibidos
ru_maxrss: tamaño máximo del conjunto residente
ru_ixrss: integral tamaño de memoria compartida
ru_idrss: el tamaño de los datos compartidos integral
ru_minflt: Página reclama
ru_majflt: fallos de página
ru_nsignals: las señales recibidas
ru_nvcsw: interruptores de contexto voluntario
ru_nivcsw: interruptores de contexto involuntarios
ru_nswap: swaps
ru_utime.tv_usec: tiempo de usuario usado (microsegundos)
ru_utime.tv_sec: tiempo de usuario utilizado (segundos)
ru_stime.tv_usec: tiempo de sistema usado (microsegundos)
ru_stime.tv_sec: la hora del sistema utilizado (segundos)

Para ver la cantidad de energía de la CPU del guión ha consumido, tenemos que mirar el ‘tiempo al usuario y los valores de “la hora del sistema”. Los segundos y microsegundos partes se presentan por separado por defecto. Se puede dividir el valor de 1 millón de microsegundos, y agregarlo al valor de segundos, para obtener el total de segundos como un número decimal.

Veamos un ejemplo:
Ver plaincopy a clipboardprint?
/ / Dormir durante 3 segundos (no ocupado)
del sueño (3);

$ Datos = getrusage ();
echo “el tiempo del usuario:”.
($ Datos ['ru_utime.tv_sec'] +
$ Datos ['ru_utime.tv_usec'] / 1000000);
echo “Hora del sistema:”.
($ Datos ['ru_stime.tv_sec'] +
$ Datos ['ru_stime.tv_usec'] / 1000000);

/ * Imprime
Tiempo de los usuarios: 0.011552
Hora del sistema: 0
* /

A pesar de que el guión tomó cerca de 3 segundos en ejecutarse, el uso de la CPU era muy, muy bajo. Debido a que durante la operación del sueño, el script en realidad no consume recursos de CPU. Hay muchas otras tareas que pueden hacerse en tiempo real, pero no puede usar el tiempo de CPU, como la espera de las operaciones de disco. Así que como puedes ver, el uso de la CPU y la duración real del tiempo de ejecución no son siempre los mismos.

He aquí otro ejemplo:
Ver plaincopy a clipboardprint?
/ / Bucle de 10 millones de veces (ocupado)
for ($ i = 0; $ i <10 millones, $ i + +) {

}

$ Datos = getrusage ();
echo “el tiempo del usuario:”.
($ Datos ['ru_utime.tv_sec'] +
$ Datos ['ru_utime.tv_usec'] / 1000000);
echo “Hora del sistema:”.
($ Datos ['ru_stime.tv_sec'] +
$ Datos ['ru_stime.tv_usec'] / 1000000);

/ * Imprime
Tiempo de los usuarios: 1.424592
Hora del sistema: 0.004204
* /

Que se llevó a alrededor de 1,4 segundos de tiempo de CPU, casi todos de los cuales era el momento de los usuarios, ya que no hubo llamadas al sistema.

La hora del sistema es la cantidad de tiempo que la CPU dedica llamadas realizando sistema para el kernel en nombre del programa. Aquí está un ejemplo de ello:
Ver plaincopy a clipboardprint?
$ Start = microtime (true);
/ / Mantener microtime llamando durante unos 3 segundos
while (microtime (true) – $ inicio <3) {

}

$ Datos = getrusage ();
echo “el tiempo del usuario:”.
($ Datos ['ru_utime.tv_sec'] +
$ Datos ['ru_utime.tv_usec'] / 1000000);
echo “Hora del sistema:”.
($ Datos ['ru_stime.tv_sec'] +
$ Datos ['ru_stime.tv_usec'] / 1000000);

/ * Imprime
Tiempo de los usuarios: 1.088171
Hora del sistema: 1.675315
* /

Ahora tenemos un poco de tiempo el uso del sistema. Esto es porque el script llama a la microtime () la función muchas veces, que realiza una solicitud a través del sistema operativo para recuperar el tiempo.

También usted puede notar que las cifras no muy añadir hasta 3 segundos. Esto se debe a que probablemente había otros procesos en el servidor, así, y el guión no estaba utilizando el 100% de la CPU durante toda la duración de los 3 segundos.
5. Constantes Magic

PHP provee útiles constantes magia de ir a buscar el número de línea actual (__LINE__), la ruta del archivo (FILE), la ruta del directorio (__DIR__), nombre de la función (__FUNCTION__), nombre de la clase (__CLASS__), nombre del método (__METHOD__) y espacio de nombres (__NAMESPACE__).

No vamos a cubrir cada uno de ellos en este artículo, pero yo te mostraré un unos pocos casos de uso.

Cuando se incluyen otros sistemas de escritura, es una buena idea utilizar la constante __FILE__ (o también __DIR__, a partir de PHP 5.3):
Ver plaincopy a clipboardprint?
/ / Esto es relativo a la ruta del script cargado
/ / Que puede causar problemas al ejecutar scripts de diferentes directorios
require_once (‘config / database.php’);

/ / Esto es siempre relativa a la ruta de este archivo
/ / No importa donde se incluyó a partir de
require_once (dirname (FILE) ‘/ config / database.php.)

Utilizando __LINE__ hace más fácil la depuración. Puede rastrear los números de línea:
Ver plaincopy a clipboardprint?
/ / Código
/ / …
my_debug (“mensaje de depuración”, __LINE__);
/ * Imprime
Línea 4: un mensaje de depuración
* /

/ / Código de poco más de
/ / …
my_debug (“otro mensaje de depuración”, __LINE__);
/ * Imprime
Línea 11: otro mensaje de depuración
* /

función my_debug ($ msg, $ linea) {
echo “la línea $ line: $ mensaje n”;
}
6. La generación de Unique ID

Puede haber situaciones en las que usted necesita para generar una cadena única. He visto a mucha gente utiliza la función md5 () para esto, aunque no es exactamente a este propósito:
Ver plaincopy a clipboardprint?
/ / Generar cadena única
echo md5 (time () mt_rand (1,1000000).)

No es en realidad una función de PHP llamada uniqid () que está destinado a ser usado para esto.
Ver plaincopy a clipboardprint?
/ / Generar cadena única
echo uniqid ();
/ * Imprime
4bd67c947233e
* /

/ / Generar otra cadena única
echo uniqid ();
/ * Imprime
4bd67c9472340
* /

Usted puede notar que a pesar de que las cuerdas son únicas, que parecen similares a los varios personajes en primer lugar. Esto se debe a la cadena generada está relacionada con la hora del servidor. En realidad, esto tiene un efecto secundario interesante, ya que cada nuevo ID generado viene después en orden alfabético, para que puedan ser ordenados.

Para reducir las posibilidades de obtener un duplicado, se puede pasar un prefijo, o el segundo parámetro de aumento de la entropía:
Ver plaincopy a clipboardprint?
/ / Con el prefijo
echo uniqid (‘loquesea_’);
/ * Imprime
foo_4bd67d6cd8b8f
* /

/ / Con más entropía
echo uniqid (”, true);
/ * Imprime
4bd67d6cd8b926.12135106
* /

/ / Tanto
echo uniqid (‘bar_’, true);
/ * Imprime
bar_4bd67da367b650.43684647
* /

Esta función generará cadenas más cortas que el md5 (), que también le ahorrará un poco de espacio.
7. Serialización

¿Alguna vez se necesita para almacenar una variable compleja en una base de datos o un archivo de texto? Usted no tiene que llegar a una solución elegante para convertir sus matrices u objetos en cadenas de formato, ya que PHP ya tiene funciones para este fin.

Hay dos métodos populares de la serialización de las variables. He aquí un ejemplo que utiliza el serialize () y unserialize ():
Ver plaincopy a clipboardprint?
/ / A una matriz compleja
$ Myvar = array (
‘Hola’,
42,
array (1, ‘dos’),
‘Manzana’
);

/ / Convertir en una cadena
$ Cadena = serialize ($ myvar);

echo $ cadena;
/ * Imprime
a: 4: {i: 0; s: 5: “hola”; i: 1; i: 42; i: 2; a: 2: {i: 0; i: 1; i: 1; s: 3: “dos”;} i: 3; s: 5: “manzana”;}
* /

/ / Se puede reproducir la variable original
$ Newvar = unserialize ($ cadena);

print_r ($ newvar);
/ * Imprime
Matriz
(
[0] => hola
[1] => 42
[2] => Array
(
[0] => 1
[1] => dos
)

[3] => manzana
)
* /

Este fue el método nativo de PHP serialización. Sin embargo, como JSON se ha vuelto tan popular en los últimos años, decidieron añadir soporte para él en PHP 5.2. Ahora usted puede utilizar el json_encode () y json_decode () funciones, así:
Ver plaincopy a clipboardprint?
/ / A una matriz compleja
$ Myvar = array (
‘Hola’,
42,
array (1, ‘dos’),
‘Manzana’
);

/ / Convertir en una cadena
$ Cadena = json_encode ($ myvar);

echo $ cadena;
/ * Imprime
["Hola", de 42 años, [1, "dos"], “manzana”]
* /

/ / Se puede reproducir la variable original
$ Newvar json_decode = ($ cadena);

print_r ($ newvar);
/ * Imprime
Matriz
(
[0] => hola
[1] => 42
[2] => Array
(
[0] => 1
[1] => dos
)

[3] => manzana
)
* /

Es más compacto, y lo mejor de todo, compatible con Javascript y muchos otros idiomas. Sin embargo, para objetos complejos, algunos datos se pueden perder.
8. Cadenas de compresión

Cuando se habla de la compresión, por lo general pensamos acerca de los archivos, como archivos ZIP. Es posible comprimir largas cadenas en PHP, sin la participación de los ficheros de archivo.

En el siguiente ejemplo vamos a utilizar el gzcompress () y gzuncompress () funciones:
Ver plaincopy a clipboardprint?
$ Cadena =
“Lorem ipsum dolor sit amet, consectetur
adipiscing elit. Espero que os guste mi comentario aquí
aquí. No tiene artículos. WANTED,
Zapatos, o más, sin modificar el precio más
Lea más aquí, no más. Lorem ipsum dolor
sit amet, consectetuer adipiscing elit. Algunos
Precios de las casas más. Esta es una masa de
de detalle, el tiempo de duelo. Leer más aquí para ampliar
la respuesta suave. Sabemos que algún día, su vida
Alrededor de un a. ahora En su gran
Región de diseño. Pero es la respuesta al miedo, sino que
más. Sin embargo, una gran excepción de la fotografía en el de fácil y suave
pero ahora. Se trata de un león y los justos a la respuesta suave.
No hay cambios en su negocio
Porque no está aquí. Para beber no más depresión, miedos,
urna sodalis euismod id. “;

Gzcompress comprimido $ = ($ cadena);

echo “Tamaño del original:”. strlen ($ cadena) ” n”.;
/ * Imprime
Tamaño original: 800
* /

echo “Tamaño comprimido:”. strlen ($ comprimido) ” n”.;
/ * Imprime
Tamaño comprimido: 418
* /

/ / Que volver a
$ Original = gzuncompress ($ comprimido);

Hemos sido capaces de alcanzar casi el 50% de reducción de tamaño. También las funciones gzencode () y gzdecode () lograr resultados similares, utilizando un algoritmo de compresión diferente.
9. Registro de la función de apagado

Hay una función llamada register_shutdown_function (), que le permitirá ejecutar un código justo antes de que el guión termina de ejecutarse.

Imagine que usted desea capturar algunos datos de referencia al final de la ejecución del script, como por ejemplo el tiempo que tardó en ejecutarse:
Ver plaincopy a clipboardprint?
/ / Captura de la hora de inicio
$ Start_time = microtime (true);

/ / Hacer algunas cosas
/ / …

/ / Mostrar el tiempo que el guión se
echo “ejecución se llevó a:”.
(Microtime (true) – $ start_time).
“Segundos.”;

Al principio esto puede parecer trivial. Usted sólo tiene que añadir el código a la parte inferior de la secuencia de comandos y se ejecuta antes de que finalice. Sin embargo, si alguna vez llamar a la función exit (), que el código no se ejecutará. Además, si hay un error grave, o si el script es terminado por el usuario (pulsando el botón Detener en el navegador), una vez más que no se puede ejecutar.

Cuando se utiliza register_shutdown_function (), el código se ejecutará independientemente de por qué la escritura ha dejado de funcionar:
Ver plaincopy a clipboardprint?
$ Start_time = microtime (true);

register_shutdown_function (‘my_shutdown’);

/ / Hacer algunas cosas
/ / …

my_shutdown function () {
global $ start_time;

echo “ejecución se llevó a:”.
(Microtime (true) – $ start_time).
“Segundos.”;
}
Conclusión

Entrante búsqueda términos:

  • como saber la cantidad consumida de cpu por un script php

Categori'a Programación  /  Publicado por Manuel Castaños   /   Puntos de vista: 152

Artículos relacionados


  1. Lo que usted necesita saber antes de hacer un sitio afiliado
  2. Una nave de almacenamiento de Consumo – ¿Qué usted necesita saber
  3. Instantánea de Antecedentes Online – Lo que usted necesita saber
  4. 3 cosas que usted necesita saber sobre cámaras digitales
  5. Lo que usted absolutamente, positivamente necesita saber sobre el Fraude de Seguro de Auto
  6. Lo que usted necesita saber sobre el cilindro y el regulador del tanque?
  7. Préstamos edificio de apartamentos – Lo que usted necesita saber para el mercado actual
  8. Cosas que usted necesita saber sobre cómo presentar una reclamación de seguro de auto
  9. Cosas que usted necesita saber sobre una nave de almacenamiento Designs – Aprenda los mejores métodos aquí!
  10. Lo que usted necesita saber para hacer dinero en línea para el largo plazo