Archivos de la categoría Open Source

Solucionar error: Warning: Cannot modify header information – headers already sent by (output started at wp-config.php:1) in wp-includes/pluggable.php

Al actualizar WordPress 4.3 puede que visualices este error en tu wp-admin o dashboard u otras zonas como el wp-login.

Suele pasar a usuarios que actualizan su WordPress y modifican su archivo wp-config.php con algún editor (tipo Filemanager de Cpanel u otros) que añaden al archivo el modo UTF8 BOM (unas cabeceras en el archivo) que no están permitidas y que no se llevan bien con hostings o alojamientos basados en GNU/Linux y ejecutando PHP.

Ten en cuenta, que esta solución que propongo es una de las posibles, ya que el error puede deberse a otras causas, por ello te recomiendo que busques en esta sección específica de wordpress en caso que no te sea útil esta solución. Normalmente, este warning o aviso aparece al intentar establecer las cookies de wordpress, ya que carga el wp-config.php y añade el BOM que se toma como texto enviado e impidiendo establecer las cabeceras de PHP y por tanto las cookies.

En caso de que estes afectado por la modificación del archivo UTF8 con BOM en el wp-config.php, la solución es facil. Unicamente debes quitarle el modo BOM con algun editor de texto avanzado.

Aunque para administradores de sistemas como yo, solemos hacerlo de forma más rapida con un par de comandos.

Primero si quieres buscar otros archivos con UTF8 BOM (puedes excluir archivos PNG, JPG y demás que seran falsos positivos). Puedes utilizar el siguiente comando:

grep -rl $'\xEF\xBB\xBF' ruta/a/tu/wordpress

Si una vez que has confirmado los archivos, puedes ejecutar el siguiente comando para cambiar todos los archivos de una vez y eliminar el modo UTF8 BOM:

find ruta/a/tu/wordpress -type f -exec sed '1s/^\xEF\xBB\xBF//' -i.bak {} \; -exec rm {}.bak \;

¿Aún sigues con problemas y no encuentras quien pueda solucionartelo?

Pues estas de suerte, puedes contratarme como freelancer en Upwork para que le de un vistazo y solucionarlo.

 

Reactivar módulo wireless en Acer Aspire para Ubuntu y derivados

Si usas las últimas versiones de Ubuntu 13.10 o siguientes, en concreto aquellas distribuciones que usen algún núcleo entre la versión 3.8 y 3.11 habrás notado que si dispones de un portátil Acer Aspire te hayas quedado sin soporte wireless e incluso algunas otras funciones inhabilitadas como ventilador de la CPU u otros. En concreto la lista de elementos hardware que pueden dejar de funcionar son:

  • La tarjeta de red (interfaz wireless)
  • El adaptador de bluetooth integrado
  • Tarjeta de red 3G (sólo los modelos que disponga de una integrada)
  • Indicadores LED frontales (CPU, email, multimedia, etc)
  • Botones de iluminación LCD

wireless Ubuntu

En el caso de la conectividad wireless lo primero que se suele pensar es que el interruptor esta mal pulsado o no llega a activar la wifi (normalmente suele estar en el canto de la parte inferior izquierda). En mi caso y creo que en otros no será ese el problema. Por si acaso, puedes comprobarlo con el siguiente comando:

$ rfkill list all

Si no esta bloqueado por hardware o software, debería aparecer un resultado como:

1: phy1: Wireless LAN
 Soft blocked: no
 Hard blocked: no

Tras investigar un poco en los registros del sistema, parece que no existe una buena compatibilidad para mi modelo de Acer Aspire a través del módulo del kernel que se utiliza para controlar el hardware. Se trata del módulo acer_wmi que es un reemplazo incompleto y no muy estable del módulo acer_acpi que se utilizaba en versiones más antiguas del kernel. pero a partir de la versión 2.6.25 fueron fusionados. Este módulo suele autocargarse en el kernel basándose en la concordancia por detección DMI (Destktop Management Information)

