Conocer el numero de la semana dentro de determinado mes, partiendo de una fecha determinada con PHP

septiembre 28, 2009

Últimamente he estado trabajando en una clase para generar calendarios semanales y que he publicado en phpclasses.org. Cuando se apruebe la clase publicaré el enlace para su descarga.

La función que mas me ha costado desarrollar ha sido la destinada a extraer en que semana (1ª, 2ª …) nos encontramos dentro de determinado mes, partiendo de una fecha determinada.

La verdad es que estuve buscando por internet algo que me pudiera servir pero no encontré nada, así que termine por tener que buscarme la vida y creo que el resultado es satisfactorio. Aquí lo comparto con vosotros. Espero que os sirva de ayuda.

function numberOfWeek ($dia, $mes, $ano) {

//generamos la fecha para el día 1 del mes y año especificado
$fecha = mktime ($hora, $min, $seg, $mes, 1, $ano);

/*
El número de semana en el que nos encontramos será igual a:
– el día espeficado +
– el número de día de la semana (lunes, martes …) al que se corresponde la fecha almacenada en $fecha – 1
– entre 7 días que tiene la semana.

Quedando la fórmula de la siguiente manera …
*/
$numberOfWeek = ceil (($dia + (date (“w”, $fecha)-1)) / 7);

return $numberOfWeek;
}

//mostramos en pantalla el resultado devuelto por la función

echo numberOfWeek ("8","9", "2009");


Replace fopen library for cURL in html2fpdf

junio 4, 2009

[ir a la versión en castellano]
I received several queries regarding the problem of creating a PDF with images in some servers where the value of the “allow_url_fopen” is set Off in php.ini configuration file.

The classes html2fpdf uses fopen to open the images in the html source that we use to create the PDF and in the cases just commenting will not work correctly. Ie, the images will not appear in the PDF we generate.

The solution is to replace the fopen function for the functions that cURL offers us a platform library that enables the transfer of files from the client side through multiple protocols.

As an example we show a slice of the modified code:

if ( ‘allow_url_fopen’ == ‘Off’)
(
$ f = fopen ($ file, ‘rb’);
else ()
Open with //—– Curl
$ curl_handler = curl_init ();
curl_setopt ($ curl_handler, CURLOPT_URL, $ file);
curl_setopt ($ curl_handler, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ curl_handler, CURLOPT_BINARYTRANSFER, 1);
$ f = curl_exec ($ curl_handler);
curl_close ($ curl_handler);
)

I uploaded the files fpdf and html2fpdf, to replace the originals with necessary modifications. You can download it here.

I hope you are helpful.


Utilización de cURL en lugar de allow_url_fopen

mayo 29, 2009

Puede darse el caso de que, por motivos de seguridad, el servidor en el que vayamos a alojar nuestras aplicaciones PHP tenga deshabilitada la directiva allow_url_fopen en la configuración PHP.

La directiva allow_url_fopen permite, cuando su valor está en “On”, pasar urls (http, ftp) a la función fopen(), en lugar de la ubicacion física del archivo. Por motivos de seguridad, esta directiva puede (y seguramente debe) estar deshabilitada.

En un primer intento de resolver el asunto sin tener que editar el php.ini se nos puede ocurrir utilizar la función ini_set() para cambiar a On el valor de allow_url_fopen durante la ejecución del Script. Teóricamente podríamos hacerlo de cualquiera de estas dos formas:

ini_set(allow_url_fopen, ‘On’);
ini_set(allow_url_fopen, ‘1’);

Sin embargo, en la práctica, esta directiva no puede ser cambiada de este modo debido a que a partir de la versión 4.3.4 de PHP, este valor de configuración solo se puede especificar a nivel global en los archivos de configuración php.ini ó httpd.conf

Pero no nos demos por vencidos porque, desde su versión 4.0.2, PHP soporta Libcurl, una biblioteca creada por Daniel Stenberg, que permite conectar y comunicar a diferentes tipos de servidores con diferentes tipos de protocolos ( http, https, ftp, gopher, telnet, dict, archivo y protocolos LDAP). Podremos, por ejemplo, obtener el contenido de una web, extraer datos XML o transferir archivos de servidores FTP.

Una vez nos hayamos asegurado de que el PHP de nuestro servidor está compilado con soporte cURL podremos empezar a utilizar las funciones de la librería libcurl para PHP.

Aquí os dejo un ejemplo en el que utilizo cURL para acceder al xml que la API de youtube nos ofrece, en este caso, al solicitar el listado de videos de determinado usuario.


