Mostrando las entradas con la etiqueta php. Mostrar todas las entradas
Mostrando las entradas con la etiqueta php. Mostrar todas las entradas

25.7.11

Corregir "warning" del timezone en PHP 5.3

Si actualizaron PHP en su servidor y ven millones de errores del timezone como este:

PHP Warning: mktime(): It is not safe to rely on the system's timezone settings. You 
are *required* to use the date.timezone setting or the date_default_timezone_set() function.
In case you used any of those methods and you are still getting this warning, you most likely
misspelled the timezone identifier. We selected 'America/Buenos_Aires' for 'EDT/-3.0/DST'
instead in page.php on line 1

Van a tener que configurar el parametro date.timezone en el archivo php.ini que este usando su servidor web (en mi caso esta en /etc/php.ini) y agregarle la zona correspondiente.

;;;;;;;;;;;;;;;;;;;
; Module Settings ;
;;;;;;;;;;;;;;;;;;;

[Date]
; Defines the default timezone used by the date functions
; http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone
date.timezone = America/Buenos_Aires

Si no saben en donde esta el archivo php.ini que tienen que modificar, pueden crear un archivo PHP con este codigo:

<?php phpinfo(); ?>

Y acceder a dicho archivo desde el navegador. Ahi van a encontrar la ruta al archivo php.ini del cual necesitan modificar el timezone.

6.5.11

Pesima disponibilidad del servicio SMS Online de Personal para enviar mensajes por la web

Me gusta que en Personal se pueden mandar mensajes gratis desde la web a otro Personal; pero casi siempre tengo problemas para utilizar este servicio por errores en la carga completa de esta pagina.

El error visible


El error en concreto es de conexion con una base de datos MySQL:

Can't connect to local MySQL server through socket '/tmp/mysql.sock' (11)

Cada vez que aparece este error en la pagina, no se muestra el CAPTCHA y hace imposible completar el formulario correctamente para enviar un SMS desde la web. Probablemente el CAPTCHA se guarde en una base de datos MySQL y se verifique al suscribirse el formulario.



Interaccion con Personal

Cuando comente en Twitter un vez el problema y respondieron "Hubo tareas de mantenimiento, pero ya esta solucionado. Actualiza la pagina presionando F5 que se corrige!", pero el problema persiste. En otra ocasion, me recomendaron "dsd tu explorador ingresá a Herram/opc d internet tildar eliminar el historial de exploracion al salir, aplicar, aceptar, salir y actualizar la página." pero tampoco no funciono ya que claramente es un error del servidor.

UPDATE (mas "soluciones" que ofrece personal, obviamente no entienden el problema):

- 06/06/2011: Ni bien publique este articulos, negaron nuevamente el problema y me recomendaron hacer "Borrado de cache" [@PersonalAr].
- 15/05/2011: Hola! No tenemos reportado novedades.Probaste borrar el historial d navegación? Intentá actualizar la pag reiteradas veces. LM [@PersonalAr]
- 19/05/2011: Hola! Intentá eliminar el historial de navegación. Saludos! NM @PersonalAr

Analisis del servicio

Analizando un poco como funciona el sevicio, pude ver que hay dos servidores que tienen estos formularios para enviar los mensajes: sms1.personal.com.ar y sms2.personal.com.ar; ambos servidores tiran el mismo error en los mismos periodos de tiempo. Decidi hacer un script muy basico que se compruebe cada un minuto si cada uno de estos dos servidores da error o carga el formulario completo para enviar un mensaje y generar unos graficos para que se puedan ver los problemas de disponibilidad de este servicio.

Aca vemos, por ejemplo, un grafico de sms1.personal.com.ar del 03/05/2011 desde las 20hs hasta el final del dia. Los cuadrados indican si en ese minuto hubo un error o si el formulario se cargaba correctamente. Lo ideal seria que este TODO VERDE.