Solución temporal al problema

Para resolver el problema, lo primero es conocer tu modelo exacto de portátil. Si no te apetece mirar etiquetas, cajas, facturas o albaranes de compra, puedes sacar el modelo exacto con el siguiente comando:

sudo dmidecode -t 2 | grep Product

En mi caso se trata del siguiente modelo:

Product Name: Aspire 5943G

Tras comprobar la compatibilidad, si prefieres no usar dicho módulo, basta con ejecutar:

sudo modprobe -r acer-wmi; echo 'blacklist acer-wmi' | sudo tee -a /etc/modprobe.d/blacklist.conf

Reinicia y posteriormente no debería aparecer ningún módulo en la salida del comando:

lsmod | grep acer

Solucionar error symbol lookup error: suhosin.so: undefined symbol: php_mb_encoding_translation en PHP 5.4 con cPanel

Suhosin logo
Suhosin logo de Hardened PHP Project

Si has actualizado a PHP 5.4 en cPanel es posible que durante la subida de archivos u otras partes de tu código PHP te encuentres el siguiente error en el error_log de Apache.

/usr/bin/php: symbol lookup error: /usr/local/lib/php/extensions/no-debug-non-zts-20100525/suhosin.so:
 undefined symbol: php_mb_encoding_translation

Este error sólo se produce si además tienes activo Suhosin. Oficialmente PHP 5.4 no tiene soporte para Suhosin, pero esta extensión es muy necesaria para el uso de servidores compartidos, debido a que ofrece bastantes características de seguridad adicionales a la instalación base de PHP.

El problema se debe a que varias funciones relacionadas con mb string no estan presentes en el código fuente de PHP (probablemente porque cPanel usa una versión propia y ligeramente modificada del código original de PHP), donde puede haber sido eliminada la función php_mb_encoding_translation

Podemos observar, que en el código fuente de la versión PHP 5.4.19 se encuentra definida la función php_mb_encoding_translation() en concreto en /ext/mbstring/mbstring.c:102. Teóricamente esta función existe en el código nativo de PHP y suhosin debería poder utilizarla, pero al ser la versión PHP personalizada de cPanel no esta presente y suhosin falla al ejecutar el código php y eso producirá un error 500 en Apache abortando la ejecución del script.

Afortunadamente, existe un parche en Github en forma de Pull Request cuyo autor es Jan Ingvoldstad, que no ha sido aún aceptada después de más de 8 meses (al momento de escribir este artículo).

Puedes aplicar directamente el parche en el código fuente de github y compilarlo. En mi caso, he creado un repositorio aparte haciendo cherry picking del parche y de otros parches adicionales que corrigen otros errores en PHP 5.4 con suhosin y aún no han sido fusionados en el proyecto original.

La forma rápida de solucionarlo sería:

1 – Clonar mi repositorio de Suhosin con los parches aplicados (cherry picking)

git clone -b master --single-branch http://github.com/shakaran/suhosin.git suhosin-shakaran

2 – Compilar e instalar suhosin desde mi rama. En una sola línea sería:

cd suhosin-shakaran; phpize; ./configure; make; make install

Pero si quieres hacer tu propio cherry picking te explico como podrías hacer lo mismo que yo:

1 – Dirígete a github, en el repositorio oficial de suhosin y haz un fork del proyecto original

2 – Añade como repositorio remoto la rama de Jan Ingvoldstad

git remote add jani-upstream git://github.com/jani/suhosin.git

3 – Baja los commits de dicha rama (solo las referencias)

git fetch jani-upstream

4 – Haz un cherry pick del commit (parche) que arregla el fallo:

git cherry-pick e8beb4f50fa997c0ea4b923677deb275cc7660e

5 – Compila con:

cd suhosin-shakaran; phpize; ./configure; make; make install

Y listo, tendrás tu propio branch con tu parche aplicado.