Tuesday 27 December 2011

Exam for PHP web developers (LAMP-WAMP)


Here i share with you the exam i prepared when i needed evaluate possible candidates for work with me as a web developers.

I work since the begining with PHP and MySQL (ever under Linux), i don't need a genius nor very intelligent person, but yes someone who can write PHP code manually and do the basic things with PHP/MySQL/HTML/CSS/Javascript and if possible jQuery.

Then, i created the exam that you can download here, or read below.
I hope this help someone or give any good idea ;) if you finally take this exam as inspiration and make a good improvement to it, please share with us and leave a comment!!!


NOTA: llevo 4 años y medio escribiendo artículos en este blog con el único interés de devolver a la comunidad de programadores tan solo un poquitín de todo lo que me han dado, especialmente los más generosos que no solo leen sino que también escriben!

Hasta ahora lo había hecho en "castellano" ("español", para los latinoamericanos), más sin embargo, a día de hoy el catalán está siendo tan agredido en su propio territorio (Catalunya, una región al norte de España) por los españoles castellanistas, que adopto la medida de cambiar el idioma de mis artículos al inglés como medida de boicot.

Lo siento por los latinoamericanos que desconocen esta polémica lingüística dentro del territorio español y que no tienen culpa, pero no dudo de que la mayoría entenderán perfectamente mi "limitado inglés", y si no harán uso de alguno de los traductores que corren por internet (recomiendo absolutamente: http://translate.google.com/#en|es|).


Xavals... se us ha acabat el bròquil (això no crec que ho sàpiga traduir el Google :P).


Catalonia is not spain!

=== OBJECTIVE OF THIS TEST

We need to know the skills and measure the ability of the candidate to manage the tools most used in our day to day work (in order of importance):

- PHP programming
- MySQL managing/querying
- HTML/CSS building
- Javascript programming


=== WHAT TO DO NOW?

Build a simple web application that use HTML, CSS, javascript, PHP and MySQL. The concept of the web application is:

 -> Store & manage (add/edit/list/delete) typical task notes, as "I've an exam for new job tomorrow."

Minimum elements to build:

- a database table to store elements (minimum fields: task_title, task_description,timestamp_creation,last_timestamp_edition).
- HTML page with list of elements (tasks), with buttons to edit/delete each element, and an "add new element" button.
- an edit element form, with javascript data validation before submission.
- use a CSS linked file to present the content well(list of elements and edit form).


= Notes:

1. You can call external jquery libraries if you feel more comfortable.
2. Add plenty of comments to your code (PHP, Javascript, HTML).
3. Any other elements (client or server side) that you add to the above specifications will be welcome.


=== URL: http://companydomain.com/exam/


=== DATABASE

-db_host: localhost
-db_user: exam_user
-db_passw: exam_pass
-db_database: exam_dbname

PHPMyAdmin: https://companydomain.com/phpMyAdmin/


=== FTP

-host: companydomain.com
-user: exam_user
-pass: exam_pass


=== SOFTWARE TO USE

You must only use:

- obviously a browser

- an FTP client

      + recommended: FILEZILLA (windows or linux)
      + http://filezilla-project.org/download.php?type=client)

- a SIMPLE code editor, never a sophisticated IDE
      + recommended: Windows NOTEPAD++ (windows) / Bluefish (linux)
      + http://notepad-plus-plus.org

- the database can be managed from PHP or PHPMyAdmin:

      + https://companydomain.com/phpMyAdmin/

Saturday 6 August 2011

Solución a carácteres raros y juegos de carácteres (charset)


Si al visitar tu propia web en tu navegador ves "carácteres raros", puede ser debido a dos cosas:

  • realmente hay carácteres "binarios"
  • hay un conflicto de "juego de carácteres" o "charset" en inglés

Carácteres binarios


Si tienes esos carácteres binarios es porque tú o algún visitante o administrador de tu web introdujo en el sistema (en un archivo o en la base de datos a través de un formulario) alguna cadena de texto COPIANDO Y PEGANDO desde algún software de Microsoft, por ejemplo. No siempre que se haga eso tiene que ocurrir tal "desajuste" de carácteres, pero la mayoría de las veces que ocurre es por esa razón. es algo que te puede ocurrir aunque tengas perfectamente construida tu web a nivel de charsets.

La solución a eso es disponer de alguna función PHP de limpieza de esos posibles carácteres, usándola justo cuando recibas datos a través de formularios, para que así se te guarden limpios en la base de datos.

En este otro artículo comparto esta función para limpiar, aunque ya aviso de que solo funciona si estás trabajando con el charset "utf-8" en toda tu web (base de datos, HTML y archivos!):

http://crear-paginas-web.blogspot.com/2011/06/eliminar-caracteres-raros-o-binarios-de.html


Conflictos de charset


Hay que definir el charset de tres elementos de tu aplicación web:
  • la base de datos
  • el HTML devuelto al navegador
  • los archivos del servidor (ya sean PHP o HTML o de texto)
Para empezar, la base de datos tiene dos tres aspectos en los que hay que configurar el charset, y no necesariamente coincidente (por eso son dos!).
  1. Uno es el charset utilizado para guardar los datos en sí.
  2. El otro el de "cotejamiento" de los datos. No me preguntes muy bien cuál es la diferencia... para eso busca por internet. Lo que te digo es que ahí ya puede haber una primera fuente de problemas!
  3. El tercero es la conexión del PHP con el MySQL, que también tiene que indicar el charset que se quiere usar. Es tan sencillo como añadir el siguiente comando después de cada conexión con MySQL:
    1 <?php
    2
    3 $connection
    = mysql_connect($db_host,$db_user,$db_passw) ;
    4
    mysql_set_charset('utf8');
    5
    6
    ?>

[* añadido el 6 de Dic. de 2011]

Lo recomendable es que ambos coincidan y que sea "UTF-8 unicode". Los demás charset suelen estar ahí para compatibilizar con bases de datos antiguas, pero hoy en día se recomienda UTF-8 UNICODE como charset completamente universal! puede contener carácteres chinos, árabes, rusos, latinos, etc... y todos mostrarse en un mismo párrafo perfectamente! ;)

