<?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>voragine.net &#187; PHP</title>
	<atom:link href="http://voragine.net/etiquetas/php/feed" rel="self" type="application/rss+xml" />
	<link>http://voragine.net</link>
	<description>Autonomía digital y tecnológica.</description>
	<lastBuildDate>Fri, 04 May 2012 17:37:02 +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>Mostrar errores en PHP</title>
		<link>http://voragine.net/scripting/mostrar-errores-en-php</link>
		<comments>http://voragine.net/scripting/mostrar-errores-en-php#comments</comments>
		<pubDate>Sun, 12 Feb 2012 18:04:18 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Breves]]></category>
		<category><![CDATA[Scripting y programación]]></category>
		<category><![CDATA[display_errors]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[php.ini]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=891</guid>
		<description><![CDATA[Al instalar PHP en nuestro servidor, los errores vienen desactivados, de manera que no se muestran en el navegador al ejecutar PHP. <strong><a title="Disable php warning message -- Foros Daniweb" href="http://www.daniweb.com/web-development/php/threads/307610">Para que aparezcan</a></strong> basta asignar <code>On</code> como valor a la opción <code>display_errors</code> del archivo <code>php.ini</code>.]]></description>
			<content:encoded><![CDATA[<p>Al instalar PHP en nuestro servidor, los errores vienen desactivados, de manera que no se muestran en el navegador al ejecutar PHP. <strong><a title="Disable php warning message -- Foros Daniweb" href="http://www.daniweb.com/web-development/php/threads/307610">Para que aparezcan</a></strong> basta asignar <code>On</code> como valor a la opción <code>display_errors</code> del archivo <code>php.ini</code>:</p>
<pre class="brush: php; title: ; notranslate">display_errors = On</pre>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/scripting/mostrar-errores-en-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cuidado con los espacios en blanco al usar getimagesize: error failed to open stream</title>
		<link>http://voragine.net/weblogs/cuidado-con-los-espacios-en-blanco-al-usar-getimagesize-error-failed-to-open-stream</link>
		<comments>http://voragine.net/weblogs/cuidado-con-los-espacios-en-blanco-al-usar-getimagesize-error-failed-to-open-stream#comments</comments>
		<pubDate>Wed, 08 Feb 2012 15:49:04 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[getsizeimage]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[rtrim]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=889</guid>
		<description><![CDATA[La función <strong><a title="getimagesize -- Php.net" href="http://php.net/manual/es/function.getimagesize.php">getsizeimage</a></strong> de PHP devuelve una matriz con información sobre una imagen: sus dimensiones, el tipo de imagen... Muy útil para hacer redimensiones o saber si está dentro de los límites de tamaño que queremos manejar en nuestra página, por ejemplo. La tenemos que alimentar con la ruta hasta el archivo, incluyendo el nombre completo.

Para usarla sólo hay que tener presente que el nombre del archivo de imagen tiene que ser una cadena <strong>sin espacios al principio o al final</strong>.]]></description>
			<content:encoded><![CDATA[<p>La función <strong><a title="getimagesize -- Php.net" href="http://php.net/manual/es/function.getimagesize.php">getsizeimage</a></strong> de PHP devuelve una matriz con información sobre una imagen: sus dimensiones, el tipo de imagen&#8230; Muy útil para hacer redimensiones o saber si está dentro de los límites de tamaño que queremos manejar en nuestra página, por ejemplo. La tenemos que alimentar con la ruta hasta el archivo, incluyendo el nombre completo.</p>
<p>El uso básico es el siguiente:</p>
<pre class="brush: php; title: ; notranslate">
$img_data = getimagesize($image);
</pre>
<p>Para usarla sólo hay que tener presente que el nombre del archivo de imagen tiene que ser una cadena <strong>sin espacios al principio o al final</strong>; de no ser así, PHP nos devolverá el siguiente error:</p>
<pre class="brush: xml; title: ; notranslate">
Warning: getimagesize(imagen.jpg ) [function.getimagesize]: failed to open stream: No such file or directory...
</pre>
<p>Con un poco de atención, algo que no he tenido los dos últimos días, se puede detectar que en el mensaje de error, dentro del paréntesis, tras el nombre de la imagen hay un espacio. Esto es lo que está provocando que no encuentre la imagen.</p>
<p>Para evitar que los espacios nos vuelvan locos podemos usar <strong><a title="rtrim -- Php.net" href="http://www.php.net/manual/en/function.rtrim.php">rtrim</a></strong>, que elimina espacios en blanco al principio y al final de una cadena antes de procesarla:</p>
<pre class="brush: php; title: ; notranslate">
$img_data = getimagesize(rtrim($image));
</pre>
<p>Lo encontré buceando en el <a title="Getimagesize loop only checks first image? -- sitepoint.com" href="http://www.sitepoint.com/forums/showthread.php?441905-Getimagesize-loop-only-checks-first-image">código de sitepoint</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/weblogs/cuidado-con-los-espacios-en-blanco-al-usar-getimagesize-error-failed-to-open-stream/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo ejecutar PHP periódicamente con cron en un servidor Linux</title>
		<link>http://voragine.net/weblogs/como-ejecutar-php-periodicamente-con-cron-en-un-servidor-linux</link>
		<comments>http://voragine.net/weblogs/como-ejecutar-php-periodicamente-con-cron-en-un-servidor-linux#comments</comments>
		<pubDate>Sat, 31 Dec 2011 07:00:23 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[Scripting y programación]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=866</guid>
		<description><![CDATA[Primero tenemos que tener la posibilidad de <strong><a title="Usando PHP desde la línea de comandos -- php.net" href="http://php.net/manual/es/features.commandline.php">ejecutar un script PHP desde la línea de comandos</a></strong>, o en su defecto <a title="Ejecutar scripts PHP automáticamente desde el cron con CURL -- programacion.com" href="http://www.programacion.com/articulo/ejecutar_scripts_php_automaticamente_desde_el_cron_con_curl_302">ejecutarlo con curl</a>; en este tutorial lo haremos ejecutando el PHP directamente en la línea de comandos sin curl. Luego tenemos que generar el archivo PHP, y un script sh que ejecute el script PHP. Por último, <strong><a title="MANUAL BÁSICO DE CRON -- linuxtotal.com.mx" href="http://www.linuxtotal.com.mx/index.php?cont=info_admon_006">configuraremos cron para que ejecute el script de bash con la periodicidad que necesitemos</a></strong>.]]></description>
			<content:encoded><![CDATA[<p>Primero tenemos que tener la posibilidad de <strong><a title="Usando PHP desde la línea de comandos -- php.net" href="http://php.net/manual/es/features.commandline.php">ejecutar un script PHP desde la línea de comandos</a></strong>, o en su defecto <a title="Ejecutar scripts PHP automáticamente desde el cron con CURL -- programacion.com" href="http://www.programacion.com/articulo/ejecutar_scripts_php_automaticamente_desde_el_cron_con_curl_302">ejecutarlo con curl</a>; en este tutorial lo haremos ejecutando el PHP directamente en la línea de comandos sin curl. Luego tenemos que generar el archivo PHP, y un script sh que ejecute el script PHP. Por último, <strong><a title="MANUAL BÁSICO DE CRON -- linuxtotal.com.mx" href="http://www.linuxtotal.com.mx/index.php?cont=info_admon_006">configuraremos cron para que ejecute el script de bash con la periodicidad que necesitemos</a></strong>.</p>
<p>Para ejecutar un script PHP en la línea de comandos necesitamos tener instalado el paquete <code>php5-cli</code>, como root.</p>
<pre class="brush: bash; title: ; notranslate">apt-get install php5-cli</pre>
<p>La sintaxis para ejecutar un script PHP es la siguiente:</p>
<pre class="brush: bash; title: ; notranslate">php file.php</pre>
<p>Generamos un script PHP mínimo, <a title="PHP to save data to a text file -- http://board.flashkit.com" href="http://board.flashkit.com/board/showthread.php?t=491680">que escribirá una línea en un archivo de texto plano cada vez que se ejecute</a>, y lo llamamos por ejemplo <code>test.cron.php</code>; el archivo se alojará en el mismo directorio que los scripts.</p>
<pre class="brush: php; title: ; notranslate">$time = date(&quot;G:i:s&quot;);
$entry = &quot;Información guardada a las $time.\n&quot;;
$file = &quot;/var/www/testdir/test.cron.txt&quot;;
$open = fopen($file,&quot;a&quot;);

if ( $open ) {
	fwrite($open,$entry);
	fclose($open);
}</pre>
<p>Para que al ejecutar el script con cron no nos dé el error <code>Could not open input file: test.cron.php</code>, es recomendable especificar la ruta completa al archivo PHP. Si el error que obtenemos está relacionado con <code>open_basedir restriction</code> tenemos que definir la variable <code>open_basedir</code> en el archivo <code><a title="Descripción de las directivas del núcleo de php.ini -- php.net" href="http://php.net/manual/es/ini.core.php">/etc/php5/cli/php.ini</a></code> y asignarle como valor la ruta del directorio donde se encuentre el script PHP, como root, <a title="open_basedir restriction in effect -- forosdelweb.com" href="http://www.linuxtotal.com.mx/index.php?cont=info_admon_006">importante el punto final</a>:</p>
<pre class="brush: bash; title: ; notranslate">open_basedir = /var/www/testdir/.</pre>
<p>Luego reiniciamos el servidor apache, como root:</p>
<pre class="brush: bash; title: ; notranslate">/etc/init.d/apache restart</pre>
<p>Creamos ahora un script de bash que ejecute el script PHP; lo llamamos por ejemplo <code>test.cron.sh</code>:</p>
<pre class="brush: bash; title: ; notranslate">#!/bin/sh
php /var/www/testdir/test.cron.php</pre>
<p>Es importante la primera línea que le dice al sistema el tipo de shell que debe usar para ejecutar el script. La shell tiene que ser la misma que almacena la variable <code>SHELL</code> del archivo <code>/etc/crontab</code>, <code>/bin/sh</code> en mi caso.</p>
<p>Por último, <strong><a title="MANUAL BÁSICO DE CRON -- linuxtotal.com.mx" href="http://www.linuxtotal.com.mx/index.php?cont=info_admon_006">configuramos cron</a></strong>, tras asegurarnos de que el demonio crond está corriendo. Básicamente necesitamos decirle a cron qué script queremos ejecutar y con qué periodicidad. Podemos hacerlo editando el archivo <code>/etc/crontab</code>, añadiéndole la siguiente línea, a continuación de las reglas ya existentes, como root:</p>
<pre class="brush: bash; title: ; notranslate">*/15 * * * * usuario /var/www/testdir/./test.cron.sh</pre>
<p>En este caso, el script <code>/var/www/testdir/./test.cron.sh</code> se ejecutará cada quince minutos. Es importante que el <code>usuario</code> tenga suficientes permisos para leer y ejecutar el script.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/weblogs/como-ejecutar-php-periodicamente-con-cron-en-un-servidor-linux/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo transformar el formato de un flujo RSS, mediante DOM, para poder usarlo libremente con PHP</title>
		<link>http://voragine.net/weblogs/como-transformar-el-formato-de-un-flujo-rss-mediante-dom-para-poder-usarlo-libremente-con-php</link>
		<comments>http://voragine.net/weblogs/como-transformar-el-formato-de-un-flujo-rss-mediante-dom-para-poder-usarlo-libremente-con-php#comments</comments>
		<pubDate>Wed, 14 Dec 2011 18:38:49 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=854</guid>
		<description><![CDATA[RSS o Really Simple Syndication es una simplificación de XML. Mediante DOM (Document Object Model) podemos transformar cualquier flujo XML en una matriz multidimensional con la que podremos operar fácilmente en PHP.]]></description>
			<content:encoded><![CDATA[<p>RSS o Really Simple Syndication es una simplificación de XML. Mediante DOM (Document Object Model) podemos transformar cualquier flujo XML en una matriz multidimensional con la que podremos operar fácilmente en PHP.</p>
<p>Tomemos como ejemplo un XML de los últimos tweets de un usuario de Twitter, <a title="skotperez en twitter" href="http://twitter.com/skotperez">@skotperez</a> en este caso. Podemos <a title="How to follow a Twitter account feed using RSS Reader in New Twitter -- God, Your Book Is Great !!" href="http://saravananthirumuruganathan.wordpress.com/2011/05/29/how-to-follow-a-twitter-account-feed-using-rss-reader-in-new-twitter/">extraer esta información gracias a la API de Twitter</a>.</p>
<p><code><a href="https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=skotperez">https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=skotperez</a></code></p>
<p>Una vez que tenemos el feed lo <strong><a title="How to parse RSS feeds with PHP -- Software 51" href="http://www.softarea51.com/tutorials/parse_rss_with_php.html">podemos manipular con DOM y almacenar el resultado en una variable</a></strong>, <code>$arrFeeds</code> en este caso:</p>
<pre class="brush: php; title: ; notranslate">
$feed_url = &quot;https://api.twitter.com/1/statuses/user_timeline.rss?screen_name=skotperez&quot;;
$doc = new DOMDocument();
$doc-&gt;load($feed_url);
$arrFeeds = array();
foreach ($doc-&gt;getElementsByTagName('item') as $node) {
  $itemRSS = array (
    'title' =&gt; $node-&gt;getElementsByTagName('title')-&gt;item(0)-&gt;nodeValue,
    'desc' =&gt; $node-&gt;getElementsByTagName('description')-&gt;item(0)-&gt;nodeValue,
    'link' =&gt; $node-&gt;getElementsByTagName('link')-&gt;item(0)-&gt;nodeValue,
    'date' =&gt; $node-&gt;getElementsByTagName('pubDate')-&gt;item(0)-&gt;nodeValue
  );
  array_push($arrFeeds, $itemRSS);
}
</pre>
<p>Luego podemos hacer correr un loop a lo largo de los elementos de la matriz para obtener la información que queramos:</p>
<pre class="brush: php; title: ; notranslate">
foreach ( $arrFeeds as $tw ) {
  echo $tw['date'];
  echo &quot;&lt;br /&gt;&quot;;
  echo $tw['desc'];
  echo &quot;&lt;br /&gt;&quot;;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/weblogs/como-transformar-el-formato-de-un-flujo-rss-mediante-dom-para-poder-usarlo-libremente-con-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo generar dinámicamente una hoja de estilos CSS mediante PHP para variar de manera aleatoria los colores</title>
		<link>http://voragine.net/weblogs/como-generar-dinamicamente-una-hoja-de-estilos-css-mediante-php-para-variar-de-manera-aleatoria-los-colores</link>
		<comments>http://voragine.net/weblogs/como-generar-dinamicamente-una-hoja-de-estilos-css-mediante-php-para-variar-de-manera-aleatoria-los-colores#comments</comments>
		<pubDate>Sun, 02 Oct 2011 08:36:11 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[colores aleatorios]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[hoja de estilos dinámica]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=634</guid>
		<description><![CDATA[PHP se usa frecuentemente para generar HTML, pero rara vez para <a title="CSS Colors: Take Control Using PHP -- BarelyFitz Designs" href="http://www.barelyfitz.com/projects/csscolor/">construir de manera dinámica una hoja de estilos CSS</a>. Mediante el uso de variables en las hojas de estilos CSS gestionadas por PHP, podemos crear patrones de diseño abiertos, para luego usarlos según convenga, por ejemplo para <strong>variar de manera aleatoria los colores de una web</strong>.]]></description>
			<content:encoded><![CDATA[<p>PHP se usa frecuentemente para generar HTML, pero rara vez para <a title="CSS Colors: Take Control Using PHP -- BarelyFitz Designs" href="http://www.barelyfitz.com/projects/csscolor/">construir de manera dinámica una hoja de estilos CSS</a>. Mediante el uso de variables en las hojas de estilos CSS gestionadas por PHP, podemos crear patrones de diseño abiertos, para luego usarlos según convenga, por ejemplo para <strong>variar de manera aleatoria los colores de una web</strong>.</p>
<p>Basta agrupar los estilos que queramos que dependan de variables, los colores en este caso, en un archivo PHP, <code>style.php</code> por ejemplo, que albergará además el código que seleccionará aleatoriamente un color diferente cada vez que se cargue la web.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// la siguiente línea indica al navegador que lea el archivo como una hoja de estilos
header(&quot;Content-type: text/css&quot;);

// matriz de colores
$colors = array('#f00','#0f0','#00f','#f0f','#ff0','#0ff');
// seleccionamos aleatoriamente un elemento de la matriz
$color_key = array_rand($colors, 1);
$color = $colors[$color_key];
?&gt;
</pre>
<p>La variable $color contiene el código hexadecimal del color elegido, que podemos usar en los estilos que nos convenga, incluyéndolos en el mismo archivo <code>style.php</code>.</p>
<pre class="brush: php; title: ; notranslate">
.clase1,
.clase2,
#identificador1 {
 color: &lt;?php echo $color ?&gt;
}
</pre>
<p>Para cargar la hoja de estilos style.php, incluimos en el <code><head></code> de nuestra web la línea:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; media=&quot;screen&quot; href=&quot;style.php&quot;&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/weblogs/como-generar-dinamicamente-una-hoja-de-estilos-css-mediante-php-para-variar-de-manera-aleatoria-los-colores/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Cómo detectar con PHP si el visitante de una web la está viendo con Internet Explorer</title>
		<link>http://voragine.net/weblogs/como-detectar-con-php-si-el-visitante-de-una-web-la-esta-viendo-con-internet-explorer</link>
		<comments>http://voragine.net/weblogs/como-detectar-con-php-si-el-visitante-de-una-web-la-esta-viendo-con-internet-explorer#comments</comments>
		<pubDate>Fri, 04 Feb 2011 07:26:06 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[IExplorer]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=531</guid>
		<description><![CDATA[Para conseguirlo utilizaremos la información guardada en la varialble <code>$_SERVER</code>, concretamente el elemento <code>HTTP_USER_AGENT</code>. Este elemento guarda un código que identifica el navegador del visitante y su versión. <a title="Internet Explorer -- Internet Explorer User Agent Strings" href="http://www.useragentstring.com/pages/Internet%20Explorer/"><strong>En el caso de Internet Explorer el código es MSIE</strong></a>, y para detectar por ejemplo la versión 6, en cualquiera de sus subversiones, el código es MSIE 6.]]></description>
			<content:encoded><![CDATA[<p>Para conseguirlo utilizaremos la información guardada en la varialble <code>$_SERVER</code>, concretamente el elemento <code>HTTP_USER_AGENT</code>. Este elemento guarda un código que identifica el navegador del visitante y su versión. <a title="Internet Explorer -- Internet Explorer User Agent Strings" href="http://www.useragentstring.com/pages/Internet%20Explorer/"><strong>En el caso de Internet Explorer el código es MSIE</strong></a>, y para detectar por ejemplo la versión 6, en cualquiera de sus subversiones, el código es MSIE 6. Para utilizarlo en cualquier lugar de nuestro código podemos crear una función:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php function detect_ie6() {
 if (isset($_SERVER['HTTP_USER_AGENT']) &amp;&amp; (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false))
   return true;
 else
   return false;
} ?&gt;
</pre>
<p>En el código basta invocar la función dentro de una sentencia condicional:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
 $detect_ie = detect_ie6();
 if ( $detect_ie == 'true' ) { $imago = &quot;imago.gif&quot;; }
 else { $imago = &quot;imago.png&quot;; }
?&gt;
</pre>
<p>Código encontrado en <a title="How to detect Internet Explorer with PHP -- Any Example" href="http://www.anyexample.com/programming/php/how_to_detect_internet_explorer_with_php.xml"><em>Any Example</em></a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/weblogs/como-detectar-con-php-si-el-visitante-de-una-web-la-esta-viendo-con-internet-explorer/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cómo pasar variables de una página a otra en una web con PHP</title>
		<link>http://voragine.net/weblogs/como-pasar-variables-de-una-pagina-a-otra-en-una-web-con-php</link>
		<comments>http://voragine.net/weblogs/como-pasar-variables-de-una-pagina-a-otra-en-una-web-con-php#comments</comments>
		<pubDate>Tue, 04 Jan 2011 16:32:24 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[$_GET]]></category>
		<category><![CDATA[$_POST]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=484</guid>
		<description><![CDATA[Hay dos métodos para pasar variables de una página a otra: utilizando un formulario o mediante la URL. Cada uno tiene una manera de recuperar los datos en la página de destino, el primero mediante el uso de la variable global <code>$_POST</code>, el segundo mediente <code>$_GET</code>.

Utilizaremos el primer método cuando tengamos que usar un formulario para que el usuario introduzca algún valor, como por ejemplo en un formulario de búsqueda o en uno de contacto que permita enviar un mensaje. Utilizaremos el segundo cuando sean variables que no dependan en absoluto de la interacción del usuario, sino que sencillamente queramos transferir de una página a otra.]]></description>
			<content:encoded><![CDATA[<p>Hay dos métodos para pasar variables de una página a otra: utilizando un formulario o mediante la URL. Cada uno tiene una manera de recuperar los datos en la página de destino, el primero mediante el uso de la variable global <code>$_POST</code>, el segundo mediente <code>$_GET</code>.</p>
<p>Utilizaremos el primer método cuando tengamos que usar un formulario para que el usuario introduzca algún valor, como por ejemplo en un formulario de búsqueda o en uno de contacto que permita enviar un mensaje. Utilizaremos el segundo cuando sean variables que no dependan en absoluto de la interacción del usuario, sino que sencillamente queramos transferir de una página a otra.</p>
<h3>Paso de variables mediante formulario y <code>$_POST</code></h3>
<p>En la página de origen construiremos un formulario. <strong>Transferiremos a la página de destino las variables deseadas mediante la marca <code>input</code> de tipo <code>hidden</code></strong>, con el atributo <code>name</code> las definiremos, y con el atributo <code>value</code> les asignaremos un valor.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form action=&quot;http://url.pagina.destino&quot; method=&quot;post&quot;&gt;
 &lt;input type=&quot;hidden&quot; name=&quot;variable1&quot; value=&quot;valor1&quot; /&gt;
 &lt;input type=&quot;hidden&quot; name=&quot;variable2&quot; value=&quot;valor2&quot; /&gt;
 &lt;input type=&quot;text&quot; value=&quot;&quot; /&gt;
 &lt;input type=&quot;submit&quot; value=&quot;Buscar&quot; /&gt;
&lt;/form&gt;
</pre>
<p>Para recuperar las variables en la página dedestino bastará utilizar la variable global $_POST:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$v1 = $_POST['variable1'];
$v2 = $_POST['variable2'];
?&gt;
</pre>
<h3>Paso de variables mediante URL y <code>$_GET</code></h3>
<p>En la página de origen construiremos un enlace a la página de destino que incluya las variables a transferir, de la siguiente manera:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;a href=&quot;http://url.pagina.destino/?variable1=valor1&amp;variable2=valor2&quot;&gt;Enlace a página de destino&lt;/a&gt;
</pre>
<p>Para recuperar las variables en la página dedestino bastará utilizar la variable global $_POST:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$v1 = $_GET['variable1'];
$v2 = $_GET['variable2'];
?&gt;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/weblogs/como-pasar-variables-de-una-pagina-a-otra-en-una-web-con-php/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Cómo hacer un formulario de contacto con PHP</title>
		<link>http://voragine.net/weblogs/como-hacer-un-formulario-de-contacto-con-php</link>
		<comments>http://voragine.net/weblogs/como-hacer-un-formulario-de-contacto-con-php#comments</comments>
		<pubDate>Mon, 13 Sep 2010 17:12:26 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[Desarrollo web]]></category>
		<category><![CDATA[formulario de contacto]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=428</guid>
		<description><![CDATA[El procedimiento es sencillo, y una vez que se tiene un formulario convenientemente diseñado, con los campos bien nombrados con el atributo <code>name</code>, basta pasarle a la orden <code>mail</code> de PHP lo que un usuario introduce en el formulario.]]></description>
			<content:encoded><![CDATA[<p>El procedimiento es sencillo, y una vez que se tiene un formulario convenientemente diseñado, con los campos bien nombrados con el atributo <code>name</code>, basta pasarle a la orden <code>mail</code> de PHP lo que un usuario introduce en el formulario. Un ejemplo de formulario podría ser el siguiente:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form action='http://url.pagina.envio' method='post' name='contactForm'&gt;

   &lt;input name='nombre' value='nombre' onblur='if(this.value == &quot;&quot;) {this.value =&quot;nombre&quot;;}' onfocus='if(this.value == &quot;nombre&quot;) {this.value = &quot;&quot;;}' /&gt;

   &lt;input name='email' value='email' onblur='if(this.value == &quot;&quot;) {this.value =&quot;email&quot;;}' onfocus='if(this.value == &quot;email&quot;) {this.value = &quot;&quot;;}' /&gt;

   &lt;input name='asunto' value='Asunto' onblur='if(this.value == &quot;&quot;) {this.value =&quot;Asunto&quot;;}' onfocus='if(this.value == &quot;Asunto&quot;) {this.value = &quot;&quot;;}' /&gt;

   &lt;textarea rows='5' cols='45' name='mensaje' onblur='if(this.value == &quot;&quot;) {this.value =&quot;Mensaje&quot;;}' onfocus='if(this.value == &quot;Mensaje&quot;) {this.value = &quot;&quot;;}'&gt;Mensaje&lt;/textarea&gt;

   &lt;input type='submit' name='enviar' value='Enviar' /&gt;

&lt;/form&gt;
</pre>
<p>A menos que utilicemos AJAX necesitaremos dos páginas, una que contendrá el formulario y otra que recibirá los datos introducidos en él, los enviará a la orden mail y devolverá en pantalla el mensaje adecuado de que el correo ha sido enviado. Para acceder de la primera a la segunda asignaremos como valor la URL de la segunda página al atributo <code>action</code> del formulario. A recordar:</p>
<pre class="brush: xml; title: ; notranslate">
action='http://url.pagina.envio'
name='nombre'
name='email'
name='asunto'
name='mensaje'
</pre>
<p>En la segunda página recogeremos la información enviada por la primera, y enviaremos el correo con la orden mail de PHP.</p>
<p>Para lo primero utilizaremos el sistema de envío de datos entre páginas de PHP, <code>POST</code>. Supongamos que tenemos que recoger los valores de los campos <code>nombre</code>, <code>mail</code>, <code>asunto</code> y <code>mensaje</code>, que hemos nombrado convenientemente mediante el atributo <code>name</code> en la página del formulario.</p>
<pre class="brush: php; title: ; notranslate">
$nombre = $_POST['nombre'];
$mail = $_POST['email'];
$asunto = $_POST['asunto'];
$mensaje = $_POST['mensaje'];
</pre>
<p>Igualmente creamos las variables que contendrán la dirección del destinatario, las cabeceras del correo e información adicional en el cuerpo del mensaje:</p>
<pre class="brush: php; title: ; notranslate">
$header = 'From: ' . $mail . &quot; \r\n&quot;;
$header .= &quot;X-Mailer: PHP/&quot; . phpversion() . &quot; \r\n&quot;;
$header .= &quot;Mime-Version: 1.0 \r\n&quot;;
$header .= &quot;Content-Type: text/plain&quot;;

$mensaje = &quot;Este mensaje fue enviado por &quot; . $nombre . &quot; \r\n&quot;;
$mensaje .= &quot;Su e-mail es: &quot; . $mail . &quot; \r\n&quot;;
$mensaje .= &quot;Mensaje: &quot; . $_POST['mensaje'] . &quot; \r\n&quot;;
$mensaje .= &quot;Enviado el &quot; . date('d/m/Y', time());

$destino = 'info@tusitio.com';
</pre>
<p>Por último pasaremos a la orden mail toda la información que necesita para enviar el mensaje:</p>
<pre class="brush: php; title: ; notranslate">
mail($destino, $asunto, utf8_decode($mensaje), $header);
</pre>
<p>Para más información puedes consultar un <a title="Envio de Formulario de Contacto con PHP -- Taller Webmaster" href="http://www.tallerwebmaster.com/tutorial/formulario-de-contacto-enviar-mail-con-php/43/">tutorial más extenso en tallerwebmaster</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/weblogs/como-hacer-un-formulario-de-contacto-con-php/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>El contenido de un post no aparece después de darle a publicar. ¿Qué pasa con mi WordPress?</title>
		<link>http://voragine.net/wordpress/el-contenido-de-un-post-no-aparece-despues-de-darle-a-publicar-%c2%bfque-pasa-con-mi-wordpress</link>
		<comments>http://voragine.net/wordpress/el-contenido-de-un-post-no-aparece-despues-de-darle-a-publicar-%c2%bfque-pasa-con-mi-wordpress#comments</comments>
		<pubDate>Tue, 26 Jan 2010 16:57:15 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=314</guid>
		<description><![CDATA[Pues puede deberse a que el post es demasiado largo, en realidad que contiene demasiada información. No sé cual es la cantidad de kilobytes máxima pero la hay. Cuando una entrada o una página superan el máximo en el campo contenido, la información se guardan en base de datos pero al hacer la petición a [...]]]></description>
			<content:encoded><![CDATA[<p>Pues puede deberse a que el post es demasiado largo, en realidad que contiene demasiada información. No sé cual es la cantidad de kilobytes máxima pero la hay. Cuando una entrada o una página superan el máximo en el campo contenido, la información se guardan en base de datos pero al hacer la petición a ésta no se muestra.</p>
<p>El síntoma para detectar que es esto lo que está pasando es que si hemos usado la etiqueta <code>more</code>, el post nos aparece en portada hasta la etiqueta <code>more</code>, pero no completo en su página individual.</p>
<p>Según <a href="http://wordpress.org/support/topic/176939" title="[resolved] Text and content doesn't show up in post after publishing">un hilo de los foros de wordpress.org</a>, el paquete WordPress incluye un filtro que limita el contenido de los posts y las páginas.</p>
<p>Una solución para  anular este filtro es editar el archivo <code>wp-includes/default-filters.php</code> y comentando la línea <code>add_filter('the_content', 'wpautop');</code>. El problema con ella es que la próxima vez que actualicemos WordPress perderemos el cambio.</p>
<p>Si seguimos leyendo el hilo proponen instalar un plugin para poder incluir código PHP en el contenido de un post o una página. Es una solución riesgosa, ya que no he encontrado plugin alguno que permita hacer una lista de usuarios autorizados para hacer esta operación, con lo que si tienes el registro de usuarios abierto no se te ocurra instalar algo así.</p>
<p>Una vez instalado el plugin, yo he elegido <a href="http://wordpress.org/extend/plugins/inline-php/" title="Inline PHP -- WordPress">Inline PHP</a>, basta añadir al principio del post la siguiente línea:</p>
<p><code>&lt;?php remove_filter('the_content', 'wpautop'); ?&gt;</code></p>
<p>La solución más segura aunque algo más elaborada, es meter esta sentencia de PHP en el código del archivo <code>single.php</code> mediante una sentencia condicional que discrimine los posts en los que es necesaria, mediante su ID. Aunque claro, cada vez que se dé esta situación, se tiene que editar <code>single.php</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/el-contenido-de-un-post-no-aparece-despues-de-darle-a-publicar-%c2%bfque-pasa-con-mi-wordpress/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Comparar fechas en PHP. Contenido con caducidad en WordPress</title>
		<link>http://voragine.net/wordpress/comparar-fechas-en-php-contenido-con-caducidad-en-wordpress</link>
		<comments>http://voragine.net/wordpress/comparar-fechas-en-php-contenido-con-caducidad-en-wordpress#comments</comments>
		<pubDate>Mon, 29 Dec 2008 13:11:03 +0000</pubDate>
		<dc:creator>skotperez</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[campos personalizados]]></category>
		<category><![CDATA[custom fields]]></category>
		<category><![CDATA[fecha de caducidad]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[sentencia condicional]]></category>

		<guid isPermaLink="false">http://voragine.net/?p=145</guid>
		<description><![CDATA[Cómo comparar dos fechas con PHP de cara a utilizar el resultado en una sentencia condicional, por ejemplo para crear contenido con fecha de caducidad; y cómo aplicar esto luego en WordPress para distinguir entre entradas vigentes y pasadas.]]></description>
			<content:encoded><![CDATA[<p>Cómo <strong>comparar dos fechas</strong> de cara a utilizar el resultado en una sentencia condicional, por ejemplo para crear contenido con fecha de caducidad:</p>
<p><code>$exp_date = "2006-01-16";<br />
$todays_date = date("Y-m-d");$today = strtotime($todays_date);<br />
$expiration_date = strtotime($exp_date);</code></p>
<p><code>if ($expiration_date &gt; $today) {<br />
código a mostrar si el contenido está vigente<br />
} else {<br />
código a mostrar si el contenido está pasado<br />
}</code></p>
<p><small>Lo vi en <a title="Comparing dates in PHP -- Highly Structured" href="http://www.highlystructured.com/comparing_dates_php.html">Highly Structured</a>.</small></p>
<p>Esto lo podemos usar en WordPress para <strong>definir la fecha de caducidad del contenido</strong>, y así aplicarle un estilo a las entradas vigentes y otro a las pasadas, o mostrar en un sitio las vigentes y en otro las pasadas. Para ello podemos usar los <a title="Custom Fields de WordPress -- voragine.net" href="http://voragine.net/breves/custom-fields-de-wordpress">campos personalizados</a>. Lo que tenemos que hacer es crear un campo personalizado que alimentará la variable que contiene la fecha de caducidad, <code>exp_date</code> en este caso; lo llamaremos <em>caducidad</em>. Y por último preparar la variable <code>exp_date</code> para que coja el valor del campo personalizado de cada entrada:</p>
<p><code>$exp_date = get_post_meta($post-&gt;ID, "caducidad", $single = true);</code></p>
<p>Lo más útil es meter después cada caso de la sentencia condicional en su propio <a title="The Loop -- wordpress.org" href="http://codex.wordpress.org/The_Loop">loop</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://voragine.net/wordpress/comparar-fechas-en-php-contenido-con-caducidad-en-wordpress/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

