comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[PHP][Geo - #RemoteExecution]

  • 10 Respuestas
  • 2755 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Conectado hielasangre

  • *
  • Underc0der
  • Mensajes: 136
  • Actividad:
    15%
  • Reputación 1
    • Ver Perfil
« en: Septiembre 29, 2014, 12:54:45 pm »
Hace mucho tiempo que existe una web llamada No tienes permisos para ver links. Registrate o Entra con tu cuenta donde uno ingresando la característica y número de un teléfono celular o fijo nos da la información sobre la empresa,localidad,modalidad,etc...
Estos datos se podían bajar en un archivo .xls de la Comisión Nacional de Comunicaciones (No tienes permisos para ver links. Registrate o Entra con tu cuenta)
Tenia la Base de Datos hace algún tiempo y por fin me decidí a darle un uso al que se le pueda sacar provecho.
Aquí les dejo todo lo necesario para implementar este sistema en sus webs.
Aclaro que el sistema es solo valido para Argentina y también recomiendo incorporar un captcha si es que lo van a dejar para uso publico



PD: La captura es de una versión vieja que tenia y que modifique anoche.

No tienes permisos para ver links. Registrate o Entra con tu cuenta

Nota: Voy a actualizar el script porque lo hice a las apuradas. Saludos!

PD: Como dije por ahí , mis post no dicen "Fuente: ESET Latinoamerica xD"
« Última modificación: Octubre 10, 2014, 12:26:47 pm por hielasangre »

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5401
  • Actividad:
    30%
  • Reputación 31
  • ANTRAX
    • Ver Perfil
    • Underc0de
    • Email
  • Skype: underc0de.org
  • Twitter: @Underc0de
« Respuesta #1 en: Septiembre 29, 2014, 12:59:12 pm »
Que grande hielasangre!!
Ya le pasaremos a fermino para implementarlo en underc0de!
Te dejo +1 por el aporte!

Saludos!
ANTRAX


Conectado hielasangre

  • *
  • Underc0der
  • Mensajes: 136
  • Actividad:
    15%
  • Reputación 1
    • Ver Perfil
« Respuesta #2 en: Septiembre 29, 2014, 01:05:47 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Que grande hielasangre!!
Ya le pasaremos a fermino para implementarlo en underc0de!
Te dejo +1 por el aporte!

Saludos!
ANTRAX

Buenisimo! La tengo que corregir un poco porque hay algunas cosas que estan hardcodeadas y hasta creo que inseguras xD

No tienes permisos para ver links. Registrate o Entra con tu cuenta

Ahi esta la lista ( se va actualizando cada tanto!) lo bajan como xls, luego lo guardan como CSV y por ultimo lo suben por phpmyadmin y tienen una DB actualizada... La verdad que no justifica hacer un panel!

Desconectado facufangio

  • *
  • Underc0der
  • Mensajes: 152
  • Actividad:
    0%
  • Reputación 0
  • < SE SIEMPRE EL MEJOR, PERO NO TE LO CREAS />
    • Ver Perfil
    • Email
« Respuesta #3 en: Septiembre 29, 2014, 01:35:08 pm »
Que bueno que esta!!

La verdad estaría bueno implementarlo.!!!

Gracias ;D

Conectado hielasangre

  • *
  • Underc0der
  • Mensajes: 136
  • Actividad:
    15%
  • Reputación 1
    • Ver Perfil
« Respuesta #4 en: Septiembre 29, 2014, 01:52:16 pm »
Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« Respuesta #5 en: Septiembre 29, 2014, 01:55:47 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

Si usa PDO lo haces cambiando una línea nada más :P (PD: Aún no vi el code)...
Visita mi blog: No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Conectado hielasangre

  • *
  • Underc0der
  • Mensajes: 136
  • Actividad:
    15%
  • Reputación 1
    • Ver Perfil
« Respuesta #6 en: Septiembre 29, 2014, 02:00:43 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

Si usa PDO lo haces cambiando una línea nada más :P (PD: Aún no vi el code)...

Pégale una mirada, y subí las correcciones que creas ;)

