|

Imágenes en PHP mediante GD

Aunque en varios artículos hemos hablado de cómo manipular imágenes mediante PHP y GD. No está nada mal, tener un tutorial que nos ayude con esta librería. En el siguiente tutorial podremos encontrar:

Image manipulation with PHP & the GD library Part 1 / Part 2

Vía / dzone

TCPDF: más PDF con PHP

Ya de vuelta al “cole”, aunque no del todo, porque aun ando de vacaciones, vuelvo a lo mismo de lo que estaba contando antes de irme, cómo crear documentos PDF con PHP. Al principio empecé mediante el framework de Zend, pero debido a que implicaba ciertas dificultades, ya que no está del todo desarrollado, me pasé a la librería FPDF, la cual es mucho más completa, lo que facilita enormemente la creación de PDFs.

Ahora os cuento sobre TCPDF, una librería basada en FPDF, que hace tiene muy buena pinta, hasta que tenga un rato para ver que tal funciona, os paso las características que tiene:

  • Admite todos los formatos ISO de páginas.
  • UTF-8 y Unicode.
  • Incluye métodos para publicar algunas etiquetas xhtml: h1, h2, h3, h4, h5, h6, b, u, i, a, img, p, br, strong, em, font, blockquote, li, ul, ol, hr, td, th, tr, table, sup, sub, small.
  • Códigos de barra.
  • Admite TrueTypeUnicode, TrueType y Type1.
  • Soporta formatos personalizados de páginas, márgenes y unidades de medida.
  • Encabezados y pie de páginas.
  • Saltos de página.
  • Numeración de páginas.
  • Saltos de línea y justificación de texto.
  • Imágenes JPEG y PNG.
  • Colores.
  • Links.
  • Admite compresión de página, necesita la extensión zlib.
  • Y algo muy importante, está completamente documentado.

TCPDF

Vía / SitePoint

Elegir PHP 4 o 5

PHPAlgunas veces, cuando desarrollo un script para incluir en Sentido Web, me encuentro con el problemilla de que sólo funciona para PHP 5, cuando aquí tenemos instalado el 4 para evitar problemas de compatibilidad. Esta situación seguro que os a aparecido a vosotros. Si no estáis seguros de qué versión usar o qué problemas os podéis encontrar, nada mejor que leer el siguiente artículo.
PHP4 y PHP5: ¿Cuál elegir? ¿Migrar o no Migrar? El advenimiento de PHP6

|

Evitar Cross-Site Request Forgeries en PHP

Siempre que hagamos una aplicación web, tenemos que tener muy encuenta las cuestiones de seguridad, sobre todo las formas más conocidas de ataque. Una de estas formas es Cross-Site Request Forgeries, que más o menos viene a decir Falsificación de Petición desde Otro Sitio (quizás la traducción no es exacta, pero creo que lo explica bien).

Este ataque se produce cuando a un usuario se le conceden permisos, confiando en él, pero no teniendo en cuenta que otra gente pueda aprovecharse de ello. Supongamos que tenemos una página de compra de artículos, cuya aplicación controla perfectamente los campos de entrada y que tiene una función que realiza la operación de compra de artículos.

Tenemos el formulario HTML:

<form action="compra.php" method="POST">
Artículo: <input type="text" name="articulo" />
Cantidad: <input type="text" name="Cantidad" />
<input type="submit" value="Comprar" />
</form>

El primer fallo que solemos cometer es leer las variables de entrada mediante $_REQUEST:

<?php
session_start();
if (isset($_REQUEST['articulo'] &&
isset($_REQUEST['cantidad'])) {
compra($_REQUEST['articulo'],
$_REQUEST['cantidad']);
}
?>

Una forma muy utilizada para realizar un ataque y que al autor del artículo le gusta mucho, es mediante el uso de una imagen:

<img src="http://ejemplo.org/compra.php?articulo=CAFETERA&cantidad=1000" alt="ads" />

Con esto conseguimos que el usuario que visita nuestra página tambien haga una petición a la página en cuestión sin que él lo sepa, claro, que esto solo funciona si el usuario a la vez tiene una sesión abierta en la página que se está atacando.

La solución es añadir una marca formada por un número “encriptado” y un tiempo para que tenga que renovarse esta marca. La marca se debe crear y pasar en el formulario por el que se envían los datos y a parte se debe controlar su existencia, si coincide y si no ha superado el timeout.

<?php
$marca = md5(uniqid(rand(), TRUE));
$_SESSION['marca'] = $token;
$_SESSION['tiempo_marca'] = time();
?>
<form action="compra.php" method="POST">
<input type="hidden" name="marca" value="<?php echo $marca; ?>" />
Artículo: <input type="text" name="articulo" />
Cantidad: <input type="text" name="Cantidad" />
<input type="submit" value="Comprar" />
</form>
<?php
if ($_POST['marca'] == $_SESSION['marca']) {
$diferencia_tiempo_marca = time() - $_SESSION['tiempo_marca'];
if ($diferencia_tiempo_marca <= 300) {
/* Menos de 5 minutos */
}
}
?>

Artículo original: Security Corner: Cross-Site Request Forgeries

Vía / backdraft

FPDF: librería PHP para crear PDFs

fpdf.pngDebido a la decepción que me estoy llevando con el Zend Framework, aunque aún tengo esperanzas en que vaya mejorando, he tenido que buscar otras librerías PHP para crear PDF. Una que he encontrado que me está gustando bastante (por ahora) es FPDF, una librería que exporta a PDF sin necesidad de PDFLib (la cual es de pago). Lo bueno que tiene tambien es que es gratuita, se puede usar libremente y modificar según nuestras necesidades.

Entre las funcionalidades que nos ofrece esta librería nos encontramos:

  • Elección de la unidad de medida, formato de página y márgenes
  • Gestión de cabeceras y pies de página
  • Salto de página automático
  • Salto de línea y justificación del texto automáticos
  • Admisión de imágenes (JPEG y PNG)
  • Colores
  • Enlaces
  • Admisión de fuentes TrueType, Type1 y codificación
  • Compresión de página
  • Y algo muy importante para mí, que es lo que más me ha decepcionado de las librerías de Zend, es la posibilidad de usar otro idiomas y caracteres especiales.

La instalación es sencilla, lo copias en el directorio donde guardes las librerías e incluyes la ruta en el include_path del php.ini.

FDPD

|

Laboratorio: creando documentos PDF con Zend Framework

El otro día contábamos cómo eran las clases del framework de Zend para crear documentos PDF, también decíamos que el ejemplo de uso iría otro día, pues aquí vamos a explicar cómo realizar un PDF con una imagen como cabecera y un texto que se indique por un formulario.

También comentaba que según lo visto, el framework de Zend me gustaba bastante, pero debo decir que la documentación está un poco verde y que algunas de las opciones que parecen activadas no lo están (para darme cuenta de esto tuve que indagar por el código fuente).

pdf-ejemplo.png

El crear un PDF parece a primera vista algo sencillo a simple vista (¡qué optimista!), pensaba que sería algo como: crear documento, crear página y ponerte a escribir. Todo bien hasta que tienes que escribir, porque más que escribir tienes que maquetar, decir que texto va en tal lugar, no vale con escribir un párrafo que directamente y que el Acrobat Reader lo coloque como pensamos que debería ir. No, tenemos que ir calculando lo que va a ocupar la línea, y si no se sale de la página, escribirla.

Read More “Laboratorio: creando documentos PDF con Zend Framework”

Version 1.0 del Zend Framework para octubre

zendframework.pngYa metidos en el mundo del Zend Framework, no viene mal dar la noticia de que la versión 1.0 (o al menos una alpha) estará disponible el 29 de octubre para la próxima PHP Conference. Ya el año pasado sacaron la primera versión de este framework y en este año anuncian la versión 1.0, lo cual me parece perfecto porque si noto que le faltan cosas al framework que no estarían mal, por ejemplo mail mediante POP3.
A parte también anuncia la colaboración para integrar PHP con Eclipse y con WebSphere.
Vía / CNET News

|

Zend Framework: creando documentos PDF

Avanzando en el framework de Zend, hoy vamos a ver cómo crear documentos PDF. Quizás a muchos no les vaya a ser útil, pero un documento PDF es un formato bastante extendido.

De forma sencilla, ya que la librería del framework es algo extensa, vamos a explicar que métodos son necesarios para crear un PDF.

Para cargar la librería:

require_once 'Zend/Pdf.php';

Para crear un nuevo documento PDF:

$pdf = new Zend_Pdf();

Para crear una nueva página:

$pdf->pages[] = ($page = $pdf->newPage('A4'));
$pdf->pages[] = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
$pdf->pages[] = $pdf->newPage(Zend_Pdf_Page::SIZE_A4);

Obtener ancho y alto de la página:

$ancho  = $page->getWidth();
$alto = $page->getHeight();

Usar estilos:

$estilo = new Zend_Pdf_Style();
$estilo->setFillColor(new Zend_Pdf_Color_RGB(0, 0, 0));
$font = Zend_Pdf_Font::fontWithPath('/path/fuente.ttf');
$estilo->setFont($font, 10);
$estilo->setStyle($style);

Escribir texto:

$page->drawText("Hola Mundo", $x, $y);

Insertar imágenes:

$img = Zend_Pdf_ImageFactory::factory('sentidoweb.png');
$page->drawImage($img, $x, $y, $x+&ancho, $y+$alto);

Devolver la salida:

echo $pdf->render();

Eso sí, antes hay que tener en cuenta que tenemos que devolver al inicio del script el Content-Type:

header("Content-Type: application/pdf");
// Si queremos que se devuelva como un fichero adjunto
header("Content-Disposition: attachment; filename=\"prueba.pdf\"");

Si, se que parece muy resumido, pero otro día habrá un ejemplo más completo, mejor ir paso a paso.

Zend Framework : PDF

| |

Zend Framework: uso básico de la base de datos

Algo que siempre se usa que realmente solo se debería crear una vez en nuestras aplicaciones web es el gestor de la base de datos. Y si seguimos con el estudio del framework de Zend, nos encontramos con unas funcionalidades sobre la BD bastante aceptables, aunque ellos mismos digan que deben añadir cosas.

La principal característica es olvidarnos de la BD en cuestión y usarla, sea cual sea, de forma genérica. Por ahora este framework admite entre otras Microsoft SQL Server, MySQL, PostgreSQL y SQLite, estando basado en PDO. Lo siguiente, es que mediante una clase, el uso que normalmente le damos a una base de datos (selección, inserción y borrado) queda perfectamente resuelto.

Read More “Zend Framework: uso básico de la base de datos”

Frameworks para PHP

El otro día hablábamos del Zend Framework para PHP y Daniel nos hablaba de la existencia de otros frameworks, en este caso CakePHP. Y aunque a mí me está gustando Zend Framework, no quita que cada cual tenga sus gustos y prefiera otros productos, por eso nada mejor que una lista de frameworks que podemos usar.
Uno de los más populares es el que nos recomendaba Daniel, aunque parece que uno de los más completos es Seagull, pero el que tenga una versión profesional es algo que me tira para atrás. Claro, que Zoop parece igual de completo y además incluye AJAX.
Taking a look at ten different PHP frameworks
MVC Frameworks Written in PHP