La segunda cuestión es el charset de la página web devuelta al navegador. Es decir, el charset declarado en el meta-tag del HTML: "content-type", que indica al navegador con qué charset debe renderizar el contenido de tu HTML. Y de nuevo, lo recomendable es que uses UTF-8, así:

1 <meta equiv="Content-Type" content="text/html; charset=UTF-8" />

El tercer elemento de tu aplicación web en el que tienes que definir el charset es el más sútil y a veces problemático! Se trata del charset usado para el contenido de tus archivos en el servidor (PHP, texto, HTML, etc...). Y digo que es problemático porque solo de unos años para acá los editores de texto o de código que usamos en el escritorio de nuestros PCs (sea Linux o Windows...) han ido incorporando más funciones para poder definir el charset de nuestros documentos de una forma más clara y controlada para el usuario. Y aún así a veces yo tengo problemas!

El problema en este punto es que por ejemplo algunos de tus archivos .php estén codificados en iso-8859-1 y tu base de datos en utf-8. ¿Porqué? pues porque entonces es un poco imprevisible como se renderizarán algunos carácteres, como por ejemplo el símbolo de euro, que no tiene una codificación propia en iso-8859-1. ¿Ya vas entendiendo el lío que se puede montar?

Por esa razón hemos de usar un editor de texto/código que nos permita saber en todo momento el charset de nuestros documentos y modificarlo a voluntad. Es algo que cada día se ve más, pero aún no acaba de funcionar bien.

