Cita:
Iniciado por NRLABS
el unico problema q tengo si, y que no lo pude solcuionar fue a la hora de usar......register_shutdown_function()
segun vi y probe creo que no hay manera de pasar algun parametro para que cierre la conexion o cierre la venatana (con javascript) o similar, la pantalla se queda en blanco y hay que cerrarla de forma manual. (mientras sigue trabajando en background)
(probre enviando headers, usando exit dentro de mi funcion, etc y nada)
any idea?
Bueno . .realmente la función que comentas su principal funcionalidad es la de "no depender" de que el cliente cierre o termine su conexión para que el proceso continue.
El proceso se ejecuta ya en "segundo plano" al llamar a dicha función que registra la tuya. El cliente recibe su página igualmente y la gracia de esa función es que el proceso continuó en el servidor y ya no depende de las acciones del cliente. Justo al contrario de un proceso "normal" .. donde el "cliente" se queda a la espera de que el script PHP finalice su proceso.
NO es una función para dejarla en "segundo" plano desde un proceso PHP "puro".
Pero .. como la función en cuestión ya "registra" a tu otra función de proceso y sigue este aunque el cliente cierre su "ventana" .. no sé que problema tienes. Yo lo que hago es:
Opción A:
Muestro un mensaje que diga "Su proceso se está ejecutando. Puede cerrar esta ventana cuando guste".
Opción B:
Muestro el proceso de ejecución .. Por ejemplo si envio e-mails .. voy haciendo registro del proceso en una BBDD, en esa página voy "refrescando" las consultas a la BBDD que hago el registro para mostrar su estado de avance.
Opción C:
Simplemente cierro la ventana. pero para eso .. antes lanzo el proceso en una ventana (window.open ... con javascript) .. Ahí si es necesario por un "timer" o al instante en un evento "onLoad()" (de javascript) cierro la ventana (window.close .. ) con más javascript.
En este momento tu dices que tu ventan se queda en "blanco" .. pues no es más que por qué tu no envias nada al cliente .. un "echo" .. o algo:
Código PHP:
<?php
function tufuncion() {
// el proceso que corresponda.
}
register_shutdown_function("tufuncion");
echo "Ya puede cerrar esta ventana ...";
?>
Si ese script .. lo lanzas desde otro con javascript .. puedes poner un "window.close" .. sólo veras una ventana abrir y cerrarse .. No es muy "bonito" pero .. "es lo que hay" .. Puedes usar más javascript como te comento para decir alguna cosa tipo "Proceso en curso .. esta ventana se cerrará en N segundos" (y con un "timer" de javascript .. la cierras a N tiempo si es que el usuario no la cierra a mano ..
Un saludo,