<?xml version="1.0" encoding="UTF-8"?>
<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>Jose María Flores Zazo (MAD 1977) &#187; PHP</title>
	<atom:link href="http://jmfloreszazo.com/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://jmfloreszazo.com</link>
	<description>digital creative &#38; software developer - creativo digital &#38; desarrollador de software</description>
	<lastBuildDate>Tue, 07 Sep 2010 07:58:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Expresiones Regulares</title>
		<link>http://jmfloreszazo.com/expresiones-regulares/</link>
		<comments>http://jmfloreszazo.com/expresiones-regulares/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 07:58:31 +0000</pubDate>
		<dc:creator>Jose María Flores Zazo</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Tecnologías]]></category>

		<guid isPermaLink="false">http://jmfloreszazo.com/?p=1501</guid>
		<description><![CDATA[Me tengo que recordar a mi mismo cada cierto tiempo que es mejor usar EXPRESIONES REGULARES que usar un buscar y reemplazar o que es mejor usar EXPRESIONES REGULARES para validar una dirección de correo, teléfono, dirección, etc. que preparar un algoritmo para comprobar las diversas casuísticas. ¿Por qué tiendo a olvidar esta forma de [...]<p><a href="http://jmfloreszazo.com/expresiones-regulares/">Expresiones Regulares</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://jmfloreszazo.com/resources/img/categorias/desarrollol.jpg" alt="" width="588" /></p>
<p>Me tengo que recordar a mi mismo cada cierto tiempo que es mejor usar <a title="Ver informacion en Wikipedia" href="http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular" target="_blank">EXPRESIONES REGULARES</a> que usar un buscar y reemplazar o que es mejor usar <a title="Ver informacion en Wikipedia" href="http://es.wikipedia.org/wiki/Expresi%C3%B3n_regular" target="_blank">EXPRESIONES REGULARES</a> para validar una dirección de correo, teléfono, dirección, etc. que preparar un algoritmo para comprobar las diversas casuísticas.</p>
<p><em>¿Por qué tiendo a olvidar esta forma de programar?</em> Pues no lo se y a muchos compañeros de profesión cuando se lo pregunto o bien les pasa lo mismo que a mí o bien ni conocen esta herramienta.</p>
<p>Si deseas más información al respecto, dejo el siguiente enlace: <a title="Ir al Sitio" href="http://www.regular-expressions.info/" target="_blank">Regular-Expresion.Info</a>.</p>
<p>Y un ejemplo de código que demuestra su potencia:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//PHP -&gt; La Fecha coincide con los formatos del tipo DD/MM/YYYY, DD-MM-YY,...</span>
<span style="color: #000088;">$date</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;03/02/1977&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$p</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;!^(<span style="color: #000099; font-weight: bold;">\\</span>d<span style="color: #000099; font-weight: bold;">\\</span>d)[-/](<span style="color: #000099; font-weight: bold;">\\</span>d<span style="color: #000099; font-weight: bold;">\\</span>d)[-/](<span style="color: #000099; font-weight: bold;">\\</span>d<span style="color: #000099; font-weight: bold;">\\</span>d(?:<span style="color: #000099; font-weight: bold;">\\</span>d<span style="color: #000099; font-weight: bold;">\\</span>d)?)$!&quot;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$p</span><span style="color: #339933;">,</span><span style="color: #000088;">$date</span><span style="color: #339933;">,</span><span style="color: #000088;">$matches</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
  <span style="color: #000088;">$month</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$day</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">2</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$year</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$matches</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">3</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="csharp" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">//C# -&gt; Convertir &lt;br&gt; a &lt;br /&gt; para Compatibilidad XHTML</span>
<span style="color: #0600FF;">using</span> <span style="color: #008080;">System.Text.RegularExpressions</span><span style="color: #008000;">;</span>
<span style="color: #FF0000;">class</span> Test
<span style="color: #000000;">&#123;</span>
  <span style="color: #0600FF;">static</span> <span style="color: #0600FF;">void</span> Main<span style="color: #000000;">&#40;</span> <span style="color: #000000;">&#41;</span>
  <span style="color: #000000;">&#123;</span>
    <span style="color: #FF0000;">string</span> t <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;Hello world. &lt;br&gt;&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #FF0000;">string</span> f <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;br&gt;&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #FF0000;">string</span> r <span style="color: #008000;">=</span> <span style="color: #666666;">&quot;&lt;br /&gt;&quot;</span><span style="color: #008000;">;</span>
    <span style="color: #FF0000;">string</span> result <span style="color: #008000;">=</span> Regex.<span style="color: #0000FF;">Replace</span><span style="color: #000000;">&#40;</span>t, f, r, RegexOptions.<span style="color: #0000FF;">IgnoreCase</span><span style="color: #000000;">&#41;</span> <span style="color: #008000;">;</span>
  <span style="color: #000000;">&#125;</span>
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>Y aquí algunas de las verificaciones más comunes:</p>

<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">Para direccions IP separadas por puntos: 
&nbsp;
    /^(\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4] \d|25[0-5])\.
    (\d|[01]?\d\d|2[0-4]\d|25[0-5])\.(\d|[01]?\d\d|2[0-4]\d|25[0-5])$/
&nbsp;
Coincide: 127.0.0.1, 192.10.1.101
&nbsp;
No Coincide: 127.1</pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="txt" style="font-family:monospace;">Para direcciones HTTP:
&nbsp;
    /(https?):\/\/([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)
    +[a-zA-Z]{2,9})(:\d{1,4})?([-\w\/#~:.?+=&amp;%@~]*)/
&nbsp;
Coincide: https://jmfloreszazo.com, http://localhot.com:8080/test.html
&nbsp;
No Coincide: ftp:/jmfloreszazo.com, ftp://jmfloreszazo.com/</pre></div></div>

<p>A ver si de una vez por todas no olvido pensar en esto antes de ir por el <em>camino fácil</em>.</p>
<p><a href="http://jmfloreszazo.com/expresiones-regulares/">Expresiones Regulares</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jmfloreszazo.com/expresiones-regulares/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Codime Instalaciones</title>
		<link>http://jmfloreszazo.com/codime-instalaciones/</link>
		<comments>http://jmfloreszazo.com/codime-instalaciones/#comments</comments>
		<pubDate>Mon, 30 Aug 2010 18:39:46 +0000</pubDate>
		<dc:creator>Jose María Flores Zazo</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Diseño]]></category>
		<category><![CDATA[Portafolios]]></category>
		<category><![CDATA[Implantación]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://jmfloreszazo.com/?p=1407</guid>
		<description><![CDATA[PERFIL DEL CLIENTE: CODIME INSTALACIONES, empresa especializada en Redes y Cableado y Instalaciones Eléctricas. TAREAS REALIZADAS: Diseño, creación, implantación y mantenimiento del sitio web. Posicionamiento del sitio web. IMÁGENES: Codime Instalaciones es una entrada de Jose Maria Flores Zazo<p><a href="http://jmfloreszazo.com/codime-instalaciones/">Codime Instalaciones</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img src="http://jmfloreszazo.com/resources/img/2010/08/portafolios0008.png" alt="" width="588" /></p>
<p><strong>PERFIL DEL CLIENTE:</strong></p>
<p style="padding-left: 30px;"><strong><a title="Ir al Sitio Web" href="http://www.codime.es/" target="_blank">CODIME INSTALACIONES</a></strong>, empresa especializada en <em>Redes y Cableado</em> y <em>Instalaciones Eléctricas</em>.</p>
<p><strong>TAREAS REALIZADAS:</strong></p>
<ul style="padding-left: 50px;">
<li>Diseño, creación, implantación y mantenimiento del <strong>sitio web</strong>.</li>
<li>Posicionamiento del sitio web.</li>
</ul>
<p><strong>IMÁGENES:</strong></p>
<div id="gallery-1" class="gallery galleryid-1407"><dl class="gallery-item"><dt class="gallery-icon"><a href='http://jmfloreszazo.com/resources/img/2010/08/CODIME-Instalaciones-Redes-Informáticas-e-Instalaciones-Eléctricas_3.png' title='CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas'><img width="150" height="150" src="http://jmfloreszazo.com/resources/img/2010/08/CODIME-Instalaciones-Redes-Informáticas-e-Instalaciones-Eléctricas_3-150x150.png" class="attachment-thumbnail" alt="CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas" title="CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas" /></a></dt></dl><dl class="gallery-item"><dt class="gallery-icon"><a href='http://jmfloreszazo.com/resources/img/2010/08/CODIME-Instalaciones-Redes-Informáticas-e-Instalaciones-Eléctricas_2.png' title='CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas'><img width="150" height="150" src="http://jmfloreszazo.com/resources/img/2010/08/CODIME-Instalaciones-Redes-Informáticas-e-Instalaciones-Eléctricas_2-150x150.png" class="attachment-thumbnail" alt="CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas" title="CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas" /></a></dt></dl><dl class="gallery-item"><dt class="gallery-icon"><a href='http://jmfloreszazo.com/resources/img/2010/08/CODIME-Instalaciones-Redes-Informáticas-e-Instalaciones-Eléctricas_1.png' title='CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas'><img width="150" height="150" src="http://jmfloreszazo.com/resources/img/2010/08/CODIME-Instalaciones-Redes-Informáticas-e-Instalaciones-Eléctricas_1-150x150.png" class="attachment-thumbnail" alt="CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas" title="CODIME Instalaciones - Redes Informáticas e Instalaciones Eléctricas" /></a></dt></dl><br style="clear: both;"/><br style="clear: both;"/></div>
<p><a href="http://jmfloreszazo.com/codime-instalaciones/">Codime Instalaciones</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jmfloreszazo.com/codime-instalaciones/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrar Flickr con WordPress</title>
		<link>http://jmfloreszazo.com/integrar-flickr-con-wordpress/</link>
		<comments>http://jmfloreszazo.com/integrar-flickr-con-wordpress/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 18:05:35 +0000</pubDate>
		<dc:creator>Jose María Flores Zazo</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Artículos]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://jmfloreszazo.com/?p=1062</guid>
		<description><![CDATA[A veces, un plugin de WordPress no hace lo que necesitas y es el momento en el que tienes que integrar algunas funcionalidades si esa ayuda. Principalmente es la integración con la galería de Flickr, bien sea para mostrarlas en HTML plano o para importarlo como XML para una funcionalidad Flash, es la que integro [...]<p><a href="http://jmfloreszazo.com/integrar-flickr-con-wordpress/">Integrar Flickr con WordPress</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://jmfloreszazo.com/resources/img/categorias/desarrollol.jpg" alt="" width="588" /></p>
<p>A veces, un plugin de <a title="Ir al Sitio Oficial" href="http://wordpress.org/" target="_blank">WordPress</a> no hace lo que necesitas y es el momento en el que tienes que integrar algunas funcionalidades si esa ayuda.</p>
<p>Principalmente es la integración con la galería de <a title="Ir a mi sitio de Flickr" href="http://www.flickr.com/photos/jmfloreszazo/" target="_blank">Flickr</a>, bien sea para mostrarlas en HTML plano o para importarlo como XML para una funcionalidad Flash, es la que integro en mayor medida.</p>
<p>En este caso enlazo el canal <strong>RSS de Flickr</strong> con la función <strong><em>fetch_feed()</em>.</strong></p>
<p>Primer paso, crear un fichero llamado <em><strong>link_with_flickr.php</strong></em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #000000; font-weight: bold;">class</span> flickr
  <span style="color: #009900;">&#123;</span>
    <span style="color: #666666; font-style: italic;">// Función que elimina la doble comilla que interfier en el HTML.</span>
    <span style="color: #000000; font-weight: bold;">function</span> cleanup<span style="color: #009900;">&#40;</span><span style="color: #000088;">$s</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">else</span>
      <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'&quot;'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">,</span> <span style="color: #000088;">$s</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">// Resolución de la fotografia.</span>
    <span style="color: #000000; font-weight: bold;">function</span> photo<span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #339933;">,</span> <span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
      <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$photo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array_pop</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$size</span><span style="color: #009900;">&#41;</span>
        <span style="color: #009900;">&#123;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'square'</span><span style="color: #339933;">:</span>
            <span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/(_(s|t|m|b))?\./i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'_s.'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$photo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'thumb'</span><span style="color: #339933;">:</span>
            <span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/(_(s|t|m|b))?\./i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'_t.'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$photo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
          <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'small'</span><span style="color: #339933;">:</span>
            <span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/(_(s|t|m|b))?\./i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'_m.'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$photo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
         <span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'large'</span><span style="color: #339933;">:</span>
           <span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/(_(s|t|m|b))?\./i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'_b.'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$photo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
           <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
         <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> <span style="color: #666666; font-style: italic;">// Medium</span>
           <span style="color: #000088;">$r</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/(_(s|t|m|b))?\./i'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'.'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$photo</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
           <span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
      <span style="color: #000088;">$url</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$r</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">return</span> <span style="color: #990000;">implode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">//Función que mira las descripciones y localiza la primera imagen.</span>
    <span style="color: #000000; font-weight: bold;">function</span> find_photo<span style="color: #009900;">&#40;</span><span style="color: #000088;">$data</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
        <span style="color: #990000;">preg_match_all</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/&amp;lt;img src=&quot;([^&quot;]*)&quot;([^&amp;gt;]*)&amp;gt;/i'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$data</span><span style="color: #339933;">,</span> <span style="color: #000088;">$m</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$m</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Segundo paso, integración con el tema, bien sea incluyendo este código en <em><strong>index.php</strong></em>, <em><strong>sidebar.php</strong></em>, …</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">  <span style="color: #666666; font-style: italic;">// Obtiene la dos datos desde el RSS</span>
  <span style="color: #b1b100;">include_once</span><span style="color: #009900;">&#40;</span>ABSPATH <span style="color: #339933;">.</span> WPINC <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/feed.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">include_once</span><span style="color: #009900;">&#40;</span>TEMPLATEPATH <span style="color: #339933;">.</span> <span style="color: #0000ff;">'/scripts/link_with_flickr.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$rss</span> <span style="color: #339933;">=</span> fetch_feed<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'tu-enlace-con-feed-de-flickr'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$thumb</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'square'</span><span style="color: #339933;">;</span>
  <span style="color: #000088;">$full</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'medium'</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// Maximo de imagenes a mostrar, en este caso 10.</span>
  <span style="color: #000088;">$maxitems</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$rss</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_item_quantity</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">// Cargar imagenes en el array, primer elemento es el 0.</span>
  <span style="color: #000088;">$rss_items</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$rss</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_items</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #000088;">$maxitems</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$maxitems</span> <span style="color: #339933;">==</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span>    
    <span style="color: #666666; font-style: italic;">//ToDo: Mostrar algo que indique al usuario que no tiene imagenes.</span>
  <span style="color: #b1b100;">else</span>
    <span style="color: #666666; font-style: italic;">// Bucle que obtiene y muestra las imagenes del RSS.</span>
    <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span> <span style="color: #000088;">$rss_items</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$item</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span>
      <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> flickr<span style="color: #339933;">::</span><span style="color: #004000;">find_photo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>get_description<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$title</span> <span style="color: #339933;">=</span> flickr<span style="color: #339933;">::</span><span style="color: #004000;">cleanup</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$item</span><span style="color: #339933;">-&amp;</span>gt<span style="color: #339933;">;</span>get_title<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$full_url</span> <span style="color: #339933;">=</span> flickr<span style="color: #339933;">::</span><span style="color: #004000;">photo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #339933;">,</span> <span style="color: #000088;">$full</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #000088;">$thumb_url</span> <span style="color: #339933;">=</span> flickr<span style="color: #339933;">::</span><span style="color: #004000;">photo</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #339933;">,</span> <span style="color: #000088;">$thumb</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      <span style="color: #666666; font-style: italic;">//ToDo: Mostrar la Imagen en el contenedor deseado.</span>
    <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Y el tercer y último paso,s ería configurar un aserie de parámetros y opciones.</p>
<p style="padding-left: 30px;">En el código anterior se debe cambiar <strong><em>tu-enlace-con-feed-de-flickr</em></strong> por la ruta de enlace con el <em><strong>RSS de Flickr</strong></em>. Esta ruta se encuentra en <em><strong>Photostream</strong></em> de tu cuenta Flirck, basta con copiar la ruta y pegarla en anterior código.</p>
<p style="padding-left: 30px;">Para mostrar una cantidad u otra de imágenes de tu <strong><em>Photostream</em></strong>, solo será necesario cambiar en la función <em><strong>get_item_quantity</strong></em> el valor del parámetro.</p>
<p style="padding-left: 30px;">Y en la secciones <strong>ToDo</strong>, cada desarrollador deberá asignar los datos a una imagen, a un visualizador flash, etc. etc.</p>
<p>Nota:</p>
<p>Uno de los recursos que utilizo para recordar la cantidad de funciones englobadas en WordPress, es <em>WordPress Visual Cheay Sheet</em> (pulsar <a href="http://woorkup.com/wp-content/uploads/2009/11/WordPress-Visual-Cheat-Sheet.pdf">aquí</a> para descargar), diseñador por <a href="http://woorkup.com/">Anotonio Lupetti</a>, es un documento englobado en una serie de ayudas que suele añadir y actualizar con cierta regularidad.</p>
<p><a href="http://jmfloreszazo.com/integrar-flickr-con-wordpress/">Integrar Flickr con WordPress</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jmfloreszazo.com/integrar-flickr-con-wordpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Inyección de SQL</title>
		<link>http://jmfloreszazo.com/inyeccion-de-sql/</link>
		<comments>http://jmfloreszazo.com/inyeccion-de-sql/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 10:00:54 +0000</pubDate>
		<dc:creator>Jose María Flores Zazo</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Artículos]]></category>
		<category><![CDATA[ASP.NET]]></category>
		<category><![CDATA[JAVA]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Seguridad]]></category>
		<category><![CDATA[SQL]]></category>
		<category><![CDATA[Tecnologías]]></category>
		<category><![CDATA[VB.Net]]></category>

		<guid isPermaLink="false">http://jmfloreszazo.com/?p=390</guid>
		<description><![CDATA[La vulnerabilidad más importante y que menos se tiene en cuenta a la hora de trabajar con bases de datos, es la inyección de sentencias SQL. Una inyección de SQL se da cuando se inserta una sentencia de SQL dentro de otra sentencia SQL, esta invasión, logra alterar el funcionamiento normal y permite la ejecución [...]<p><a href="http://jmfloreszazo.com/inyeccion-de-sql/">Inyección de SQL</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter" src="http://jmfloreszazo.com/resources/img/categorias/desarrollol.jpg" alt="" width="588" /></p>
<p>La vulnerabilidad más importante y que menos se tiene en cuenta a la hora de trabajar con bases de datos, es la inyección de sentencias SQL.</p>
<p><strong>Una inyección de SQL se da cuando se inserta una sentencia de SQL dentro de otra sentencia SQL, esta invasión, logra alterar el funcionamiento normal y permite la ejecución de código malintencionado.</strong></p>
<p>Este problema no puede considerarse como un problema de seguridad informática, es un problema derivado del programador, es un error de programación. Generalmente la falta e conocimientos, ignorancia sobre problemáticas de SQL o un simple descuido, dejarán una aplicación abierta a la entrada de código malicioso. El error se debe a la inexistencia de validación de los datos que han entrado desde una aplicación.</p>
<p>A continuación con un sencillo ejemplo, veremos en qué consiste la Inyección de SQL.</p>
<p>Supongamos que tenemos un portal de empleados en nuestra intranet (aplicación web) con una casilla donde el empleado debe poner su correspondiente código.</p>
<p>El uso normal de cualquier usuario bienintencionado es poner su código y su clave, para entrar en su sesión para realizar el trabajo diario. El de un usuario mal intencionado, con conocimientos de informática y habiendo detectado que es posible ejecutar código inyectado, podrá ser bien distinto.</p>
<p>Internamente el programa informático realiza una consulta similar a esta:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> Empleados <span style="color: #993333; font-weight: bold;">WHERE</span> Codigo_Empleado <span style="color: #66cc66;">=</span> <span style="color: #66cc66;">&#91;</span>Valor de la Casilla<span style="color: #66cc66;">&#93;</span></pre></td></tr></table></div>

<p>Cuando nuestro programa no está preparado para evitar código inyectado, el usuario malintencionado podría añadir en la casilla el siguiente valor:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="sql" style="font-family:monospace;"><span style="color: #66cc66;">&#91;</span>Valor de la Casilla<span style="color: #66cc66;">&#93;</span>; <span style="color: #993333; font-weight: bold;">DROP</span> <span style="color: #993333; font-weight: bold;">TABLE</span> Empleados;</pre></td></tr></table></div>

<p>Donde [Valor de la Casilla] seguiría siendo algo que espera el programa original, pero no lo que viene a continuación del “;”. En este caso habríamos borrado todos los datos de inicio de sesión de usuarios y sería imposible que en esa empresa algún trabajador desarrollar su labor diaria.</p>
<p>Como evitarlo en <a title="Sitio oficial de PHP" href="http://es2.php.net/" target="_blank"><strong>PHP</strong></a>:</p>
<p>Dependiendo del motor de base de datos que estemos usando, deberemos ir a la documentación para implementar esta protección. En el caso de MySQL, debemos usar la unción <a title="Ampliar información de la función" href="http://es2.php.net/mysql_real_escape_string" target="_blank">mysql_real_escape_string</a>.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$query_result</span> <span style="color: #339933;">=</span> <span style="color: #990000;">mysql_query</span>
<span style="color: #009900;">&#40;</span>
  <span style="color: #0000ff;">&quot;SELECT * FROM EMPLEADOS WHERE CodigoEmpleado = <span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>
  <span style="color: #990000;">mysql_real_escape_string</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$codigo_empleado</span><span style="color: #009900;">&#41;</span>
  <span style="color: #0000ff;">&quot;<span style="color: #000099; font-weight: bold;">\&quot;</span>&quot;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Como evitarlo en VISUAL STUDIO .NET (<a title="Sitio oficial de VB.NET" href="http://msdn.microsoft.com/es-es/vbasic/default.aspx" target="_blank"><strong>VB.NET</strong></a>):</p>
<p>En este lenguaje y derivados de la plataforma .NET, dependiendo del método de trabajo que usemos, podemos independizarnos del sistema gestor de bases de datos, es decir, es el lenguaje el encargado de validar las sentencias.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="vbnet" style="font-family:monospace;"><span style="color: #008080; font-style: italic;">'// Creamos una consulta</span>
<span style="color: #0600FF;">Dim</span> cmd <span style="color: #FF8000;">As</span> <span style="color: #FF8000;">New</span> SqlCommand<span style="color: #000000;">&#40;</span> _
  <span style="color: #808080;">&quot;SELECT * FROM EMPLEADOS &quot;</span> <span style="color: #008000;">&amp;</span>amp; _
  <span style="color: #808080;">&quot;WHERE CodigoEmpleado = @CodigoEmpleado&quot;</span>, cnn<span style="color: #000000;">&#41;</span>
<span style="color: #008080; font-style: italic;">'// Abrimos la conexión</span>
cnn.<span style="color: #0600FF;">Open</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>
<span style="color: #008080; font-style: italic;">'// Añadimos el valor del parámetro de la consulta</span>
cmd.<span style="color: #0000FF;">Parameters</span>.<span style="color: #0000FF;">AddWithValue</span><span style="color: #000000;">&#40;</span><span style="color: #808080;">&quot;@CodigoEmpleado&quot;</span>, txtCodigoEmpleado.<span style="color: #0000FF;">Text</span><span style="color: #000000;">&#41;</span></pre></td></tr></table></div>

<p>Como evitarlo en:</p>
<ul>
<li><a title="How To: Protect From SQL Injection in ASP.NET" href="http://msdn.microsoft.com/en-us/library/ms998271.aspx" target="_blank">ASP.NET</a></li>
<li><a title="Preventing SQL Injection in Java" href="http://www.owasp.org/index.php/Preventing_SQL_Injection_in_Java" target="_blank">JAVA</a></li>
</ul>
<p><a href="http://jmfloreszazo.com/inyeccion-de-sql/">Inyección de SQL</a> es una entrada de <a href="http://jmfloreszazo.com">Jose Maria Flores Zazo</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jmfloreszazo.com/inyeccion-de-sql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