Por ejemplo, en Linux yo uso el excelente editor opensource Bluefish. Pero en la última versión parece tener un bug según el cuál te abre un documento con el último charset que usaste!!! imagínate que lío!!! si no voy con cuidado y tengo webs que usen iso-8859-1 y otras utf-8, si no me fijo me puede ir mezclando los charset entre ellos!!!! cosa que ya me ha ocurrido, porque aún tengo unos cuantos sites que tengo que convertir totalmente a utf-8 :(((

En fin, creo que queda evidente el problemón... símbolos de euros que no aparecen, vocales acentuadas que se ven como ~A- o cosas peores...

Conclusión


Es muy sencilla la moraleja a todo lo anterior:
  • usa UTF-8 para tus archivos
  • usa UTF-8 para tu base de datos
  • usa UTF-8 como charset en el meta-tag de tus páginas HTML
-->

Wednesday 1 June 2011

Eliminar caracteres raros o binarios de un string en PHP

Bueno, espero que estés aquí porque te hayas encontrado con el siguiente problema: tienes carácteres "extraños" o "binarios" o "no ascii" en algunos "strings" de tu base de datos, y no sabes cómo filtrarlos. Estos carácteres aparecen habitualmente al hacer un "copiar y pegar" desde algún software de Microsoft (Outlook, MSword, MSexcel, etc...) de usuarios que estén rellenando un formulario en tu web, por ejemplo. Me imagino que es el caso más habitual :(

Lo más curioso es que el hecho de que tengas un carácter de ese tipo infiltrado en tu base de datos puede ocasionar los errores más variopintos y puede costar de llegar a descubrir que es por culpa de ese maldito carácter! En mi caso estaba pasando datos de un servidor a otro usando un webservice que trabaja con SOAP y que por tanto los datos se envían en un formato XML perfecto. Eso quiere decir que si en la cadena de datos que estás transmitiendo tienes un caracter raro de esos... entonces ya rompes el formato del XML y recibes un error del tipo: "documento XML mal formado".

Solución

Aquí os dejo una función que a mí me sirve para limpiar de carácteres raros una cadena de texto (string). Uso PHP 5.2 corriendo sobre CentOS (linux), por lo que no sé si habrá diferencias con otros entornos, pero por probar no pierdes nada, y en todo caso la solución va por aquí:

1  <?php
2  
function f_remove_odd_characters($string){
3       
// these odd characters appears usually 
4       // when someone copy&paste from MSword to an HTML form
5       
$string str_replace("\n","[NEWLINE]",$string);
6       
$string=htmlentities($string);
7       
$string=preg_replace('/[^(\x20-\x7F)]*/','',$string);
8       
$string=html_entity_decode($string);     
9       
$string str_replace("[NEWLINE]","\n",$string);
10       return 
$string;
11  }
12  
?>


Unos pocos comentarios:
  • he mezclado lo mejorcito que he encontrado por ahí que no era mucho, pues al final he tenido que poner de mi parte ;)
  • lo del NEWLINE es para evitar que el preg_replace elimine los posibles cambios de línea
  • lo de los htmlentities es para evitar que se el preg_replace elimine las posibles vocales acentuadas y otros carácteres latinos!
  • efectivamente, el mérito de la limpieza se lo lleva la función preg_replace, habiendo protegido previamente las vocales acentuadas y los cambios de línea

Por favor, si no te ha servido y has podido "modificarla" para hacerla funcionar en tu caso, se agradecería que escribieras los detalles. ¿Te puedes creer que dónde he leído la mayor parte de esa función ha sido en un artículo que se escribió hace dos años y medio y aún la gente sigue aportando mejoras y comentarios?... qué alegría me da eso :)

Este era el enlace original, en dónde aporté mis cambios:
http://www.stemkoski.com/php-remove-non-ascii-characters-from-a-string

Actualización 27-Junio-2011


Acabo de descubrir que la función de arriba tiene problemas con el símbolo euro!! (€). Después de investigar, descubro que este símbolo no está en el charset latino habitual ISO-8859-1 y que por tanto la función nativa de PHP utf8_decode("€") devuelve "?" !!!! :(

Esto provoca que si el charset de tu web no es utf-8 entonces los simbolos de euro se te convierten en un interrogante si les aplicas utf8_decode() para guardarlo en tu base de datos! por si no lo sabías... Pero en fin, normalmente no deberías hacer esas cosas. Es decir, tener la base de datos y al web en dos charsets diferentes!

Bueno, en paralelo, si aplicamos la función f_remove_odd_characters($string) sobre el simbolo de euro, éste SIMPLEMENTE desaparece :( es decir, lo convierte a ''. De lo cuál me di cuenta cuando me fueron despareciendo los simbolos de euro que mis usuarios introducían en los formularios :(((

Conclusión, dejo pendiente este asunto de la eliminación de caracteres. He encontrado por internet una función que sustituye a utf8_decode() de manera que "evita" el problema del euro... por si a alguno le sirve, y también quiero ver si con ello también se eliminan otros caracteres raros como los que pretendía limpiar al inicio.

Es una lástima que no tenga ya "guardados" en mi base de datos esos carácteres raros para poder probar si efectivamente se pueden limpiar con la siguiente función, pero en fin, si alguien puede hacerlo, se lo agradeceré enormemente si comparte aquí el resultado ;)

1  <?php
2  
3  
function _utf8_decode($string){          
4       
5      
/* Only do the slow convert if there are 8-bit characters */
6      /* avoid using 0xA0 (\240) in ereg ranges. RH73 does not like that */
7      
if (! ereg("[\200-\237]"$string) and ! ereg("[\241-\377]"$string))
8          return 
$string;
9  
10      
// decode three byte unicode characters
11      
$string preg_replace("/([\340-\357])([\200-\277])([\200-\277])/e",       
12      
"'&#'.((ord('\\1')-224)*4096 + (ord('\\2')-128)*64 + (ord('\\3')-128)).';'",   
13      
$string);
14  
15      
// decode two byte unicode characters
16      
$string preg_replace("/([\300-\337])([\200-\277])/e",
17      
"'&#'.((ord('\\1')-192)*64+(ord('\\2')-128)).';'",
18      
$string);
19  
20      return 
$string;
21  } 
22  
23  
?>

Tuesday 26 April 2011

Hora actual en cierto TimeZone con PHP5 usando date_create()

Tal vez te haya tocado pelearte con el tema de las zonas horarias... y sabrás que es un auténtico embrollo. Después de haber probado varios métodos, finalmente hallé para mis aplicaciones una manera bien sencilla, que aprovecho para compartir aquí.

El problema se trata de lo siguiente: necesito saber la hora actual en cierta zona horaria, teniendo en cuenta obviamente los cambios de hora para verano.

La solución:

1  <?php
2  
3       $timeZone 
"America/Hermosillo";
4       
$o_date date_create(nulltimezone_open($timeZone));
5       
$local_time date_format($o_date'd/m/Y H:i');
6            
7       echo 
"Time at ".$timeZone.": ".$local_time;
8            
9       
// will produce something like this
10       //
11       // Time at America/Hermosillo: 26/04/2011 13:32 
12  
13  
?>


Si en nuestro servidor poseemos una versión de PHP >= 5.3 podemos trabajar con una variante de lo anterior en la que usamos la función date_create_from_format() para crear el objeto de fecha $o_date a partir de cualquier fecha y hora en cualquier formato!!!

1  <?php
2  
3       $timeZone 
"America/Hermosillo";
4       
$o_date date_create_from_format('Y-m-d H:i','2011-04-26 00:00'timezone_open($timeZone));
5       
$local_time date_format($o_date'd/m/Y H:i');
6            
7       echo 
"Time at ".$timeZone.": ".$local_time;
8            
9       
// will produce something like this
10       //
11       // Time at America/Hermosillo: 25/04/2011 15:00 
12  
13  
?>


El inconveniente a día de hoy (Abril 2011) es que pocos servidores han actualizado aún a esa versión (el mío no, por ejemplo). En ese caso, este otro código que trabaja con objetos DateTime en lugar de con funciones, no es mucho más complicado pero nos aporta una nueva ventaja: podemos usar como "hora" a traducir cualquiera que esté en el formato Y-m-d H:i

1  <?php
2  
3       $timeZone 
'America/hermosillo';
4       
$dateTime = new DateTime('2011-04-26 00:00');
5       
$dateTime->setTimeZone(new DateTimeZone($timeZone));
6       
$local_time=$dateTime->format('d/m/Y H:i');
7  
8       echo 
"Time at ".$timeZone.": ".$local_time;
9  
10       
// will produce something like this
11       // (in a Server at 'Europe/Madrid')
12       //
13       // Time at America/Hermosillo: 25/04/2011 15:00
14        
15  
?> 


Es decir, resumiendo, el primer código que he presentado va excelente para calcular la hora en este momento en cualquier zona horaria del globo. Y el último código, nos es útil para calcular la hora en cualquier zona horaria a partir de cualquier otra fecha/hora de nuestro servidor ;)

Estoy seguro que a más de uno le ayudará esto. Aunque en realidad sé que la cosa aún puede complicarse más, y de hecho, si uno quiere que su aplicación web sea realmente "multi-horaria" (para el visitante, para la base de datos, etc...) la cosa puede ser un tanto surrealista. Una buena recomendación al respecto que leí hace unos meses es: guardar en tu base de datos fechas y horas en formato GMT, para a partir de ahí "traducirlo" al uso horario que necesites en cada momento, independientemente de que coloques tu aplicación en un servidor de una zona horaria u otra.

Suerte!
Salud!
SERGI

Friday 8 April 2011

Formatear código para publicar en blog

Habrás llegado aquí posiblemente buscando cómo poder publicar trozos de código en los artículos de tu blog o en tu propia web de documentación de software, etc... Ya sabes: con colores que destaquen la sintaxis del código y hagan más legible el código que publicas.

Pues bien, en mi caso me sucedió lo mismo. Y al final la solución aceptable que asumí para mi uso personal es la que comparto aquí con vosotros. Es un pequeño código de PHP que he colgado en uno de mis dominios y que podéis ver aquí abajo.

¿Qué hace? simplemente muestra una casilla textarea para introducir el código que quieres formatear, pulsas un botón "send" y se recarga la página con otro textarea con él código ya formateado y listo para copiar y pegar en tu blog, además de mostrar debajo el aspecto de cómo quedará ;) Así puedes hacer varios "intentos" hasta que veas que te guste.

No voy a echarme muchos méritos pero sí los que merezco: tomé de base un código muy parecido que hacía casi lo mismo, pero lo he mejorado en muchos aspectos, tanto en el formateado en sí como en la usabilidad de la "aplicación". Por ejemplo, el original no presentaba el segundo textarea para copiar y pegar el código sino que había que ver "el código fuente" de la página para copiarlo :( Y también tenía errores en el coloreado de los números de línea.

En fin, disfrútenlo:
1  <?php
2    
if( !empty( $_POST['codigo'] ) ) {
3         
$codigo $_POST['codigo'];
4         
$codigo str_replace"\t""     "$codigo );
5         
$codigo highlight_stringstripslashes$codigo ), true );
6         
$line 1;
7         
$buffer = array();
8         
$cod explode"<br />"$codigo );
9         foreach( 
$cod as $codLine ) {
10              
$buffer[] = "<b style='color:#888!important;'>".$line."</b>&nbsp;&nbsp;" $codLine;
11              
$line++;
12         }
13         
$codigo implode"<br />"$buffer );
14         
// quit ASCII break lines 
15         
$codigo str_replace("\r",'',$codigo);
16         
$codigo str_replace("\n",'',$codigo);
17         
// HACK: 
18         
$codigo str_replace"<b style='color:#888!important;'>1</b>&nbsp;&nbsp;<code>""<code><b style='color:#888!important;'>1</b>&nbsp;&nbsp;"$codigo );
19         
// FRAME DECORATION:
20         
$codigo "<div style='background-color:#eee;border:1px #aaa solid;padding:9px;margin:9px;'>".$codigo."</div>";
21    }
22    
?>
23  
  <html>
