ShareThis

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

martes, 21 de julio de 2009

Codigo PHP genera página en blanco

Recientemente estuve adelantando un desarrollo en PHP. Con gran sorpresa me encontre con que al pasar el código al ambiente de producción, algunas porciones de la aplicación dependientes de una conexión a base de datos MySQL no funcionaban apropiadamente.

Lo primero que intente fue habilitar las opciones de debug:


error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
ini_set('display_errors',1);
ini_set('display_errors', 'On');
...el resto de código...


Sin embargo, la salida no evidenciaba ningun mensaje de error fatal.
De manera seguida, intente extraer la información de configuración del hosting mediante el siguiente codigo PHP:


php phpinfo();


Alli se indicaba que se trataba de una versión PHP 5.2.
Finalmente, despues de dos dias indagando en Internet, encontre que el error se debia a un bug de PHP al usar fetch_assoc()


Hay dos workarounds para este problema:

Primera alternativa
Utilice fetch_row en lugar de fetch_assoc.


"//$row=$result->fetch_assoc();" the code is not working...
"$row=$result->fetch_row();" the code is working...



Segunda alternativa
Utilice el siguiente código de workaround.


$finfo = $result->fetch_fields(); $nc=0; foreach ($finfo as $val)
{$row_key[$nc++]=$val->name;} //---
for ($i=0; $i<$num_results; $i++) {
//$row=$result->fetch_assoc();
$row_val=$result->fetch_row();$row=array_combine($row_key,$row_val);
echo "

".($i+1)." Title: ";
echo htmlspecialchars(stripslashes($row['title']));
echo "
Author: ";
echo stripslashes($row['author']);
}



Este problema al parecer estaba presente en 2002 de acuerdo a un reporte en bugs.php.net.

Espero que sea de utilidad.

miércoles, 1 de julio de 2009

Revisor obtiene error en OCS al enviar correo electrónico

Open Conference Systems (OCS) es una solución altamente flexible que puede presentar algunos mensajes de error mientras se conocen algunos elementos propios de su operación. En esta nota muestro como resolver un error que obtiene un revisor despues de hacer más de un envio de correo electrónico consecutivo.



El error (puede variar) hace referencia a ##email.compose.tooSoon##. Revisando el código fuente se encuentra lo siguiente en el archivo ./pages/user/EmailHandler.inc.php


// Check when this user last sent an email, and if it's too
// recent, make them wait.
if (!$canSendUnlimitedEmails) {
$dateLastEmail = $user->getDateLastEmail();
if ($dateLastEmail && strtotime($dateLastEmail) + ((int) Config::getVar('email', 'time_between_emails')) > strtotime(Core::getCurrentDate())) {
$templateMgr->assign('pageTitle', 'email.compose');
$templateMgr->assign('message', 'email.compose.tooSoon');
$templateMgr->assign('backLink', 'javascript:history.back()');
$templateMgr->assign('backLinkLabel', 'email.compose');
return $templateMgr->display('common/message.tpl');
}



Esto evidencia que hay un control de tiempo sobre dos envios consecutivos via email para un usuario que no tenga rol de superadministrador. En relación con lo anterior hay un parámetro de configuración denominado time_between_emails localizado en el archivo config.inc.php


; Amount of time required between attempts to send non-editorial emails
; in seconds. This can be used to help prevent email relaying via OCS.
time_between_emails = 3600


Tal como se puede apreciar existe una restricción de tiempo de 3600 segundos, entre envios de correo electrónico. Ajuste este parámetro y problema resuelto.