Foros del Web » Programando para Internet » PHP »

Problema con codigo PHP, no encuentro el error

Estas en el tema de Problema con codigo PHP, no encuentro el error en el foro de PHP en Foros del Web. Hola compañeros de FDW!!, estoy desarrollando mi webcrawler pero no logro hacer que funcione. Ya después de estar programando bastante tiempo, y modificando errores, etc, ...
  #1 (permalink)  
Antiguo 21/10/2012, 16:11
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Exclamación Problema con codigo PHP, no encuentro el error

Hola compañeros de FDW!!, estoy desarrollando mi webcrawler pero no logro hacer que funcione.

Ya después de estar programando bastante tiempo, y modificando errores, etc, no logré que arranque. Al subirlo e intentar iniciarlo no me marcó ningún error, sino que quedó en blanco.

El código es el siguiente:

Código PHP:
// parse the html into a DOMDocument
$dom = new DOMDocument();
@
$dom->loadHTML($html);

// Grabando links
$xpath = new DOMXPath($dom);
$hrefs $xpath->evaluate("/html/body//a");

function 
extraer($url$prof){
if(
$prof and mysql_num_rows($busqueda)==and strpos($url$patron)!==FALSE){
    
$busqueda mysql_query("SELECT webUrl FROM webs WHERE webUrl='$url'");
    
mysql_query("INSERT INTO webs(webTitulo, webDescripcion, webUrl, webKeywords) VALUES ('$titulo', '$descripcion', '$url', '$keywords')");
    
preg_match_all ("(<title>(.*)<\/title>)siU"$html$title);
    
preg_match_all ("(<meta name=\"description\" content=\"(.*)\"\/>)siU"$html$description);
    
preg_match_all ("(<meta name=\"keywords\" content=\"(.*)\"\/>)siU"$html$keys);
    
$titulo $title[1][0];
    
$descripcion $description[1][0];
    
$keywords $keys[1][0];
    
storeLink($titulo,$descripcion,$url,$keywords);
    }
for (
$i 0$i $hrefs->length$i++) {
    
$href $hrefs->item($i);
    
$url2 $href->getAttribute('href');
    
extraer($url2$prof ++);
}
}
extraer($url$prof); 
No logro entender cual es el error, la parte del código que estoy modificando más es la que les publique, que es la que se encarga de la mayoría de las cosas.

El resto es curl.

Espero que puedan ayudarme, no puedo encontrar el error

Saludos y gracias!
  #2 (permalink)  
Antiguo 21/10/2012, 16:34
sgr
 
Fecha de Ingreso: abril-2003
Ubicación: Buenos Aires
Mensajes: 77
Antigüedad: 21 años
Puntos: 11
Respuesta: Problema con codigo PHP, no encuentro el error

Donde te deberia mostrar algo en pantalla?
__________________
Informática Integral
  #3 (permalink)  
Antiguo 21/10/2012, 16:37
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Problema con codigo PHP, no encuentro el error

Hola que tal.

Al parece tu código esta bien, lo único me me queda duda es:
1.- Porque utilizas el @ en:
Código PHP:

// parse the html into a DOMDocument
$dom = new DOMDocument();
@
$dom->loadHTML($html);

// Grabando links 
Recuerda que el @ oculta los posibles errores generados.

2.- No se si tengas incluido un archivo de conexión a la base de datos, de lo contrario eso sería otro error

Para visualizar todos los errores prueba con
Código PHP:
error_reporting(E_ALL);
set('display_errors','On'); 
Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #4 (permalink)  
Antiguo 21/10/2012, 17:09
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Gracias por la respuesta,

el error que me da es el siguiente: Parse error: syntax error, unexpected ';' en la línea 30.

Parse error: syntax error, unexpected T_STRING en la línea 31.