24    <head>
25         <title>Format Code</title>
26    </head>
27    <body>
28    
29    <div style='width:600px;margin:5px auto;line-height:1.3em;'>
30    <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
31            <h2>1. Source code</h2>
32         <textarea rows="7" cols="80" name="codigo"><?php 
33              
echo htmlentities(stripslashes($_POST['codigo'])); ?></textarea>
34         <br />
35         <input type="submit" name="send" value="Send &darr;" />
36    </form>
37            <h2>2. Formatted code</h2>
38         <textarea rows="7" cols="80"><?php 
39         
echo htmlentities($codigo); ?></textarea><br />
40            <h2>3. Preview</h2>
41                   <?php echo $codigo?>
42  
  </div>
43    
44    </body>
45    </html>

Podéis descargarlo aquí: highlightingcode.tar.gz

Inconveniente: solamente colorea la sintaxis de PHP. Para los otros lenguajes (HTML, CSS, javascript, etc...) al menos añade los números de línea y conserva la tabulación, lo cuál es una gran ayuda, no?

La verdad, a mí, ya me es más que suficiente. Sería ideal que también coloreara otros lenguajes. En este sentido existe una librería gratuita muy interesante, pero ya se hace bastante más complicado usarla: SyntaxHighlighter.

Tuesday 29 March 2011