Desconectado fermino

  • *
  • Underc0der
  • Mensajes: 330
  • Actividad:
    0%
  • Reputación 1
  • Aprendiz de todo, maestro de nada...
    • Ver Perfil
    • In The Middle Of Knowledge
« Respuesta #7 en: Septiembre 29, 2014, 02:22:02 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Esta para usarlo ;)

Estaba pensando que en vez de .sql podríamos hacerlo con sqlite asi no crear una db al vicio en el mysql! En estos días veo de hacerlo con sqlite ;)

Si usa PDO lo haces cambiando una línea nada más :P (PD: Aún no vi el code)...

Pégale una mirada, y subí las correcciones que creas ;)

Así quedaría el archivo config/DBconfig.php para utilizar SQLite (No testeado):

Código: PHP
  1. <?php
  2. /*
  3.  * DBconfig.php
  4.  *
  5.  * Copyright 2014  <hielasangre@fuckingmachine>
  6.  *
  7.  * Clase que contiene la configuracion del sitio.
  8.  * self::$var si es variable
  9.  * this->metodo
  10.  */
  11.  
  12. class DBconfig{
  13.         public static $dbDriver= 'mysql';  // se declaran como public static, para no tener que iniciarlo con new
  14.         public static $dbFile = 'sqlite.db'; // Solo si el driver es sqlite
  15.         public static $host = 'localhost';
  16.         public static $user = 'root';
  17.         public static $password= '';
  18.         public static $database= 'geografica';
  19.        
  20.         public static function dsn(){
  21.                 if (self::$dbDriver == 'sqlite'){
  22.                         return self::$dbDriver . ':' . self::$dbFile;
  23.                 }
  24.                 return self::$dbDriver . ':host=' . self::$host . ';dbname=' . self::$database;
  25.         }
  26.  
  27. }
  28.  


No se si habrá problemas al intentar conectar a una DB SQLite, enviando usuario y contraseña (lib/DB.php: self::$instance = new PDO(DBConfig::dsn(), DBConfig::$user, DBConfig::$password);). Si los hay, tan solo hay que testear si el driver seteado en DBconfig es sqlite, y entonces, sólo enviar el DSN...
« Última modificación: Septiembre 29, 2014, 02:24:29 pm por fermino »
Visita mi blog: No tienes permisos para ver links. Registrate o Entra con tu cuenta.

Desconectado blackdrake

  • *
  • Co Admin
  • Mensajes: 1914
  • Actividad:
    1.67%
  • Reputación 15
    • Ver Perfil
« Respuesta #8 en: Septiembre 29, 2014, 07:06:23 pm »
Lastima que solo sirva en argentina, me hubiese venido genial. Igualmente aportazo para los que puedan usado.

Un saludo.



Desconectado alexander1712

  • *
  • Underc0der
  • Mensajes: 850
  • Actividad:
    0%
  • Reputación -2
    • Ver Perfil
    • El blog del programador
    • Email
« Respuesta #9 en: Octubre 05, 2014, 03:11:58 pm »
en lo personal tengo mis dudas respecto a un par de cositas, que voy a aclarar:

por el archivo path.php de la carpeta lib:

crear una clase de esa forma me parece algo no solo innecesario sino incoherente, analicemos un poco las funciones y veamos, encontramos funciones como loadLib y loadConfig, las funciones de por si van completamente en contra del segundo criterio de calidad y el cuarto criterio.

sobre el segundo criterio de calidad:

por definicion:
Robustez es la habilidad de una entidad de software de funcionar aún en condiciones anormales (No especificadas).

desde el vamos estás utilizando require once, lo cual da por sentado el hecho de que exista el archivo que estas requiriendo, el resultado de esto es que ante la falta de dicho archivo nos encontraremos con un error fatal de ejecución, lo que deberías hacer es analizar si el archivo existe y de lo contrario decirle al usuario el problema, ya que además si tienes desactivado display_errors (asumiendo que estás en modo de producción) el resultado va a ser pantalla en blanco sin explicaciones y con detención de ejecución. entonces en la situación de que el archivo de configuracion o alguno de los archivos falle tu programa no tiene una salida concreta.

