<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-3378009048783310837</id><updated>2009-09-22T03:57:34.380-05:00</updated><title type='text'>Jeiff's Blog</title><subtitle type='html'>Software Libre, programación, seguridad y otros.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>7</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3378009048783310837.post-8741119805084310925</id><published>2007-11-22T16:43:00.001-06:00</published><updated>2007-11-22T19:25:06.646-06:00</updated><title type='text'>Mi escritorio</title><content type='html'>&lt;a href="http://farm3.static.flickr.com/2039/2055241145_dcc1738f41_o_d.png"&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px;" src="http://farm3.static.flickr.com/2039/2055241145_dcc1738f41_o_d.png" alt="Escritorio" border="0"&gt;&lt;/a&gt;&lt;br /&gt;Por eso me gusta Linux :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3378009048783310837-8741119805084310925?l=jeiff.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/8741119805084310925/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3378009048783310837&amp;postID=8741119805084310925' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/8741119805084310925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/8741119805084310925'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/2007/11/mi-escritorio.html' title='Mi escritorio'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18055016266310649193'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3378009048783310837.post-9084468856562765163</id><published>2007-11-13T10:13:00.000-06:00</published><updated>2007-11-13T10:22:20.814-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Seguridad'/><title type='text'>Seguridad en redes inalámbricas</title><content type='html'>Pues esta vez toca hablar un poco acerca de la seguridad en redes inalámbricas, ya que si hemos implementado todas nuestras politicas de seguridad de redes como firewalls, IDS/IPS, VPN etc.. no debemos olvidar que un metodo utilizado por un atacante podría ser romper la seguridad de nuestra red inalámbrica y acceder a nuestra red por ese medio, he encontrado un buen articulo que habla acerca de esto. En cuanto lo lean sabrán si su red inalámbrica es segura o no, por alguna extraña razón he visto que todo mundo utiliza WEP (bueno casi todo el mundo, yo ya no).&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Después de haber leído este buen articulo he cambiado mis configuraciones a WPA2 con autenticación de certificados Radius, este utlimo lo he montado en un Debian con FreeRadius, mis suplicantes son maquinas con Windows XP y SP2.&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;Por ultimo les dejo la liga al articulo antes mencionado:  &lt;/p&gt;&lt;div style="text-align: justify;"&gt; &lt;/div&gt;&lt;p style="margin-bottom: 0cm; text-align: justify;"&gt;&lt;a href="http://rapidshare.com/files/69454108/hakin9_wifi_ES.pdf"&gt;http://rapidshare.com/files/69454108/hakin9_wifi_ES.pdf&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3378009048783310837-9084468856562765163?l=jeiff.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/9084468856562765163/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3378009048783310837&amp;postID=9084468856562765163' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/9084468856562765163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/9084468856562765163'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/2007/11/seguridad-en-redes-inalmbricas.html' title='Seguridad en redes inalámbricas'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18055016266310649193'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3378009048783310837.post-7742442742677121499</id><published>2007-11-06T09:31:00.000-06:00</published><updated>2007-11-06T09:39:39.649-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Software Libre'/><title type='text'>Reflexión Acerca del Software Libre</title><content type='html'>&lt;div style="text-align: justify;"&gt;Pues ya hace de más de dos semanas que asistí al &lt;a href="http://www.enli.org.mx/"&gt;ENLI&lt;/a&gt; aquí en Puebla, fue un evento que hubo de todo, conferencias de lo mas básico a conferencias en verdad de alto nivel.&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;Una de las conferencias que mas me agrado fue la que dio Álvaro López, de hecho fue con la que cerraron el evento, en ella hablo acerca del software libre.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Hubo algo que dijo y que me hizo reflexionar:&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;“&lt;span style="font-style: italic;"&gt;Desde chicos nuestros padres nos enseñan que compartir es bueno, sin embargo cuando crecemos y entramos en el mundo del consumismo se nos enseña que compartir es malo he inclusive es tachado como piratería&lt;/span&gt;”.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;Pensando bien en estas palabras, quien no recuerda eso, cuando somos niños en verdad nuestro padres nos enseñaban a compartir con nuestros hermanos, primos, amigos, ahora bien es cierto también que nos vemos ahora sumergidos en situaciones mercadológicas en la que si tu deseas compartir el ultimo disco que has adquirido con algún familiar o amigo eso esta visto mal, y se contrapone con lo que has aprendido desde chico.&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;Creo que ahora veo mas la posición del Software Libre, y veo que no solo se trata de remar contra la corriente o por el solo hecho de usarlo porque estamos cansados de la pésima calidad de algunos productos comerciales, va mas allá se trata de un movimiento social, que trata de cambiar la forma de pensar de la gente, haciendo conciencia de que el compartir es retroalimentarnos a todos, mas si lo compartido es el conocimiento.&lt;/p&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;p style="text-align: justify;"&gt;Bueno creo que es tiempo de pensar en que usar software Libre no solo es por moda, es porque detrás de el hay intensiones de llevar el conocimiento a todo el mundo y hacer al hombre libre &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3378009048783310837-7742442742677121499?l=jeiff.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/7742442742677121499/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3378009048783310837&amp;postID=7742442742677121499' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/7742442742677121499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/7742442742677121499'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/2007/11/reflexin-acerca-del-software-libre.html' title='Reflexión Acerca del Software Libre'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18055016266310649193'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3378009048783310837.post-1905038106680094200</id><published>2007-10-30T10:00:00.000-06:00</published><updated>2007-10-30T16:32:22.519-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Programación'/><category scheme='http://www.blogger.com/atom/ns#' term='Seguridad'/><title type='text'>Secuestro de sesiones en PHP</title><content type='html'>&lt;div style="text-align: justify; font-size: 12px;"&gt;El uso de las sesiones en PHP es muy común para construir un sistema de autenticación de nuestros usuarios a cierta parte de nuestro sitio (un panel administrativo, información clasificada, etc).&lt;br /&gt;&lt;p style="text-align: justify;"&gt;En los últimos días he estado trabajando para mejorar la seguridad del sistema que actualmente estoy implementando, uno de los aspectos a mejorar es la seguridad en sesiones ($_SESSION).&lt;/p&gt;&lt;br /&gt;&lt;p style="text-align: justify;"&gt;Como todos saben PHP le asigna a cada sesión un identificador único llamado PHPSESSID, el cual se le es enviado al cliente mediante una cookie, pero del lado de nuestro servidor PHP genera un archivo con nombre de nuestro PHPSESSID, en el cual guarda la información de las variables de la sesión. De forma general así es como PHP maneja nuestras sesiones.&lt;/p&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;img src="http://farm3.static.flickr.com/2396/1804962008_aa459a0467_o_d.png" alt="PHPSESSID" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Informacion en una cookie:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm3.static.flickr.com/2184/1804962024_9a8c82ecab_o_d.png" alt="cookie" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Archivo en el servidor:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://farm3.static.flickr.com/2085/1804962026_99130a1c80_o_d.png" alt="cookie" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Una de las formas para lograr accesos inautorizados a nuestro sistema puede ser por medio del secuestro de la sesión de un usuario actualmente conectado al sistema.&lt;br /&gt;&lt;br /&gt;El atacante de alguna forma podría acceder a la cookie (ejemplos &lt;a href="http://es.wikipedia.org/wiki/XSS"&gt;aquí&lt;/a&gt;), de esta forma podría saber el PHPSESSID que PHP a asignado a nuestro cliente. Con esto la sesión ha sido comprometida y el atacante ahora podría acceder a nuestro sistema sin tener siquiera buscar un nombre de usuario y una contraseña, metiendo nuestra URL y en una cookie el PHPSESSID.Para poder evitar este tipo de accesos indeseados, una de las medidas que he tomado ha sido registrar la IP del cliente al momento de crear la sesión de autorización para nuestro sistema.&lt;/p&gt;&lt;br /&gt;&amp;lt;?&lt;br /&gt;&lt;br /&gt;session_start();&lt;br /&gt;&lt;br /&gt;define(IP_CLIENTE,$_SERVER[‘REMOTE_ADDR’]); //de esta forma siempre veremos la IP del cliente&lt;br /&gt;&lt;br /&gt;function login($usuario,$passwd,$conexion)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;if(trim($usuario)=="" || trim($passwd)=="")&lt;br /&gt;&lt;br /&gt;trigger_error("Usuario y/o contraseña inválidos",E_USER_ERROR);&lt;br /&gt;&lt;br /&gt;$usuario= mysql_escape_string($usuario);&lt;br /&gt;&lt;br /&gt;$SQL=”SELECT idUsuario,Nombre,contrasena FROM usuarios WHERE login='$usuario'”;&lt;br /&gt;&lt;br /&gt;$rs=mysql_query($SQL,$conexion);&lt;br /&gt;&lt;br /&gt;if($rs)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;$registro=mysql_fetch_row($rs);&lt;br /&gt;&lt;br /&gt;if($registro[2]==$passwd)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;$_SESSION['IP']=IP_CLIENTE; //Guardamos la IP desde la cual se inicio la session.&lt;br /&gt;&lt;br /&gt;$_SESSION['idUsuario']=$registro[0];&lt;br /&gt;&lt;br /&gt;$_SESSION['Nombre']=$registro[1];&lt;br /&gt;&lt;br /&gt;return true;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;else&lt;br /&gt;&lt;br /&gt;trigger_error("Usuario y/o contraseña inválidos", E_USER_ERROR);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Esta es una pequeña función que hace el proceso de validación de un usuario para permitirle el ingreso al sistema, si el usuario ha tecleado correctamente su nombre de usuario y contraseña, se registran las variables en SESSION para poder identificarlo por dentro de todo nuestro sistema.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;La parte importante de esta función esta en registrar la IP del cliente el cual ha tecleado correctamente la información esto con el fin de verificar si la IP que hace las peticiones de Sesiones coincide con la IP que hemos registrado. Tambien es importante comentar que la definición de IP_CLIENTE habría que colocarla dentro de algun script de PHP el cual sea incluido en todos los demás scripts de nuestro sistema, esto con el fin de que en cada pagina php podamos obtener la IP del cliente que esta accediendo a ella, y asi hacer la validación contra la IP que tenemos registrado en $_SESSION['IP'], si estas no coinciden se tendria que denegar el acceso a la pagina.&lt;/p&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3378009048783310837-1905038106680094200?l=jeiff.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/1905038106680094200/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3378009048783310837&amp;postID=1905038106680094200' title='3 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/1905038106680094200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/1905038106680094200'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/2007/10/secuestro-de-sesiones-en-php.html' title='Secuestro de sesiones en PHP'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18055016266310649193'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3378009048783310837.post-6254540529603031159</id><published>2007-10-25T12:01:00.000-05:00</published><updated>2007-10-25T10:08:37.898-05:00</updated><title type='text'>Retomando el Blog.</title><content type='html'>&lt;span style="font-family:Arial,Helvetica,times new roman;"&gt;Pues ya es casi mas de un año que no había escrito en este espacio, las razones muchas veces por falta de tiempo y exceso de trabajo.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:times new roman;"&gt;Gracias a esto creo que he adquirido un poco mas de experiencia en lo que a programación web concierne, por lo tanto creo que llego la hora de compartir esa experiencia.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3378009048783310837-6254540529603031159?l=jeiff.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/6254540529603031159/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3378009048783310837&amp;postID=6254540529603031159' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/6254540529603031159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/6254540529603031159'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/2007/10/retomando-el-blog.html' title='Retomando el Blog.'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18055016266310649193'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3378009048783310837.post-7737184484723662364</id><published>2007-01-20T10:13:00.000-06:00</published><updated>2007-01-20T11:20:27.492-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Programación'/><title type='text'>Formularios HTML en menos de 5 minutos</title><content type='html'>&lt;p  style="font-family:arial;"&gt;Este es otro pequeño HOW-TO basado en el framework PEAR, esta vez  crearemos en menos de 5 minutos un formulario con su validación listo  para ser enviado.&lt;br /&gt;&lt;br /&gt;La librería a utilazar se llama HTML_QuickForm, para su instalación podriamos hacerlo así:&lt;br /&gt;&lt;br /&gt;$ pear install HTML_QuickForm&lt;br /&gt;&lt;br /&gt;O bien puedes descargar el paquete desde &lt;a href="http://pear.php.net/package/HTML_QuickForm/download"&gt;http://pear.php.net/package/HTML_QuickForm/download&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una vez que cuentas con la libreria es hora de crear nuestro formulario:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;&amp;lt;?&lt;/span&gt; &lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;require_once(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"HTML/QuickForm.php"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p  style="font-family:arial;"&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Creamos nuestro formulario con el nombre de frmBuscar&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario =&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;new&lt;/span&gt; &lt;span style="color: rgb(51, 51, 255);"&gt;HTML_QuickForm&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;'&lt;span style="color: rgb(0, 153, 0);"&gt;frmBuscar&lt;/span&gt;'&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Asignamos los valores por deafault de nuestro elementos&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;setDefaults&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;array(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'busqueda'&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;''&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'opcion'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'1'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p face="arial"&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Creamos un encabezado para nuestro formulario&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;addElement&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'header'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;, null,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'&amp;lt;div align="center"&amp;gt;B&amp;amp;uacute;squeda de Anuncio Clasificado&amp;lt;/div&amp;gt;'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font-family: arial;"&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;/*Agregamos un campo de texto con el nombre de busqueda y la&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;leyenda Palabra a Buscar, tamaño de 50 caracteres y solo se&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;permitira capturar 255 caracteres */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;addElement&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'text'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'busqueda'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'Palabra a Buscar'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;array(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'size'&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(204, 0, 0);"&gt;50&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'maxlength'&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt; &lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;255&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Agregamos un campo oculto en nuestro formulario&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;addElement&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'hidden'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'opcion'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Apartir de aquí crearemos un elemento de tipo SELECT&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Iniciaremos por crear las opciones para este elemento&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$opts&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt; =&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;array(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"0"&lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt;"Todos"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"puebla"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"PUEBLA"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"tlaxcala"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"TLAXCALA"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"df"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"DF Mexico"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"veracruz"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;=&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;"VERACRUZ"&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;/*Creamos el elemento select con nombre de estado, la leyenda Estado,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;y agregamos la opciones*/&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$s_estado&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;createElement&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'select'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'estado'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'Estado:'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$opts&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;addElement&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$s_estado&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Agregamos nuestro boton para mandar la información&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;addElement&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'submit'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;, null,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'Buscar'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;/*Aplicamos un filtro a nuestro campo busqueda para eliminar&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;espacios en blanco tanto a la derecha como a la izquierda */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;applyFilter&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'busqueda'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'trim'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;/*Y pones la restricción, para que el usuario tenga que escribir algo&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;en nuestro campo busqueda antes de ser enviado */&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;addRule&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'busqueda'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'Teclee la palabra a Buscar'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'required'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;,&lt;/span&gt; &lt;span style="color: rgb(153, 51, 153);"&gt;null,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;'client'&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;//Por ultimo solo despelgamos nuestro formulario&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;$formulario&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;display&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font-family: arial;"&gt;Este código nos generara una página HTML que contendra un formulario de busqueda, el cual contendra un campo de texto validado, un select para seleccionar un estado, y un campo oculto con valor de 1.&lt;/p&gt;&lt;p style="font-family: arial;"&gt;En la segunda parte de este pequeño HOW-TO explicare cada una de las funciones utilizadas aqui, y escribire un ejemplo un poco mas completo.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3378009048783310837-7737184484723662364?l=jeiff.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/7737184484723662364/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3378009048783310837&amp;postID=7737184484723662364' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/7737184484723662364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/7737184484723662364'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/2007/01/formularios-html-en-menos-de-5-minutos.html' title='Formularios HTML en menos de 5 minutos'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18055016266310649193'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3378009048783310837.post-9109995784797615664</id><published>2007-01-13T11:01:00.001-06:00</published><updated>2007-01-14T00:32:53.313-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PHP'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><category scheme='http://www.blogger.com/atom/ns#' term='Programación'/><title type='text'>Como escribir Hojas de Excel desde PHP.</title><content type='html'>&lt;div  style="font-size:14px;"&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Para este pequeño HOW-TO se utiliza la librería Spreadsheet Excel Writer&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;del framework PEAR para php.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Esta librería nos permite crear hojas de Excel de forma rápida y sencilla,&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;con la ventaja de no tener que necesitar los objetos COM, es decir puede &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;funcionar desde LINUX :), soporta, formulas, imágenes y una gran cantidad &lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;de formatos para celdas y texto.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Spreadsheet Excel Writer puede ser instalado con el siguiente comando:&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 153, 153);font-family:arial;" &gt;$ pear install OLE;  Dependencia necesaria para SpreadSheet&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 153, 153);font-family:arial;" &gt;$ pear install Spreadsheet_Excel_Writer;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;O bien puedes descargarlo desde la siguiente dirección: &lt;/span&gt;&lt;br /&gt;&lt;a style="color: rgb(51, 51, 255);" href="http://pear.php.net/package/Spreadsheet_Excel_Writer/download"&gt;&lt;span style="font-family:arial;"&gt;http://pear.php.net/package/Spreadsheet_Excel_Writer/download&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;span style="color: rgb(153, 153, 153);"&gt;Ahora vamos a generar una Hoja de Prueba:&lt;/span&gt;&lt;br /&gt;&lt;div  style="font-size:12px;"&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;&amp;lt;?&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(153, 51, 153);"&gt;require_once&lt;/span&gt; &lt;span style="color: rgb(51, 204, 0);"&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'Spreadsheet/Excel/Writer.php&lt;/span&gt;'&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(192, 192, 192);"&gt;// Creamos un libro de excel que sirve como nuestro espacio de trabajo.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$libro = &lt;span style="color: rgb(153, 51, 153);"&gt;new&lt;/span&gt; Spreadsheet_Excel_Writer&lt;span style="color: rgb(204, 51, 204);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(192, 192, 192);"&gt;// Estableceremos nuestro formato Negrita para usarlo en el documento&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$negrita =&lt;span style="color: rgb(204, 51, 204);"&gt;&amp;&lt;/span&gt; $libro&lt;span style="color: rgb(204, 51, 204);"&gt;-&gt;&lt;/span&gt;addFormat&lt;span style="color: rgb(204, 51, 204);"&gt;()&lt;/span&gt;&lt;span style="color: rgb(153, 51, 153);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$negrita&lt;span style="color: rgb(204, 102, 204);"&gt;-&gt;&lt;/span&gt;setBold&lt;span style="color: rgb(204, 102, 204);"&gt;()&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(192, 192, 192);"&gt;// Necesitamos una hoja en la cual poner nuestros datos&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$hoja =&lt;span style="color: rgb(204, 51, 204);"&gt;&amp;&lt;/span&gt; $libro&lt;span style="color: rgb(204, 51, 204);"&gt;-&gt;&lt;/span&gt;addWorksheet&lt;span style="color: rgb(204, 102, 204);"&gt;(&lt;/span&gt;‘Hoja1’&lt;span style="color: rgb(204, 102, 204);"&gt;)&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(192, 192, 192);"&gt;// Verificamos que la hoja se haya generado correctamente&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(204, 51, 204);"&gt;if&lt;/span&gt; &lt;span style="color: rgb(204, 51, 204);"&gt;(&lt;/span&gt;PEAR&lt;span style="color: rgb(204, 51, 204);"&gt;::&lt;/span&gt;isError&lt;span style="color: rgb(204, 51, 204);"&gt;(&lt;/span&gt;$hoja&lt;span style="color: rgb(204, 51, 204);"&gt;))&lt;/span&gt; &lt;span style="color: rgb(204, 51, 204);"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;    &lt;span style="color: rgb(204, 51, 204);"&gt;die(&lt;/span&gt;$hoja&lt;span style="color: rgb(204, 51, 204);"&gt;-&gt;&lt;/span&gt;getMessage&lt;span style="color: rgb(204, 51, 204);"&gt;());&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(204, 51, 204);"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(192, 192, 192);"&gt;// Este es el titulo&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$hoja&lt;span style="color: rgb(204, 51, 204);"&gt;-&gt;&lt;/span&gt;write&lt;span style="color: rgb(204, 51, 204);"&gt;(&lt;/span&gt;0, 0, &lt;span style="color: rgb(0, 153, 0);"&gt;"Escribir hojas en excel"&lt;/span&gt;, $negrita&lt;span style="color: rgb(204, 51, 204);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;&lt;span style="color: rgb(192, 192, 192);"&gt;// Generamos nuestro libro de excel&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$libro&lt;span style="color: rgb(204, 51, 204);"&gt;-&gt;&lt;/span&gt;send&lt;span style="color: rgb(204, 51, 204);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;'ejemplo.xls'&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);font-family:courier new;" &gt;$libro&lt;span style="color: rgb(204, 51, 204);"&gt;-&gt;&lt;/span&gt;close&lt;span style="color: rgb(204, 51, 204);"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);font-family:courier new;" &gt;?&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Este ejemplo nos generara un libro de excel con una hoja llamada Hoja1 la cual contendrá en su&lt;br /&gt;Celda (A1) la palabra&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;“Escribir hojas en excel”.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Las funciones que nos interesan en este script son:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Spreadsheet_Excel_Writer(): No permite crear nuestro espacio de trabajo, en el que podremos&lt;br /&gt;generar cuantas hojas queramos.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt; Es el constructor de la clase Spreadsheet_Excel_Writer y puede recibir como parámetro el&lt;br /&gt;nombre del archivo de salida.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;addFormat(): Nos permite añadir al libro distintos formatos para poder ser usados en nuestras&lt;br /&gt;hojas. Como parámetro puede &lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;recibir una array con las propiedades de nuestro formato.&lt;br /&gt;Este objeto además tiene una serie de funciones para establecer &lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;distintos formatos P/E: setBol(),&lt;br /&gt;setAlign(), etc.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;addWorksheet(): Nos permite agregar a nuestro libre una hoja de trabajo en la cual colocaremos&lt;br /&gt;nuestros datos. Como parámetro &lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;puede recibir el nombre de nuestra hoja, el cual no puede ser&lt;br /&gt;mayor a 31 caracteres.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;write(): Esta funcion nos permite escribir información en nuestra hoja, recibe como parámetros:&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;-    Número de fila: un número entero.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;    -    Número de Columna: un número entero.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;    -    Información a escribir&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;    -    Formato de la celda, proveniente del objeto Format.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;send(): Esta funcion es necesaria para preparar las cabeceras HTTP para mandar un archivo Excel. Recibe como parámetro el&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;nombre del archivo a usar en las cabeceras HTTP.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Además de estas funciones podría interesarnos la función:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;writeFormula: Esta funcion nos permite escribir formulas en nuestra hoja, recibe como parámetros:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;        -    Número de fila: un número entero.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;        -    Número de Columna: un número entero.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;        -    Cadena de la Formula.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;        -    Formato de la celda, proveniente del objeto Format.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Un ejemplo de esta:&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;        &lt;span style="color: rgb(51, 51, 255);"&gt;$hoja&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;-&gt;&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;writeFormula&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;(&lt;/span&gt;&lt;span style="color: rgb(51, 51, 255);"&gt;0, 4,&lt;/span&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;"=SUM(A1,C1)"&lt;/span&gt;&lt;span style="color: rgb(204, 51, 204);"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Con esto termino este mini HOW-TO, pueden encontrar más información acerca de SpreadSheet en:&lt;br /&gt;&lt;a style="color: rgb(51, 51, 255);" href="http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.php"&gt;http://pear.php.net/manual/en/package.fileformats.spreadsheet-excel-writer.php&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(153, 153, 153);font-family:arial;" &gt;Espero que les haya sido de utilidad este artículo.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3378009048783310837-9109995784797615664?l=jeiff.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jeiff.blogspot.com/feeds/9109995784797615664/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=3378009048783310837&amp;postID=9109995784797615664' title='10 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/9109995784797615664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3378009048783310837/posts/default/9109995784797615664'/><link rel='alternate' type='text/html' href='http://jeiff.blogspot.com/2007/01/como-escribir-hojas-de-excel-desde-php.html' title='Como escribir Hojas de Excel desde PHP.'/><author><name>Jeiff</name><uri>http://www.blogger.com/profile/15186475817658606257</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='18055016266310649193'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>10</thr:total></entry></feed>