El script intenta acceder a la pagina "http://sms1.personal.com.ar/Mensajes/sms.php" y buscar en su contenido indicios del error de MySQL que se encuentra al principio de la pagina. Si el error existe no se muestra el CAPTCHA, por lo tanto no es posible completar el formulario para enviar el SMS y mi grafico lo muestra en rojo. Cuando no encuentra el error, asume que vamos a poder enviar un SMS y lo marca en verde.

Otro ejemplo del mismo servidor durante todo el dia 04/05/2011:




Que nos dicen los grafiquitos chulos?

Podemos ver que desde las 00hs hasta las 12hs el servicio es usable y estable. A partir de las 12hs comienza a tener problemas menores de disponibiliad y desde las 20hs hasta las 00hs es practicamente inusable.

Se podra implementar el mismo sistema sin utilizar una base de datos (solo datos en la sesion de usuario)? Agregando un servidor mas a los dos que tienen, alcanzara para resolver los problemas de disponibilidad de la noche?


Algunos usuarios afectados

Cuando empeze a buscar en Twitter y Google encontre un monton, algunos como para tener de referencia:

* https://twitter.com/aldulovato/status/66325916665655296
* https://twitter.com/lucianita88/status/66310154454433792
* https://twitter.com/dreamcoders/status/65945527312850944
* http://twitoaster.com/ea00d009/el-cant-connect-to-local-mysql-server-through-socket-tmpmysqlsock-11-de-la-web-de-personal-me-tiene-podrido-personal-fail/
* http://www.taringa.net/posts/ebooks-tutoriales/5539478/No-anda-la-pagina-de-sms-personal-_Solucion_.html

2.6.08

Validando UUID de MySQL en PHP

Funcion de PHP para validar (regexp de fede) los IDs unicos generados por MySQL:
function ValidateMySqlUid($string) {
if (strlen($string) == 36) {
if (preg_match('/[0-9a-f]{8,8}-([0-9a-f]{4,4}-){3}[0-9a-f]{12,12}/', $string)) {
return true;
}
}
return false;
}

27.5.08

Eliminar directorios (y sus contenidos) en PHP

La funcion rmdir() de PHP solo elimina directorios que se encuentren vacios, lo cual hace un poco denso eliminar estructuras de directorios grandes y complejas. En el manual de PHP hay un comentario que contiene una funcion para eliminar directorios y sus contenidos de forma recursiva:

function rm_recursive($filepath) {
if (is_dir($filepath) && !is_link($filepath)) {
if ($dh = opendir($filepath)) {
while (($sf = readdir($dh)) !== false) {
if ($sf == '.' || $sf == '..') {
continue;
}
if (!rm_recursive($filepath.'/'.$sf)) {
throw new Exception($filepath.'/'.$sf.' could not be deleted.');
}
}
closedir($dh);
}
return rmdir($filepath);
}
return unlink($filepath);
}

La entrada de rmdir() en el manual de PHP tiene otras recetas similares a la que use anteriormente. Otros ejemplos usan glob() pero, al parecer, tarda mucho en soltar los archivos y esto puede generar problemas aleatorios con los permisos de los archivos. El comentario correspondiente a la funcion tambien expone que utilizar opendir() es mas rapido que glob().

24.6.07

MAC OUI Vendor Search

Unas semanas atras, entusiasmado con implementar SimpleJS en algo y se me dio por hacer dos aplicaciones web. La primera que empece, quedo en repoco y esta fue agraciada con un desarollo mas activo (lease, termine con la funcionalidad que me propuse).

Dada una direccion MAC de un dispositivo de red busca en una base de datos quien es el fabricante.





Para incluirla en Blogger lo que hice en este caso fue un iframe cavernicola:

<iframe src="http://caco.homelinux.org:7080/caco/mac-oui-search/" style="width: 369px; border: 0px;
padding: 0px; margin: 0px; height: 193px">

No es gran cosa, pero me parecio algo como para hacer de esa forma. A "esa forma" me refiero a la tendencia de desarrollar cosas en "cajitas" para ser incluidas en otros sitios.