Pero este en realidad es el menor de los problemas, también está el 4º criterio de calidad

por definición:
Reusabilidad es la habilidad de una entidad de software de ser reusado en conjunto o en parte en la construcción de nuevas entidades

ahora, la pregunta es, como puedes reusar una clase que carga archivos específicos internos? y si no querías cumplir con dicho criterio, con qué motivo hiciste una clase? podrían haber sido dos funciones simples sin necesidad de cargar la memoria con una estructura de tal tipo (innecesaria en realidad).

las cosas deben ser usadas cuando valgan la pena, esa clase si bien tiene el proposito de normalizar o estandarizar las cargas, debería requerir tanto el archivo como el directorio de la ubicación de lo que se decea cargar, no cargar deliberadamente archivos en particular.

Entonces en el cambio de contexto donde se decee cargar otro archivo habrá que alterar el código de la clase path, que es en realidad una dependencia del principal, por el contrario un buen código requeriría la alteración unicamente del contexto.

Sobre el archivo GEO.php deberías analizar el uso que le das a los apostrofes de parseo y a los apostrofes de especificación de literales.

No me parece mal que uses apostrofes de parseo, o apostrofes de literales pero usar apostrofes de parseo y luego concatenación es innecesario, y dado que lo que tu escribes si concatenas son literales no es necesario parsear la cadena, dando un trabajo innecesario al interprete de php que desde el vamos que ya tiene sus propios problemas no es necesario darle más carga innecesaria.

Además crear una clase modelo de objetos que pueden cargar archivos, está mal estructurada, ni siquiera debería ser una clase ¿por qué? si quieres que sea una clase en este casi SI debes implementar singleton dado que de lo contrario podrías crear 30 instancias fantasmas (por dar un numero) que intenten cargar archivos, pero como usas require_once no harán absolutamente nada, ¿por qué razón podría yo crear muchas instancias de un cargador de archivos?, y si usas singleton es porque en realidad no necesitas una clase lo haces de puro gusto.

DB.php quizá este sea el asunto principal.

El controlador PDO ya de por si tiene una estructura similar a una clase, de hecho la forma de trabajar es crear una instancia de pdo obteniendo un objeto hecho y derecho, crear una clase interface intermediaria es innecesario por donde se lo mire, a menos que claro está te topes con lo que noté luego, la clase es únicamente para dotar a PDO de Singleton, algo aberrante, lo que estás haciendo es forzar a la clase a solo poder obtener una instancia, y esto ya de por si es un tema no poco menor, una clase que solo se puede instanciar una vez, trate de analizar lo que estoy expresando, es una clase bastante extraña, dado que el objetivo de una clase es representar un modelo de un objeto, que luego al instanciarlo se transforma en el objeto en particular, pero que sentido tiene crear un modelo de algo que solo hay un objeto particular, en otras palabras, se crean modelos de las cosas dada la variedad que existen, pero si solo existe un objeto de ese tipo, crearle una clase es un poco... dada la explicación anterior usar singleton correctamente es bastante dificil ya que solo se puede usar en algunos casos particulares sin concluir en un código ridículo, dotar a una clase que controla bases de datos (y recalco las S) con singleton, es completamente ridículo, ignoro como se te ocurrió tal cosa, pero aunque solo uses una base de datos, dotar de singleton limita al contexto particular en el que se usa dicho código, por lo que el resultado es una violación clara a uno o más de los criterios de calidad.

