Error cannot create references to/from string offsets en WordPress

Hola Gente:

Este post es re pequeño y tiene que ver con un trabajo que estaba haciendo para un cliente. 
El trabajo consistía en migrar la instalación de WordPress de un hosting compartido a otro. 
Para esto respaldé la DB y los archivos de WordPress (incluyendo wp-content) y posteriormente los subí a la nueva cuenta de hosting.
Hubo cambios de DNS y esperé la correcta propagación.

El problema se encontraba en que al querer iniciar sesión daba error 500. El error era el siguiente:
PHP Fatal error:  Uncaught Error: Cannot create references to/from string offsets in wp-includes/user.php:54
Stack trace:
#0 wp-login.php(775): wp_signon(», »)
#1 {main}
  thrown in wp-includes/user.php on line 54

Después de revisar la base de datos, archivos. Borrarlos y volverlos a subir. Nada funcionaba.
Se me ocurrió mirar la versión de PHP del servidor y era la 7.1. Decidí bajarla a la 5.6 y funcionó de maravillas.


Obtener la ciudad del cliente en PHP

Hola Mundo:

Ya saben, estoy metiéndome poco a poco en desarrollo y les quiero compartir un trocito de código que utilicé en un proyecto.
El objetivo de este código  es obtener la ciudad del visitante a partir de la dirección IP.

 $ip = $_SERVER['REMOTE_ADDR'];
$url = "http://freegeoip.net/json/".$ip;
$data = file_get_contents($url);
$obj = json_decode($data);
$ciudad = $obj->city;

El codigo es sencillo. Obtiene un archivo JSON desde el servicio de Free Geo IP, lo procesa y almacena la ciudad en una variable.

Sencillo, ¿no?

Aumentar el tamaño de archivos de subida en PHP

Generalmente es un valor que está definido en 2MB por motivos varios: seguridad, carga del servidor, valor óptimo, etc.

Muchas aplicaciones, por ejemplo, phpMyAdmin hace uso de la subida de archivos para importar un archivo SQL. Puede darse el caso que sea un volcado completo de 400MB y la configuración de PHP no soporte el tamaño.

Para lograr esto hay que editar las siguientes lineas en el php.ini

upload_max_filesize
memory_limit
post_max_size

En estas tres líneas se debe asignar un valor según las necesidades.
Esto funciona tanto en cualquier servidor, ya sea una máquina con Windows, Linux, BSD o cualquier otro sistema.

IIS, PHP, SMTP en Windows Server

Hola Galaxia:

En el post de ayer  les contaba que estaba trabajando en la instalacion de un servidor para un cliente sobre Windows Server. Ayer dejé todo instalado y para hoy tenía planificada la configuración de cada uno de los componentes.

Todo bien, hasta que probé enviar correos desde PHP usando la funcion mail() y me arrojaba error. Abrí el log de errores de php (C:WindowsTempphp53_errors) y me encontré con los siguientes errores y cómo los fui resolviendo.

PHP Warning:  mail(): «sendmail_from» not set in php.ini or custom «From:» header missing in mail.php
Este error hace referencia a que no se configura ninguna dirección de emisor en la función o en el archivo php.ini. Si se configura en la función, se establece un emisor por cada función y se se configura desde el archivo php.ini, se configura una dirección por defecto para todas las funciones mail.
Abrí el archivo php.ini y busqué la linea sendmail_form = y le agregué una dirección de correo electrónico. Realicé de nuevo la prueba y en el log me apareció el siguiente mensaje.

PHP Warning:  mail(): Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in mail.php
Esto no me hacía tanto sentido, porque estaba seguro que el Firewall estaba configurado y que el php.ini estaba configurado para usar el puerto 25. Lo que no estaba seguro era si el servicio de SMTP estaba funcionando. Abrí la consola de administración de IIS 6 (Si, IIS 8 usa la consola de IIS 6 para administrar el SMTP. Sabrá el diablo por qué es así). Me aparecía que SMTP Virtual Server #1 estaba abajo. Lo hice arrancar. Probé nuevamente y encontré el siguiente mensaje de error.

PHP Warning:  mail(): SMTP server response: 550 5.7.1 Unable to relay for [mi direccion de correo personal] on mail.php
Esto menos sentido me hacía si se supone que todo estaba andando. El problema estaba en que en el SMTP no había configurado para que hiciera relay. Para solucionarlo, en la misma ventana de administración de IIS6, abrí las propiedades del servidor de SMTP, en la pestaña de «Access» abrí la configuración de los permisos del Relay y agregué la dirección 127.0.0.1 para que usara ese servidor SMTP. Revisar la imagen de referencia:

Relay SMTP IIS
Relay SMTP IIS

 

Con eso el servidor ya fue capaz de enviar un correo y recibirlo en mi gmail 🙂

Espero que a ustedes les sirva también.

Habilitar PHP para Apache en Red Hat Enterprise Linux

Linux Linux Linux Linux Linux Linux Linux Linux Linux Linux Linux Linux  …. Como en lo viejos tiempos jeje.

Pareciera como si fuera ayer las horas invertidas aprendiendo sobre la consola y la infinidades que se pueden lograr. Lo bueno, es que ahora en mi empleo actual tienen mucho fruto.

Hoy me tocó habilitar un servidor web sencillo para un cliente. Se necesitaba de Apache2 con soporte para PHP sobre un Red Hat Enterprise Linux.

Primero instalé lo necesario:

yum install httpd php

Después habilité el soporte para php desde /etc/httpd/httpd.conf  agregando esta línea en el archivo:

AddType application/x-httpd-php .php

Al final reinicé el servicio

service httpd restart

Para hacer una pruebita loca, cree un archivo llamado prueba.php en /var/www/html/
y el contenido del archivo es:

Y en el navegador se debe ver así:

phpinfo

 

En otras distros es mas simple 🙂

 

Enviar correos desde PHP sobre Ubuntu

Hola Mundo:

Por fin puedo publicar algo por acá. Estaba muy ocupado por temas de estudios y trabajo, lo cual es muy bueno.

Hoy les escribiré sobre algo bastante recurrente en las instalaciones caseras de LAMP (Linux, Apache, MySQL y PHP) y es algo que es simple de solucionar, cuando se cuenta con algunas herramientas.

El problema está en que cuando se hace una instalación de este estilo, PHP no es capaz de enviar mails a través de la funcion mail() y el log de errores queda completo con errores por esta función. El síntoma es claro: PHP no envía mails.

Esto ocurre cuando un servidor smtp (Simple Mail Transfer Protocol) no se encuenta instalado y/o la ruta no se encuentra definida en el archivo php.ini (Por lo menos la ruta de php.ini en Ubuntu Server es /etc/php5/apache2/php.ini)

Para instalar sendmail en Debian y derivados:

apt-get install sendmail

Una vez que está instalado, abrir el archivo php.ini y buscar la linea

;sendmail_path =

y cambiarla por

sendmail_path = /usr/sbin/sendmail -t -i

Luego reiniciar el servicio de apache2 y funcionará.

Saludos!