jezmck
Estoy llamando a varias funciones (que no puedo editar) en secuencia, pero algunas de las funciones redirigen al usuario, por lo que nunca llego a la siguiente.
Estoy llamando a una función de terceros que tiene llamadas a wp_redirect()
que puedo prevenir, pero luego la siguiente línea es exit;
que no puedo entender cómo moverse.
Esperaba solucionarlo con el ob_
funciones, pero sin suerte hasta ahora.
¡Cualquier sugerencia, hacky o no, será muy apreciada!
editar: tengo una idea que aún no he probado, de alguna manera generando nuevos procesos para realizar estas tareas, cuál sería la mejor manera de hacerlo, esperando que cada uno se complete antes de continuar.
Creo que es posible obtener el código fuente del intérprete de php… meterse con la función de salida y luego volver a compilar e instalar en el servidor web su nueva versión personalizada de php…
Me temo que simplemente no puedes. Hay una opción para redefinir la función php nativa, consulte runkit_function_redefine.
Pero en los comentarios también dice:
construcciones de lenguaje (eval, die, exit, isset, unset, echo, etc.) que pueden confundirse con funciones, no se pueden renombrar ni redefinir incluso con runkit.internal_override.
jonathan
Es posible que pueda usar runkit_function_redefine
. Deberá asegurarse de que puede modificar las funciones internas en su archivo php.ini para poder cambiar las funciones nativas/internas.
Creo que la configuración de php.ini que debe asegurarse de que esté activada es runkit.internal_override
.
No he probado esto.
Sin embargo, desde exit
es una construcción de lenguaje. Ni siquiera estoy seguro de que sea posible evitarlo incluso con la función anterior.
Al final, usé cURL para hacer tres solicitudes sincrónicas a un archivo con diferentes parámetros GET.
Lance una excepción en wp_redirect y envuelva el código con la instrucción try-catch, luego verifique si el mensaje de excepción contiene el mensaje que ha configurado y devuelva la respuesta correspondiente. He usado este truco con la mayoría de los complementos, incluidos Woocommerce, Ultimatemember, etc.
ejemplo:
ob_start();
try{
whatever code....
}catch(\Exception $e){
}
echo ob_get_clean();
Probablemente haya una razón por la cual esas otras funciones están llamando a exit y si encuentra una manera de evitarlo, entonces puede terminar rompiendo los programas de terceros. Dicho esto, podrías
register_shutdown_function()
para solucionar el problema, pero eso supone que solo se llama 1 salida.– apokryfos
10 de agosto de 2016 a las 16:11
@apokryfos Llaman a salir únicamente porque redireccionan. ¿Puede entrar en más detalles sobre el uso
register_shutdown_function()
?– jezmck
11 de agosto de 2016 a las 7:56
Es una función que se llama justo antes de que PHP se apague, por ejemplo, cuando un script llama a exit o muere o cuando el script termina de ejecutarse normalmente. Sin embargo, cualquier salida llamada dentro de la función de apagado será una salida real, no se activarán más funciones de apagado desde ella. Las páginas del manual son probablemente todo el detalle que necesita. Y sí, es posible que las otras funciones requieran que se realice la redirección y no se completarán con éxito si no sucede.
– apokryfos
11 de agosto de 2016 a las 8:03
Bien gracias. Sé para qué son los redireccionamientos, no necesito permitir que sucedan. Es una cosa de UX, y estoy automatizando el proceso para que sean discutibles.
– jezmck
11 de agosto de 2016 a las 14:03