2010-07-12 19 views
5

Come si allevia l'errore "Impossibile aprire socket" che si sta verificando sul mio sito?"Impossibile aprire il socket"

Ho problemi che sia CAPTCHA (sto usando reCAPTCHA). Mostra solo questo errore sulle due pagine in cui utilizzo reCAPTCHA.

Ho generato nuovi set di chiavi e talvolta funziona, a 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?

+5

tua domanda è molto vago - puoi pubblicare alcuni esempi di codice/dirci se stai utilizzando un servizio di terze parti come recaptcha? –

+0

è stato modificato @Kieran Allen – LightningWrist

risposta

7

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

Esattamente - anche se ciò non significa necessariamente che qualcosa non funzioni con il 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. È possibile utilizzare gli argomenti di segnalazione degli errori aggiuntivi su fsockopen per verificare se è possibile ottenere qualsiasi messaggio sensato. 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, tuttavia, è come gestire 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 momenti 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.

È possibile esaminare la funzionedi PHP e impostare una funzione da richiamare in caso di errore in fsockopen. In alcune situazioni, sono diventato appassionato di utilizzarlo per innescare eccezioni, qualcosa di simile:

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 questo setup, è possibile gestire le connessioni fsockopen qualcosa di simile:

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 
} 
+1

ottima risposta! Grazie per aver passato il tempo! – LightningWrist

+1

Nella clausola try, "fsocketopen" dovrebbe essere "fsockopen" – edt

Problemi correlati