“Imansible aprire il socket”

Come alleviare l’errore “Imansible aprire socket” che sta accadendo sul mio sito?

Ho difficoltà a capire che è CAPTCHA (sto usando reCAPTCHA ). Mostra solo questo errore sulle due pagine in cui utilizzo reCAPTCHA.

Ho generato nuovi set di chiavi, a volte funziona e altre volte no. Ad esempio, ha funzionato su Safari e talvolta no, ma su Firefox e viceversa, e ha funzionato per me e non per uno dei miei partner e viceversa.

Come posso risolvere questo problema? Potrebbe essere che il mio server stia avendo problemi nel fare il comando fsocketopen? Se è così, come posso risolverlo?

Potrebbe essere che il mio server stia avendo problemi nel fare il comando fsocketopen?

Esattamente – anche se non significa necessariamente che qualcosa non va nel tuo server. Significa solo che da qualche parte tra il tuo server e il server recaptcha, c’è un problema di comunicazione di rete che impedisce l’apertura della connessione socket.

Questo potrebbe essere un sacco di cose. Potrebbe essere un problema di configurazione con il tuo codice o sul tuo server, (in particolare se c’è qualche aspetto della configurazione sul tuo server che è dinamico), potrebbe essere un problema con il livello di connettività del tuo server, potrebbe essere una configurazione di rete problema in cui è ospitato il tuo server, potrebbe essere un problema di configurazione di rete tra il tuo server e il server recaptcha, potrebbe essere un problema di larghezza di banda in cui sono ospitati, potrebbe essere un problema di configurazione dalla loro parte. Potresti voler utilizzare gli errori aggiuntivi che riportano gli argomenti a fsockopen per vedere se puoi ottenere qualsiasi messaggio che abbia senso. Potresti anche provare la tua configurazione su almeno 2-3 server diversi su reti totalmente diverse – questo potrebbe anche darti un’indicazione un po ‘specifica su dove si trova il problema.

L’altra domanda, però, è come gestirai questo genere di cose in generale. fsockopen a volte non riesce a ottenere una connessione, perché anche nel migliore ambiente di rete configurato, non c’è garanzia di comunicazione. L’hardware non funziona, gli incidenti accadono, gli amministratori di rete hanno momentjs fat-finger, i server remoti vengono confusi, la guerra termonucleare globale può eliminare un data center – non si sa mai. Quindi devi scrivere il tuo codice (e gestire la configurazione) in modo da avere casi di fallback per quando si verifica un errore e vengono visualizzati messaggi di errore che sono accettabili per l’utente finale.

Si potrebbe voler esaminare la funzione set_error_handler di PHP e impostare una funzione da richiamare sulle occorrenze in cui fsockopen fallisce. In alcune situazioni, mi sono appassionato ad usarlo per triggersre eccezioni, qualcosa del genere:

 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 questa configurazione, è ansible gestire fsockopen connessioni fsockopen questo modo:

 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 }