Error: Call to undefined function: file_put_contents()

Si tu navegador te muestra ese error es que probablemente tienes una versión obsoleta de PHP instalada en tu servidor. Porque la función file_put_contents() apareció a partir de PHP5. Puedes verlo en la doc. oficial de la misma:

http://php.net/manual/en/function.file-put-contents.php

Tienes 2 soluciones:

  • actualizar tu servidor... lo cuál es más que recomendable, porque cada vez irás teniendo más problemas de este tipo si no lo haces, a parte que es muy pero que muy recomendable por seguridad! a día de hoy (Marzo de 2011) está por salir PHP6 pronto...

  • construirte una función a medida que haga lo mismo que se supone que hace file_put_contents().



Voy a ayudarte a ello, porque es bien simple: básicamente intenta escribir en un archivo (existente o no) un contenido tipo string.

1  <?php 
2  
3  
function file_put_contents($path_file,$content){
4            
// intentamos cambiar los permisos del archivo 
5            
@chmod($path_file,0755);
6            
// abrimos el archivo en modo escritura al inicio
7            
$fp fopen($path_file,"w"); 
8            
// escribimos
9            
fwrite($fp$content);
10            
// cerramos  
11            
fclose($fp); 
12  }
13  
14  
?>       


Espero que te haya sido útil. Recuerda solamente que una vez que cambies a PHP 5 tendrás que eliminar esta función, si no lo haces te dará error.

