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

Trucos de php

  • 0 Respuestas
  • 1282 Vistas

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

Desconectado godmurdoc

  • *
  • Underc0der
  • Mensajes: 31
  • Actividad:
    0%
  • Reputación 0
  • viviendo el under dia a dia
    • Ver Perfil
    • Email
« en: Junio 27, 2011, 06:36:22 pm »
Evitar la caché de los navegadores:
Código: PHP
  1. <?php
  2. header( "Expires: Mon, 26 Jul 1997 05:00:00 GMT" );  // disable IE caching
  3. header( "Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . " GMT" );
  4. header( "Cache-Control: no-cache, must-revalidate" );
  5. header( "Pragma: no-cache" );
  6. ?>

Contador en SQL
Puede ser que necesitemos un contador (de lecturas, por ejemplo) de una noticia guardada en SQL. Si queremos aumentar este valor, muchos habríamos leído el campo, lo hubieramos incrementado y luego hubieramos hecho el UPDATE. Pues hay una forma mucho más fácil, segura y limpia de hacerlo y con solo una SQL.

Código: PHP
  1. <?php
  2. mysql_query('UPDATE trucos SET lecturas = lecturas + 1 WHERE id=12 LIMIT 1');
  3. ?>

Intercambiar colores en X filas
A la hora de hacer listados, puede darse el caso que la legibilidad de las filas no sea buena, por lo tanto sera conveniente usar dos colores diferentes de background para cada fila, de manera que se vayan intercalando y la legibilidad sea buena. Como hacemos esto? Pues una de las maneras más elegantes es usar el operador ternario. Ahí va:

Código: PHP
  1. <?php
  2. $color = "#000000";
  3. $i = 0;
  4. while ($i < 10)
  5. {
  6.   $color = ($color == "#000000") ? "#FFFFFF" : "#000000";
  7.   echo $color."<br>";
  8.   $i++;
  9. }
  10. ?>

Forzar descarga
Forzar la descarga de un archivo desde PHP en un navegador

Código: PHP
  1. header("Content-type: application/force-download");

Validar email
Una función para validar tu email (incluyendo subdominios).
Código: PHP
  1. <?php
  2. function ValidaMail($v_email) {
  3.    if (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@+([_a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$", $v_email )){
  4. return true;
  5.   }
  6. else{
  7.       return false;
  8.     }
  9. }
  10. ?>

Asegurando contra Inyección SQL
Es una función que incluye el SMF para evitar inyección SQL:
Código: PHP
  1. <?php
  2. function addslashes__recursive($var){
  3. if (!is_array($var))
  4. return addslashes($var);
  5. $new_var = array();
  6. foreach ($var as $k => $v)$new_var[addslashes($k)]=addslashes__recursive($v);
  7. return $new_var;
  8. }
  9. $_POST=addslashes__recursive($_POST);
  10. $_GET=addslashes__recursive($_GET);
  11. $_REQUEST=addslashes__recursive($_REQUEST);
  12. $_SERVER=addslashes__recursive($_SERVER);
  13. $_COOKIE=addslashes__recursive($_COOKIE);
  14. ?>

Mandar email con PHP
Enviar email con la función mail() de PHP

Código: PHP
  1. <?php
  2. //Ejemplo: send_mail("user@mail.com","cuerpo","asunto","demi@localhost","demi");
  3.  
  4. function send_mail($to, $body, $subject, $fromaddress, $fromname, $attachments=false)
  5. {
  6.  $eol="\r\n";
  7.  $mime_boundary=md5(time());
  8.  
  9.  # Common Headers
  10. $headers .= "From: ".$fromname."<".$fromaddress.">".$eol;
  11.  $headers .= "Reply-To: ".$fromname."<".$fromaddress.">".$eol;
  12.  $headers .= "Return-Path: ".$fromname."<".$fromaddress.">".$eol;    // these two to set reply address
  13.  $headers .= "Message-ID: <".time()."-".$fromaddress.">".$eol;
  14.  $headers .= "X-Mailer: PHP v".phpversion().$eol;          // These two to help avoid spam-filters
  15.  
  16.  # Boundry for marking the split & Multitype Headers
  17. $headers .= 'MIME-Version: 1.0'.$eol.$eol;
  18.  $headers .= "Content-Type: multipart/mixed; boundary=\"".$mime_boundary."\"".$eol.$eol;
  19.  
  20.  # Open the first part of the mail
  21. $msg = "--".$mime_boundary.$eol;
  22.  
  23.  $htmlalt_mime_boundary = $mime_boundary."_htmlalt"; //we must define a different MIME boundary for this section
  24.  # Setup for text OR html -
  25. $msg .= "Content-Type: multipart/alternative; boundary=\"".$htmlalt_mime_boundary."\"".$eol.$eol;
  26.  
  27.  # Text Version
  28. $msg .= "--".$htmlalt_mime_boundary.$eol;
  29.  $msg .= "Content-Type: text/plain; charset=iso-8859-1".$eol;
  30.  $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  31.  $msg .= strip_tags(str_replace("<br>", "\n", substr($body, (strpos($body, "<body>")+6)))).$eol.$eol;
  32.  
  33.  # HTML Version
  34. $msg .= "--".$htmlalt_mime_boundary.$eol;
  35.  $msg .= "Content-Type: text/html; charset=iso-8859-1".$eol;
  36.  $msg .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
  37.  $msg .= $body.$eol.$eol;
  38.  
  39.  //close the html/plain text alternate portion
  40.  $msg .= "--".$htmlalt_mime_boundary."--".$eol.$eol;
  41.  
  42.  if ($attachments !== false)
  43.  {
  44.    for($i=0; $i < count($attachments); $i++)
  45.    {
  46.      if (is_file($attachments[$i]["file"]))
  47.      {  
  48.        # File for Attachment
  49.       $file_name = substr($attachments[$i]["file"], (strrpos($attachments[$i]["file"], "/")+1));
  50.  
  51.        $handle=fopen($attachments[$i]["file"], 'rb');
  52.        $f_contents=fread($handle, filesize($attachments[$i]["file"]));
  53.        $f_contents=chunk_split(base64_encode($f_contents));    //Encode The Data For Transition using base64_encode();
  54.        $f_type=filetype($attachments[$i]["file"]);
  55.        fclose($handle);
  56.  
  57.        # Attachment
  58.       $msg .= "--".$mime_boundary.$eol;
  59.        $msg .= "Content-Type: ".$attachments[$i]["content_type"]."; name=\"".$file_name."\"".$eol;  // sometimes i have to send MS Word, use 'msword' instead of 'pdf'
  60.        $msg .= "Content-Transfer-Encoding: base64".$eol;
  61.        $msg .= "Content-Description: ".$file_name.$eol;
  62.        $msg .= "Content-Disposition: attachment; filename=\"".$file_name."\"".$eol.$eol; // !! This line needs TWO end of lines !! IMPORTANT !!
  63.        $msg .= $f_contents.$eol.$eol;
  64.      }
  65.    }
  66.  }
  67.  
  68.  # Finished
  69. $msg .= "--".$mime_boundary."--".$eol.$eol;  // finish with two eol's for better security. see Injection.
  70.  
  71.  # SEND THE EMAIL
  72. ini_set(sendmail_from,$fromaddress);  // the INI lines are to force the From Address to be used !
  73.  $mail_sent = mail($to, $subject, $msg, $headers);
  74.  
  75.  ini_restore(sendmail_from);
  76.  
  77.  return $mail_sent;
  78. }
  79. ?>

Checar headers
Chequea si ya se enviaron cabeceras y en que parte.
Código: PHP
  1. <?php
  2.  
  3. // Si no se han enviado cabeceras, enviar una
  4. if (!headers_sent()) {
  5.    header('Location: http://www.example.com/');
  6.    exit;
  7. }
  8.  
  9. // Un ejemplo del uso de las parametros opcionales archivo y linea, a
  10. // partir de PHP 4.3.0.
  11. // Note que $nombre_archivo y $num_linea son pasados para su uso posterior.
  12. // No les asigne valores con anterioridad.
  13. if (!headers_sent($nombre_archivo, $num_linea)) {
  14.    header('Location: http://www.example.com/');
  15.    exit;
  16.  
  17. // Probablemente quiera producir un error aqui.
  18. } else {
  19.  
  20.    echo "Las cabeceras ya fueron enviadas en $nombre_archivo en la linea " .
  21.         "$num_linea\nNo es posible redireccionar, por ahora por favor " .
  22.         "pulse este <a href=\"http://www.example.com\">enlace</a> en su " .
  23.         "lugar\n";
  24.    exit;
  25. }
  26.  
  27. ?>

Redireccionar a HTTPS
Si nuestra web la tenemos normal con el 'HTTP' pero si queremos redireccionarlos automaticamente a HTTPS (necesitas un certificado) con esto lo puedes hacer:

Código: PHP
  1. <?php
  2. if(!$_SERVER['HTTPS']== 'on'){
  3.       $nueva="https://". $_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
  4.       header("Location: $nueva");
  5.       exit();
  6.    }
  7. ?>

Funcion para cortar texo o limitar, ideal para ultimas noticias y demas:
Código: PHP
  1. <?
  2. // Funcion para cortar texto
  3. // Programado por alienmaster <efnworkz@hotmail.com>
  4. // http://4cosas.com
  5. function cortar($text0, $limite){
  6.    $comp = strlen($text0);
  7.    if($comp > $limite){
  8.        return = substr($text0, 0, $limite)."...";
  9.    }
  10.    else{
  11.        return "$text0";
  12.    }
  13. }
  14. ?>

Forma abreviada para imprimir en pantalla:

Código: PHP
  1. $nick="Soy Carxl";
  2. <?=$nick?>

Esa instrucción reemplazaría: <?php echo $nick;?>

Hice una pequeña función que permite seleccionar lo que hay dentro de un string desde la palabra necesitada hasta la que finaliza...

Código: PHP
  1. <?php
  2.  
  3. function desde_hasta($desde, $hasta, $contenido){
  4. if(eregi($desde ,$contenido)){
  5.  $retorno = explode($desde, $contenido);
  6.  $retorno = $retorno[1];
  7.  $retorno = explode($hasta, $retorno);
  8.  $retorno = $retorno[0];
  9.  return $retorno;
  10. } else {
  11.  return FALSE;
  12. }
  13. }
  14.  
  15. ?>

De esta forma ejecutas:
Código: PHP
  1. <?php
  2. $contenido = 'tienes <a href="http://foro.elhacker.net/pm.html">111 mensajes</a>';
  3. $cantidad_mensajes = desde_hasta('tienes <a href="http://foro.elhacker.net/pm.html">', 'mensajes</a>', $contenido);
  4. echo "Cantidad de mensajes: $cantidad_mensajes\n";
  5. ?/

Estaba realizando unas funciones propias para un sistema que estoy haciendo y quería compartirlo con ustedes si es que agún dia tienen la misma necesidad:

Código: PHP
  1. <?php
  2. $palabra = "1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950";
  3. echo whk_recorta($palabra,10);
  4. /* Resultado: 1234567891...4647484950 */
  5.  
  6. function whk_recorta($palabra,$limite){
  7. if($limite < 1){
  8.  return $palabra;
  9. }
  10. if(strlen($palabra)>(($limite * 2) + 1)){
  11.  for($cuenta=0;$cuenta<$limite;$cuenta++){
  12.   $palabra_final .= $palabra[$cuenta];
  13.  }
  14.  $palabra_final .= "...";
  15.  for($cuenta = (strlen($palabra) - $limite); $cuenta <= strlen($palabra); $cuenta++){
  16.   $palabra_final .= $palabra[$cuenta];
  17.  }
  18.  return $palabra_final;
  19. }else{
  20.  return $palabra;
  21. }
  22. }
  23. ?>
  24.  
  25.  
  26.  

Transformación de Strings en múltiples formas:
Código: PHP
  1. // Powered by GreenCode - WHK
  2. function codifica_base64_gz($buffer){
  3. $buffer = bin2hex(base64_encode(gzcompress($_POST['buffer'])));
  4. $separador = 16; // Editable, separador de 16 bytes.
  5. $separa = 0;
  6. for($cuenta=0;$cuenta<strlen($buffer);$cuenta+=2){
  7.  if($separa == 0){
  8.   $dump .= '"';
  9.  }
  10.  $dump .= '\x'.$buffer[$cuenta].$buffer[$cuenta+1];
  11.  $separa++;
  12.  if($separa == $separador){
  13.   $dump .= '"';
  14.   if($cuenta != (strlen($buffer))-2){
  15.    $dump .= '.'."\n";
  16.   }
  17.   $separa = 0;
  18.  }
  19. }
  20. if($dump[strlen($dump)-1] != '"'){
  21.  $dump .= '"';
  22. }
  23. return
  24. "\x3c\x3fphp\n// ...\n\n/* El retorno es tu buffer */".
  25. "\$str = gzuncompress(base64_decode(\n$dump\n));\n\n// ...\n\x3f\x3e";
  26. }
  27.  
  28. function ascii_a_png($buffer){
  29. return
  30. "\x3c\x3fphp\n// ...\n\n".
  31. "/* El retorno es una imagen */\n".
  32. "\$handle_img = imagecreate(".(int)(strlen($buffer) * 9).", 30);\n".
  33. "\$fondo = imagecolorallocate(\$handle_img, 255, 255, 255);\n".
  34. "\$color_texto = imagecolorallocate(\$handle_img, 0, 0, 255);\n".
  35. "imagestring(\$handle_img, 5, 0, 0, base64_decode(\"".base64_encode($buffer)."\"), \$color_texto);\n".
  36. "header(\"Content-type: image/png\");\n".
  37. "imagepng(\$handle_img);\n\n".
  38. "// ...\n\x3f\x3e";
  39. }
  40.  
  41. function sqlchr($buffer){
  42. for($cuenta=0;$cuenta<strlen($buffer);$cuenta++){
  43.  $dump .= 'char('.ord($buffer[$cuenta]).')';
  44.  if((strlen($buffer) - 1) != $cuenta){
  45.   $dump .= ',';
  46.  }
  47. }
  48. return $dump;
  49. }
  50.  
  51. function sqldword($buffer){
  52. return 'funcion(0x'.bin2hex($buffer).')';
  53. }
  54.  
  55. function urlencode_total($buffer){
  56. $buffer = bin2hex($buffer);
  57. for($cuenta=0;$cuenta<strlen($buffer);$cuenta+=2){
  58.  $dump .= '%'.$buffer[$cuenta].$buffer[$cuenta+1];
  59. }
  60. return $dump;
  61. }
  62.  
  63. function unescape_javascript($buffer){
  64. return '<SCRIPT LANGUAGE="javascript" TYPE="text/javascript">
  65. document.write(unescape("'.urlencode_total($buffer).'"));
  66. </SCRIPT>';
  67. }
  68.  
  69. function php_encode($buffer){
  70. $buffer = bin2hex(base64_encode(gzcompress($_POST['buffer'])));
  71. $separador = 16; // Editable, separador de 16 bytes.
  72. $separa = 0;
  73. for($cuenta=0;$cuenta<strlen($buffer);$cuenta+=2){
  74.  if($separa == 0){
  75.   $dump .= '"';
  76.  }
  77.  $dump .= '\x'.$buffer[$cuenta].$buffer[$cuenta+1];
  78.  $separa++;
  79.  if($separa == $separador){
  80.   $dump .= '"';
  81.   if($cuenta != (strlen($buffer))-2){
  82.    $dump .= '.'."\n";
  83.   }
  84.   $separa = 0;
  85.  }
  86. }
  87. if($dump[strlen($dump)-1] != '"'){
  88.  $dump .= '"';
  89. }
  90. return
  91. "\x3c\x3fphp\n// ...\n".
  92. "/*\nRecuerda que no debes anteponer '\x3c\x3f' ni terminar con '\x3f\x3e'".
  93. "Elimina este comentario.\n*/\n".
  94. "eval(gzuncompress(base64_decode(\n$dump\n)));\n\n// ...\n\x3f\x3e";
  95. }
  96.  
  97. function decodifica_base64_gz($buffer){
  98. $buffer1 = str_replace('"',' ',$buffer);
  99. $buffer1 = str_replace('.',' ',$buffer);
  100. $buffer1 = explode('\x',$buffer);
  101. $buffer1[0] = '';
  102. for($cuenta=0;$cuenta<count($buffer1);$cuenta++){
  103.  if(strlen($buffer1[$cuenta]) == '2'){
  104.   $buffer2 .= ' '.$buffer1[$cuenta];
  105.   $procesando = true;
  106.  }else{
  107.   if($procesando){
  108.    $buffer2 .= ' '.$buffer1[$cuenta][0].$buffer1[$cuenta][1];
  109.   }
  110.  }
  111. }
  112. $buffer2 = explode(' ',$buffer2);
  113. for($cuenta=0;$cuenta<count($buffer2);$cuenta++){
  114.  if(strlen($buffer2[$cuenta]) == '2'){
  115.   $buffer3 .= $buffer2[$cuenta];
  116.  }
  117. }
  118. return gzuncompress(base64_decode(hexa_a_str($buffer3)));
  119. }
  120.  
  121. function ascii_a_sha1($buffer){
  122. return sha1($buffer);
  123. }
  124.  
  125. function hexa_a_str($buffer){
  126. $buffer = preg_replace("/[^a-zA-Z0-9s]/", "", str_replace('\x',' ',$buffer));
  127. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  128.  $dump .= chr(hexdec($buffer[$cuenta].$buffer[($cuenta+1)]));
  129. }
  130. return $dump;
  131. }
  132.  
  133. function ascii_a_decimal($buffer){
  134. for($cuenta=0;$cuenta<strlen($buffer);$cuenta++){
  135.  $dump .= ord($buffer[$cuenta]).' ';
  136. }
  137. return $dump;
  138. }
  139.  
  140. function ascii_a_html_sin_s($buffer){
  141. $buffer = bin2hex($buffer);
  142. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  143.  $dump .= '&#'.hexdec($buffer[$cuenta].$buffer[$cuenta+1]);
  144. }
  145. return $dump;
  146. }
  147.  
  148. function ascii_a_html_con_s($buffer){
  149. $buffer = bin2hex($buffer);
  150. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  151.  $dump .= '&#x'.$buffer[$cuenta].$buffer[$cuenta+1].';';
  152. }
  153. return $dump;
  154. }
  155.  
  156. function generar_htpasswd_sha($user,$pass){
  157. return $user.':{SHA}'.base64_encode(sha1($pass, TRUE));
  158. }
  159.  
  160. function generar_htpasswd_md5($user,$realm,$pass){
  161. return $user.':'.md5($user.':'.$realm.':'.$pass);
  162. }
  163.  
  164. function hexadecimal_a_decimal($buffer){
  165. $buffer = preg_replace("/[^a-zA-Z0-9s]/", "", str_replace('\x',' ',$buffer));
  166. for($cuenta=0; $cuenta<strlen($buffer); $cuenta++){
  167.  if(ctype_xdigit($buffer[$cuenta].$buffer[$cuenta+1])){
  168.   $dump .= hexdec($buffer[$cuenta].$buffer[$cuenta+1]).' ';
  169.   $cuenta++;
  170.  }
  171. }
  172. return $dump;
  173. }
  174.  
  175. function octal_a_decimal($buffer){
  176. $buffer = preg_replace("/[^0-9 s]/", "", $buffer);
  177. $buffer = explode(' ',$buffer);
  178. for($cuenta=0; $cuenta<(count($buffer)-1); $cuenta++){
  179.  $dump .= octdec($buffer[$cuenta]).' ';
  180. }
  181. return $dump;
  182. }
  183.  
  184. function ascii_a_hexadecimal($buffer){
  185. return chunk_split(bin2hex($buffer),2,' ');
  186. }
  187.  
  188. function ascii_a_octal($buffer){
  189. $buffer = bin2hex($buffer);
  190. for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  191.  $dump .= hexdec($buffer[$cuenta].$buffer[$cuenta+1]).' ';
  192. }
  193. $dump3 = explode(' ',$dump);
  194. for($cuenta=0; $cuenta<(count($dump3)-1); $cuenta++){
  195.  $dump2 .= decoct($dump3[$cuenta]).' ';
  196. }
  197. return $dump2;
  198. }
  199.  
  200. function debugger(){
  201. global $dump;
  202. if($dump){
  203.  echo htmlspecialchars($dump,ENT_QUOTES);
  204. }else{
  205.  if($_POST['buffer'] and $_POST['algoritmo']){
  206.  echo "No hay datos que devolver";
  207.  }
  208. }
  209. }

