¿Podría ser que mi servidor tenga problemas para ejecutar el comando fsocketopen?
Exactamente, aunque no necesariamente significa que algo no funciona en su servidor. Simplemente significa que en algún lugar entre su servidor y el servidor recaptcha, hay un problema de comunicaciones de red que impide que la conexión de socket se abra.
Esto podría ser un montón de cosas. Podría ser un problema de configuración con su código o en su servidor, (especialmente si hay algún aspecto de la configuración en su servidor que sea dinámico), podría ser un problema con el nivel de conectividad que tiene su servidor, podría ser una configuración de red problema donde se aloja su servidor, podría ser un problema de configuración de red entre su servidor y el servidor recaptcha, podría ser un problema de ancho de banda donde están alojados, podría ser un problema de configuración de su parte. Es posible que desee utilizar los argumentos adicionales de informes de errores al fsockopen
para ver si puede obtener algún mensaje que tenga sentido. También puede probar su configuración en al menos 2-3 servidores diferentes en redes totalmente diferentes, eso también podría darle una indicación algo específica sobre dónde está el problema.
La otra pregunta, sin embargo, es cómo vas a manejar este tipo de cosas en general. fsockopen
a veces falla al obtener una conexión, porque incluso en el mejor entorno de red configurado, no hay garantía de comunicación. El hardware falla, ocurren accidentes, los administradores de redes tienen momentos con los dedos gordos, los servidores remotos se confunden, la guerra termonuclear global puede acabar con un centro de datos, nunca se sabe. Por lo tanto, debe escribir su código (y administrar su configuración), de modo que tenga casos pendientes para cuando ocurra una falla y muestre mensajes de error que sean aceptables para el usuario final.
Es posible que desee examinar la función set_error_handler
de PHP y configurar una función para llamar en las ocurrencias donde fsockopen
falla. En algunas situaciones, me he convertido en aficionado a usarlo para activar excepciones, algo como esto:
function throw_error_exception($number = 0, $str = '',$file = null,$line = null) {
throw new ErrorException($str, 0, $number, $file, $line);
}
set_error_handler('throw_error_exception',E_ALL);
Con esa configuración, se puede administrar conexiones fsockopen
algo como esto:
try {
fsockopen('remote.host.com',8080,$fso_errnum,$fso_errstr,30);
} catch(Exception $e) {
// here you can look at properties/methods of $e, and $fso_* values, and
// figure out what nice error messages you want to display for your users
}
su pregunta es muy vago: ¿puedes publicar algunos ejemplos de código/decirnos si estás usando un servicio de terceros como recaptcha? –
ha sido editado @Kieran Allen – LightningWrist