<?php
$feedURL = "http://gdata.youtube.com/feeds/api/users/tu_usuario/uploads";

//Iniciamos la variable $returnStr, donde almacenaremos el String devuelto por la funcion curl_exec();
$returnStr = "";

//inicializa una nueva sesión y devuelve un recurso CURL para ser usado con las funciones curl_setopt(), curl_exec(), y curl_close()
$curl = curl_init();

//La URL que se quiere obtener. También se puede establecer su valor al inicializar una sesión con la función curl_init().
curl_setopt($curl, CURLOPT_URL, $feedURL);

//TRUE para devolver el resultado como una cadena de texto que contiene el valor devuelto por la función curl_exec(), en vez de mostrar la salida directamente en la ventana del navegador.
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

//FALSE para que el encabezado no se incluya en la salida.
curl_setopt($curl, CURLOPT_HEADER, false);

//Esta función debe ser llamada después de inicializar una sesión CURL y fijar todas las opciones para la misma. Su propósito es simplemente el de ejecutar la sesión CURL indicada por el parámetro ch .
$returnStr = curl_exec($curl);

//Cerramos la sesión CURL
curl_close($curl);
?>

Glosario:
curl. Herramienta de linea de comandos para la transferencia de archivos.
libcurl. Libreria multiplataforma que permite la transferencia de archivos desde el lado del cliente y a través de múltiples protocolos.


Clase Zend Framework Installer

abril 1, 2009

El Zend Framework es un marco de trabajo escrito en PHP pensado para desarrollar aplicaciones web , basadas en la arquitectura MVC (Modelo, Vista y Controlador), que tan popular ha hecho Rails (escrito en Ruby). Puedes descargar el Zend Framework aquí.

Aunque el Zend Framework, al contrario que otros marcos de trabajo, no da al usuario una estructura de directorios y archivos cerrada para cada nueva aplicación, como por ejemplo el ya menciando Ruby on Rails, en su manual si que se recomienda una estructura lógica y común para aquellos proyectos basados en este marco de trabajo.

Árbol de directorio generado por Zend Installer

Como se ve en la imagen se trata de una estructura de directorios en los que los archivos del modelo, los controladores y las vistas se encuentran perfectamente separados y diferenciados siguiendo el patrón MVC.

Esto es lo que hace la clase Zend Framework Installer . Crear la estructura de directorios recomendada en el manual del Zend Framework para programar aplicaciones MVC, además de generar el archivo bootstrap – encargado de configurar nuestras aplicaciones en Zend – y el controlador index con su correpondiente vista. En la imagen podéis ver el aspecto de esta vista.

Para programar esta clase me he basado en las instrucciones dadas en la guía “Getting Started with the Zend Framework”, escrita por Rob Allen [rob@akrabat.com]

Árbol de directorio generado por Zend Installer

Esta clase ha tenido el honor de ser nominada al Innovation Award de phpclasses.org. Si os ha gustado, y la encontraís útil, podéis votar por ella aquí.

innovation award

Podéis acceder a la página de esta clase en phpclasses.org en www.phpclasses.org/browse/package/5258.html

Podéis descargar la clase y los ejemplos aquí.


Univarsel Feed Writer, Generador RSS en PHP 5

enero 16, 2009

Universal Feed Writer es un excelente generador RSS desarrollado por Anis uddin Ahmad, en php 5 y con una estructura completamente orientada a objetos.

Escribe feeds, con todos sus posibles elementos y validados, para ATOM 1.0 y RSS (1.0 y 2.0) … y además es muy sencillo de utilizar. En el propio paquete que puedes descargarte aquí, tienes varios ejemplos sobre su uso.


Definir cabeceras en los PDF generados con html2fpdf

noviembre 5, 2008

He recibido varias consultas acerca de como insertar cabeceras en los documentos PDF generados con html2fpdf.

En mi opinión, la solución mas sencilla es modificar la función Header() que podéis encontrar en el archivo html2fpdf.php por algo parecido a esto, depende lo que requiera el diseño de la cabecera de vuestro documento:

//Page header
function Header($content=”)
{
//Logo
$this->Image(‘backHeader.jpg’,90,20,200);
//Arial bold 15
$this->SetFont(‘Arial’,’B’,15);
//Movernos a la derecha
$this->Cell(80);
//Título
// $this->Cell(30,10,’Title’,1,0,’C’);
//Salto de línea
$this->Ln(20);
}

El método mas seguro es el de utilizar una única imagen como cabecera. El uso de textos, opción que aparece comentada en este ejemplo, trae problemas de duplicación de los mismos en las cabeceras de las páginas.