WordPress muestra mal la hora

Bien, hemos visto que tanto en los plugins y todos los logs de Apache relacionados con WordPress mostraban la hora de manera incorrecta, después de verificar que la hora la teníamos bien tanto en PHP, como mediante Apache, la única conclusión es que estuviese mal configurada en el mismo WordPress, y así és, da igual la hora que pongas en la configuración desde el panel de Admin, ya que WordPress pondrá la hora en UTC por defecto “por la cara”.

Para solucionarlo, hay que editar el fichero wp-settings.php

Y buscar la linea:

// Set default timezone in PHP 5.
if ( function_exists( 'date_default_timezone_set' ) )
   date_default_timezone_set( 'UTC' );

Y substituirla por:

// Set default timezone in PHP 5.
if ( function_exists( 'date_default_timezone_set' ) )
    date_default_timezone_set('Europe/Madrid');

Por supuesto, Europe/Madrid es tan solo un ejemplo, debes de utilizar tu zona horaria.

El fichero wp-settings.php forma parte “de el core” de WordPress, por tanto, cuando se realice una actualización se sobrescribirá…, para solucionar este problema, podemos obtar por añadir el código en nuestro fichero functions.php de nuestro theme, y así funcionará independientemente de que actualicemos WordPress o no, evitando a la vez tener que tocar fichero core.

Añadimos estas lineas al final de fichero functions.php

function arreglar_hora() {
   date_default_timezone_set('Europe/Madrid');
}
add_action('init', 'arreglar_hora', 1);

En caso de que este no sea tu problema, prueba a añadir estas opciones extra:

php.ini:

date.timezone = "Europe/Madrid"

Apache .htaccess:

SetEnv TZ Europe/Madrid

iconv_strlen() [function.iconv-strlen]: Wrong charset, conversion from `ISO-8859-1′ to `UCS-4LE’ is not allowed in

Esto puede ser debdio a que hay problemas con las librerias /usr/lib/gconv o similar, especialmente si estás en un entorno chroot y no tienes dichas librerias o no funcionan correctamente por X motivo.

La solución es utilizar UTF-8 por defecto editanto el php.ini y problema resuelto. También estás opciones són recomendables si queremos trabajar en entornos con UTF-8.

De manera global en el php.ini

iconv.internal_encoding = UTF-8
iconv.input_encoding = UTF-8
iconv.internal_encoding = UTF-8

Desde el aplicativo o lugar dónde quieras modificar los valores por defecto.

ini_set('iconv.input_encoding', 'UTF-8');
ini_set('iconv.output_encoding', 'UTF-8');
ini_set('iconv.internal_encoding', 'UTF-8');

Opcionalmente también podemos indicar a PHP que utilice el juego de carácteres UTF-8 por defecto.

default_charset = "UTF-8"

¿Qué es el síndrome de Tourette? (Documental)

El síndrome de Tourette (ST) es un trastorno neurológico que se caracteriza por la existencia de movimientos involuntarios repetidos y sonidos incontrolables que se llaman tics. En algunos casos, tales tics pueden acompañarse de palabras y frases inapropiadas. Suele comenzar antes de los 18 años, los síntomas y la intensidad de éstos varían mucho de una persona a otra, pero en la mayoría de los casos la sintomatología es moderada.

A esta enfermedad también se le ha dado diferentes nombres o sinónimos como:

  • Tics Crónicos Múltiple.
  • Gilles de la Tourette, Síndrome de.
  • Síndrome de Espasmos Habituales.
  • Paulitis.
  • Tic Motor Crónico.
  • Tourette, Síndrome de.

Personajes tan célebres como Napoleón, Moliere, Pedro el Grande, Samuel Johnson, Mozart (quien, además de sus tics motores, escribía garabatos, lo que se conoce como coprografia) y el escritor francés André Malraux tuvieron que convivir con sus tics.

Tengo el Síndrome de Tourette (1 de 3)

Continue reading “¿Qué es el síndrome de Tourette? (Documental)”

Quitar el BOM de un fichero con codificación UTF-8

Mirando la compatibilidad de xhtml con el validador de w3, salía un warning avisando de que teníamos los ficheros codificados con BOM de nuestro theme, y que era mejor no tenerlo por compatibilidad con otros navegadores, así que había dos soluciones, abrir fichero a fichero uno por uno y guardarlos sin BOM con notepad++ o un editor similar, o hacer un script que lo automatice por nosotros, así que utilizamos la segunda opción :D

http://validator.w3.org

Byte-Order Mark found in UTF-8 File.

The Unicode Byte-Order Mark (BOM) in UTF-8 encoded files is known to cause problems for some text editors and older browsers. You may want to consider avoiding its use until it is better supported.

Primero, creamos un script en perl que será el encargado de eliminar el BOM.

$ editor quitarbom.pl
#!/usr/bin/perl
@file=<>;
$file[0] =~ s/^\xEF\xBB\xBF//;
print(@file)

Y en el directorio de nuestro theme dónde tenemos todos los ficheros con extensión php, lanzamos un bucle for desde linea de comandos (unix-like).


$ cd /nuestrodirectoriodeltheme
$ for f in *.php; do bomkill.pl < $f > sinbom.php; rm -f $f; mv sinbom.php $f; done

Y desapareció el BOM y el warning del w3 de todos los ficheros con extensión php.

Renombrar múltiples ficheros en GNU/Linux

Los que utilizan la shell de GNU/Linux saben que con el comando mv no es posible renombrar varios ficheros o directorios a la vez, con lo que hay que hacer algún tipo de bucle for/while o similar para poder hacer el procedimiento deseado, no obstante se puede realizar de una manera más sencilla utilizando el comando rename.

1) Quiero renombrar todos los ficheros con extensión html a php utilizando el comando mv

$ ls
1.html 2.html 3.html
$ mv *.html ????? (no se puede realizar!)

2) Quiero renombrar todos los ficheros con extensión html a php utilizando un bucle for y mv

$ ls
1.html 2.html 3.html
$ for h in *.html; do mv $h `echo $h | sed 's/\.html/.php/'`; done
$ ls
1.php 2.php 3.php

3) Quiero renombrar todos los ficheros con extensión html a php utilizando el comando rename

$ ls
1.html 2.html 3.html
$ rename 's/\.html$/.php/' *.html
$ ls
1.php 2.php 3.php

Como se puede observar, con el comando rename la operación es mucho más sencilla y clara que utilizar for junto con mv, logrando utilizar una expresión regular para ello.

El comando rename permite realizar expresiones regulares, así que el abanico de posibilidades es muy amplio para realizar otro tipo de tareas relacionadas.