Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/06/2012, 17:15
Dav36id
 
Fecha de Ingreso: enero-2010
Mensajes: 20
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Problema con formulario con captcha "Could not open socket"

Hola amigos me he descargado un script para montar una web donde los usuarios pueden registrarse para hablar de lo que quieran, la cuestión es que el formulario de registro no funciona y arroja el error "Could not open socket" he probado cambiando las claves del api del captcha pero no entiendo demasiado bien ésto de php.
Hos pego los códigos implicados:


Ajaxsaveregistration.php

Código PHP:
<?php
header
("Content-Type: text/xml;charset=UTF-8");

include(
'header.php');

require_once(
'recaptchalib.php');
$errors "";

$privatekey "6LeC9dISAAAAAM44z-dpxanQvPJWDn-Vx4GgLd6";
try {
    
$resp recaptcha_check_answer ($privatekey,
    
$_SERVER["REMOTE_ADDR"],
    
$_POST["recaptcha_challenge_field"],
    
$_POST["recaptcha_response_field"],
    array(
"t" => md5(time())));
} catch(
Exception $ex) {
    
$errors .= $ex->getMessage() . '<br />';
}
$username $_POST['username'];
$password $_POST['password'];
$password2 $_POST['password2'];
$email $_POST['email'];
$ip $_SERVER['REMOTE_ADDR'];

if (!
$resp->is_valid) {
    
$errors .= 'The captcha code you entered was not correct.<br/>';
}
if (empty(
$username) || empty($password) || empty($password2) || empty($email)){
    
$errors .= 'Please enter something in all of the fields.<br/>';
}
if (
strlen($username) < || strlen($username) > 20){
    
$errors .= 'Please keep your username between 3 and 20 letters.<br/>';
}
if (
$password != $password2){
    
$errors .= 'The passwords you entered do not match.<br/>';
}
if (!
preg_match("/^[a-z][a-z0-9_.-]+@[a-z0-9][a-z0-9-]+\.[a-z]+(\.[a-z]+)*$/i"$email)){
    
$errors .= 'The e-mail address you entered is not valid.<br/>';
}
if (
strlen($email) > 40){
    
$errors .= 'Please keep your e-mail address lower than 40 letters.<br/>';
}

$check_username mysql_query("SELECT `id` FROM `users` WHERE `username`='$username'");
$check_email mysql_query("SELECT `id` FROM `users` WHERE `email`='$email'");

if (
mysql_num_rows($check_username) != 0) {
    
$errors .= 'That username is already taken by another user.<br/>';
}
if (
mysql_num_rows($check_email) != 0) {
    
$errors .= 'We only allow one account per user.<br />';
} else {
    if(
$errors == "") {
        
$password md5(md5(sha1($password)));
        
$time time();

        
mysql_query("INSERT INTO `users` (`username`,`password`,`email`,`ip`,`reg_date`) VALUES ('$username', '$password', '$email', '$ip', '" date('Y-m-d H:i:s',time()) . "')");
    }
}

if(
$errors != "") {
    
$maincontent $errors;
} else {
    
$maincontent "<strong>You have registered successfully!</strong> You may now log in.";
}

$publickey "6LeC9dISAAAAALgCYFVWW8ZLPIw6WGN34BGf5COQ";

?>
<code><?php
/* Donne
    Array
    (
        [username] => khalid
        [password] => khalidpwd
        [password2] => khalidpwd
        [email] => [email protected]
        [recaptcha_challenge_field] => 02J5iH75gdOFfyKNrvFr-Hz9MPxo4nrpoRWu_x-wP6v0oPK8rLZzMvd5cPtKpMcu8
    jZcMJxryo3TNW9bTtHghAu5PAwYtbJQQovzPM8t3GMOmih2Qan3iD8Mdou_pwDgj2H8B9sl8FI-MFJUPEHZeG3RvYodxGw1uPxh3
    yls9H4qOrYgg8lnuOB5mm4mO9L03vrB3FQLMmlxorK29RAm2aIWQ7rXLZMeZ0LFR-_QngSNQwRuj3m0NCUpGUXOXjHiDoUsfzQ0K
    6a7K7UMq3jqakkC9-MlUB
        [recaptcha_response_field] => peron smock
        [PHPSESSID] => e5ackrv75hsi4kagssgi33ehm5
    )

 */
