Foros del Web » Programando para Internet » PHP »

Evitar mensajes de error (Failed to open stream)

Estas en el tema de Evitar mensajes de error (Failed to open stream) en el foro de PHP en Foros del Web. A ver si alguien me puede dar una manita, resulta que mediante php busco un valor contenido dentro de un txt, lo comparo con mi ...
  #1 (permalink)  
Antiguo 01/09/2004, 16:05
Avatar de mixba  
Fecha de Ingreso: noviembre-2003
Ubicación: CPU (Interior)
Mensajes: 116
Antigüedad: 14 años, 1 mes
Puntos: 0
Evitar mensajes de error (Failed to open stream)

A ver si alguien me puede dar una manita, resulta que mediante php busco un valor contenido dentro de un txt, lo comparo con mi base de datos, el resultado finalmente es impreso en la web. Mi consulta es como podría hacer para que cuando este txt no exista no me de el mensaje:
Código:
Warning: file(C:/Data/txts/info.txt): failed to open stream: No such file or directory in... bla,bla,bla.
Gracias de antemano

Atte. MixBA

Última edición por mixba; 01/09/2004 a las 16:45
  #2 (permalink)  
Antiguo 01/09/2004, 16:47
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Operador @: http://www.php.net/manual/en/languag...rorcontrol.php

Saludos.

PD: Eres afortunado, el ejemplo que ponen es tu caso
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 01/09/2004, 17:05
Avatar de mixba  
Fecha de Ingreso: noviembre-2003
Ubicación: CPU (Interior)
Mensajes: 116
Antigüedad: 14 años, 1 mes
Puntos: 0
Cita:
Eres afortunado, el ejemplo que ponen es tu caso
Gracias josemi

Va de maravilla
  #4 (permalink)  
Antiguo 01/09/2004, 17:14
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Otra opcion es comprobar si existe el fichero antes con file_exists() (www.php.net/file_exists).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #5 (permalink)  
Antiguo 01/09/2004, 18:34
Avatar de rasmarko  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 78
Antigüedad: 15 años, 1 mes
Puntos: 1
Sonrisa Para finalizar...

Hace poco publique algo relacionado con la función file_exists() en mi sitio web.

Incluir un archivo en PHP de manera segura
http://www.dise-web.com/articulo.php?id=53

Código PHP:
<?php
if(!file_exists($archivotxt)) {
echo 
"El archivo TXT no existe en el servidor.";
} else {
@include(
$archivotxt);
}
?>
Y evidentemente puedes llamarlo de la siguiente forma:
archivo.php?archivotxt=archivo.txt

Aparte de ser bastante eficiente resulta ser bastante seguro que un simple:

Código PHP:
<?php 
@include($archivotxt);
?>
Espero que no sea tu caso mixba porque estarías en una gran vulnerabilidad del sitio que estas creando.

Aún asi dejo otro artículo que hice en mi web antes de saber que era vulnerable el código anterior:

Variables en Includes (VULNERABLE)
http://www.dise-web.com/articulo.php?id=18

Saludos.
__________________
Fuentes - Diseweb - Frases Célebres

Última edición por rasmarko; 01/09/2004 a las 18:37
  #6 (permalink)  
Antiguo 01/09/2004, 19:11
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Cita:
Y evidentemente puedes llamarlo de la siguiente forma:
http:///www.dominio.com/archivo.php...txt=archivo.txt
Bueno.. eso no resulta ser del todo seguro...
Ya se ha dicho varias veces en este foro y en otras partes lo inseguro que resulta enviar el nombre completo (y extensión) de un archivo por la URL.

saludos
  #7 (permalink)  
Antiguo 02/09/2004, 13:22
Avatar de rasmarko  
Fecha de Ingreso: noviembre-2002
Ubicación: México
Mensajes: 78
Antigüedad: 15 años, 1 mes
Puntos: 1
Este si es realmente seguro,

Ya que si existe el archivo en el servidor solo en el servidor lo incluirá, de lo contrario no incluirá nada porque el file_exists() solo funciona para comprobar existencia de archivos en nuestro servidor más nunca en ajenos.
__________________
Fuentes - Diseweb - Frases Célebres
  #8 (permalink)  
Antiguo 02/09/2004, 21:44
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Pero si pasan un nombre de archivo que sí esté, pero al que no quieras que accedan...???
file_exists() devolverá true pq el archivo existe.

Saludos
  #9 (permalink)  
Antiguo 03/09/2004, 13:21
Avatar de mixba  
Fecha de Ingreso: noviembre-2003
Ubicación: CPU (Interior)
Mensajes: 116
Antigüedad: 14 años, 1 mes
Puntos: 0
Gracias a todos por vuestros comentarios y sugerencias , pero a surgido una duda . Resulta (y recordando en que estabamos) que lo que quiero hacer es verificar un archivo txt remoto, si existe entonces compararlo con la base de datos y de acuerdo a eso mostrar el resultado. Por lo que utilizando la función file_exists, el código quedaría algo así:

Código PHP:
function onair(){
if(!
file_exists('C:/prog/txts/print.txt')) {
   echo 
"No se encuentra el fichero TXT";
} else {
$data file('C:/prog/txts/print.txt');
}

Hasta aquí todo bien por que no es fichero remoto, ahora cuando le coloco en la función una ubicación remota como por ejemplo http://192.168.0.1/prog/txts/print.txt , por mas que este existe me da como que no.

Como podré solucionar esto, que pueda abrir y ver si existe realmente.

Gracias

Última edición por mixba; 03/09/2004 a las 13:35
  #10 (permalink)  
Antiguo 03/09/2004, 18:59
Avatar de Covids0020  
Fecha de Ingreso: septiembre-2003
Ubicación: España
Mensajes: 217
Antigüedad: 14 años, 2 meses
Puntos: 1
Prueba a abrirlo en modo lectura, después si es un url y no lo sabes cierto si está bien estructurado, con errores, etc o si sabes que el script no puede tardar determinado tiempo en leerlo, ya después de todo esto, puedes intentar incluirlo, y aún más pos le pones el signo @.

Código PHP:
function valida_url($url_enviado)
{
// Abrimos el archivo en modo lectura
$url_chequeo = @fopen($url_enviado,"r");
  
// Si no lo podemos abrir
  
if (!$url_chequeo)
  {
  return 
false;
  }
  else
  {
  
// OPCIONAL: Ahora vemos el tiempo
  
stream_set_timeout($url_chequeo2);
  
// Establecemos un límite
  
$limite_aper fread($url_chequeo2000);
    
// Si sobrepasa el límite
    
if (!$limite_aper)
    {
    return 
false;
    }
            
// Si no, podemos proceder con el script
    
return true;
  }

__________________
"La sabiduría comienza donde acaba el conocimiento". Yaris.
http://www.culturadigital.org
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 06:14.