Foros del Web » Programando para Internet » PHP »

Ayuda con funcion y fsockopen, me super urge...

Estas en el tema de Ayuda con funcion y fsockopen, me super urge... en el foro de PHP en Foros del Web. hola amigos, hace unos dias expuse un problema con fsockopen que he tenido, aki les copio el contenido de la funcion Código PHP: function  SendSMS  ...
  #1 (permalink)  
Antiguo 31/07/2008, 09:14
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Ayuda con funcion y fsockopen, me super urge...

hola amigos, hace unos dias expuse un problema con fsockopen que he tenido, aki les copio el contenido de la funcion

Código PHP:
function SendSMS ($host$port$username$password$phoneNoRecip$sc$msgText$smsc_route

    
//echo "Telefono recibido: ".$phoneNoRecip." Shortcode R: ".$sc." Ruta: ".$smsc_route;
    
$fp fsockopen($host$port$errno$errstr);
    if (!
$fp
   {
            echo 
"errno: $errno \n";
            echo 
"errstr: $errstr\n";
            return 
$result;
            
sleep(3);
    }
    
fwrite($fp"GET /?Phone=" rawurlencode($phoneNoRecip) . "&Sender=".rawurlencode($sc)."&SMSCRoute=".rawurlencode($smsc_route)."&Text=".rawurlencode($msgText) . " HTTP/1.0\n");
    if (
$username != "") {
       
$auth $username ":" $password;
       
$auth base64_encode($auth);
       
fwrite($fp"Authorization: Basic " $auth "\n");
    }
    
fwrite($fp"\n");
  
    
$res "";
 
    while(!
feof($fp)) {
        
$res .= fread($fp,1);
    }
    
fclose($fp);
    
 
    return 
$res;

la funcion lo que hace es enviar un mensaje de texto a celulares, ahora bien, tengo 2 servidores, un servidor WEB y un Servidor de aplicaciones detras de un Firewall, todo funciona bien, pero de repente, el servidor web no puede conectarse al de aplicaciones en el puerto indicado y recibo este error o warning y no logro enviar mensajes.

Código:
Warning: fsockopen() [function.fsockopen]: unable to connect to xxx.xxx.xxx.xxx:yyyy (Se produjo un 
error durante el intento de conexión ya que la parte conectada no respondió adecuadamente tras un 
periodo de tiempo, o bien se produjo un error en la conexión establecida ya que el host conectado no 
ha podido responder. ) in C:\micarpeta\sendsms.php on line 8
errno: 10060 errstr: Se produjo un error durante el intento de conexión ya que la parte conectada no 
respondió adecuadamente tras un periodo de tiempo, o bien se produjo un error en la conexión 
establecida ya que el host conectado no ha podido responder.
De repente, el solo se libera y puedo seguir enviando mensajes normalmente, que podra ser amigos? ya me tiene hasta el copete este problema...
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #2 (permalink)  
Antiguo 31/07/2008, 09:21
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda con funcion y fsockopen, me super urge...

Hola xcars,

Claramente el mismo error te lo dice, hay veces que no se puede conectar al servidor, y eso puede ser por problemas de la red, problemas de conexion, etc. Tienes que monitorear como es al comunicacion entre tus equipos.

Este problema ya no es de PHP si no de tu infraestructura y como la tienes conectada.

Saludos.
  #3 (permalink)  
Antiguo 31/07/2008, 09:26
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Cita:
Iniciado por GatorV Ver Mensaje
Hola xcars,

Claramente el mismo error te lo dice, hay veces que no se puede conectar al servidor, y eso puede ser por problemas de la red, problemas de conexion, etc. Tienes que monitorear como es al comunicacion entre tus equipos.

Este problema ya no es de PHP si no de tu infraestructura y como la tienes conectada.

Saludos.
perdon, GatorV gracias por tu respuesta, lo que no agregue, fue es que le puedo agregar a la funcion, para que mientras no logrue enviar el mensaje siga intentandolo..... porque no puedo darme el lujo de no enviar un mensaje, pero si, el problema yo creo que es de internet, o de cables, etc pero mientras idenfiicamos eso, debo asegurar que la funcion no falle, que dices, que podria agregarle a al funcion?

por otro lado, me gustaria poder agregar en un log los intentos fallidos, esto no lo veo complicado pero tiene que ver con el hecho de intentar nuevamente cuando fallla la funcion

puedo intentar con try y catch??? alguien los ha manejado?
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.

Última edición por GatorV; 31/07/2008 a las 14:31
  #4 (permalink)  
Antiguo 31/07/2008, 14:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Ayuda con funcion y fsockopen, me super urge...

Lo que podrias hacer es tratar de abrir un socket primero, y si no esperas un momento con while, por ejemplo:
Código PHP:
$fp fsockopen($host$port$errno$errstr);
$max_tries 20;
$tries 0;
while( !
$fp && ( $tries <= 20 ) ) {
     
$fp fsockopen($host$port$errno$errstr);
     
sleep(3);
     
$tries++;
}

if( !
$fp ) {
      echo 
"errno: $errno \n";
      echo 
"errstr: $errstr\n";
      return 
$result;

Con ese codigo intentara 20 veces conectar, creo es lo mejor a dejarlo de forma infinita o podrias ciclar tu server.

Saludos.

PD no te olvides de usar set_time_limit() o si no tu script terminara antes de intentar las 20 veces.
  #5 (permalink)  
Antiguo 31/07/2008, 16:37
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 18 años, 11 meses
Puntos: 4
Respuesta: Ayuda con funcion y fsockopen, me super urge...

Cita:
Iniciado por GatorV Ver Mensaje
Lo que podrias hacer es tratar de abrir un socket primero, y si no esperas un momento con while, por ejemplo:
Código PHP:
$fp fsockopen($host$port$errno$errstr);
$max_tries 20;
$tries 0;
while( !
$fp && ( $tries <= 20 ) ) {
     
$fp fsockopen($host$port$errno$errstr);
     
sleep(3);
     
$tries++;
}

if( !
$fp ) {
      echo 
"errno: $errno \n";
      echo 
"errstr: $errstr\n";
      return 
$result;

Con ese codigo intentara 20 veces conectar, creo es lo mejor a dejarlo de forma infinita o podrias ciclar tu server.

Saludos.

PD no te olvides de usar set_time_limit() o si no tu script terminara antes de intentar las 20 veces.
Hola gracias por tu respuesta, fijate que lo intente con el while pero creo que no lo hice bien, intentare con tu codigo, y te aviso, muchisimas gracias
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
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 16:50.