Ahora bien, no es mi intención tachar a tu código de horrible ni nada por el estilo, yo mismo suelo evitar la implementación de varios criterios dependiendo del caso en el que esté programando, generalmente no aplico criterios para tirar para arriba, dado el gasto de tiempo que conlleva. ¿Entonces por qué hago esta respuesta?, esto no es una queja de tu código, simplemente son explicaciones de cosas que eventualmente se podrían mejorar, y marcar cosas que son bastante ridiculas y que ocacionalmente hasta yo cometo semejantes ridiculeces por el hecho de que aveces uno no se pone a analizar el código. Entonces diré por que respondo todo ésto, mis textos de explicación suelen ser dificiles de entender, y generalmente suele creerse que el código no puede ser analizado bajo los criterios de calidad que explico en mi blog y que hay bastantes textos, esto pasa al principio y se que hay gente en el foro que tiene estas dudas, esto es casi una demostración de que realmente se pueden aplicar los criterios de calidad al código, y una ilustración para aquellos a los que la teoría les complique la vida.

Saludos!

pd: no es mi intencion ofenderte, concidero que tu código hielasangre está relativamente bien, y que es utilizable, y si quiciera implementarlo es muy probable que usara tu código.

pd2: en lo personal no me agrada para nada el uso de php embebido de la forma en que está en index.php pero tampoco es mala, preferiría etiquetas de php lo más cortas posible.

pd3: interesante aporte al código original fermino.
« Última modificación: Octubre 05, 2014, 03:31:18 pm por Alexander1712 »

Conectado hielasangre

  • *
  • Underc0der
  • Mensajes: 136
  • Actividad:
    15%
  • Reputación 1
    • Ver Perfil
« Respuesta #10 en: Octubre 10, 2014, 12:26:29 pm »
Es que te digo la verdad? Ya lo tenia hecho de un proyecto mas robusto de uso personal, pero el tema es que para evitarme codear lo use a ese, quería sacar algo rápido, lo voy a tener en cuenta a todo lo que describís acá, y todo lo que citas es totalmente correcto, si tampoco soy de hardcodear o hacer esos desastres qeu tiene esta app, asi que voy a ver de mejorarlo en breve, no soy de las personas que se calientan cuando le hacen una critica ;) Asi que esta mas que bienvenida :)

No tienes permisos para ver links. Registrate o Entra con tu cuenta
en lo personal tengo mis dudas respecto a un par de cositas, que voy a aclarar:

por el archivo path.php de la carpeta lib:

crear una clase de esa forma me parece algo no solo innecesario sino incoherente, analicemos un poco las funciones y veamos, encontramos funciones como loadLib y loadConfig, las funciones de por si van completamente en contra del segundo criterio de calidad y el cuarto criterio.

sobre el segundo criterio de calidad:

por definicion:
Robustez es la habilidad de una entidad de software de funcionar aún en condiciones anormales (No especificadas).

desde el vamos estás utilizando require once, lo cual da por sentado el hecho de que exista el archivo que estas requiriendo, el resultado de esto es que ante la falta de dicho archivo nos encontraremos con un error fatal de ejecución, lo que deberías hacer es analizar si el archivo existe y de lo contrario decirle al usuario el problema, ya que además si tienes desactivado display_errors (asumiendo que estás en modo de producción) el resultado va a ser pantalla en blanco sin explicaciones y con detención de ejecución. entonces en la situación de que el archivo de configuracion o alguno de los archivos falle tu programa no tiene una salida concreta.

Pero este en realidad es el menor de los problemas, también está el 4º criterio de calidad

por definición:
Reusabilidad es la habilidad de una entidad de software de ser reusado en conjunto o en parte en la construcción de nuevas entidades

ahora, la pregunta es, como puedes reusar una clase que carga archivos específicos internos? y si no querías cumplir con dicho criterio, con qué motivo hiciste una clase? podrían haber sido dos funciones simples sin necesidad de cargar la memoria con una estructura de tal tipo (innecesaria en realidad).

las cosas deben ser usadas cuando valgan la pena, esa clase si bien tiene el proposito de normalizar o estandarizar las cargas, debería requerir tanto el archivo como el directorio de la ubicación de lo que se decea cargar, no cargar deliberadamente archivos en particular.

Entonces en el cambio de contexto donde se decee cargar otro archivo habrá que alterar el código de la clase path, que es en realidad una dependencia del principal, por el contrario un buen código requeriría la alteración unicamente del contexto.

