<?xml version="1.0" encoding="iso-8859-1"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>...Microplagio... &#187; Programacion</title>
	<atom:link href="http://www.microplagio.com/articulos/category/programacion/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.microplagio.com</link>
	<description>Ciencia, historia, actualidad y humor...  ahh y programación</description>
	<lastBuildDate>Fri, 13 Jan 2012 00:11:53 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Cómo obtener todos los comentarios y replies de Facebook con FQL</title>
		<link>http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/</link>
		<comments>http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 20:17:15 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[simplexmlelement]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/?p=1306</guid>
		<description><![CDATA[Ese fue mi primer gran problema al implementar el sistema de Facebook Comments en mi blog. Facebook te da el código para implementar el cajón de comentarios, con opciones para moderar, notificar, etc. Es un plugin magnífico si deseas darle mas status social a tu sitio web. Pero cuando deseas mostrar los comentarios de cierta página, Facebook solo te da el número de los comentarios de primer nivel, es decir, [...]]]></description>
			<content:encoded><![CDATA[<p>Ese fue mi primer gran problema al implementar el sistema de <a href="https://developers.facebook.com/docs/reference/plugins/comments/">Facebook Comments</a> en mi blog. Facebook te da el código para implementar el cajón de comentarios, con opciones para moderar, notificar, etc. Es un plugin magnífico si deseas darle mas status social a tu sitio web.</p>
<p>Pero cuando deseas mostrar los comentarios de cierta página, Facebook solo te da el número de los comentarios de primer nivel, es decir, no te suma las respuestas ni los demás comentarios anidados. Por lo tanto, si tienes 30 comentarios y cada uno tiene 5 respuestas, Facebook te dice que tu página tiene 30 comentarios en lugar de 150.</p>
<p>¿Cómo solucionar esto? Afortunadamente Facebook te da cierto acceso a su BD por medio de una API, y usando su propio <a href="https://developers.facebook.com/docs/reference/fql/">lenguaje FQL</a> puedes acceder a consultas un poco más complejas. Yo admito que aunque me gusta programar y tengo años dedicándome a eso, nunca me ha gustado usar SQL y nunca he sido bueno, así que sencillamente no tenía idea de cómo crear una query que me regresara todos los comentarios por lo que me dediqué a buscarlo en Google, y fue así como encontré una solución en <a href="http://stackoverflow.com/a/7812174">StackOverflow</a>.</p>
<pre name="code" class="sql">
select time from comment where
object_id in
(
   	select comments_fbid from link_stat where url ='http://example.com'
)
or object_id in
(
	select post_fbid from comment where object_id in
	(
		select comments_fbid from link_stat where url ='http://example.com'
	)
)
</pre>
<p>No tengo idea de cómo explicar esta consulta xD pero funciona, lo que sí sé es que FQL no permite el uso de la función COUNT() así solo indicamos un campo (time) para poder indexar los resultados. Cuando se ejecuta la query, esta nos regresa un documento XML fácilmente manipulable por medio de la clase SimpleXMLElement en PHP, al que solo tenemos que contarle los hijos para saber cuantos comentarios hay.</p>
<pre name="code" class="php">
&lt;?php
function fb_comments_count($url){
	// URL del web service
	$api = "https://api.facebook.com/method/fql.query?query=";
	// Consulta FQL que regresará un documento XML
	$fql = "select time from comment where object_id in (select comments_fbid from link_stat where url ='$url') or object_id in (select post_fbid from comment where object_id in (select comments_fbid from link_stat where url ='$url'))";
	// Convertimos en objeto el documento XML
	$xml = new SimpleXMLElement($api.$fql, null, true);
	// Regresamos el tamaño del objeto (número de hijos)
	return (count($xml));
}
?&gt;
</pre>
<p>Para llamarlo, solo tenemos que enviar como parámetro la URL de la página deseada.</p>
<pre name="code" class="php">
&lt;?php echo fb_comments_count("http://example.com/post/1234") ?&gt;
</pre>
<p>Espero que les sirva. Y gracias a <a href="http://stackoverflow.com/users/949723/tom">Tom</a>, el autor de esta solución.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/twitter-vs-facebook/" title="Twitter vs Facebook">Twitter vs Facebook</a></li><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Script: Multiplicación de matrices en Java</title>
		<link>http://www.microplagio.com/articulos/script-multiplicacion-de-matrices-en-java/</link>
		<comments>http://www.microplagio.com/articulos/script-multiplicacion-de-matrices-en-java/#comments</comments>
		<pubDate>Wed, 06 May 2009 04:21:19 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[java]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/?p=703</guid>
		<description><![CDATA[Bueno hoy me vi en la necesidad de hacer una multiplicación de matrices en Java, las matrices no necesariamente son cuadradas pero obviamente deben cumplir con la propiedad de: Número de filas de la primera debe ser igual al número de columnas de la segunda&#8230; Total que busqué un algoritmo o método ya hecho para solo copiar y pegar pues me dada flojera programarlo, pero como no encontré nada útil [...]]]></description>
			<content:encoded><![CDATA[<p>Bueno hoy me vi en la necesidad de hacer una <strong>multiplicación de matrices en Java</strong>, las matrices no necesariamente son cuadradas pero obviamente deben cumplir con la propiedad de: Número de filas de la primera debe ser igual al número de columnas de la segunda&#8230;</p>
<p>Total que busqué un algoritmo o método ya hecho para solo copiar y pegar pues me dada flojera programarlo, pero como no encontré nada útil pues terminé programándolo yo. Y por eso dejo aquí el código del método:</p>
<pre name="code" class="java">public final class Matriz {
	/**
	 * Multiplica dos matrices
	 * @param int[][] A
	 * @param int[][] B
	 * @return int[][] producto
	 */
	private static int[][] producto(int A[][], int B[][]){
		int suma = 0;
		int result[][] = new int[A.length][B.length];
		for(int i = 0; i &lt; A.length; i++){
			for(int j = 0; j &lt; B.length; j++){
				suma = 0;
				for(int k = 0; k &lt; B.length; k++){
					suma += A[i][k] * B[k][j];
				}
				result[i][j] = suma;
			}
		}
		return result;
	}
}</pre>
<p>El método es estático pues está dentro de una clase final (no instanciable ni extendible). De modo que para hacer una multiplicación solo basta con:</p>
<pre name="code" class="java">// Se asume que matrizA y matrizB ya están declaradas y son
// diferente a &lt;null&gt;

int matrizProducto[][] = Matriz.producto(matrizA, matrizB);</pre>
<p>Espero que a más de uno le sirvan así como les sirvieron tambien los <a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/">scripts para resolver matrices con el método de Gauss en PHP</a>.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/script-multiplicacion-de-matrices-en-java/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Teclado para programadores</title>
		<link>http://www.microplagio.com/articulos/teclado-para-programadores/</link>
		<comments>http://www.microplagio.com/articulos/teclado-para-programadores/#comments</comments>
		<pubDate>Sat, 20 Sep 2008 18:43:25 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[programadores]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/?p=522</guid>
		<description><![CDATA[Programador you = new Programador(); if ( you instanceof Programador &#038;&#038; you.areReallyAnInstanceOf( Programador ) ) { // Then prove it: &#160;&#160;&#160;&#160;&#160; } else { // Go buy a beer... // Or go to Ribosomatic } No hay artículos relacionados]]></description>
			<content:encoded><![CDATA[<pre>
Programador you = new Programador();
if ( you instanceof Programador &#038;&#038; you.areReallyAnInstanceOf( Programador ) ) {
     // Then prove it:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://www.microplagio.com/imgs/2008/09/supercoder.jpg" alt="Teclado para programadores" class="alignleft" />

<br style="clear:both"/>
}
else {
     // Go buy a beer...
     // Or go to <a href="http://www.ribosomatic.com/articulos/solo-para-super-programadores-imagen/">Ribosomatic</a>
}
</pre>
<ul class="related_post"><li>No hay artículos relacionados</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/teclado-para-programadores/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Clase para manejar base de datos MySQL en PHP</title>
		<link>http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/</link>
		<comments>http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/#comments</comments>
		<pubDate>Sat, 05 Apr 2008 08:47:31 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2008/clase-para-manejar-base-de-datos-mysql-en-php/</guid>
		<description><![CDATA[Una de las máximas prioridades en una aplicación PHP que haga uso de una base de datos, es la organización y eficiencia del código para evitar consumo innecesario de memoria, esto es bien sabido por cualquier programador. Pero ¿qué hay de la separación del código de lógica y el de la base de datos? El patrón Modelo-Vista-Controlador nos puede ser de gran utilidad ya que separa la lógica (controladores) de [...]]]></description>
			<content:encoded><![CDATA[<p>Una de las máximas prioridades en una aplicación PHP que haga uso de una base de datos, es la organización y eficiencia del código para evitar consumo innecesario de memoria, esto es bien sabido por cualquier programador. Pero ¿qué hay de la separación del código de lógica y el de la base de datos?</p>
<p>El patrón <a href="http://es.wikipedia.org/wiki/Modelo_Vista_Controlador">Modelo-Vista-Controlador</a> nos puede ser de gran utilidad ya que separa la lógica (controladores) de scripts que acceden y relacionan las tablas de un base de datos (modelos) y de la interfaz gráfica (vistas). Pero en ocasiones no necesitamos de tantas capas de abstracción y decidimos programar todo revuelto. Aún así, utilizar una clase para los accesos a la base de datos nos es de gran ayuda para aquello de la organización del código.</p>
<p>La clase que a continuación propongo utiliza un patrón llamado <a href="http://es.wikipedia.org/wiki/Singleton">Singleton</a>. Este patrón obliga a instanciar unicamente una vez la clase para evitar 2 o más conexiones simultáneas. La clase contiene métodos para ejecutar sentencias SQL, cargar resultados en forma de objetos, ver el número de consultas totales etc.</p>
<pre class="php">
&lt;?php

class DataBase {

	private $conexion;
	private $resource;
	private $sql;
	public static $queries;
	private static $_singleton;

	public static function getInstance(){
		if (is_null (self::$_singleton)) {
			self::$_singleton = new DataBase();
		}
		return self::$_singleton;
	}

	private function __construct(){
		$this-&gt;conexion = @mysql_connect('localhost', 'db_user', 'db_password'));
		mysql_select_db('database_name', $this-&gt;conexion);
		$this-&gt;queries = 0;
		$this-&gt;resource = null;
	}

	public function execute(){
		if(!($this-&gt;resource = mysql_query($this-&gt;sql, $this-&gt;conexion))){
			return null;
		}
		$this-&gt;queries++;
		return $this-&gt;resource;
	}

	public function alter(){
		if(!($this-&gt;resource = mysql_query($this-&gt;sql, $this-&gt;conexion))){
			return false;
		}
		return true;
	}

	public function loadObjectList(){
		if (!($cur = $this-&gt;execute())){
			return null;
		}
		$array = array();
		while ($row = @mysql_fetch_object($cur)){
			$array[] = $row;
		}
		return $array;
	}

	public function setQuery($sql){
		if(empty($sql)){
			return false;
		}
		$this-&gt;sql = $sql;
		return true;
	}

	public function freeResults(){
		@mysql_free_result($this-&gt;resource);
		return true;
	}

	public function loadObject(){
		if ($cur = $this-&gt;execute()){
			if ($object = mysql_fetch_object($cur)){
				@mysql_free_result($cur);
				return $object;
			}
			else {
				return null;
			}
		}
		else {
			return false;
		}
	}

	function __destruct(){
		@mysql_free_result($this-&gt;resource);
		@mysql_close($this-&gt;conexion);
	}
}
?&gt;
</pre>
<p>Si notamos, el constructor es privado. ¿Por qué? para asegurarnos de que la clase se instancie desde dentro de sí misma. Es decir, al ejecutar el método <code>DataBase::getInstance()</code> llamamos al constructor y creamos una única instancia de <code>DataBase</code>. Si volvemos a ejecutar ese método y la clase ya ha sido instanciada antes, entonces nos devolverá la instancia. Eso es el objetivo del patrón Singleton.</p>
<p>Veamos entonces como hacer una conexión, ejecutar una consulta y mostrar los resultados. Se asume que los parámetros de conexión como el host, el nombre de usuario y demás se especifican directamente en la clase.</p>
<pre name="code" class="php">
// Hacemos la conexión
$db = DataBase::getInstance();

// Supongamos que tenemos una tabla de usuarios
// Hacemos la consulta:
$db->setQuery('SELECT `id`,`nombre`,`grupo` FROM `usuarios`');

// La ejecutamos y al mismo tiempo obtenemos un arreglo de objetos
// con los campos especificados en la consulta como propiedades.
$usuarios = $db->loadObjectList();

// Los imprimimos directamente en pantalla...
foreach($usuarios as $usuario){
	echo &apos;ID: &apos;.$usuario->id;
	echo &apos;Nombre: &apos;.$usuario->nombre;
	echo &apos;Grupo: &apos;.$usuario->grupo;
	echo &apos;&lt;br /&gt;&apos;;
}
</pre>
<p>Y ahí tienen un pequeñísimo ejemplo de uso. Algunos métodos como el <code>DataBase::loadObject</code> o <code>DataBase::loadObjectList</code> fueron tomados de la <a href="http://api.joomla.org/">API de Joomla</a>. En fin, espero que les sea de utilidad.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/feed/</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>Método de Gauss en PHP</title>
		<link>http://www.microplagio.com/articulos/metodo-de-gauss-en-php/</link>
		<comments>http://www.microplagio.com/articulos/metodo-de-gauss-en-php/#comments</comments>
		<pubDate>Thu, 13 Mar 2008 05:56:26 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Programacion]]></category>
		<category><![CDATA[Gauss]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2008/mtodo-de-gauss-en-php/</guid>
		<description><![CDATA[A continuación, mostraré como obtener la solución a un sistema de ecuaciones lineales por el método de Gauss. Pero claro, no necesitamos calculadoras ni lápices ni papel&#8230; todo lo hará nuestro script de PHP. Crearemos primero una interfaz sencilla, para conocer primero el numero de filas y columnas, y después los valores de la matriz. Ojo, si es un sistema común, se sobreentiende que el número de filas es menor [...]]]></description>
			<content:encoded><![CDATA[<p>A continuación, mostraré como obtener la solución a un sistema de ecuaciones lineales por el método de Gauss. Pero claro, no necesitamos calculadoras ni lápices ni papel&#8230; todo lo hará nuestro script de PHP.</p>
<p>Crearemos primero una interfaz sencilla, para conocer primero el numero de filas y columnas, y después los valores de la matriz. Ojo, si es un sistema común, se sobreentiende que el número de filas es menor por uno al número de columnas. De manera que la matriz siempre debe quedar del orden (n,n+1).</p>
<p>Código de la interfaz inicial XHTML:</p>
<pre name="code" class="html">&lt;form action="gauss.php" method="post"&gt;
&lt;fieldset&gt;
	&lt;legend&gt;Orden de la matriz&lt;/legend&gt;
	&lt;table&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;p&gt;Numero de filas&lt;/p&gt;&lt;/td&gt;
			&lt;td&gt;&lt;p&gt;&lt;input name="Matriz[filas]" /&gt;&lt;/p&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td&gt;&lt;p&gt;Numero de columnas&lt;/p&gt;&lt;/td&gt;
			&lt;td&gt;&lt;p&gt;&lt;input name="Matriz[columnas]" /&gt;&lt;/p&gt;&lt;/td&gt;
		&lt;/tr&gt;
		&lt;tr&gt;
			&lt;td colspan="2"&gt;
				&lt;p&gt;&lt;input type="submit" value=" Crear matriz "&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
&lt;/fieldset&gt;
&lt;/form&gt;</pre>
<p>Una vez establecido el orden de la matriz, continuamos leyendo los valores la misma. Para esto, cacharemos los valores en un archivo PHP y crearemos dinamicamente una tabla con campos de texto para introducir los valores de la matriz. El archivo se llama en este caso <em>gauss.php</em>.</p>
<pre name="code" class="php">&lt;?php
$filas = $_POST['Matriz']['filas'];
$columnas = $_POST['Matriz']['columnas'];
?&gt;

&lt;form action="gaussiana.php" method="post"&gt;
	&lt;table&gt;
	&lt;?php for($i = 1; $i &lt;= $filas; $i++ ) { ?&gt;
		&lt;tr&gt;
		&lt;?php for($j = 1; $j &lt;= $columnas; $j++ ) { ?&gt;
		    &lt;td&gt;
			&lt;input type="text" name="A[&lt;?php echo $i ?&gt;][&lt;?php echo $j ?&gt;]"/&gt;
		    &lt;/td&gt;
		&lt;?php } ?&gt;
		&lt;/tr&gt;
	&lt;?php } ?&gt;
		&lt;tr&gt;
			&lt;td colspan="&lt;?php echo $columnas ?&gt;"&gt;
				&lt;p&gt;&lt;input type="submit" class="submit" value=" Resolver matriz"
					&gt;&lt;/p&gt;
			&lt;/td&gt;
		&lt;/tr&gt;
	&lt;/table&gt;
	&lt;input type="hidden" name="filas" value="&lt;?php echo $filas ?&gt;"/&gt;
	&lt;input type="hidden" name="columnas" value="&lt;?php echo $columnas ?&gt;"/&gt;
&lt;/form&gt;</pre>
<p>Desde el <em>form</em> del archivo anterior llamamos a otro archivo que se llama <em>gaussiana.php</em>, ahi llegarán todos los valores de la matriz. Desde ahí mismo también instanciaremos nuestra clase que será la que resuelva la matriz.</p>
<p>En este archivo debe haber una inclusión al archivo donde vayamos a poner la clase -en caso de tenerla aparte- de manera que, minimamente, <em>gaussiana.php</em> debe contener:</p>
<pre name="code"  class="php">&lt;?php

	$A = $_POST['A'];
	$filas = $_POST['filas'];
	$columnas = $_POST['columnas'];

	$method = new Gauss();
	$method-&gt;setRows( $filas );
	$method-&gt;setCols( $columnas );
	$method-&gt;setMatrix( $A );
	$method-&gt;getGaussSolution();

?&gt;</pre>
<p>Ahora sí, viene lo bueno: la clase que resuelve la matriz. Tiene 3 propiedades, 3 métodos <em>set</em>, el método de solución y un método de impresión:</p>
<pre name="code"  class="php">class Gauss {

	private $filas;
	private $columnas;
	private $matriz;

	/**
	 * Establece el número de filas de la matriz
	 * @param int filas
	 * @return void
	 */
	public function setRows( $filas ){
		$this-&gt;filas = $filas;
	}

	/**
	 * Establece el número de columnas de la matriz
	 * @param int columnas
	 * @return void
	 */
	public function setCols( $columnas ){
		$this-&gt;columnas = $columnas;
	}

	/**
	 * Establece la matriz a la que se aplicará el método de solución
	 * @param array matriz
	 * @return void
	 */
	public function setMatrix( $matriz ){
		$this-&gt;matriz = $matriz;
	}

	/**
	 * Obtiene la solución de la matriz por el método de Gauss
	 * @param void
	 * @return void
	 */
	public function getGaussSolution(){
		$this-&gt;mostrarMatriz();
		for($x = 1; $x &lt;= $this-&gt;filas; $x++){
			$pivote = $this-&gt;matriz[$x][$x];
			for($i = $x; $i &lt;= $this-&gt;filas; $i++ ){
				for($j = $x; $j &lt;= $this-&gt;columnas; $j++ ){
					if($i == $x) {
						$this-&gt;matriz[$i][$j] /= $pivote;
						continue;
					} elseif( $j == $x &amp;&amp; $i != $x ){
						$aux = $this-&gt;matriz[$i][$j] * (-1);
					}
					$this-&gt;matriz[$i][$j] =
						$this-&gt;matriz[$x][$j] * $aux
							+ $this-&gt;matriz[$i][$j];
				}
				$this-&gt;mostrarMatriz();
			}
		}
		for($x = 4; $x &gt; 0; $x--){
			$pivote = $this-&gt;matriz[$x][$x];
			for($i = $x-1; $i &gt; 0; $i-- ){
				for($j = $x; $j &lt;= $this-&gt;columnas; $j++ ){
					if( $j == $x ){
						$aux = $this-&gt;matriz[$i][$j] * (-1);
					}
					$this-&gt;matriz[$i][$j] =
						$this-&gt;matriz[$x][$j] * $aux
							+ $this-&gt;matriz[$i][$j];
				}
				$this-&gt;mostrarMatriz();
			}
		}
	}

	/**
	 * Imprime la matriz en una tabla
	 * @param void
	 * @return void
	 */
	private function mostrarMatriz(){
		echo '&lt;table&gt;';
		for($i = 1; $i &lt;= $this-&gt;filas; $i++ ){
			echo '&lt;tr&gt;';
			for($j = 1; $j &lt;= $this-&gt;columnas; $j++ ){
				echo '&lt;td&gt;';
				echo '&lt;p&gt;'.$this-&gt;matriz[$i][$j].'&lt;/p&gt;';
				echo '&lt;/td&gt;';
			}
			echo '&lt;/tr&gt;';
		}
		echo '&lt;/table&gt;';
	}
}</pre>
<p>Es todo&#8230; parece que no pero, estoy seguro que a más de uno le va a servir&#8230; así como a mi.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/metodo-de-gauss-en-php/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Cómo modificar documentos XML con PHP</title>
		<link>http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/</link>
		<comments>http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/#comments</comments>
		<pubDate>Thu, 13 Dec 2007 02:52:33 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Microtutoriales]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[simplexmlelement]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2007/coacutemo-modificar-documentos-xml-con-php/</guid>
		<description><![CDATA[Bien, después de haberme atrasado casi un mes y en vista de que es un tema difícil de encontrar en la red, voy a hacer un microtutorial sobre cómo modificar un documento XML usando PHP5. Ya vimos cómo hacer un parsing a un documento XML usando la extensión que provee PHP5 llamada SimpleXMLElement. Ahora veremos primero cómo modificar elementos de nuestro XML, estamos hablando de agregar o eliminar elementos. Cómo [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-1290" title="php-xml" src="http://www.microplagio.com/imgs/2007/11/php-xml-480x480.jpg" alt="" width="200" height="200" />Bien, después de haberme atrasado casi un mes y en vista de que es un tema difícil de encontrar en la red, voy a hacer un microtutorial sobre <strong>cómo modificar un documento XML usando PHP5</strong>. Ya vimos <a href="http://www.microplagio.com/articulos/2007/como-acceder-a-los-datos-de-xml-en-php/">cómo hacer un parsing a un documento XML</a> usando la extensión que provee PHP5 llamada <strong>SimpleXMLElement</strong>. Ahora veremos primero cómo modificar elementos de nuestro XML, estamos hablando de agregar o eliminar elementos.</p>
<p><strong>Cómo agregar elementos, hijos y atributos</strong></p>
<p>Hasta PHP 5.1.3 la extensión <strong>SimpleXMLElement</strong> no tenía forma de agregar elementos a un documento XML. Sólo era posible modificar los valores de elementos o atributos pero para agregar nuevos era necesario exportar el objeto <strong>SimpleXMLElement</strong> a <acronym title="Document Object Model">DOM</acronym>, hacer los cambios y exportar de nuevo a <strong>SimpleXMLElement</strong>, lo cual era una tarea complicada. Pero la versión 5.1.3 introdujo dos nuevos métodos que nos dan el poder de modificar el documento XML. Me refiero a los métodos:</p>
<pre class="php" name="code">SimpleXMLElement::addChild();
SimpleXMLElement::addAttribute();</pre>
<p>El nombre lo dice todo, con el primero agregamos un elemento hijo al elemento en el que nos encontramos y con el segundo agregamos un atributo. <strong>addChild()</strong> acepta tres parámetros, el primero indica el nombre del nuevo elemento, el segundo es opcional e indica el valor del elemento, y el tercero también es opcional e indica el namespace al cual pertenece el elemento. <strong>addAttribute()</strong> recibe dos, el nombre del atributo y su valor.</p>
<p>Pongamos un ejemplo para ilustrar su uso. Recordemos el <a href="http://www.microplagio.com/articulos/2007/como-acceder-a-los-datos-de-xml-en-php/">ejemplo de la vez pasada</a> donde usamos un archivo XML cuyo contenido son libros con sus respectivos datos y pasemos a crear el objeto <strong>SimpleXMLElement</strong>.</p>
<pre class="php" name="code">$library = new SimpleXMLElement('library.xml', null, true);</pre>
<p>Ahora supongamos que queremos agregar un nuevo libro llamado <em>The finished mistery</em> cuyo autor es <em>J. F. Rutherford</em>, el ISBN es <em>0812550706</em> y la editorial es <em>Watchtower Society</em>.</p>
<pre class="php" name="code">$book = $library-&gt;addChild('book');
$book-&gt;addAttribute('isbn', '0812550706');
$book-&gt;addChild('title', "The finished mistery");
$book-&gt;addChild('author', 'J. F. Rutherford');
$book-&gt;addChild('publisher', 'Watchtower Society');</pre>
<p>Con eso es suficiente para modificar el contenido XML. En la primera línea estamos agregando un nuevo hijo llamado <em>book</em> al elemento raíz que es <em>library,</em> como <strong>SimpleXMLElement</strong> siempre nos regresa un objeto del mismo tipo, entonces a la variable <em>$book</em> también podemos aplicarle el metodo <strong>addChild()</strong> para crearle hijos, (que vendrían siendo los nietos de <em>$library</em>). Es como una especie de recursividad, donde podemos ir creando elementos en varios niveles, paras obtener hijos, nietos, bisnietos etc.</p>
<p>Ahora bien, hasta este punto no podemos ver cómo ha quedado nuestro documento XML. Lo siguiente será mostrarlo en el navegador. Para ello, debemos enviar una cabecera para indicar al navegador que el contenido a mostrar no es simple texto ni HTML, sino XML y después hacer la impresión del mismo.</p>
<pre class="php" name="code">header('Content-type: text/xml');
echo $library-&gt;asXML();</pre>
<p>¿Para que sirve el método <strong>asXML()</strong>? regresa el contenido XML del objeto como una cadena, pero solo si lo llamamos sin argumentos. La otra opción, que sin duda es la qué podria darnos mas usabilidad es llamarlo con un parametro que contendría una ruta a un archivo, el cual se escribirá con el contenido XML del objeto. El método <strong>asXML($string)</strong> regresará un valor de tipo boolean dependiendo del resultado de la operación.</p>
<p>¿Cómo escribir entonces un archivo XML? Supongamos que, una vez agregado el nuevo libro a nuestro archivo de libros queremos guardar los cambios. Lo único que habría que hacer es:</p>
<pre class="php" name="code">$library-&gt;asXML('library.xml');</pre>
<p>Y listo, si escribimos el nombre de un archivo que no existe, se crea automaticamente y si ya existe se sobrescribe.</p>
<p><strong>¿Cómo eliminar ahora elementos y atributos de un documento XML?</strong></p>
<p>SimpleXMLElement, no provee ningun metodo para hacerlo, sin embargo sí hay una forma de eliminar hijos. Supongamos que quiero eliminar el libro que acabo de agregar. Como es el elemento <em>book</em> número 6, solo hay que destruir el objeto que pertenece a ese hijo:</p>
<pre class="php" name="code">$library-&gt;book[5] = null;</pre>
<p>El cinco es porque los elementos empiezan a contarse desde cero. Sin embargo, hay un inconveniente; esto solo eliminara a los hijos del elemento book y a sus respectivos atributos, pero los atributos que haya al nivel de <em>book</em> permaneceran ahi. Por lo que el atributo <em>isbn</em> seguirá existiendo. Si lo igualamos a <em>null,</em> solo conseguiremos vaciar su valor pero dejando intacto al atributo.</p>
<p>Para remover efectivamente hijos y atributos, debemos exportar el objeto <strong>SimpleXMLElement</strong> a DOM, donde las funcionalidades de PHP5 para manipular los datos se hacen más poderosas. Hablaré de ello después&#8230;</p>
<p>Espero que este microtutorial sea de utilidad para quien necesite <strong>manipular datos XML con PHP 5</strong>.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Cómo acceder a los datos de XML en PHP</title>
		<link>http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/</link>
		<comments>http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 03:44:33 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Microtutoriales]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[simplexmlelement]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2007/como-acceder-a-los-datos-de-xml-en-php/</guid>
		<description><![CDATA[Bien, ahora si dedicaré una entrada completa al manejo de XML en PHP5. Veremos un ejemplo fácil y de paso servirá como explicación al funcionamiento de plugin que muestra la foto astronómica del día. Lo primero de lo que hay que asegurarnos es de que el XML que vamos a parsear es válido. Esto significa que debe estar bien formado (un sólo elemento raíz, etiquetas abiertas y cerradas correctamente, anidaciones [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-medium wp-image-1290" title="php-xml" src="http://www.microplagio.com/imgs/2007/11/php-xml-480x480.jpg" alt="" width="200" height="200" />Bien, ahora si dedicaré una entrada completa al <strong>manejo de XML en PHP5</strong>. Veremos un ejemplo fácil y de paso servirá como explicación al funcionamiento de <a href="http://www.microplagio.com/articulos/2007/plugin-mostrar-foto-astronomica-del-dia/">plugin que muestra la foto astronómica del día</a>.</p>
<p>Lo primero de lo que hay que asegurarnos es de que el XML que vamos a parsear es válido. Esto significa que debe estar bien formado (un sólo elemento raíz, etiquetas abiertas y cerradas correctamente, anidaciones válidas, etc) y debe obedecer a un <a href="http://es.wikipedia.org/wiki/DTD">DTD</a>. Después de segurarnos de esto, lo que sigue es trabajar sobre PHP5.</p>
<p>¿Por qué PHP5? por dos razones, una, nos da una orientación a objetos más eficiente que a versión 4 y, dos, nos provee de la extensión <strong>SimpleXMLElement</strong> que es con la trabajaremos el XML. ¿A caso PHP4 no tiene extensiones que hagan lo mismo? No lo sé, ni me interesa. PHP5 es mejor.</p>
<p>Bien, empecemos. Supongamos que tenemos un archivo XML llamado <code>library.xml</code> con el siguiente contenido:</p>
<pre class="xml" name="code">&lt;?xml version="1.0" ?&gt;
&lt;library&gt;
	&lt;book isbn="0345342968"&gt;
		&lt;title&gt;Fahrenheit 451&lt;/title&gt;
		&lt;author&gt;R. Bradbury&lt;/author&gt;
		&lt;publisher&gt;Del Rey&lt;/publisher&gt;
	&lt;/book&gt;
	&lt;book isbn="0048231398"&gt;
		&lt;title&gt;The Silmarillion&lt;/title&gt;
		&lt;author&gt;J.R.R. Tolkien&lt;/author&gt;
		&lt;publisher&gt;G. Allen &amp; Unwin&lt;/publisher&gt;
	&lt;/book&gt;
	&lt;book isbn="0451524934"&gt;
		&lt;title&gt;1984&lt;/title&gt;
		&lt;author&gt;G. Orwell&lt;/author&gt;
		&lt;publisher&gt;Signet&lt;/publisher&gt;
	&lt;/book&gt;
	&lt;book isbn="031219126X"&gt;
		&lt;title&gt;Frankenstein&lt;/title&gt;
		&lt;author&gt;M. Shelley&lt;/author&gt;
		&lt;publisher&gt;Bedford&lt;/publisher&gt;
	&lt;/book&gt;
	&lt;book isbn="0312863551"&gt;
		&lt;title&gt;The Moon Is a Harsh Mistress&lt;/title&gt;
		&lt;author&gt;R. A. Heinlein&lt;/author&gt;
		&lt;publisher&gt;Orb&lt;/publisher&gt;
	&lt;/book&gt;
&lt;/library&gt;</pre>
<p>Y supongamos que lo que queremos hacer es una tabla con todos los libros y sus respectivos datos:</p>
<table border="1">
<tbody>
<tr>
<th>Title</th>
<th>Author</th>
<th>Publisher</th>
<th>ISBN</th>
</tr>
<tr>
<td>Fahrenheit 451</td>
<td>R. Bradbury</td>
<td>Del Rey</td>
<td>0345342968</td>
</tr>
<tr>
<td>The Silmarillion</td>
<td>J.R.R. Tolkien</td>
<td>G. Allen &amp; Unwin</td>
<td>0048231398</td>
</tr>
<tr>
<td>1984</td>
<td>G. Orwell</td>
<td>Signet</td>
<td>0451524934</td>
</tr>
<tr>
<td>Frankenstein</td>
<td>M. Shelley</td>
<td>Bedford</td>
<td>031219126X</td>
</tr>
<tr>
<td>The Moon Is a Harsh Mistress</td>
<td>R. A. Heinlein</td>
<td>Orb</td>
<td>0312863551</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>Para lograrlo debemos hacer una instancia de la clase <strong>SimpleXMLElement</strong>. El constructor recibe 5 parámetros aunque solo nos interesan 2 (el primero y el tercero). El primero es donde indicamos la dirección URL del archivo XML o la cadena XML en cuestión. El segundo argumento no tiene aplicación práctica para este ejemplo y el tercero es solo para informar al constructor que (en este caso particular) el primer parámetro es una ruta a un archivo y no una cadena XML.</p>
<pre class="php" name="code">// Carga un archivo XML
$library = new SimpleXMLElement('library.xml', null, true);</pre>
<p>Aquí viene lo interesante, el acceso a los hijos y atributos. He aquí por qué SimpleXMLElement hace magia; convierte a todos los nodos del árbol XML en atributos de clase y los atributos del XML mismo los convierte en variables a las que podemos acceder como arreglos asociativos.</p>
<p>Si hasta aquí todo va claro, entonces ya tenemos las bases para manipular de forma sencilla el archivo de la biblioteca para mostrar los libros en una tabla. Y nos debería quedar algo así:</p>
<pre class="php" name="code">echo '&lt;table&gt;';
echo '&lt;tr&gt;';
echo   '&lt;th&gt;Title&lt;/th&gt;
        &lt;th&gt;Author&lt;/th&gt;
        &lt;th&gt;Publisher&lt;/th&gt;
        &lt;th&gt;ISBN&lt;/th&gt;';
echo '&lt;/tr&gt;';
foreach( $library-&gt;book as $book ) {
	echo '&lt;tr&gt;';
	echo '&lt;td&gt;' . $book-&gt;title . '&lt;/td&gt;';
	echo '&lt;td&gt;' . $book-&gt;author . '&lt;/td&gt;';
	echo '&lt;td&gt;' . $book-&gt;publisher . '&lt;/td&gt;';
	echo '&lt;td&gt;' . $book['isbn'] . '&lt;/td&gt;';
	echo '&lt;/tr&gt;';
}
echo '&lt;/table&gt;';</pre>
<p>El problema ahora sería, ¿qué pasa si no conocemos todos los nombres de los elementos ni los atributos? <strong>SimpleXMLElement</strong> tiene la solución. Los métodos <code>SimpleXMLElement::children()</code> y <code>SimpleXMLElement::attributes()</code> así como el método recien introducido en PHP5.1.3 <code>SimpleXMLElement::getName()</code> nos ayudarán en gran medida.</p>
<p>Como bien se sobreentiende, el método <code>children()</code> regresa los nodos hijos de elemento actual. El método <code>attributes()</code> regresa los atributos del elemento actual y el método <code>getName()</code> el nombre del elemento actual. Todos se pueden aplicar recurrentemente dependiendo del nivel de anidación de los elementos. Es decir, si estamos en el elemento <code>$x</code>, y llamamos a <code>$x-&gt;children()</code> obtendremos a los hijos de <code>$x</code>, y si a uno de esos hijos le aplicamos el <code>children()</code> obtendremos los <code>nietos</code> de <code>$x</code>, y así sucesivamente.</p>
<p>De modo que, para concluir, el plugin que hice solo lee el feed, saco el nodo hijo <code>&lt;item&gt;</code> del elemento raíz que es <code>&lt;channel&gt;</code> llamándolo así:</p>
<pre class="php" name="code">$item = $apod-&gt;channel-&gt;item[0];</pre>
<p>La posición cero indica que es el primer <code>item</code> del documento, es decir, el elemento con el cual se ha actualizado el feed. Y con ese elemento trabajo para obtener los demás datos. Por ejemplo, si la descripción es un elemento hijo de cada item, la obtengo así:</p>
<pre class="php" name="code">$descripcion = $apod-&gt;channel-&gt;item[0]-&gt;description;</pre>
<p>Hasta aquí llega el microtutorial de hoy que ha servido para ver cómo parsear una cadena de XML para leerla nada más. La próxima semana escribiré cómo modificar documentos XML.</p>
<p><strong>Fuente de inspiración:</strong> El <a href="http://www.zend.com/en/store/php-certification/study-guide">manual para certificación de Zend PHP</a>.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Manejo de errores en PHP</title>
		<link>http://www.microplagio.com/articulos/manejo-de-errores-en-php/</link>
		<comments>http://www.microplagio.com/articulos/manejo-de-errores-en-php/#comments</comments>
		<pubDate>Mon, 23 Jul 2007 20:36:33 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Microtutoriales]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2007/manejo-de-errores-en-php/</guid>
		<description><![CDATA[Si lo que buscabas era manejo de excepciones con try-catch, entonces no es este tu lugar. Aquí explicaré brevemente cómo manejar errores en PHP. ¿Cuál es la diferencia? Bueno, con excepciones lo que se quiere controlar es el comportamiento de nuestra aplicación validando que todo salga como se planeó por ejemplo: validar que una división nunca se haga por cero, hacer algo si falla una conexion a una base de [...]]]></description>
			<content:encoded><![CDATA[<p>Si lo que buscabas era <strong>manejo de excepciones</strong> con <em>try-catch</em>, entonces no es este tu lugar. Aquí explicaré brevemente cómo <strong>manejar errores en PHP</strong>. ¿Cuál es la diferencia? Bueno, con excepciones lo que se quiere controlar es el comportamiento de nuestra aplicación validando que todo salga como se planeó por ejemplo: validar que una división nunca se haga por cero, hacer algo si falla una conexion a una base de datos entre otras. Mientras que los errores a los que nos enfocaremos aquí serán <strong>errores de parsing</strong>. Los errores de parsing pueden ser de léxico, sintácticos o semánticos.</p>
<p>Por ejemplo un <strong>error de léxico</strong> podría ser al escribir mal alguna sentencia de control:</p>
<pre class="php">
$x = 1;
whle ( $x &lt; 10 ) {
	echo $x;
	$x++;
}
</pre>
<p><code>El error en <strong>whle</strong> detendrá la ejecución.</code></p>
<p>Un ejemplo de <strong>error sintáctico</strong> sería cuando nos falta algo o le pusimos algo de más a nuestro código, algo de lo que el parser se quejaría.</p>
<pre class="php">
while ( $x &lt; 10 ) {
	echo $x
	$x++;
}
</pre>
<p><code>La falta del punto-y-coma provocará un error fatal.</code></p>
<p>Por último, un error de semántica se da cuando algo en el código no tiene lógica. Por ejemplo:</p>
<pre class="php">
$x = 10;
while ( $x == 'hola' ) {
	echo $x;
	$x++;
}
</pre>
<p><code>No se puede comparar un entero con un string.</code></p>
<p>A veces movemos y movemos el código y sin querer dejamos &#8220;huecos&#8221; y &#8220;cosas repetidas&#8221; y al probar nuestra aplicación o simple página nos damos cuenta de que tenemos muchos errores. Si estamos en fase de desarrollo entonces esto nos va muy bien porque así podemos estar arreglando todo mientras vamos descubriendo los errores. Pero y ¿si el &#8220;trabajo&#8221; no era para nosotros sino para agluien mas?</p>
<p>La solución es usar la directiva de reporte de errores de PHP. Con ellas, y como desarrolladores de un sistema creado en PHP tenemos la habilidad de decidir si el usuario final puede o no ver los errores. Algunas configuraciones de los errores anteriormente mencionado se hacen en el archivo de configuración <strong>php.ini</strong>. Algunas de las <a href="http://www.php.net/manual/es/ref.errorfunc.php">funciones mas importantes</a> son: <strong>error_reporting</strong>, <strong>display_errors</strong> y <strong>log_errors</strong>.</p>
<p>La función <a href="http://www.php.net/error_reporting">error_reporting()</a> recibe un entero como parámetro y retorna otro entero. Los valores que recibe vienen dados en constantes predefinidas de PHP y el valor retornado es el antiguo nivel de reporte.</p>
<p>Por ejemplo, cuando estamos desarrollando es bueno conocer todos los errores. A veces usamos una variable sin definirla primero (PHP no se queja de ellos, pero aunque no lo creas eso produce un error de tipo E-NOTICE). Todos estos tipos de errores que por defecto no se muestran porque PHP4 y PHP5 vienen preconfigurados así:</p>
<pre class="php">
	error_reporting( E_ALL &#038; ~E_NOTICE );
</pre>
<p>Lo que significa que va a <strong>reportar todos menos noticias</strong>. Puedes configurarlo para que aparezcan las noticias simplemente llamando a error_repoting y mandandole como parámetro E-ALL.</p>
<pre class="php">
	error_reporting( E_ALL );
</pre>
<p>En el <a href="http://www.php.net/manual/es/ref.errorfunc.php">registro de funciones y gestión de errores</a> de php.net encontramos una explicación más amplia de todos los posibles valores. Ahora bien, ¿cómo ocultamos todos los errores? Simplemente poniendo un cero como parámetro:</p>
<pre class="php">
	error_reporting( 0 );
</pre>
<p>En ambientes de producción, no es recomendable que el cliente pueda ver los errores o bugs que probablemente van a aparecer. Para ocultarlos y llevar un registro de ellos podemos establecer el reporte de errores a cero y además podemos configurar nuestro <strong>php.ini</strong> para que guarde un registro de errores al que podemos acceder más tarde y arreglarlos sin que el usuario final se dé cuenta. En el <strong>php.ini</strong> solo encenderiamos la directiva <strong>log_errors</strong>, para que qude así:</p>
<pre>
	log_errors = on;
</pre>
<p>En fín, son muchas las posibilidades, aquí solo muestro las más fáciles y comunes. Después haré un microtutorial para el <strong>manejo de excepciones en PHP</strong>, claro, orientado a objetos.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/manejo-de-errores-en-php/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Pilas en PHP</title>
		<link>http://www.microplagio.com/articulos/pilas-en-php/</link>
		<comments>http://www.microplagio.com/articulos/pilas-en-php/#comments</comments>
		<pubDate>Sat, 26 May 2007 06:16:27 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Microtutoriales]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[pilas]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2007/pilas-en-php/</guid>
		<description><![CDATA[Las pilas son estructuras de datos muy prácticas y que nos sirven para infinidad de aplicaciones. Dentro del desarrollo web no me ha tocado verles tanta utilidad como en aplicaciones de escritorio sin embargo las hay y en este microtutorial veremos como implementarlas en PHP. Lo primero que hay que saber es que una pila -tanto en PHP como en Java y cualquier lenguaje- no es más que un arreglo [...]]]></description>
			<content:encoded><![CDATA[<p>Las <a href="http://es.wikipedia.org/wiki/Pila_%28programaci%C3%B3n%29">pilas</a> son <a href="http://es.wikipedia.org/wiki/Estructura_de_datos">estructuras de datos</a> muy prácticas y que nos sirven para infinidad de aplicaciones. Dentro del desarrollo web no me ha tocado verles tanta utilidad como en aplicaciones de escritorio sin embargo las hay y en este microtutorial veremos como implementarlas en PHP.</p>
<p>Lo primero que hay que saber es que una pila -tanto en PHP como en Java y cualquier lenguaje- no es más que un arreglo de elementos que funciona mediante la filosofía <acronym title="Last in, First out : Ultimo en entrar, Primero en salir">LIFO</acronym>. Entonces para usar una pila en PHP primero hay que tener un arreglo creado.</p>
<p>Podemos crearlo e inicializarlo o simplemente crearlo con la funcion array de esta manera.</p>
<pre class="php">
$arreglo1 = array();
$arreglo2 = array( $dato1 , $dato 2 , $dato3 );
</pre>
<p>Bien, ya que tenemos un array las funciones que PHP nos da para manipular la pila son <a href="http://www.php.net/manual/es/function.array-push.php">array_push()</a> y <a href="http://www.php.net/manual/es/function.array-pop.php">array_pop()</a> que sirven para insertar un elemento y retirar un elemento del arreglo respectivamente. Un ejemplo típico de uso de una pila es verificar si una palabra dada es palíndromo. Palíndromo es aquella palabra que leída de derecha a izquierda es igual que de izquierda a derecha.</p>
<p>Para hacer esto necesitamos tomar la palabra que queremos verificar. Luego hay que meter cada caracter a un arreglo y posteriormente sacar cada caracter en orden inverso a como se metieron y concatenarlo a otra cadena. Una vez vaciado el arreglo comparamos la palabra original y la cadena que creamos al vaciar el arreglo, si son iguales, la palabra es un palíndromo.</p>
<p>Esta sería la función PHP que comprueba si una palabra es palíndromo o no.</p>
<pre class="php">
function es_palindromo( $word ) {
	$cadena = "";
	$pila = array();

	for ( $i = 0; $i< count( $word ); $i++ ) {
		array_push( $pila , substr($word,$i,$i+1) );
	}
	while ( count( $pila ) > 0 ) {
		$cadena .= array_pop( $pila );
	}
	return ( $word == $cadena );
}
</pre>
<p>Como se ve, <code>array_push( $pila , $dato )</code> unicamente inserta en el arreglo o pila especificado el elemento dado, y es de tipo entero ya que regresa el número de elementos que contiene la pila (aunque en este caso no es necesario saberlo). <code>array_pop( $pila )</code> extrae de la pila que se especifica el último elemento y lo regresa. Nótese que en el ciclo <code>while</code> la condición es que mientras el tamaño de la pila sea mayor a cero. Esto bien podría ser así: <code>while (count($pila))</code> y ya, la diferencia es que esto consume más tiempo de ejecución ya que es más lento verificar que un elemento exista a hacer una comparación.</p>
<p>Ok, aqui termino, el código no lo chequé, creo que debe funcionar porque no le veo ningún error de <a href="http://es.wikipedia.org/wiki/Parser">parsing</a>, pero equivocarse en algún código es lo más común de nosotros los programadores ademas Boltzmann lo tiene más que comprobado. Si hay errores o dudas sobre cómo implementarlo, dejen comentarios.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/variables-de-servidor-de-php/" title="Variables de servidor de PHP">Variables de servidor de PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/pilas-en-php/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Variables de servidor de PHP</title>
		<link>http://www.microplagio.com/articulos/variables-de-servidor-de-php/</link>
		<comments>http://www.microplagio.com/articulos/variables-de-servidor-de-php/#comments</comments>
		<pubDate>Tue, 22 May 2007 23:01:05 +0000</pubDate>
		<dc:creator>Abel</dc:creator>
				<category><![CDATA[Microtutoriales]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programacion]]></category>
		<category><![CDATA[ser]]></category>

		<guid isPermaLink="false">http://www.microplagio.com/articulos/2007/variables-de-servidor-de-php/</guid>
		<description><![CDATA[Cuando hacemos un sitio web utilizando tecnologías PHP a veces es necesario hacer uso de algunos datos del servidor o del cliente y dado que la naturaleza de lenguaje es de servidor entonces podemos obtener de ahí toda esa información. ¿Qué funciones de PHP podemos usar? Nos enfocaremos en una serie de variables que juntas pueden darnos acceso a información sobre nuestro servidor y sobre el cliente. La información de [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://static.php.net/www.php.net/images/php.gif" alt="PHP" class="alignleft"/>Cuando hacemos un sitio web utilizando tecnologías <acronym title="PHP Hyertext Preprocessor">PHP</acronym> a veces es necesario hacer uso de algunos datos del servidor o del cliente y dado que la naturaleza de lenguaje es de servidor entonces podemos obtener de ahí toda esa información.</p>
<p>¿Qué funciones de PHP podemos usar? Nos enfocaremos en una serie de variables que juntas pueden darnos acceso a información sobre nuestro servidor y sobre el cliente. La información de estas variables es atribuida por el servidor y en ningún caso nos es posible modificar sus valores directamente mediante el script. Para hacerlo es necesario influir directamente sobre la propiedad que definen.</p>
<p>La variable que examinaremos es <strong>$_SERVER[]</strong> que es una matriz que contiene información tal como cabeceras, rutas y ubicaciones de scripts. Las entradas de esta matriz son creadas por el servidor web.</p>
<p>Estas son algunos elementos de la matriz, solo destacaremos los más importantes:</p>
<p><code><strong>$_SERVER['PHP_SELF']	</strong><br />
// El nombre de archivo del script ejecutándose actualmente<br />
<strong>$_SERVER['SERVER_ADDR']</strong><br />
//La dirección IP del servidor bajo la cual está siendo ejecutado el script actual.<br />
<strong>$_SERVER['QUERY_STRING']</strong><br />
// La cadena de consulta, si existe, mediante la cual se accedió a la página.<br />
<strong>$_SERVER['HTTP_REFERER']</strong><br />
// La dirección de la página que refirió al navegador a la página actual.<br />
<strong>$_SERVER['HTTP_USER_AGENT']</strong><br />
// Esta es una cadena que denota el navegador que está accediendo a la página.<br />
<strong>$_SERVER['REMOTE_ADDR']</strong><br />
// La dirección IP desde donde el usuario está observado la página actual.<br />
<strong>$_SERVER['SCRIPT_NAME']</strong><br />
// Contiene la ruta del script actual, útil para páginas que necesitan apuntar a ellas mismas.<br />
<strong>$_SERVER['REQUEST_URI']</strong><br />
// El URI que fue dado para acceder a esta página; por ejemplo, '/index.php?id=1'.<br />
</code></p>
<p>Todas las anteriores son cadenas, puedes ver muchas más en la clase <a href="http://www.eslomas.com/index.php/archives/2005/06/28/informacion-peticion-web-php-con-httprequest/">HttpRequest</a>  y un ejemplo de uso en el archivo de pruebas de la misma clase. Repito, estas son solo las variables de servidor, aún quedan las variables de petición, las de sesiones, las de entorno, etc.</p>
<p>La clase <a href="http://www.eslomas.com/index.php/archives/2005/06/28/informacion-peticion-web-php-con-httprequest/">HttpRequest</a>, la consigues en <a href="http://www.eslomas.com/">EsLoMas</a>.</p>
<ul class="related_post"><li><a href="http://www.microplagio.com/articulos/clase-para-manejar-base-de-datos-mysql-en-php/" title="Clase para manejar base de datos MySQL en PHP">Clase para manejar base de datos MySQL en PHP</a></li><li><a href="http://www.microplagio.com/articulos/metodo-de-gauss-en-php/" title="Método de Gauss en PHP">Método de Gauss en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-modificar-documentos-xml-con-php/" title="Cómo modificar documentos XML con PHP">Cómo modificar documentos XML con PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-acceder-a-los-datos-de-xml-en-php/" title="Cómo acceder a los datos de XML en PHP">Cómo acceder a los datos de XML en PHP</a></li><li><a href="http://www.microplagio.com/articulos/manejo-de-errores-en-php/" title="Manejo de errores en PHP">Manejo de errores en PHP</a></li><li><a href="http://www.microplagio.com/articulos/pilas-en-php/" title="Pilas en PHP">Pilas en PHP</a></li><li><a href="http://www.microplagio.com/articulos/como-obtener-todos-los-comentarios-y-replies-de-facebook-con-fql/" title="Cómo obtener todos los comentarios y replies de Facebook con FQL">Cómo obtener todos los comentarios y replies de Facebook con FQL</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.microplagio.com/articulos/variables-de-servidor-de-php/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

