Foros del Web » Programando para Internet » PHP »

Problema con sockets

Estas en el tema de Problema con sockets en el foro de PHP en Foros del Web. Hola a todos. Tengo el siguiente código en PHP: Código PHP: $fs  = @ fsockopen ( $url [ 'host' ],  80 ); @ fputs ( $fs ...
  #1 (permalink)  
Antiguo 06/10/2004, 02:48
 
Fecha de Ingreso: septiembre-2004
Ubicación: Galicia!!!
Mensajes: 16
Antigüedad: 13 años, 2 meses
Puntos: 0
Pregunta Problema con sockets

Hola a todos. Tengo el siguiente código en PHP:

Código PHP:
$fs = @fsockopen($url['host'], 80);
@
fputs($fs$http_request); 
El problema es que no funciona. El servidor tiene desactivado los sockets (por seguridad, creo) y no puedo utilizar esas funciones... ¿Algún método alternativo? Necesito enviar ciertos datos por POST a un servidor externo...
  #2 (permalink)  
Antiguo 06/10/2004, 07:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si le quitas los @ a las funciones .. es muyyy probable que veas el mensaje de error exacto que te estará arrojando .. y, en consecuencia podrás ver cual es el problema para darle solución o definitivamente descartar ese método.

Si no puedes usar sockets, tampoco podrás usar probablemente las extensiones cURL (www.php.net/curl) .. así que no podrás hacer lo que pretendes directamente desde tu script PHP enviar datos por POST a otro URL.

Un saludo,
  #3 (permalink)  
Antiguo 06/10/2004, 07:29
 
Fecha de Ingreso: septiembre-2004
Ubicación: Galicia!!!
Mensajes: 16
Antigüedad: 13 años, 2 meses
Puntos: 0
ummm... Lo miraré a ver... De todas formas, he oído que es posible darle permisos a un fichero en concreto para habilitar para él solo esas funciones. ¿es cierto? Un saludo y gracias
  #4 (permalink)  
Antiguo 06/10/2004, 08:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por iOne
ummm... Lo miraré a ver... De todas formas, he oído que es posible darle permisos a un fichero en concreto para habilitar para él solo esas funciones. ¿es cierto? Un saludo y gracias
Por mi parte desconozco esa funcionalidad ..

Es cierto que existe la función ini_set() para modificar la configuarción de PHP en tiempo de ejecución (sólo válida para ese script y su ejecución por ejemplo) pero, el caso concreto de "sockets" no se puede modificar así por qué es parte de la compilación de PHP o bien de funciones que se pueden deshabilitar desde -sólo- php.ini

Un saludo,
  #5 (permalink)  
Antiguo 06/10/2004, 12:23
 
Fecha de Ingreso: septiembre-2004
Ubicación: Galicia!!!
Mensajes: 16
Antigüedad: 13 años, 2 meses
Puntos: 0
Pues nada, que no he visto error ninguno. De todas formas, es algo raro... Acabo de meter un phpInfo() en el servidor y me quita esto:

sockets
Sockets Support >> enabled

Directive
default_socket_timeout:
Local Value 60
Master Value 60

¿Puede ser del timeout? Porque activados están... Además, he modificado el código así:

Código PHP:
$fs fsockopen($url['host'], 80$errno$errstr);
        
        if(!
$fs){
            die(
"Error: ".$errstr ($errno)."<br>");
        }

    
$p fputs($fs$http_request);        
        echo 
$p
Y el caso es que nunca se ejecuta die(...). Siempre se crea el socket. Además, $p siempre toma algún valor. He añadido, por probar, el tiempo de espera al crear el socket, fsockopen(destino,puerto,errno,errstr,tiempo_esper a) y nada. La verdad, ya no se que hacer...
  #6 (permalink)  
Antiguo 06/10/2004, 13:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm Puedes forzar el nivel de errores a más nivel usando:

mysql_error_reporting(E_ALL);

y sobre todo haciendo un echo a tus: $errno, $errstr que es donde obtienes los posibles errores que esté arrojando la ejecución de esa función.

De todas formas .. te recomiendo que veas los ejemplos completos de uso de fsockopen() en:

www.php.net/fsockopen

Por qué .. no estás usando ningna cabecera HTTP para enviar u obtener tus datos de ese "socket" abierto, y .. recuerda que abrir una "puerta" es para que empieces a "conversar" con ese puerto en el protocolo que uses .. en tu coso el HTTP.

Un saludo,
  #7 (permalink)  
Antiguo 07/10/2004, 02:43
 
Fecha de Ingreso: septiembre-2004
Ubicación: Galicia!!!
Mensajes: 16
Antigüedad: 13 años, 2 meses
Puntos: 0
Pongo el código completo:

Código PHP:
    $trackback_url parse_url($trackback_url);
    
$http_request  'POST ' $trackback_url['path'] . $trackback_url['query'] . " HTTP/1.0\r\n";
    
$http_request .= 'Host: '.$trackback_url['host']."\r\n";
    
$http_request .= 'Content-Type: application/x-www-form-urlencoded'."\r\n";
    
$http_request .= 'Content-Length: '.strlen($query_string)."\r\n";
    
$http_request .= "\r\n";
    
$http_request .= $query_string;
    
$fs fsockopen($trackback_url['host'], 80);
    
fputs($fs$http_request); 
Y lo ejemplos, ya los vi. Pero nada... Voy a cambiar de hosting (ya lo tenía pensado), a ver si depues va. De todas formas, cualquier ayuda sera bienvenida. Gracias a todos
  #8 (permalink)  
Antiguo 08/10/2004, 06:59
 
Fecha de Ingreso: septiembre-2004
Ubicación: Galicia!!!
Mensajes: 16
Antigüedad: 13 años, 2 meses
Puntos: 0
Funciona!!! He modificado el código como sigue:

Código PHP:
$trackback_url parse_url($trackback_url);
$http_response="";
    
$fp=fsockopen($trackback_url['host'], 80);
    
if(!
$fp){
    die(
"No se pudo crear el socket");
}

fputs($fp'POST '.$trackback_url['path']." HTTP/1.0\r\n");
fputs($fp'Host: '.$trackback_url['host']."\r\n");
fputs($fp'Content-Type: application/x-www-form-urlencoded'."\r\n");
fputs($fp'Content-Length: '.strlen($query_string)."\r\n");
fputs($fp"Connection: close\r\n\r\n");
fputs($fp$query_string);
    
while(!
feof($fp)){
    
$http_response.=fgets($fp128);
}
    
list(
$http_headers$http_content)=explode("\r\n\r\n"$http_response);
echo 
$http_content
Así que ahora va todo perfecto. Si alguien quiero copiarlo, ahí lo tiene. Me gustaría que me avisarais, pero bueno, no es necesario. Un saludo y gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:21.