Uso:
Código: [Seleccionar]
<?php
// .. ..
$dump ascii_a_png('Hola Elhacker.net'); // Procesa el String.
debugger(); // Imprime en pantalla el resultado evitando un XSS.
// .. ..
?>

Debido a una incompatibilidad de SMF con carácteres HTML como & y # las dos funciones
ascii_a_html_sin_s()
ascii_a_html_con_s()
No se ven como debieran. Deben aparecer de la siguiente manera:
Código: PHP
  1. function ascii_a_html_sin_s($buffer){
  2.  $buffer = bin2hex($buffer);
  3.  for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  4.   $dump .= '&#'.hexdec($buffer[$cuenta].$buffer[$cuenta+1]);
  5.  }
  6.  return $dump;
  7. }
  8.  
  9. function ascii_a_html_con_s($buffer){
  10.  $buffer = bin2hex($buffer);
  11.  for($cuenta=0; $cuenta<strlen($buffer); $cuenta+=2){
  12.   $dump .= '&#x'.$buffer[$cuenta].$buffer[$cuenta+1].';';
  13.  }
  14.  return $dump;
  15. }

bye

fuente
« Última modificación: Marzo 22, 2014, 02:15:47 pm por Expermicid »

 

¿Te gustó el post? COMPARTILO!



Pequeños trucos en PHP

Iniciado por grax96

Respuestas: 0
Vistas: 1403
Último mensaje Agosto 01, 2012, 12:05:26 pm
por grax96