Foros del Web » Programando para Internet » PHP »

Confusión con file();

Estas en el tema de Confusión con file(); en el foro de PHP en Foros del Web. Hola, les presento mi problema: he estado tratando de realizar un script que revise completamente el código fuente de una página y busque una línea ...
  #1 (permalink)  
Antiguo 01/07/2004, 10:40
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Confusión con file();

Hola, les presento mi problema: he estado tratando de realizar un script que revise completamente el código fuente de una página y busque una línea en específicio (que obviamente yo sé que existe), y que me diga que número de línea es. Esto fue lo que hice:

Código PHP:
<?
$link 
'http://www.fire-project.com/index.php';
$codigo show_source($link,TRUE);

$lineas file($codigo);

// VOY A BUSCAR LA SIGUIENTE LINEA EN EL CODIGO.
$linea_principal 'esta es la linea principal (ejemplo)';

for (
$i 0$i count($lineas); $i++) {
    
// Si la linea que recorremos en este momento es igual a la
    // linea principal, terminamos el bucle.
    
if ($lineas[$i] == $linea_principal) break;
}

echo 
'Línea #'.$i.': '.$linea_principal;
?>
Bueno, pues esto me devuelve un error muy grande, que no sé bien que puede significar. aquí lo tienen:

Código:
Warning: file( <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<META NAME="Description" CONTENT="Fire-Project.com es una comunidad de Webmasters hispanoamericanos que tiene como funcion ayudar a cualquier persona a convertirse en un gran desarrollador de aplicaciones web.">
<META NAME="Keywords" CONTENT="Fire Project, fire project, webmasters hispanos, php, cgi, xml, sql, flash, linux, internet, ecommerce, html, java, javascript, tutorial, tutoriales, jsp, promocion, bases de datos, multimedia, software, negocios, manuales, articulos, introduccion, buscadores, graficos, photoshop, aps, ir, image ready, macromedia, dreamweaver, help, diseño, design, evolucion, desarrollo, web, programacion, web, banners, evaluacion, recomendados, publicidad, d 
in ...\test\test6\index.php on line 5
Línea #1: esta es la linea principal (ejemplo)
He probado con distintas páginas, y siempre agarra una cierta cantidad de caracteres pero no lo hace completamente.

¿En donde esta el error?
__________________
In a world without walls, who needs Windows?
  #2 (permalink)  
Antiguo 01/07/2004, 16:13
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Por favor, alguien que me ayude.
__________________
In a world without walls, who needs Windows?
  #3 (permalink)  
Antiguo 01/07/2004, 18:10
 
Fecha de Ingreso: marzo-2004
Ubicación: Bariloche ARGENTINA
Mensajes: 36
Antigüedad: 13 años, 9 meses
Puntos: 1
bueno, aparentemente el código está bien a primera vista
el problema es (me parece, que me corrijan los gurúes de este sitio si me equivoco) que no podés ver el código fuente php de un archivo que está remotamente en otro servidor, es decir, ese script te va a tirar el código interpretado y si la linea que buscas es una cadena en el archivo original php... sonaste, porque el servidor la interpreta antes de entregarlo...

si el archivo que querés abrir está en el mismo server desde donde ejecutás el script tenés que cambiar la ruta:
'http://www.fire-project.com/index.php'
por una de este tipo:
'/www/server/fire-project/html_public/....'

si no... sería muy fácil robar código php de otros sitios... jajajaja
  #4 (permalink)  
Antiguo 01/07/2004, 18:54
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
El problema es que el string que le estás pasando a la función file() es el código completo cuando deberías pasarle el nombre del archivo.
http://www.php.net/manual/es/function.file.php
Creo que debería ser directamente
Código PHP:
$lineas file($link); 
Saludos
  #5 (permalink)  
Antiguo 01/07/2004, 20:55
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Bueno gonzita, la función show_source() si te permite ver el código de un fichero que no se encuentra en tu servidor, de hecho, puedes probarlo haciendo esto:

Código PHP:
<?php
echo show_source("http://www.google.com");
?>
Claro, no te muestra el código php con el que está programado un sitio, pero si t muestra el "Código Fuente", lo mismo que cuando le das click con el boton derecho a una página y le das a "Ver código fuente".

Y bueno, lo que yo quiero buscar es una etiqueta html, por lo tanto la funcion show_source creo que me va bien.


Ahora, Jpinedo, tambien me di cuenta de eso, ví que la función file() te dice que hay que pasar un fichero como parámetro, entonces hice lo siguiente:

Código PHP:
<? 
$link 
'http://www.fire-project.com/index.php'
$codigo show_source($link,TRUE); 

// AQUI ESTA LA MODIFICACION IMPORTANTE
$fichero 'archivo.txt';
$fp fopen($fichero,'w+');
fputs($fp,$codigo);
fclose($fp);

//.......... Y LO DEMÁS... 
?>
resulta que despues de llegar al fclose($fp); me doy cuenta de que tambien lo único que escribe en el fichero 'archivo.txt' son exáctamente las mismas 4 ó 5 líneas que tiene el error que coloqué arriba... es decir, creo que algo falla en $codigo, o en el show_souce.

Espero que me puedan ayudar. es urgente.
__________________
In a world without walls, who needs Windows?
  #6 (permalink)  
Antiguo 01/07/2004, 20:56
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
ahh otra cosa. no creo que sea el show_source, porque hice lo siguiente solo para comprobar:

Código PHP:
<? 
$link 
'http://www.fire-project.com/index.php'
$codigo show_source($link,TRUE);

echo 
$codigo;
?>
y me mostró el código completamente.
__________________
In a world without walls, who needs Windows?

Última edición por Volrath; 01/07/2004 a las 20:58
  #7 (permalink)  
Antiguo 02/07/2004, 16:45
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Alguien me puede dar ayuda?
__________________
In a world without walls, who needs Windows?
  #8 (permalink)  
Antiguo 02/07/2004, 18:41
Avatar de sir_notos  
Fecha de Ingreso: noviembre-2001
Ubicación: Mexicali
Mensajes: 709
Antigüedad: 16 años
Puntos: 1
te has fijado que el show_source te regresa el codigo fuente para ser mostrado en una pagina html?



Código HTML:
&lt; "&gt; enlugar de  < & > ?
__________________
Usuario Registrado de linux #374849
  #9 (permalink)  
Antiguo 02/07/2004, 19:37
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
ok, bueno le puse el html_entity_decode($codigo) antes de guardarlo en archivo.txt, pero igual solo guarda lo que mostre en el error dl primer post, pareciera que solo se pudiera escribir una cantidad limitada de caracteres :S
__________________
In a world without walls, who needs Windows?
  #10 (permalink)  
Antiguo 02/07/2004, 21:15
Avatar de sir_notos  
Fecha de Ingreso: noviembre-2001
Ubicación: Mexicali
Mensajes: 709
Antigüedad: 16 años
Puntos: 1
bueno tuve chance de hacer unas pruebas y aqui esta el resultado .... parece funcionar :p


Código PHP:
<? 
$link 
'http://www.fire-project.com/index.php'
$lineas file($link); 

$linea_principal '<!-- End Nedstat Basic code -->'

for (
$i 0$i count($lineas); $i++) { 
    
// Si la linea que recorremos en este momento es igual a la 
    // linea principal, terminamos el bucle. 
    
if ($lineas[$i] == $linea_principal) break; 


echo 
'Línea #'.$i.': '.htmlentities($linea_principal); 
?>
__________________
Usuario Registrado de linux #374849
  #11 (permalink)  
Antiguo 03/07/2004, 11:37
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Si, al parecer si funciona, muchisimas gracias sir notos, me has sacado d un aprieto.
__________________
In a world without walls, who needs Windows?
  #12 (permalink)  
Antiguo 03/07/2004, 12:05
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Nop , no funciona... porque nunca rompe en bucle, es decir, nunca encuentra la linea_principal. Fijate, al final colocaste:

echo 'Línea #'.$i.': '.htmlentities($linea_principal);

Pero si lo colocas asi:

echo 'Línea #'.$i.': '.htmlentities($lineas[$i]);

No funciona, debido a que $lineas[$i] no existe... de hecho, la variable $i no marca el numero de la linea que estamos buscando, sino el total de lineas que tiene el documento

Realize esto como prueba:

Código PHP:
<? 
$link 
'http://www.fire-project.com/index.php'
$lineas file($link); 

$linea_principal '<!-- End Nedstat Basic code -->'

for (
$i 0$i count($lineas); $i++) { 
    echo 
'Línea #'.$i.': '.htmlentities($lineas[$i]).'<br>';


echo 
'<br><br>Línea #'.$i.': '.htmlentities($linea_principal); 
?>
y me imprimió esto:

Código:
Línea #0: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
Línea #1: <HTML> 
Línea #2: <HEAD>

...

Línea #601: </script> 
Línea #602: <!-- End Nedstat Basic code --></div><br> 
Línea #603: <br>

...

Línea #615: </BODY> 
Línea #616: </HTML>
Y según el código que colocaste arriba, la linea ' <!-- End Nedstat Basic code --> ' es la número 618 =S!...

Esto realmente es un misterio, no entiendo que pasa.
__________________
In a world without walls, who needs Windows?
  #13 (permalink)  
Antiguo 03/07/2004, 19:56
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 en tu código nunca estás buscando la línea principal. Lo que imprimes al final ahí es el último valor de $i.
En el ejemplo que te puso sir_notos, el recorrido del bucle se detiene al encontrar la línea. Y la variable $i contiene el número de la línea principal por ser la última.Tú omitiste esto:
Código PHP:
if ($lineas[$i] == $linea_principal) break; 
Si simplemente quieres saber el número de línea, haces algo parecido, pero asignas un valor a alguna variable:
Código PHP:
if ($lineas[$i] == $linea_principal)$numero=$i
y al final imprimes $numero

Saludos
  #14 (permalink)  
Antiguo 03/07/2004, 21:29
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Yo omití en mi ejemplo el if y el break porque como dije: "Realize esto como prueba:", quise decir que fue una prueba para ver la cantidad de lineas que tenía el documento y al mismo tiempo si realmente habia una que fuera exacta a $linea_principal.

Ahora, despues de leer tu mensaje, tambien intente como dijiste, asignarle el valor de $i en el momento en el que se consiga la linea principal a la variable $numero:

Código PHP:
<? 
$link 
'http://www.fire-project.com/index.php'
$lineas file($link); 

$linea_principal '<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">'

for (
$i 0$i count($lineas); $i++) { 
    
// Si la linea que recorremos en este momento es igual a la 
    // linea principal, terminamos el bucle. 
    
if ($lineas[$i] == $linea_principal$numero $i


echo 
'Línea #'.$numero.': '.htmlentities($linea_principal); 
?>
la línea principal me consta que es la número 29, porke la conté a mano :P... y bueno, esto me imprimió como resultado:

Código:
Línea #: <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
Es decir, no la consigue, no las coloca como "iguales" y a decir verdad no sé porque pasa esto...
__________________
In a world without walls, who needs Windows?
  #15 (permalink)  
Antiguo 04/07/2004, 18:37
 
Fecha de Ingreso: septiembre-2003
Ubicación: Pirexia
Mensajes: 150
Antigüedad: 14 años, 2 meses
Puntos: 1
Necesito ayuda porfavor...
__________________
In a world without walls, who needs Windows?
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:00.