Archivo de la etiqueta: warning

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.

 

Solucionar: RuntimeWarning: Python C API version mismatch for module en CentOS 5.5 con cPanel

Si utilizas CenOS y por ejemplo has decidido hacer una actualización de tu versión de Python ya que puede que estuvieras usando la versión 2.4 o 2.6 y quieres actualizar a 2.6 o 2.7 respectivamente, puede ser que te encuentres el error siguiente al ejecutar yum:

# yum
/usr/lib/python2.6/site-packages/rpm/__init__.py:7: RuntimeWarning: Python C API version mismatch for module _rpm: This Python has API version 1013, module _rpm has version 1012.
  from _rpm import *
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:
   No module named sqlitecachec
Please install a package which provides this module, or
verify that the module is installed correctly.
It's possible that the above module doesn't match the
current version of Python, which is:
2.6.5 (r265:79063, Jun  4 2010, 21:43:07)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)]
If you cannot solve this problem yourself, please go to
the yum faq at:
  http://wiki.linux.duke.edu/YumFaq

Este error se debe, a que yum, esta buscando sus bibliotecas para ejecutarse y no las encuentra. Posiblemente por que tu versión de yum esta instalada en otra versión de python anterior y la nueva no tiene dicha versión.

Existen varias formas de solucionar esto, pero en CentOS no esta documentada y a fecha de hoy en google no puedes encontrar ninguna solución. Es más acudiendo al IRC de centos pidiendo ayuda, su respuesta liberal en ingles fue “Date una bofetada o directamente disparate en la cabeza por lo que has hecho“.

Esta respuesta me indigno mucho, sobre todo porque me pareció pésimo el soporte, que sin darme solución, encima me respondía de esa forma, aparte el problema realmente reside en que ellos no son capaces de solucionártelo y puesto que no actualizan la versión de python en años “para que sea estable“, los usuarios y sysadmin deben ingeniárselas solucionando los problemas.

Luego después de experimentar mis soluciones fueron las siguientes:

Reinstalar yum a traves de rpm: esto probablemente funcionaría, pero no, ya que se instalaría incorrectamente con la nueva versión de python y no conseguí hacer nada, quizás hice mal algún paso.

– Reinstalar el paquete yum-metadata-parser que contiene las dependencias de yum. Igualmente al reinstalarlo no tuvo efecto ya que estaría cogiendo una mezcla de paths.

– Modificar la variable de entorno PYTHONPATH. De igual forma no funciono ni poniendo versiones más antiguas.

La solución final, que aunque fue cutre, conseguí hacerlo funcionar, fue la siguiente:

Buscar el binario de yum:

# which yum

En mi caso la salida fue:

# which yum
/usr/bin/yum

Luego tras comprobar que el tipo del archivo era un script en python:

# file /usr/bin/yum
/usr/bin/yum: python script text executable

Me fije en el archivo para editarlo:

# cat /usr/bin/yum
#!/usr/bin/python
import sys
try:
 import yum
except ImportError:
 print >> sys.stderr, """\
There was a problem importing one of the Python modules
required to run yum. The error leading to this problem was:

 %s

Please install a package which provides this module, or
verify that the module is installed correctly.

It's possible that the above module doesn't match the
current version of Python, which is:
%s

If you cannot solve this problem yourself, please go to 
the yum faq at:
 http://wiki.linux.duke.edu/YumFaq
 
""" % (sys.exc_value, sys.version)
 sys.exit(1)

sys.path.insert(0, '/usr/share/yum-cli')
try:
 import yummain
 yummain.user_main(sys.argv[1:], exit_code=True)
except KeyboardInterrupt, e:
 print >> sys.stderr, "\n\nExiting on user cancel."
 sys.exit(1)

Si os fijáis, nuestro error se da en este preciso archivo, ya que falla una excepción con el ImportError. Y en la primera línea tenemos un:

#!/usr/bin/python

Basta con cambiar esa línea para decirle al script que ejecute una versión antigua de python (la que funcionaba) de nuestro sistema. Es decir, cambiar (en mi caso a python 2.4):

#!/usr/bin/python2.4

Y listo, yum funcionará sin problemas. Obviamente, con un mejor análisis de la situación, se podría hacer que yum cogiera realmente la última versión de python y sus bibliotecas (probablemente por el path), pero eso requiere de mayor trabajo y tiempo y para mí esta solución fue valida. Sin embargo, si alguien esta dispuesto a comentar una mejor solución, estaré agradecido.

Solucionar error: N: Ignoring file ‘somefile.list.save’ in directory ‘/etc/apt/sources.list.d/’ as it has an invalid filename extension en Ubuntu Maverick 10.10

Posiblemente si usas Ubuntu Maverick 10.10, que mientras escribo estas líneas se encuentra en la Alpha 3, te encontrarás con errores similares a este cuando actualizas tus paquetes o repositorios:

N: Ignoring file 'loneowais-ppa-maverick.list.save' in directory '/etc/apt/sources.list.d/' as it has an invalid filename extension

El error se da en los archivos de PPA en todos los programas que usen apt.

Existe un bug en Launchpad reportado al respecto: https://bugs.launchpad.net/ubuntu/+source/apt/+bug/611925

Aunque dicho error se da por un comportamiento intencional que han añadido los desarrolladores. Como puede verse en el log del binario .deb de apt:

apt (0.7.26~exp8) experimental; urgency=low

 [ David Kalnischkies ]
...
* apt-pkg/contrib/fileutl.cc:
- show notice about ignored file instead of being always silent
- add a Dir::Ignore-Files-Silently list option to control the notice

Esto ocurre, porque el directorio sources.list.d supuestamente no debe contener archivos con las extensiones .save y .distupgrade.

Probablemente hayan decidido hacer esto, para forzar a siga algún estándar en la forma en la que se guardan los PPA o unificar los diferentes modos que existan.

La cuestión es que para el usuario final, resultan molestos estos mensajes a la hora de actualizar y en mi opinión deberían haber hecho el cambio de forma menos drástica o avisando con tiempo del nuevo formato a utilizar.

Pero por suerte, podemos silenciar o ignorar estos mensajes escribiendo el siguiente comando en el terminal:

$ sudo sh -c "echo 'Dir::Ignore-Files-Silently:: \"(.save|.distupgrade)$\";' > /etc/apt/apt.conf.d/99ignoresave"

O también:

$ echo "Dir::Ignore-Files-Silently:: \"\.save$\";" | sudo tee /etc/apt/apt.conf.d/99ignoresavefiles

Y si no quieres modificar ningún fichero y solo ignorarlo para la ejecución actual de apt:

$ sudo apt-get -o dir::ignore-files-silently::="\.save$" update