una ubicar poner mandar insertar index imagenes imagende imagen fondo fijar como colocar php background-process

ubicar - Procesos de fondo de PHP



mandar una imagen al fondo en html (10)

Además de la respuesta de bastiandoeen, puedes combinar ignore_user_abort(true); con una solicitud de cUrl .

Simule un aborto de solicitud configurando un CURLOPT_TIMEOUT_MS bajo y siga procesando después de que se cierre la conexión:

function async_curl($background_process=''''){ //-------------get curl contents---------------- $ch = curl_init($background_process); curl_setopt_array($ch, array( CURLOPT_HEADER => 0, CURLOPT_RETURNTRANSFER =>true, CURLOPT_NOSIGNAL => 1, //to timeout immediately if the value is < 1000 ms CURLOPT_TIMEOUT_MS => 50, //The maximum number of mseconds to allow cURL functions to execute CURLOPT_VERBOSE => 1, CURLOPT_HEADER => 1 )); $out = curl_exec($ch); //-------------parse curl contents---------------- //$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE); //$header = substr($out, 0, $header_size); //$body = substr($out, $header_size); curl_close($ch); return true; } async_curl(''http://example.com/background_process_1.php'');

nótese bien

Si desea que cURL expire en menos de un segundo, puede usar CURLOPT_TIMEOUT_MS, aunque hay un error / "función" en "sistemas tipo Unix" que hace que libcurl expire el tiempo de inmediato si el valor es <1000 ms con el error " Error cURL (28): se alcanzó el tiempo de espera ". La explicación de este comportamiento es:

[...]

La solución es desactivar señales usando CURLOPT_NOSIGNAL

pros

  • No es necesario cambiar los métodos (Windows y Linux compatibles)
  • No es necesario implementar el manejo de la conexión a través de los encabezados y el búfer (Independiente del navegador y la versión de PHP)

contras

  • Necesita extensión de rizo

Recursos

Estoy tratando de hacer un script PHP, tengo el script terminado pero me lleva como 10 minutos terminar el proceso para el que está diseñado. Esto no es un problema, sin embargo, supongo que tengo que mantener la página cargada todo este tiempo, lo cual es molesto. ¿Puedo tenerlo para comenzar el proceso y luego volver 10 minutos más tarde y simplemente ver el archivo de registro que ha generado?


Bueno, puedes usar " ignore_user_abort (true)"

Por lo tanto, el script continuará funcionando ( set_time_limit duración del script, quizás agregue " set_time_limit (0)")

Pero una advertencia aquí: no podrás detener un script con estas dos líneas:

ignore_user_abort(true); set_time_limit(0);

¡Excepto que puedes acceder directamente al servidor y matar el proceso allí! (He estado allí, hecho un ciclo sin fin, llamándome a sí mismo una y otra vez, hizo que el servidor se detuviera, me gritaron ...)




Hay otra opción que puede usar, ejecutar la CLI del script ... Se ejecutará en segundo plano e incluso puede ejecutarlo como cronjob si lo desea.

p.ej

> #!/usr/bin/php -q <?php //process logs ?>

Esto se puede configurar como un cronjob y se ejecutará sin limitación de tiempo ... sin embargo, este ejemplo es para el sistema de operación basado en Unix.

FYI Tengo una secuencia de comandos php ejecutándose con un ciclo infinito que procesa y se ha estado ejecutando durante los últimos 3 meses sin interrupción.


Parece que debería tener una cola y un script externo para procesar la cola.

Por ejemplo, su script PHP debe poner una entrada en una tabla de base de datos y regresar de inmediato. Luego, un cron corriendo cada minuto verifica la cola y realiza un proceso para cada trabajo.

La ventaja aquí es que no bloquea un subproceso de apache durante 10 minutos.


Piensa en Gearman

Gearman es un marco de aplicación genérico para cultivar el trabajo en múltiples máquinas o procesos. Permite a las aplicaciones completar tareas en paralelo, cargar el procesamiento del balance y llamar funciones entre idiomas. El marco se puede usar en una variedad de aplicaciones, desde sitios web de alta disponibilidad hasta el transporte de eventos de replicación de bases de datos.

Esta extensión proporciona clases para escribir a los clientes y trabajadores de Gearman. - Fuente de php manual

Sitio web oficial de Gearman


Podría usar ignore_user_abort() - de esa manera la secuencia de comandos continuará ejecutándose incluso si cierra su navegador o va a una página diferente.


Tuve muchos problemas con este tipo de proceso en Windows; Mi situación era un poco diferente en el sentido de que no me importaba la respuesta del "guión": quería que el guión comenzara y permitir que otras solicitudes de página se procesaran mientras estaba ocupado trabajando lejos.

Por alguna razón; Tuve problemas colgando otras solicitudes o agotando el tiempo después de unos 60 segundos (tanto apache como php se desactivaron después de unos 20 minutos); También resulta que Firefox expira después de 5 minutos (de manera predeterminada) de todos modos, por lo que después de ese punto no puede saber qué está pasando a través del navegador sin cambiar la configuración en Firefox.

Terminé usando el proceso de abrir y procesar métodos de cierre para abrir un modo php in cli de esta manera:

pclose(popen("start php myscript.php", "r"));

Esto (mediante el inicio) abriría el proceso de php y luego eliminaría el proceso de inicio, dejando que php se ejecutara por el tiempo que fuera necesario. De nuevo, necesitaría eliminar el proceso para cerrarlo manualmente. No necesitó que estableciera ningún tiempo de espera y podría permitir que la página actual que lo llamó continúe y envíe algunos detalles más.

El único problema con esto es que si necesita enviar el script de datos, lo haría a través de otra fuente o pasarlo a través de la "línea de comando" como parámetros; que no es tan seguro

Funcionó muy bien para lo que necesitábamos y garantiza que el script siempre se inicie y se pueda ejecutar sin interrupciones.


Zuk.

Estoy bastante seguro de que esto funcionará:

<?php pclose(popen(''php /path/to/file/server.php &'')); echo "Server started. [OK]"; ?>

El ''&'' es importante. Le dice al shell que no espere a que el proceso salga.

También puedes usar este código en tu php (como dijo "bastiandoeen")

ignore_user_abort(true); set_time_limit(0);

en su comando de parada del servidor:

<?php $output; exec(''ps aux | grep -ie /path/to/file/server.php | awk /'{print $2}/' | xargs kill -9 '', $output); echo "Server stopped. [OK]"; ?>