Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: Castg! en 19 Enero 2011, 00:36 am



Título: Firma dinamica Castg! version 1.1 [PHP]
Publicado por: Castg! en 19 Enero 2011, 00:36 am
bueno, si no mal recuerdan hace un tiempo hice una imagen dinamica en php, la cual usandola de firma, al entrar a un post, mostraba los datos del usuario que la veia.

para recordar un poco y no volver a escribir tanto:

http://foro.elhacker.net/php/firma_dinamica_por_castg_observa_tus_datos_automaticamente-t285255.0.html

Bueno, la use un tiempo hasta que sirdarckcat puso un filtro a las imagenes de elhacker.net ¬¬, cuestion de seguridad. Estuve muy ausente en el foro y hace poco volvi a escribir uno o dos mensajes y note que ese filtro no estaba mas, por lo que quise volver a usar mi firma.

al principio tuve muchos problemas por lo que me propuse depurarlo UN POCO. cambie unas boludeces del codigo y agregue una estupidez jaja, saegun tu sexo, es el color de fondo de la imgen.

(http://img411.imageshack.us/img411/1091/firmafho.jpg)
(http://img534.imageshack.us/img534/326/localhostc.jpg)


Código
  1. <?php
  2. //Esta funcion consigue el id del ultimo usuario que entro...
  3. function userIdFromURL($flotaRef) {
  4. $post = preg_replace("/[\n\t\r]+/" , "", file_get_contents($flotaRef));
  5. $post = explode('<td align="center" class="smalltext"><a href="http://foro.elhacker.net/profiles/', $post);
  6. $post = preg_split('/\.html" style="color\: \#[a-fA-F0-9]{6};"\>.*est\&aacute\;n viendo este tema\.\<\/td\>/', $post[1]);
  7. return preg_replace('/^.+\-u(\d+)/', "$1", $post[0]);
  8. }
  9. //anti "La imagen ... no puede mostrarse porque contiene errores" ;)
  10. //Headers
  11. header("Content-type: image/jpeg");
  12. //
  13. //obtencion de datos: id user!
  14. if(isset($_COOKIE['id'])){
  15. $id = $_COOKIE['id'];
  16. }else{
  17. $ref = "post.html";//getenv("HTTP_REFERER");
  18. $id = userIdFromURL($ref); //la magia surge
  19. }
  20. //Visitamos su prefil y leemos sus datos...
  21. $perfil = file_get_contents('http://foro.elhacker.net/index.php?&action=.xml;sa=profile;u='.$id);
  22. $perfil = preg_replace("/[\n\t\r]+/" , "", $perfil);
  23. $nick = preg_replace("/.*<name><!\[CDATA\[(.*)\]\]><\/name>.*/", "Hola $1!", $perfil);
  24. $genero = preg_replace("/.*<gender><!\[CDATA\[(.*)\]\]><\/gender>.*/", "$1", $perfil);
  25. $lugar = preg_replace("/.*<location><!\[CDATA\[(.*)\]\]><\/location>.*/", "Sos de $1.", $perfil);
  26. $edad = preg_replace("/.*<age>(.*)<\/age>.*/", "Tenes $1 años.", $perfil);
  27. $posts = preg_replace("/.*<posts>(.*)<\/posts>.*/", "Escribiste $1 posts.", $perfil);
  28. //
  29. //
  30. //Otros datos
  31. $ip = $_SERVER['REMOTE_ADDR'];
  32. $userAgent= strtolower($_SERVER['HTTP_USER_AGENT']);
  33. preg_match("/(firefox|msie|opera|netscape|chrome|safari|epiphany|galeon|iceape|icewease|kazehakasel|konqueror|minefield|seamonkey|shiretoko|avant|lock|k-meleon|minefield|navigator)/", $userAgent, $navegador);
  34. $sistema = preg_replace("/.*(windows|mac|linux|freebsd).*/", "$1", $userAgent);
  35. $agent = ($navegador[0]!=$userAgent && $sistema!=$userAgent) ? "Usas ".$navegador[0]." desde $sistema." : "";
  36. //
  37. //
  38. //depuracion de datos:
  39. if($nick == $perfil){
  40. $hayUser = false;
  41. }else{
  42. $hayUser = true;
  43. if($genero==$perfil) $genero = "Masculino";
  44. if($lugar==$perfil) $lugar = "Ubicacion no definida";
  45. if($edad==$perfil) $edad = "Edad no definida";
  46. }
  47. if($hayUser){
  48. if(!isset($_COOKIE['id'])){
  49. setcookie('id',$id,time()+315360000);
  50. }
  51. $mensaje = "$nick\n\n  $posts\n  $lugar\n  $edad\n  Tu ip es $ip.\n  $agent";
  52. }else{
  53. $mensaje = "    Tu ip es: $ip\n\n  Para descubrir más de mis\npoderes, mirame en un post\ndonde Castg! comente." ;
  54. }
  55. //
  56. //
  57. //imagen
  58. $im = imagecreatefrompng('firma-perfil-'.$genero.'.png');
  59. $blanco = imagecolorallocate($im, 255,255,255);
  60. $negro = imagecolorallocate($im, 0,0,0);
  61. $fuente = "./persansb.ttf";
  62. //
  63. //centrar fuente:
  64. $puntosTexto = imagettfbbox(12, 0, $fuente, $mensaje);
  65. $altoCaracterTTF = imagettfbbox(12, 0, $fuente, "b");
  66. $tamanioTexto = array();
  67. $tamanioTexto['x'] = $puntosTexto[2] - $puntosTexto[6];
  68. $tamanioTexto['y'] = $puntosTexto[3] - $puntosTexto[7];
  69. $xtexto = (imagesx($im) - $tamanioTexto['x']) / 2 ;
  70. $ytexto = ((imagesy($im) - $tamanioTexto['y']) / 2) + ($altoCaracterTTF[3] - $altoCaracterTTF[7]);
  71. // listo :D
  72. //
  73. //
  74. imagettftext($im, 12, 0, $xtexto, $ytexto, $blanco, $fuente, $mensaje);
  75. imagejpeg($im,false,100);
  76. //
  77. ?>

practicamente, agregue la opcion de freebsd como sistema, hice una funcion para recoger el id y se imprime como imagen jpeg, antes png.

Cualquier error que les presente mi firma, diganmelo! tengo que arreglar ahora que me acorde despues de escribir esto, si sos usuario oculto. tengo que averiguar bien, no estoy seguro que haya problema.