Saludos!
SERGI

Wednesday 23 February 2011

Esconder direcciones de email a los spammers usando base64

De todos es conocido que no es muy recomendable dejar a la vista direcciones de correo electrónico porque los robots usados por los "spammers" los chupan inmediatamente. Voy a compartir aquí un método nuevo (y creo que sencillo de implementar) a todos los que ya hay, usando codificación en base64.

Supongamos que el HTML que nosotros queremos renderizar es:

<p>correo: mi@correo.com</p>

entonces, para este caso, pondremos:

<p>correo: <span class='e64'>bWlAY29ycmVvLmNvbQ==</span>


en dónde "bWlAY29ycmVvLmNvbQ==" es la codificación en base64 de la dirección "mi@correo.com". Por de pronto, en esta línea de HTML los robots ya no encuentran una arroba ni nada que se le parezca!

Para conseguir renderizar eso con PHP sería con algo como:

1  <?php
2  
3    
echo "<p>correo: <span class='e64'>"
4              
.base64_encode("mi@correo.com")
5              .
"</span></p>";
6  
7  
?>


Lo que nos toca hacer ahora es usar algo de javascript para que en cuanto se cargue la página el navegador sustituya el contenido de este spam por el valor decodificado. Para ello, necesitaremos echar mano de alguna función decodificadora de base64 para javascript. Lo que yo suelo hacer en estos casos es buscar en el proyecto PHP.js que es una librería abierta de funciones de PHP pasadas a javascript, genial, verdad!? En nuestro caso esta es la función que nos decodificará el base64:

