La construye un Sistema de Clasificación de estrellas con jQuery, AJAX y PHP

Publicado Por; jatgjose | Publicado en: PHP | Publicado el dia: 14-05-2010

0

En este tutorial, usted aprenderá cómo construir un sistema de calificación con AJAX, PHP y jQuery. Los votos se registran y actualizan en tiempo real con la magia de AJAX, y vamos a aprovechar el poder de PHP para que usted ni siquiera necesita una base de datos!

Paso 1. Creando el HTML

Vamos a crear una página sencilla que incluye dos películas, y le permite puntuarlos. Esto significa que necesitamos las estrellas para mostrar la valoración actual y para permitir el voto. También queremos un espacio para mostrar el elenco total de votos, y la valoración actual hasta una cifra decimal.

Echemos un vistazo al HTML / CSS

class=’movie_choice’> <div
Tarifa: En busca del arca perdida
<div id=”r1″ class=”rate_widget”>
<div> </ div>
<div> </ div>
<div> </ div>
<div> </ div>
<div> </ div>
class=”total_votes”> <div voto de datos </ div>
</ Div>
</ Div>

class=’movie_choice’> <div
Tarifa: La caza del Octubre Rojo
<div id=”r2″ class=”rate_widget”>
<div> </ div>
<div> </ div>
<div> </ div>
<div> </ div>
<div> </ div>
class=”total_votes”> <div voto de datos </ div>
</ Div>
</ Div>
Leer Mas »

Segmentation fault al instanciar un webservice WCF de .NET desde PHP

Publicado Por; jatgjose | Publicado en: PHP, Programación | Publicado el dia: 13-05-2010

0

Recientemente nos hemos encontrado con un problema que nos ha tenido varios días bloqueados hasta conseguir averiguar el origen. Llevamos mucho tiempo utilizando webservices programados en .NET desde aplicaciones PHP sin ningún problema, pero esta vez estaba hecho con la nueva tecnología WCF (Windows Communication Foundation) de Microsoft .NET 3.5. El problema era que en cuanto lo subimos a producción la aplicación PHP devolvía un pantallazo en blanco sin más información. Analizando los logs vimos que el proceso de Apache provocaba un Segmentation Fault con lo que no llegábamos a ver ninguna excepción.

