remove - strip_tags php ejemplo
¿Cuál es un uso práctico para el sueño de PHP()? (13)
Aquí hay un fragmento de cómo uso el sleep
en uno de mis proyectos:
foreach($addresses as $address)
{
$url = "http://maps.google.com/maps/geo?q={$address}&output=json...etc...";
$result = file_get_contents($url);
$geo = json_decode($result, TRUE);
// Do stuff with $geo
sleep(1);
}
En este caso, sleep
me ayuda a evitar que los mapas de Google me bloqueen, porque estoy enviando demasiadas solicitudes al servidor.
Editar: este es un ejemplo de lo que dice codaddict.
Acabo de echar un vistazo a los documentos sobre el sleep()
.
¿Dónde usarías esta función?
¿Está ahí para darle un respiro a la CPU en una función costosa?
¿Alguna trampa común?
Entre otros: está probando una aplicación web que realiza solicitudes poco frecuentes (llamadas AJAX, carga de imágenes diferidas, ...)
Lo está probando localmente para que las respuestas sean inmediatas, ya que solo hay un usuario (usted) y no hay latencia de red.
El uso de sleep
permite ver / probar cómo se comporta la aplicación web cuando la carga y la red causan demoras en las solicitudes.
Este es un caso extraño ... regulación de transferencia de archivos.
En un servicio de transferencia de archivos que ejecutamos hace mucho tiempo, los archivos se servían desde servidores de enlace ascendente de 10Mbps. Para evitar que la red se empantanara, el script de descarga rastreó cuántos usuarios estaban descargando a la vez, y luego calculó cuántos bytes podía enviar por segundo por usuario. Enviaría parte de esta cantidad, luego dormiría un momento (1/4 de segundo, creo) y luego enviaría más ... etc.
De esta forma, los servidores funcionaron continuamente a aproximadamente 9.5Mbps, sin tener problemas de saturación de enlace ascendente ... y siempre ajustando dinámicamente las velocidades de las descargas.
No lo haría de esta manera, ni en PHP, ahora ... pero funcionó muy bien en ese momento.
La vieja pregunta que sé, pero otra razón para usar u / sleep puede ser cuando está escribiendo código de seguridad / criptografía, como un script de autenticación. Un par de ejemplos:
- Es posible que desee reducir la efectividad de un potencial ataque de fuerza bruta al hacer que su script de inicio de sesión sea deliberadamente lento, especialmente después de algunos intentos fallidos.
- También es posible que desee agregar un retraso artificial durante el cifrado para mitigar los ataques de tiempo . Sé que es poco probable que vayas a escribir un código de encriptación tan detallado en un lenguaje como PHP, pero aún así creo que es válido.
EDITAR
Usar u / sleep contra los ataques de tiempo no es una buena solución. Todavía puede obtener los datos importantes en un ataque de tiempo, solo necesita más muestras para filtrar el ruido que agrega u / sleep.
Puede encontrar más información sobre este tema en: ¿Podría un sueño aleatorio evitar los ataques de temporización?
Normalmente no lo usaría para servir páginas web, pero es útil para guiones de línea de comandos.
$ready = false;
do {
$ready = some_monitor_function();
sleep(2);
} while (!$ready);
Otra forma de usarlo: si desea ejecutar un cronjob con mayor frecuencia, allí cada minuto. Utilizo el siguiente código para esto:
sleep(30);
include ''cronjob.php'';
Llamo a este archivo y a cronjob.php cada minuto.
Otro ejemplo: está ejecutando algún tipo de proceso por lotes que hace un uso intensivo de un recurso. Tal vez está recorriendo la base de datos de 9,000,000 de títulos de libros y actualizando aproximadamente el 10% de ellos. Ese proceso debe ejecutarse a la mitad del día, pero hay tantas actualizaciones que hacer que ejecutar el programa por lotes arrastra el servidor de la base de datos a un rastreo para otros usuarios.
Así que modifica el proceso por lotes para enviar, digamos, 1000 actualizaciones, luego sleep
durante 5 segundos para dar al servidor de la base de datos la oportunidad de finalizar el procesamiento de las solicitudes de otros usuarios que tienen una copia de seguridad.
Puede usar sleep para pausar la ejecución del script ... por ejemplo, para retrasar una llamada AJAX por el lado del servidor o implementar un observador. También puede usarlo para simular retrasos.
Lo uso también para retrasar sendmail () & co. .
Alguien usa use sleep () para evitar DoS y acceder a brutefoces, no estoy de acuerdo porque en esto debes agregar algunas comprobaciones para evitar que el usuario se ejecute varias veces.
Verifica también usleep .
Súper posts antiguos, pero pensé que también haría un comentario. Recientemente tuve que verificar un proceso MUY largo que creaba algunos archivos. Así que hice una función que itera sobre una función CURL. Si el archivo que estoy buscando no existe, duermo el archivo php y vuelvo a revisarlo un poco:
function remoteFileExists() {
$curl = curl_init(''domain.com/file.ext'');
//don''t fetch the actual page, you only want to check the connection is ok
curl_setopt($curl, CURLOPT_NOBODY, true);
//do request
$result = curl_exec($curl);
//if request did not fail
if ($result !== false) {
//if request was ok, check response code
$statusCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($statusCode == 404) {
sleep(7);
remoteFileExists();
}
else{
echo ''exists'';
}
}
curl_close($curl);
}
echo remoteFileExists();
Tuve que usarlo recientemente cuando estaba utilizando la API de geolocalización de Google. Cada dirección en un bucle necesitaba llamar al servidor de Google, por lo que necesitaba un poco de tiempo para recibir una respuesta. usleep(500000)
para dar a todo lo involucrado el tiempo suficiente.
Un ejemplo rápido de pseudocódigo en el que es posible que no desee obtener millones de correos electrónicos de alerta para un solo evento, pero desea que el script se siga ejecutando.
if CheckSystemCPU() > 95
SendMeAnEmail()
sleep(1800)
fi
Un lugar donde encuentra uso es crear un retraso .
Digamos que has creado un rastreador que usa curl
/ file_get_contents
para obtener páginas remotas. Ahora no desea bombardear el servidor remoto con demasiadas solicitudes en poco tiempo. Entonces introduce un retraso entre solicitudes consecutivas.
sleep
toma el argumento en segundos, su amigo usleep
toma argumentos en microsegundos y es más adecuado en algunos casos.
Una de sus aplicaciones es que si envío correos electrónicos a más de 100 clientes mediante un script, esta operación demorará entre 1 y 2 segundos, por lo que la mayoría del sitio web, como hotmail y yahoo, lo consideran spam, por lo que debemos evitarlo. algún retraso en la ejecución después de cada correo.