http://phpjs.org/functions/base64_decode:357

Así que hazlo como quieras, pero añádele al javascript de tu página esta función. También necesitarás añadir esta otra función que es usada por la anterior:

http://phpjs.org/functions/utf8_decode:576

Por último, añade también el siguiente código que usa jQuery:

1  <script>
2  
3    $(document).ready(function(){
4      $("span[class^='e64']").attr('class', function(){
5        $(this).html(base64_decode($(this).html()));
6      });
7    });
8  
9  </script>

Usando jQuery la cosa se simplifica al máximo, pero en fin, puedes hacerlo sin necesidad de jQuery, usando otros frameworks u otro javscript "a pelo".

Lo que hace este jQuery es indicar que una vez cargada la página ("document ready") busque TODOS los span cuya clase comience con "e64" y les reemplaze el html que contienen por el mismo html decodificado.

Consideraciones finales

Ya puedes imaginar que las variaciones posibles son muchas: llámale como quieras a tu clase, no hace falta que sea un span, etc... eso ya depende de tu creatividad y tus necesidades. Pero creo que esta técnica puede dar mucho de sí. De hecho, la hallé hoy implementada en un website pero no para ocultar emails sino para otra cosa que ni siquiera entendí la razón, jejeje...

Se agradecerá que si le das un uso diferente lo compartas con un comentario ;) así podemos sacarle todos provecho.

En cuanto a la efectividad para ocultar emails... bueno, creo que es "suficiente" si tu web no tiene atractivo suficiente como para querer ser "atacada" de manera directa. Es decir, suponiendo que nuestras webs son periódicamente visitadas por robots buscando arrobas, con este método conseguiremos esquivarles. Pero, si tienes una web que quiere ser escaneada (no sé, por ejemplo que tuviéras un buen directorio de profesionales de la medicina con sus emails públicos), entonces rápidamente se te vería el plumero y cualquier hacker se saltaría tu codificación en base64 en menos de 3 minutos ;)

En este sentido, si tienes alguna idea para sofisticar más el código de tal manera que realmente los emails queden ocultos sí o sí... se agradecería un comentario. Claro, en la línea de hacerlo con javascript o algo parecido, es decir, usando tecnología de cliente, no de servidor... aunque no sé si eso será posible.

Wednesday 2 February 2011

Activar errores de PHP por navegador sin tocar el PHP.ini

Posiblemente hayas llegado a este artículo desesperado porque la configuración de tu cuenta de hosting tiene desactivado el "displaying" de errores por navegador. En realidad es una opción interesante para aumentar la seguridad de nuestra aplicación PHP, pero hace casi imposible el debugeo cuando estamos en la fase de desarrollo.

La solución más "permanente" es modificar el archivo php.ini de configuración de PHP para descomentar el comando:

display_errors = On

Pero una solución más temporal es simplemente usar estos comandos:

ini_set("display_errors", 1);
error_reporting(E_ERROR | E_WARNING | E_PARSE);

Cuidado, porqué me ha costado saberlos usar:
  • has de insertarlos al inicio del PRIMER archivo de tu aplicación y que ESTÉ LIBRE DE ERRORES DE SINTAXIS. Esto es muy importante, es decir, estos comandos no serán tenidos en cuenta si los pones en el archivo que tiene errores de sintaxis (que son los más habituales).
  • los colocas en las primeras líneas del archivo PHP, obviamente, después de < ? p h p
  • puedes jugar con los argumentos de ambos comandos, pero los que te puse arriba son los que yo acostumbro a ver en las configuraciones por defecto de los servidores de PHP.
Estoy seguro de que a alguno esto le ayudará ;)
Un saludote!
SERGI