Tras muchas pruebas conseguimos aislar el error en la línea de código que instanciaba el nuevo webservice, si eliminábamos esa parte todo funcionaba correctamente.

  1. $client=new SoapClient(“http://wcf.tudominio.com/webservice/ws.svc?wsdl”);

Lo más curioso es que en los entornos de preproducción sí que funcionaba, no entendíamos nada. Analizando las máquinas de los distintos entornos todas eran idénticas en cuanto a versiones y configuración excepto algunos parámetros SOAP para PHP, en la máquina de producción tienen la caché de wsdl activada mientras que en los demás está desactivada.

  1. soap.wsdl_cache_enabled = 1
  2. soap.wsdl_cache_dir = /tmp/
  3. soap.wsdl_cache_ttl = 7200
  4. soap.wsdl_cache_limit = 50

No puede ser que el error sea el cacheo. Pues sí, lo es, en cuanto desactivamos la caché del servidor de producción todo comenzó a funcionar correctamente.

Perfecto, pero la caché tiene que estar activada, la aplicación hace uso de unos 35 webservices, si para cada instancia de cada uno de ellos hay que cargar previamente el wsdl, el rendimiento cae por los suelos, es imprescindible.

Pues nada, solución increíblemente cutre:

  1. ini_set(’soap.wsdl_cache_enabled’, ‘0′);
  2. ini_set(’soap.wsdl_cache_ttl’, ‘0′);
  3. ini_set(’soap.wsdl_cache’, ‘0′);
  4. $client = new SoapClient(“http://wcf.tudominio.com/webservice/ws.svc?wsdl”);
  5. ini_set(’soap.wsdl_cache_enabled’, ‘1′);
  6. ini_set(’soap.wsdl_cache_ttl’, ‘7200′);
  7. ini_set(’soap.wsdl_cache’, ‘3′);

Así es, desactivamos la caché antes de instanciar sólo este webservice y la volvemos a activar después. No hemos encontrado otra manera de solucionarlo ni hemos encontrado ninguna referencia de alguien que haya sufrido el mismo problema. La solución es mala, muy mala, no deja de ser un apaño, pero funciona y nos permite salir del paso hasta que sepamos por qué ocurre.

Encuestas en AS2 y PHP

Publicado Por; jatgjose | Publicado en: PHP, Programación | Publicado el dia: 29-04-2010

0

Vamos a ver como crear encuestas en AS2 utilizando PHP. Se puede votar una sola vez por número IP, y muestra los resultados en barras de porcentaje.

Parte 1

Parte 2

Parte 3

Descargar archivos del tutorial

JpGraph – Parte II: Tu Primera Gráfica Estadística

Publicado Por; jatgjose | Publicado en: Instruciones, PHP, Programación, Software | Publicado el dia: 28-04-2010

0

En la entrega anterior vimos como Instalar esta librería en nuestro servidor de pruebas o en nuestro sitio web y no morir en el intento, esta vez comenzaremos a hacer uso de lo que instalamos esa vez creando nuestra primera gráfica.

AVISO:
Para mayor comodidad de ahora en adelante asumiremos que trabajamos en un entorno de hosting donde no tendremos acceso al directorio PHP y por tanto hemos guardado nuestra librería en el directorio “jpgraph”

Los Datos a Emplearse

Dado que para generar gráficas estadísticas necesitamos datos, para efectos de ejemplo usaremos los datos estadísticos de manchas solares, datos ya disponibles para uso público. Los datos utilizados aquí se toma de SIDC (El Solar Influencias Centro de Análisis de Datos) en Bélgica . En este ejemplo vamos a utilizar el resumen de datos históricos que muestra el número total de manchas solares por año desde 1700.

Preparación de la Data

Lo primero para nuestra gráfica y para nuestro script de PHP es recopilar la data a emplearse, dado que JpGraph no es muy exigente con el origen de los datos, esta tarea sera relativamente fácil y deberemos preocuparnos únicamente que los datos sean número enteros o de coma flotante.
Para generar una gráfica de datos, el origen de los mismos puede ser:

  • Datos escritos directamente en el script. Esta método se recomienda únicamente si la data es realmente estática.
  • Datos almacenados en un archivo de texto plano.(Usaremos esta forma para este ejemplo)
  • Datos almacenados en archivos binarios.
  • Datos cuyo origen es una base de datos.
  • Datos enviados al script por intermedio de la URI pasando los parámetros POST o GET

Lo común en todos los casos es que el desarrollador tenga acceso al menos de lectura a la fuente de los datos, en este caso un archivo de texto plano con dos columnas de datos la primera referida al año ( con un “.5″ añadido a propósito para indicar el promedio del mismo) y la segunda indicando el número de manchas solares para el año correspondiente. Para efectos de muestra visualizaremos las 10 primeras lineas:

Código :

1700.5 5.0
1701.5 11.0
1702.5 16.0
1703.5 23.0
1704.5 36.0
1705.5 58.0
1706.5 29.0
1707.5 20.0
1708.5 10.0
1709.5 8.0

Suponiendo que estos datos están almacenados en un archivo de nombre “yearssn.txt” y que dicho archivo se encuentra en el mismo directorio que nuestro script a realizar, este debera obtener al final dos matrices de datos, una para cada columna:

Código :

<?php
function readsunspotdata($aFile, &$aYears, &$aSunspots) {
$lines = @file($aFile,FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
if( $lines === false ) {
throw new JpGraphException('Can not read sunspot data file.');
};
foreach( $lines as $line => $datarow ) {
$split = preg_split('/[\s]+/',$datarow);
$aYears[] = substr(trim($split[0]),0,4);
$aSunspots[] = trim($split[1]);
};
};

$year = array();
$ydata = array();
readsunspotdata('yearssn.txt',$year,$ydata);
?>

En este script lo que hemos hecho es leer el archivo de texto y dividir la data en 2 matrices las cuales usaremos ahora para poder crear nuestra gráfica, también se ha incluido un excepción en el caso que la data a obtenerse no este disponible en este primer ejercicio no hemos ahondado en el manejo de errores y se ha colocado este solo ha manera de ejemplo, más adelante se tratará el tema en detalle.
Ahora disponemos de dos matrices, $year y $ydata.

TIP:
Otra forma de manejar archivos externos es trabajando con archivos de valores separados por comas (.CSV) para los cuales PHP tiene métodos específicos para su lectura ReadFileData:: FromCSV ().

Nuestro primer gráfico básico

Para este ejemplo básico usaremos un gráfico de lineas, el código a continuación se centra en la generación del gráfico, pero el código anterior deberá de ser incluido previamente para que funcione todo el conjunto.
Para la generación de cualquier gráfico con esta librería, tenemos necesariamente que incluir al menos 02 archivos, “jpgraph.php” y el archivo que se refiera al gráfico en especifico que vamos a utilizar en este caso en concreto “jpgraph_line.php” ya que la inclusión de estos archivos es vital para el funcionamiento del script, recomendamos el uso de require_once(‘jpgraph/jpgraph.php); se recomienda esta práctica para la inclusión de todas las clases que usemos en el futuro.

Código :

<?php
// Ancho y Alto del gráfico
$width = 600; $height = 200;

// Creamos una instancia de Graph
$graph = new Graph($width,$height);

// Especificamos la Escala que desamos usar,
// int = Escala de enteros para el eje X
// int = Escala de enteros para el eje Y
$graph->SetScale('intint');

// Establecemos el titulo para graph
$graph->title->Set('Sunspot example');

// Establecemos los títulos para el eje X
$graph->xaxis->title->Set('(year from 1701)');

// Establecemos los títulos para el eje Y
$graph->yaxis->title->Set('(# sunspots)');

// Creamos el Dibujo del Gráfico de Lineas
$lineplot=new LinePlot($ydata);

// Añadimos el dibujo a nuestra gráfica
$graph->Add($lineplot);

// Mostramos la gráfica
$graph->Stroke();
?>

El resultado del script de arriba es la imagen que vemos a continuación, para mayor detalle observese los comentarios.

Hasta aquí el día de hoy, la próxima vez concluiremos este ejemplo añadiendo algunas modificaciones a la gráfica que hemos creado hoy, añadiremos un etiquetas al eje X, cambiaremos los colores del área delimitada por la linea e incluso estableceremos la transparencia (canal alpha) para dicho relleno, crearemos un gráfico de barras con la misma data y limitaremos el número de barras a mostrar.

PHPico: librería PHP para trabajar con iconos

Publicado Por; jatgjose | Publicado en: PHP, Programación | Publicado el dia: 26-04-2010

0

PHPico es una librería PHP que nos permite crear y manipular iconos (formato .ICO), pudiendo leer y escribir archivos de iconos. Permite crear iconos vacíos, añadir imágenes de diferentes tamaños y bits, quitar imágenes de los iconos, indicar el color de los iconos, añadir definiciones de colores, …

require_once('PHPico.php');
$i = new PHPicoImage();
$i->createBlankImage(8, 8, 8);
$i->addColor(0, 3, 255, 0, 0, 0);
$i->addColor(0, 2, 0, 255, 0, 0);
$i->addColor(0, 1, 0, 0, 255, 0);
$i->setPixel(0, 0, 0, 3, 0);
$i->setPixel(0, 1, 1, 2, 0);
$i->setPixel(0, 2, 2, 1, 0);
$i->setPixel(0, 3, 3, 3, 0);
$i->save('F', 'test.ico');

PHPico