Código PHP:
Ver original
  1. $ch = curl_init();
  2. //Linea 30 es el curl HttPheader
  3. curl_setopt($ch, CURLOPT_HTTPHEADER, array(("Accept-Language: es-es,en"));
  4. //Linea 31 es el curl FAILONERROR
  5. curl_setopt($ch, CURLOPT_FAILONERROR, true);
  6. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

Saludos!!, ojala pueda hacerlo funcionar, no quiero rendirme jaja. Gracias a todos los que me están ayudando

Última edición por xarmagedonx; 21/10/2012 a las 20:39
  #5 (permalink)  
Antiguo 21/10/2012, 20:59
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

Te das cuenta lo que estas haciendo en esta linea?
Código PHP:
Ver original
  1. curl_setopt($ch, CURLOPT_HTTPHEADER, array(("Accept-Language: es-es,en"));

El error es muy claro, dice que no se esperaba el punto y coma (;), ahora cuenta cuantos parentesis hay en esa linea y ve cuantos tienes cerrados, concuerdan? por supuesto que no....
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #6 (permalink)  
Antiguo 21/10/2012, 21:14
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Si, lo solucione, despues de mirarlo varias veces jajajaja (no entendía que pasaba) y justo estaba haciendo una edicion final jaja. Luego me puse a corregir distintos errores surgidos, pero el problema es que me marca los siguientes errores:

Cita:
Notice: Undefined variable: hrefs in miarchivo.php on line 64

Notice: Trying to get property of non-object in miarchivo.php on line 64
La línea 64 se encuentra en el código que les mostré:

Código PHP:
Ver original
  1. for ($i = 0; $i < $hrefs->length; $i++) {

Pero esta variable esta definida, un poco más arriba, en la línea 51:

Código PHP:
Ver original
  1. $hrefs = $xpath->evaluate("/html/body//a");

¿Cómo puede ser que no la reconozca?

Muchas gracias por la respuesta!
  #7 (permalink)  
Antiguo 21/10/2012, 21:18
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

amigo, te sugiero que leas un manual basico de PHP, que por lo visto no comprendes el funcionamiento (valga la redundancia) de las funciones en PHP, la variable $hrefs esta definida FUERA de la función "extraer" y luego intentas acceder a la variable dentro de la función, lo cual NO ES POSIBLE, las funciones en PHP como en cualquier otro lenguaje tienen la particularidad de encapsular el código, por lo cual no puedes acceder a variables fuera de las funciones ni al rever, acceder a variables dentro de la función desde afuera, en todo caso, debes pasar la variable como parametro, la otra opción (pero que es PESIMA y malas practicas) es poner la variable como global...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 21/10/2012, 21:45
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

jaja bueno, me siento ya un poco ignorante. Añadí todas las variables adentro de la funcion para que no diga nada de "tenes una variable sin definir".

Y también declare $url $prof, y la funcion storelink afuera de la función para que funcione todo bien.

Y ahora me da un error más:
Cita:
cURL error number:7
cURL error:couldn't connect to host
Claro no se puede conectar al host, pero, tengo todos los datos correctos, las variables declaradas, y la base de datos a la cual tiene que ingresar, pero a pesar de todo esto no quiere ingresar al host.

Leí que podía ser que hubiera puertos bloqueados, o que un firewall estuviese impidiendo el acceso.

Pero está el archivo subido a un hosting, esto quiere decir que ya es un problema de mi host, y que no voy a poder hacerlo funcionar no?
  #9 (permalink)  
Antiguo 21/10/2012, 21:50
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

Sin ver el código modificado es estar adivinando...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 21/10/2012, 22:04
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Bueno te dejo el código (son unas 60 lineas):
Código PHP:
Ver original
  1. //Aca arriba se encuentran algunas variables definidas junto con la funcion storelink
  2. function extraer($url, $prof){
  3. $server_link = mysql_connect("aca", "se", "conecta");
  4.  
  5. if(!$server_link){ die("Fall&oacute; la Conexi&oacute;n ". mysql_error());
  6. }
  7. $db_selected = mysql_select_db("BD", $server_link);
  8. if(!$db_selected){ die("No se pudo seleccionar la Base de Datos ". mysql_error());
  9. }
  10.  
  11. $url = "no";
  12. $patron = "funciona";
  13. $prof = 1;
  14. $userAgent = 'buuuu';
  15. $ch = curl_init();
  16. curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
  17. curl_setopt($ch, CURLOPT_URL,$url);
  18. curl_setopt($ch, CURLOPT_HTTPHEADER, array(("Accept-Language: es-es,en")));
  19. curl_setopt($ch, CURLOPT_FAILONERROR, true);
  20. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
  21. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  22. curl_setopt($ch, CURLOPT_MAXREDIRS, 2);
  23. curl_setopt($ch, CURLOPT_AUTOREFERER, true);
  24. curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  25. curl_setopt($ch, CURLOPT_TIMEOUT, 10);
  26. $html= curl_exec($ch);
  27. //Aca viene lo peor:
  28. if (!$html) {
  29.     echo "<br />cURL error number:" .curl_errno($ch);
  30.     echo "<br />cURL error:" . curl_error($ch);
  31.     exit;
  32. }
  33. //Si el código quisiera funcionar me haría muy feliz jajajaj
  34.  
  35. $dom = new DOMDocument();
  36. @$dom->loadHTML($html);
  37.  
  38. $xpath = new DOMXPath($dom);
  39. $hrefs = $xpath->evaluate("/html/body//a");
  40.  
  41. if($prof < 2 and mysql_num_rows($busqueda)==0 and strpos($url, $patron)!==FALSE){
  42.     $busqueda = mysql_query("SELECT webUrl FROM webs WHERE webUrl='$url'");
  43.     preg_match_all ("(<title>(.*)<\/title>)siU", $html, $title);
  44.     preg_match_all ("(<meta name=\"description\" content=\"(.*)\"\/>)siU", $html, $description);
  45.     preg_match_all ("(<meta name=\"keywords\" content=\"(.*)\"\/>)siU", $html, $keys);
  46.     $titulo = $title[1][0];
  47.     $descripcion = $description[1][0];
  48.     $keywords = $keys[1][0];
  49.     storeLink($titulo,$descripcion,$url,$keywords);
  50.     }
  51. for ($i = 0; $i < $hrefs->length; $i++) {
  52.     $href = $hrefs->item($i);
  53.     $url2 = $href->getAttribute('href');
  54.     extraer($url2, $prof ++);
  55. }
  56. }
  57. extraer($url, $prof);
  58. //FIN

Bueno, muchas gracias por todo, espero tu sentencia

PD: Volví a añadirle la @ al DOM, porque los errores que me muestra son del html de las páginas, para esto estoy viendo como utilizar tiny.
  #11 (permalink)  
Antiguo 21/10/2012, 22:09
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

U_U amigo, sin ofender, pero una de dos, o programas sin darte cuenta lo que haces o estas cansado y no ves lo que estas haciendo, en fin, primero, pasas la URL como parametro de la función "extraer", pero luego en la linea 11 vuelves a definir la variable $url pero con el valor no, como quieres que se conecte si no no es una URL valida, aparte, en la variable $userAgent la defines como "buuu", eso nada tiene que ver ¬¬ el hecho de hacer pruebas no quiere decir que puedes usar cualquier string en parametros en funciones como cURL...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #12 (permalink)  
Antiguo 21/10/2012, 22:21
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

reemplace los datos para no hacer spam y no publicar la contraseña ni nada.

Igual si, ya me arden un poco los ojos jajajja y leí dos veces lo que pusiste al principio creyendo que eran 2 textos distintos.

$url = "aca hay una url";
$patron = "es la misma que la url";
$prof = 1;
$userAgent = 'Aca va un user agent, como Google bot, o algun otro para logearse como este';

Perdon por no haber aclarado =P
  #13 (permalink)  
Antiguo 21/10/2012, 22:31
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

has hecho pruebas desde local?, si en local funciona y en el hosting no funciona es porque una de dos, tiene bloqueado el puerto a usar, o, no permiten conexiones remotas, en todo caso investiga con tu hosting...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #14 (permalink)  
Antiguo 21/10/2012, 22:35
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Ok, gracias por la respuesta, me voy a dormir y mañana instalo PHP, MySQL, y hago las pruebas, si funciona lo comento por acá, sino sigo haciendo preguntas =P.

off: felicidades por tus 2.000 mensajes.


Saludos!!!
  #15 (permalink)  
Antiguo 22/10/2012, 13:16
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Bueno probé desde otro host, y esto es lo que me sucedió.

Cita:
Warning: mysql_connect() [function.mysql-connect]: Lost connection to MySQL server at 'reading initial communication packet', system error: 113 in archivo.php on line 13
Falló la Conexión Lost connection to MySQL server at 'reading initial communication packet', system error: 113
  #16 (permalink)  
Antiguo 22/10/2012, 14:35
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

Ese es problema es cuando la conexión entre el cliente y el servidor toma demasiado tiempo, pero OJO, no me refiero entre el navegado y el servidor, si no entre PHP y el servidor MySQL, ese es un problema interno del hosting, por lo cual deberías reportarlo al soporte tecnico del hosting....
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #17 (permalink)  
Antiguo 23/10/2012, 16:26
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Hola de nuevo, instalé el WampServer que viene con todo lo necesario, phpmyadmin, php, mysql, y apache.

Cuando quise hacer funcionar el código en localhost, pasó lo mismo que me había sucedido antes:

Cita:
cURL error number:7
cURL error:couldn't connect to host
No puedo lograr resolverlo, el codigo no lo modifique, sigue siendo el mismo.

Un saludo, y gracias por la ayuda
  #18 (permalink)  
Antiguo 23/10/2012, 16:28
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

Sin vel el código real no puedo ayudarte, es estar adivinando que es lo que tienes y que es lo que haces, pueden ser varias las razones, pero repito, es estar adivinando...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #19 (permalink)  
Antiguo 23/10/2012, 16:51
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Te lo envio completo por mp, para que puedas verlo mejor, no quería revelar contraseñas o hacer spam con la web.

Igualmente es muy similar al anterior.

Saludos!
  #20 (permalink)  
Antiguo 23/10/2012, 17:15
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

Tu código a mi me funciona correctamente, probablemente tienes problemas en tu conexión o con firewall o bloque de puerto, o incluso, si has intentado acceder repetidamente en el sitio es probable que rechacen tus conexiones por seguridad, en fin, pueden ser varios los problemas, pero en cualquier caso no puedo afirmar ninguna de ellas
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #21 (permalink)  
Antiguo 23/10/2012, 17:29
Avatar de xarmagedonx  
Fecha de Ingreso: marzo-2009
Mensajes: 360
Antigüedad: 15 años, 1 mes
Puntos: 29
Respuesta: Problema con codigo PHP, no encuentro el error

Bueno al fin, logré hacerlo "funcionar", pero me sale este problema:

Cita:
Fatal error: Maximum function nesting level of '100' reached
como puedo editar el ese número por uno más elevado?

Última edición por xarmagedonx; 23/10/2012 a las 19:10
  #22 (permalink)  
Antiguo 23/10/2012, 22:22
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: Problema con codigo PHP, no encuentro el error

Hola que tal.

puedes configurar ese valor en el php.ini o si lo deseas hacer directamente desde código php lo puedes hacer con

Código PHP:
init_set(); 
te dejo la documentación.

http://php.net/manual/es/function.ini-set.php
http://www.php.net/manual/es/ini.list.php

Saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #23 (permalink)  
Antiguo 23/10/2012, 23:29
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: Problema con codigo PHP, no encuentro el error

Ese es un problema de logica en tu código, el error indica que se entro en un loop recursivo y este hace mas de 100 llamadas a la función, lo mejor es que veas que es lo que estas haciendo, en vez de entrar y reconfigurar el servidor, al menos te lo digo para mantener compatibilidad con servidores donde no podrás modificar ese valor
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: html, mysql
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 19:51.