Foros del Web » Programando para Internet » PHP »

BUG en fopen() -poco confiable-

Estas en el tema de BUG en fopen() -poco confiable- en el foro de PHP en Foros del Web. Gente: hay algo raro con la funcion fopen() de PHP 5 porque me dice que no puede acceder a determinadas urls cuando SI son accesibles. ...
  #1 (permalink)  
Antiguo 29/12/2008, 12:39
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Exclamación BUG en fopen() -poco confiable-

Gente: hay algo raro con la funcion fopen() de PHP 5 porque me dice que no puede acceder a determinadas urls cuando SI son accesibles.

Código PHP:
<?
function verificar_url($url)   // esto salio de algun lado xD
{
   
$id = @fopen($url,"r"); 
   if (
$id$abierto true;
   else 
$abierto false;   
   return 
$abierto;   
   
fclose($id);
}


$url ="http://www.forosdelweb.com";
if (
verificar_url($url)) echo "$url OK"; else echo "$url NOT OK";
?>
Si prueban con la mayoriade las urls....... digamos www.forosdelweb.com, www.google.com, etc no hay problema pero aca les dejo una web que esta perfecta (yo la leo) pero fopen dice que no se puede abrir!!!!!!!!!!!!

http://www.nicso.com.ar ¿ como que no se pude abrir ??????

Este problema lo tengo con decenas de urls......y necesito sea fiable porque lo hago para verificar las urls de mi directorio.

PD: supongo q es alguna cosa que se le dice al navegador.....pero no se donde buscar
__________________
Salu2!

Última edición por Italico76; 29/12/2008 a las 12:56
  #2 (permalink)  
Antiguo 29/12/2008, 14:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: BUG en fopen() -poco confiable-

En primera no es un bug de PHP, ni con fopen, lo que pasa es que tu estas haciendo las cosas mal, para verificar un URL no te debes de fiar de fopen ya que hace un request HTTP muy básico. Lo mejor es usar una petición HTTP completa usando fsockopen, y con él ir leyendo el resultado.

Personalmente desde mi red ese dominio que expones (nicso.com.ar) hace muchos redirects desde que haces la petición por lo que por ahí puede ir tu problema.

Saludos.
  #3 (permalink)  
Antiguo 29/12/2008, 15:13
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
GatorV: me has orientado muy bien.........gracias! busque y encontre algo que SI funciona

Código PHP:
<?php

$url 
"www.nicso.com.ar";

$up = @fsockopen("$url"80$errno$errstr30);  
if(
$up
{  
   echo 
"$url OK";  

else 
{
   echo 
"$url is dead";
}
?>
Gracias!
__________________
Salu2!

Última edición por Italico76; 29/12/2008 a las 16:10
  #4 (permalink)  
Antiguo 29/12/2008, 15:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: BUG en fopen() -poco confiable-

Aunque eso solo te levanta el socket y es correcto, lo mejor puede ser luego enviar la petición HTTP, aunque ya es algo más avanzado y con otros usos, para ver si esta disponible el otro host esta bien usar solo ese código.

Saludos.
  #5 (permalink)  
Antiguo 03/01/2009, 05:58
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años
Puntos: 292
Desacuerdo y los feeds ? como los verifico ???

ufffffffff!!! hasta ahora que queria verificar urls del tipo "www.cosa.com" todo bien pero necesito ahora verificar feeds y no me funciona ni con fsockopen(), al menos sin tocar el codigo

Alguien me puede decir como verifico que un feed exista ? uso alguna clase para eso ?
Algun ejemplo sencillo..........please y gracias!!!!!!!!!!

PD: el problema q tengo es que las urls de los feeds no son simplemente dominios sino que tienen carpetas y cosas asi:

__________________
Salu2!

Última edición por Italico76; 03/01/2009 a las 06:11
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 04:18.