if($errors != "") {
    
$result "Errors occured:<br/>" $errors;
} else {
    
$result "Ok";
}

echo 
$result;
?></code>

recaptchalib.php
Código PHP:
<?php
/*
 * This is a PHP library that handles calling reCAPTCHA.
 *    - Documentation and latest version
 *          http://recaptcha.net/plugins/php/
 *    - Get a reCAPTCHA API Key
 *          http://recaptcha.net/api/getkey
 *    - Discussion group
 *          http://groups.google.com/group/recaptcha
 *
 
 */

/**
 * The reCAPTCHA server URL's
 */
define("RECAPTCHA_API_SERVER""http://api.recaptcha.net");
define("RECAPTCHA_API_SECURE_SERVER""https://api-secure.recaptcha.net");
define("RECAPTCHA_VERIFY_SERVER""api-verify.recaptcha.net");

/**
 * Encodes the given data into a query string format
 * @param $data - array of string elements to be encoded
 * @return string - encoded request
 */
function _recaptcha_qsencode ($data) {
    
$req "";
    foreach ( 
$data as $key => $value )
    
$req .= $key '=' urlencodestripslashes($value) ) . '&';

    
// Cut the last '&'
    
$req=substr($req,0,strlen($req)-1);
    return 
$req;
}



/**
 * Submits an HTTP POST to a reCAPTCHA server
 * @param string $host
 * @param string $path
 * @param array $data
 * @param int port
 * @return array response
 */
function _recaptcha_http_post($host$path$data$port 80) {

    
$req _recaptcha_qsencode ($data);

    
$http_request  "POST $path HTTP/1.0\r\n";
    
$http_request .= "Host: $host\r\n";
    
$http_request .= "Content-Type: application/x-www-form-urlencoded;\r\n";
    
$http_request .= "Content-Length: " strlen($req) . "\r\n";
    
$http_request .= "User-Agent: reCAPTCHA/PHP\r\n";
    
$http_request .= "\r\n";
    
$http_request .= $req;

    
$response '';

    
/** Use proxy here. **/
    //    include "RemoteFopenViaProxy.php";
    //    $obj = new RemoteFopenViaProxy("http://" . $host . "$path?$req", "svrbtproxy01", 8080);
    //
    //    $obj->request_via_proxy();
    //    $response = $obj->get_result();
    //    echo $response;

        
if( false == ( $fs = @fsockopen($host$port$errno$errstr10) ) ) {
            throw new 
Exception ('Could not open socket');
            exit();
        }
    
        
fwrite($fs$http_request);
    
        while ( !
feof($fs) )
        
$response .= fgets($fs1160); // One TCP-IP packet
        
fclose($fs);
        
$response explode("\r\n\r\n"$response2);

    return 
$response;
}



/**
 * Gets the challenge HTML (javascript and non-javascript version).
 * This is called from the browser, and the resulting reCAPTCHA HTML widget
 * is embedded within the HTML form it was called from.
 * @param string $pubkey A public key for reCAPTCHA
 * @param string $error The error given by reCAPTCHA (optional, default is null)
 * @param boolean $use_ssl Should the request be made over ssl? (optional, default is false)

 * @return string - The HTML to be embedded in the user's form.
 */
function recaptcha_get_html ($pubkey$error null$use_ssl false)
{
    if (
$pubkey == null || $pubkey == '') {
        die (
"To use reCAPTCHA you must get an API key from <a href='http://recaptcha.net/api/getkey'>http://recaptcha.net/api/getkey</a>");
    }

    if (
$use_ssl) {
        
$server RECAPTCHA_API_SECURE_SERVER;
    } else {
        
$server RECAPTCHA_API_SERVER;
    }

    
$errorpart "";
    if (
$error) {
        
$errorpart "&amp;error=" $error;
    }
    return 
'<script type="text/javascript" src="'$server '/challenge?k=' $pubkey $errorpart '"></script>

    <noscript>
        <iframe src="'
$server '/noscript?k=' $pubkey $errorpart '" height="300" width="500" frameborder="0"></iframe><br/>
        <textarea name="recaptcha_challenge_field" rows="3" cols="40"></textarea>
        <input type="hidden" name="recaptcha_response_field" value="manual_challenge"/>
    </noscript>'
;
}
CONTINUA...
Muchas gracias de antemano!