Sobre el archivo GEO.php deberías analizar el uso que le das a los apostrofes de parseo y a los apostrofes de especificación de literales.

No me parece mal que uses apostrofes de parseo, o apostrofes de literales pero usar apostrofes de parseo y luego concatenación es innecesario, y dado que lo que tu escribes si concatenas son literales no es necesario parsear la cadena, dando un trabajo innecesario al interprete de php que desde el vamos que ya tiene sus propios problemas no es necesario darle más carga innecesaria.

Además crear una clase modelo de objetos que pueden cargar archivos, está mal estructurada, ni siquiera debería ser una clase ¿por qué? si quieres que sea una clase en este casi SI debes implementar singleton dado que de lo contrario podrías crear 30 instancias fantasmas (por dar un numero) que intenten cargar archivos, pero como usas require_once no harán absolutamente nada, ¿por qué razón podría yo crear muchas instancias de un cargador de archivos?, y si usas singleton es porque en realidad no necesitas una clase lo haces de puro gusto.

DB.php quizá este sea el asunto principal.

El controlador PDO ya de por si tiene una estructura similar a una clase, de hecho la forma de trabajar es crear una instancia de pdo obteniendo un objeto hecho y derecho, crear una clase interface intermediaria es innecesario por donde se lo mire, a menos que claro está te topes con lo que noté luego, la clase es únicamente para dotar a PDO de Singleton, algo aberrante, lo que estás haciendo es forzar a la clase a solo poder obtener una instancia, y esto ya de por si es un tema no poco menor, una clase que solo se puede instanciar una vez, trate de analizar lo que estoy expresando, es una clase bastante extraña, dado que el objetivo de una clase es representar un modelo de un objeto, que luego al instanciarlo se transforma en el objeto en particular, pero que sentido tiene crear un modelo de algo que solo hay un objeto particular, en otras palabras, se crean modelos de las cosas dada la variedad que existen, pero si solo existe un objeto de ese tipo, crearle una clase es un poco... dada la explicación anterior usar singleton correctamente es bastante dificil ya que solo se puede usar en algunos casos particulares sin concluir en un código ridículo, dotar a una clase que controla bases de datos (y recalco las S) con singleton, es completamente ridículo, ignoro como se te ocurrió tal cosa, pero aunque solo uses una base de datos, dotar de singleton limita al contexto particular en el que se usa dicho código, por lo que el resultado es una violación clara a uno o más de los criterios de calidad.

Ahora bien, no es mi intención tachar a tu código de horrible ni nada por el estilo, yo mismo suelo evitar la implementación de varios criterios dependiendo del caso en el que esté programando, generalmente no aplico criterios para tirar para arriba, dado el gasto de tiempo que conlleva. ¿Entonces por qué hago esta respuesta?, esto no es una queja de tu código, simplemente son explicaciones de cosas que eventualmente se podrían mejorar, y marcar cosas que son bastante ridiculas y que ocacionalmente hasta yo cometo semejantes ridiculeces por el hecho de que aveces uno no se pone a analizar el código. Entonces diré por que respondo todo ésto, mis textos de explicación suelen ser dificiles de entender, y generalmente suele creerse que el código no puede ser analizado bajo los criterios de calidad que explico en mi blog y que hay bastantes textos, esto pasa al principio y se que hay gente en el foro que tiene estas dudas, esto es casi una demostración de que realmente se pueden aplicar los criterios de calidad al código, y una ilustración para aquellos a los que la teoría les complique la vida.

Saludos!

pd: no es mi intencion ofenderte, concidero que tu código hielasangre está relativamente bien, y que es utilizable, y si quiciera implementarlo es muy probable que usara tu código.

pd2: en lo personal no me agrada para nada el uso de php embebido de la forma en que está en index.php pero tampoco es mala, preferiría etiquetas de php lo más cortas posible.

pd3: interesante aporte al código original fermino.

 

¿Te gustó el post? COMPARTILO!