<?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>systemadmin.es</title>
	<atom:link href="http://systemadmin.es/feed" rel="self" type="application/rss+xml" />
	<link>http://systemadmin.es</link>
	<description>Tu referencia para la administración de sistemas</description>
	<lastBuildDate>Thu, 24 May 2012 07:51:38 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>php Easter Egg</title>
		<link>http://systemadmin.es/2012/05/php-easter-egg</link>
		<comments>http://systemadmin.es/2012/05/php-easter-egg#comments</comments>
		<pubDate>Thu, 24 May 2012 06:58:24 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3900</guid>
		<description><![CDATA[En el caso que tengamos habilitado el expose_php, podemos añadir una opción a cualquier PHP para que nos muestre una imagen escondida. La cadena es la siguiente: ?=PHPE9568F36-D428-11d2-A769-00AA001ACF42 En la versión de PHP 5.1 y 5.2 tenemos el siguiente logo: Mientras que en la versión de PHP 5.3 lo han cambiado por el siguiente: Si [...]]]></description>
			<content:encoded><![CDATA[<p>En el caso que tengamos <a href="/2009/01/como-eliminar-la-informacion-sobre-versiones-de-los-headers-http">habilitado el expose_php</a>, podemos añadir una <strong>opción a cualquier PHP</strong> para que nos muestre una imagen escondida. La cadena es la siguiente:</p>
<pre>
?=PHPE9568F36-D428-11d2-A769-00AA001ACF42
</pre>
<p><!-- more --></p>
<p>En la versión de <strong>PHP 5.1 y 5.2</strong> tenemos el siguiente logo:</p>
<div id="attachment_3901" class="wp-caption aligncenter" style="width: 130px"><a href="http://systemadmin.es/wp-content/uploads/2012/05/php-51-y-52-logo-easter-egg.gif"><img src="http://systemadmin.es/wp-content/uploads/2012/05/php-51-y-52-logo-easter-egg.gif" alt="Easter Egg PHP 5.1 y 5.2" title="Easter Egg PHP 5.1 y 5.2" width="120" height="67" class="size-full wp-image-3901" /></a><p class="wp-caption-text">Easter Egg PHP 5.1 y 5.2</p></div>
<p>Mientras que en la <strong>versión de PHP 5.3</strong> lo han cambiado por el siguiente:</p>
<div id="attachment_3902" class="wp-caption aligncenter" style="width: 130px"><a href="http://systemadmin.es/wp-content/uploads/2012/05/php-53-easter-egg-.gif"><img src="http://systemadmin.es/wp-content/uploads/2012/05/php-53-easter-egg-.gif" alt="Easter Egg PHP 5.3" title="Easter Egg PHP 5.3" width="120" height="67" class="size-full wp-image-3902" /></a><p class="wp-caption-text">Easter Egg PHP 5.3</p></div>
<p>Si buscamos la cadena por el código fuente veremos que se encuentra definida en:</p>
<pre>
ext/standard/info.h:#define PHP_EGG_LOGO_GUID	"PHPE9568F36-D428-11d2-A769-00AA001ACF42"
</pre>
<p>Dónde además podemos encontrar otras imágenes:</p>
<pre>
#define PHP_LOGO_GUID             "PHPE9568F34-D428-11d2-A769-00AA001ACF42"
#define PHP_EGG_LOGO_GUID       "PHPE9568F36-D428-11d2-A769-00AA001ACF42"
#define ZEND_LOGO_GUID          "PHPE9568F35-D428-11d2-A769-00AA001ACF42"
#define PHP_CREDITS_GUID  "PHPB8B5F2A0-3C92-11d3-A3A9-4C7B08C10000"
</pre>
<p>Además, podemos ver que se registra la imágen en <strong>main/php_logos.c</strong>:</p>
<pre>
main/php_logos.c:	php_register_info_logo(PHP_EGG_LOGO_GUID, "image/gif", php_egg_logo, sizeof(php_egg_logo));
</pre>
<p>Además de encontrar una función de PHP que nos indica la cadena para ver el <strong>easter egg</strong> en <strong>main/php_logos.c</strong>:</p>
<pre>
/* {{{ proto string php_egg_logo_guid(void)
   Return the special ID used to request the PHP logo in phpinfo screens*/
PHP_FUNCTION(php_egg_logo_guid)
{
        if (zend_parse_parameters_none() == FAILURE) {
                return;
        }

        RETURN_STRINGL(PHP_EGG_LOGO_GUID, sizeof(PHP_EGG_LOGO_GUID)-1, 1);
}
/* }}} */
</pre>
<p>Que al ejecutarla nos devuelve la cadena:</p>
<pre>
# php -r 'echo php_egg_logo_guid();'
PHPE9568F36-D428-11d2-A769-00AA001ACF42
</pre>
<p>Los logos en si, los podemos encontrar como un listado de bytes en el fichero <strong>main/logos.h</strong>:</p>
<pre>
static const unsigned char php_egg_logo[] = {
         71,  73,  70,  56,  57,  97, 120,   0,  67,   0,
        231, 255,   0,  18,  25,  33,  32,  30,  34,  28,
         33,  44,  15,  35,  71,   6,  37,  85,  37,  40,
         47,  34,  41,  53,  41,  40,  43,   9,  47, 109,
(...)
</pre>

	Tags: <a href="http://systemadmin.es/tag/php" title="PHP" rel="tag">PHP</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li><a href="http://systemadmin.es/2009/01/seguridad-en-php-deshabilitar-funciones" onclick="pageTracker._trackEvent('relacionados','1302');" title="Seguridad en PHP: deshabilitar funciones (25/January/2009)">Seguridad en PHP: deshabilitar funciones</a></li>
	<li><a href="http://systemadmin.es/2012/05/php_admin_value-y-php_admin_flag" onclick="pageTracker._trackEvent('relacionados','3885');" title="php_admin_value y php_admin_flag (11/May/2012)">php_admin_value y php_admin_flag</a></li>
	<li><a href="http://systemadmin.es/2009/05/php-configure-error-utf8_mime2text-has-new-signature-but-u8t_canonical-is-missing" onclick="pageTracker._trackEvent('relacionados','1705');" title="PHP: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing (14/May/2009)">PHP: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing</a></li>
	<li><a href="http://systemadmin.es/2011/08/ofuscacion-de-puertos-mediante-overflow-de-shorts" onclick="pageTracker._trackEvent('relacionados','3508');" title="Ofuscación de puertos mediante overflow de shorts (29/August/2011)">Ofuscación de puertos mediante overflow de shorts</a></li>
	<li><a href="http://systemadmin.es/2012/02/ofuscacion-con-rot13" onclick="pageTracker._trackEvent('relacionados','3705');" title="Ofuscación con ROT13 (3/February/2012)">Ofuscación con ROT13</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/php-easter-egg/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>xhprof de Facebook</title>
		<link>http://systemadmin.es/2012/05/xhprof-de-facebook</link>
		<comments>http://systemadmin.es/2012/05/xhprof-de-facebook#comments</comments>
		<pubDate>Tue, 22 May 2012 06:56:31 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[LAMP y web]]></category>
		<category><![CDATA[xhprof]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3862</guid>
		<description><![CDATA[xhprof es una extensión PECL desarrollada por el equipo de facebook para hacer profiling de aplicaciones PHP. Vamos a ver como instalarla: Se trata de una extensión en estado beta, por lo que la instalaremos con: pecl config-set preferred_state beta pecl install xhprof Creamos los directorios de ficheros temporales: mkdir -p /var/tmp/xhprof chown apache. /var/tmp/xhprof [...]]]></description>
			<content:encoded><![CDATA[<p><strong>xhprof</strong> es una <a href="https://github.com/facebook/xhprof">extensión PECL desarrollada por el equipo de facebook</a> para hacer <strong>profiling de aplicaciones PHP</strong>. Vamos a ver como instalarla:</p>
<p><!-- more --></p>
<p>Se trata de una extensión en <strong>estado beta</strong>, por lo que la instalaremos con:</p>
<pre>
pecl config-set preferred_state beta
pecl install xhprof
</pre>
<p>Creamos los directorios de ficheros temporales:</p>
<pre>
mkdir -p /var/tmp/xhprof
chown apache. /var/tmp/xhprof
</pre>
<p>Y habilitamos la <a href="/2012/03/buscar-el-fichero-de-configuracion-de-php">extensión en el php.ini</a>:</p>
<pre>
extension=xhprof.so
xhprof.output_dir="/var/tmp/xhprof"
</pre>
<p>Podemos comprobar que esta habilitada con un <strong>phpinfo</strong>:</p>
<pre>
# php -i | grep xhprof
xhprof
xhprof => 0.9.2
</pre>
<p>A continuación deberemos habilitar el profiling en el código PHP, según la <a href="http://fr.php.net/manual/en/xhprof.examples.php">documentación</a>. Al principio del código deberemos añadir la <a href="http://fr.php.net/manual/en/function.xhprof-enable.php">función xhprof_enable()</a> con los flags de lo que queremos incluir en el profiling:</p>
<pre>
&lt;?php
if (extension_loaded('xhprof')) {
  include_once '/usr/local/lib/php/xhprof_lib/utils/xhprof_lib.php';
  include_once '/usr/local/lib/php/xhprof_lib/utils/xhprof_runs.php';
  xhprof_enable(XHPROF_FLAGS_CPU + XHPROF_FLAGS_MEMORY);
}
</pre>
<p>A continuación tendremos el código y al final deberemos añadir el <strong>xhprof_disable()</strong> y almacenar el resultado de la ejecución con:</p>
<pre>
if (extension_loaded('xhprof')) {
  $xhprof_data = xhprof_disable();

  $XHPROF_ROOT = "/tools/xhprof/";
  include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_lib.php";
  include_once $XHPROF_ROOT . "/xhprof_lib/utils/xhprof_runs.php";

  $xhprof_runs = new XHProfRuns_Default();
  $run_id = $xhprof_runs->save_run($xhprof_data, "nombre_app");

  echo '&lt;a href="."http&#58;//xhprof.systemadmin.es/index.php?run={$run_id}&#038;source=xhprof_testing\n".'" target="_blank"&gt;Profiler output&lt;/a&gt;';
}
</pre>
<p>Deberemos añadir el siguiente <strong>VirtualHost</strong> para tener la <strong>GUI de xhprof</strong>:</p>
<pre>
&lt;VirtualHost *:80&gt;

    ServerName xhprof.comunidades.oficinas
    DocumentRoot /usr/local/lib/php/xhprof_html

    DirectoryIndex index.php index.html

    &lt;Directory /usr/local/lib/php/xhprof_html&gt;
        AllowOverRide all
        Options FollowSymLinks
	Require all granted
    &lt;/Directory&gt;

&lt;/VirtualHost&gt;
</pre>
<p>En el caso de <strong>CentOS 5</strong> veremos que nos dará el siguiente error:</p>
<pre>
Error: either we can not find profile data for run_id 4fa23fd59ddd7 or the threshold 0.01 is too small or you do not have 'dot' image generation utility installed.
</pre>
<p>Esto se debe a que con <strong>CentOS 5</strong>, la utilidad <strong>dot</strong> no tiene soporte de <strong>PNG</strong>:</p>
<pre>
# dot -T?
Renderer type: "?" not recognized. Use one of: canon cmap cmapx dia dot fig hpgl imap ismap mif mp pcl pic plain plain-ext ps ps2 svg svgz vtx xdot
</pre>
<p>Deberemos recompilar el binario:</p>
<pre>
cd /usr/local/src
wget http://www.graphviz.org/pub/graphviz/stable/SOURCES/graphviz-2.28.0.tar.gz
tar xzf graphviz-2.28.0.tar.gz
cd graphviz-2.28.0
./configure &#038;&#038; make &#038;&#038; make install
</pre>
<p>Con lo que ya tendremos soporte para <strong>PNG</strong>:</p>
<pre>
# dot -T?
Format: "?" not recognized. Use one of: bmp canon cmap cmapx cmapx_np dot eps fig gd gd2 gif gtk gv ico imap imap_np ismap jpe jpeg jpg pdf plain plain-ext <strong>png</strong> ps ps2 svg svgz tif tiff tk vml vmlz vrml wbmp x11 xdot xlib
</pre>
<p>Podemos ver a continuación el resultado de <strong>xhprof</strong> que nos indica en que funciones estamos perdiendo más tiempo:</p>
<div id="attachment_3874" class="wp-caption aligncenter" style="width: 310px"><a href="http://systemadmin.es/wp-content/uploads/2012/05/callgraph-xhprof.jpg"><img src="http://systemadmin.es/wp-content/uploads/2012/05/callgraph-xhprof-300x161.jpg" alt="Callgraph xhprof" title="Callgraph xhprof" width="300" height="161" class="size-medium wp-image-3874" /></a><p class="wp-caption-text">Callgraph xhprof</p></div>

	Tags: <a href="http://systemadmin.es/tag/xhprof" title="xhprof" rel="tag">xhprof</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li>No hay posts relacionados.</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/xhprof-de-facebook/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VirtualHost overlap on port 80</title>
		<link>http://systemadmin.es/2012/05/virtualhost-overlap-on-port-80</link>
		<comments>http://systemadmin.es/2012/05/virtualhost-overlap-on-port-80#comments</comments>
		<pubDate>Mon, 21 May 2012 07:19:07 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[LAMP y web]]></category>
		<category><![CDATA[Apache]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3892</guid>
		<description><![CDATA[En Apache 2.2 y anteriores nos podemos encontrar con el siguiente warning en el apache: [Thu May 17 09:20:17 2012] [warn] _default_ VirtualHost overlap on port 80, the first has precedence Nos indica que hay VirtualHost que se pisan unos con otros, tal como es de esperar en un entorno de VirtualHosts que se decide [...]]]></description>
			<content:encoded><![CDATA[<p>En <strong>Apache 2.2</strong> y anteriores nos podemos encontrar con el siguiente <strong>warning</strong> en el apache:</p>
<pre>
[Thu May 17 09:20:17 2012] [warn] _default_ VirtualHost overlap on port 80, the first has precedence
</pre>
<p><!-- more --></p>
<p>Nos indica que hay <strong>VirtualHost</strong> que se pisan unos con otros, tal como es de esperar en un entorno de <strong>VirtualHosts</strong> que se decide según el <a href="/2010/08/especificar-que-host-header-debe-usar-el-curl">Host header</a>. Pero esto no esta habilitado por defecto, sino que se debe indicar mediante la directiva <strong>NameVirtualHost</strong>:</p>
<pre>
NameVirtualHost *:80
</pre>
<p>A partir de <strong>Apache 2.4</strong> esta directiva ya no es necesaria ya que los <strong>VirtualHost por nombre</strong> están <strong>habilitados por defecto</strong>.</p>

	Tags: <a href="http://systemadmin.es/tag/httpd" title="Apache" rel="tag">Apache</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li><a href="http://systemadmin.es/2010/12/w00tw00t-at-isc-sans-dfind" onclick="pageTracker._trackEvent('relacionados','3071');" title="w00tw00t.at.ISC.SANS.DFind:) (17/December/2010)">w00tw00t.at.ISC.SANS.DFind:)</a></li>
	<li><a href="http://systemadmin.es/2009/01/virtualhost-por-defecto-de-apache" onclick="pageTracker._trackEvent('relacionados','1178');" title="VirtualHost por defecto de Apache (17/January/2009)">VirtualHost por defecto de Apache</a></li>
	<li><a href="http://systemadmin.es/2012/03/variables-de-entorno-para-configurar-un-apache" onclick="pageTracker._trackEvent('relacionados','2269');" title="Variables de entorno para configurar un Apache (29/March/2012)">Variables de entorno para configurar un Apache</a></li>
	<li><a href="http://systemadmin.es/2008/12/uso-de-memcached-como-cache-de-contendio-de-apache-para-soportar-el-efecto-barrapunto" onclick="pageTracker._trackEvent('relacionados','840');" title="Uso de memcached como cache de contendio de Apache para soportar el efecto Barrapunto (11/December/2008)">Uso de memcached como cache de contendio de Apache para soportar el efecto Barrapunto</a></li>
	<li><a href="http://systemadmin.es/2009/09/uso-de-htcacheclean" onclick="pageTracker._trackEvent('relacionados','1917');" title="Uso de htcacheclean (8/September/2009)">Uso de htcacheclean</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/virtualhost-overlap-on-port-80/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virus de la SGAE / Policía</title>
		<link>http://systemadmin.es/2012/05/virus-de-la-sgae-policia</link>
		<comments>http://systemadmin.es/2012/05/virus-de-la-sgae-policia#comments</comments>
		<pubDate>Fri, 18 May 2012 06:40:47 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[Seguridad]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3894</guid>
		<description><![CDATA[El martes en la oficina me crucé con el portátil de algún compañero infectado con el virus de ls SGAE / Policía que te pide un rescate de 100€ por desbloquear el PC: Por la mala costumbre de dar administrador local de los equipos a los usuarios, el virus se ha empotrado bien en el [...]]]></description>
			<content:encoded><![CDATA[<p>El martes en la oficina me crucé con el portátil de algún compañero infectado con el <strong>virus de ls SGAE / Policía</strong> que te pide un <strong>rescate de 100€ por desbloquear el PC</strong>:</p>
<div id="attachment_3895" class="wp-caption aligncenter" style="width: 310px"><a href="http://systemadmin.es/wp-content/uploads/2012/05/virus-sgae-policia.jpg"><img src="http://systemadmin.es/wp-content/uploads/2012/05/virus-sgae-policia-300x225.jpg" alt="Portátil bloqueado con el virus de la SGAE / Policía" title="Portátil bloqueado con el virus de la SGAE / Policía" width="300" height="225" class="size-medium wp-image-3895" /></a><p class="wp-caption-text">Portátil bloqueado con el virus de la SGAE / Policía</p></div>
<p><!-- more --></p>
<p>Por la mala costumbre de dar administrador local de los equipos a los usuarios, el virus se ha empotrado bien en el sistema, <strong>bloqueando el administrador de tareas</strong>:</p>
<div id="attachment_3896" class="wp-caption aligncenter" style="width: 310px"><a href="http://systemadmin.es/wp-content/uploads/2012/05/admin-tareas-deshabilitado.jpg"><img src="http://systemadmin.es/wp-content/uploads/2012/05/admin-tareas-deshabilitado-300x225.jpg" alt="Administrador de tareas de Windows deshabilitado" title="Administrador de tareas de Windows deshabilitado" width="300" height="225" class="size-medium wp-image-3896" /></a><p class="wp-caption-text">Administrador de tareas de Windows deshabilitado</p></div>
<p>Además, iniciando en modo a prueba de fallos también lo tenemos bloqueado, por lo que la única opción es un <strong>LiveCD</strong>. Resulta curiosa la zona de la forma de pago que incluye el <strong>logo de la policía</strong>:</p>
<div id="attachment_3897" class="wp-caption aligncenter" style="width: 235px"><a href="http://systemadmin.es/wp-content/uploads/2012/05/forma-de-pago-virus-sgae-policia.jpg"><img src="http://systemadmin.es/wp-content/uploads/2012/05/forma-de-pago-virus-sgae-policia-225x300.jpg" alt="Forma de pago del virus de la SGAE / Policía" title="Forma de pago del virus de la SGAE / Policía" width="225" height="300" class="size-medium wp-image-3897" /></a><p class="wp-caption-text">Forma de pago del virus de la SGAE / Policía</p></div>
<p>Se trata de un método de pago con intermediario (similar a <strong>PayPal</strong>) basado en saldo que podemos comprar en gasolineras o tiendas como <strong>OpenCor</strong>. En el caso del virus incluye los logos de <strong>galp</strong> y <strong>Telefónica</strong>, a parte de dar la descripción de otros puntos de venta.</p>
<p>Resulta impactante <strong>lo bien hecho que esta este virus</strong>. Además, a juzgar por la pantalla de inicio del virus:</p>
<div id="attachment_3898" class="wp-caption aligncenter" style="width: 310px"><a href="http://systemadmin.es/wp-content/uploads/2012/05/virus-sgae-policia-iniciando.jpg"><img src="http://systemadmin.es/wp-content/uploads/2012/05/virus-sgae-policia-iniciando-300x225.jpg" alt="Virus SGAE / Policía iniciando" title="Virus SGAE / Policía iniciando" width="300" height="225" class="size-medium wp-image-3898" /></a><p class="wp-caption-text">Virus SGAE / Policía iniciando</p></div>
<p>Al contener un mensaje de &#8220;iniciando&#8221; en <strong>alemán</strong>, supongo que si la IP la geolocaliza en <strong>alemania</strong> debe mostrar el <strong>equivalente a la SGAE</strong>. </p>
Post sin tags
	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li>No hay posts relacionados.</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/virus-de-la-sgae-policia/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>El mal de .htaccess y los ini_set() de PHP</title>
		<link>http://systemadmin.es/2012/05/el-mal-de-htaccess-y-los-ini_set-de-php</link>
		<comments>http://systemadmin.es/2012/05/el-mal-de-htaccess-y-los-ini_set-de-php#comments</comments>
		<pubDate>Thu, 17 May 2012 06:19:23 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[LAMP y web]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3891</guid>
		<description><![CDATA[La posibilidad de cambiar características de PHP o de Apache según si la petición accede a un cierto directorio leyendo un cierto .htaccess o bien ejecuta un cierto script PHP que hace un ini_set() es, sin duda, útil en muchas ocasiones. El problema viene del mal uso de dichas características. Recientemente me he encontrado con [...]]]></description>
			<content:encoded><![CDATA[<p>La posibilidad de <strong>cambiar características de PHP o de Apache</strong> según si la petición accede a un cierto directorio leyendo un cierto <strong>.htaccess</strong> o bien ejecuta un cierto script PHP que hace un <strong>ini_set()</strong> es, sin duda, <strong>útil en muchas ocasiones</strong>. El problema viene del mal uso de dichas características.</p>
<p><!-- more --></p>
<p>Recientemente me he encontrado con la siguiente <strong>burrada <em>dentro</em> del DocumentRoot</strong> de una aplicación web:</p>
<pre>
# ls -lah
total 112G
drwxrwxr-x  2 luser luser 4.0K Jul 19  2010 .
drwxrwxr-x 10 luser luser 4.0K Jul 19  2010 ..
lrwxrwxrwx  1 luser luser   11 Jul 19  2010 log -> ../data/log
-rwxrwxr-x  1 luser luser <strong>111G</strong> May 16 16:59 php.log
</pre>
<p>Evidentemente, dentro del código existía lo siguiente:</p>
<pre>
ini_set('error_reporting', E_ALL);
ini_set("error_log",PATH_ROOT."log/php.log");
</pre>
<p>Y no es que el código estuviera especialmente depurado para que no aparecieran errores, sino que el log se parecía más bien a esto (parcialmente debido al <strong>E_ALL</strong>):</p>
<p><center><iframe width="425" height="349" src="http://www.youtube.com/embed/FA3gCfBUkfg?hl=es&#038;fs=1" frameborder="0" allowfullscreen></iframe></center></p>
<p>Una vez vista dicha burrada, sólo que busquemos la cadena <strong>ini_set</strong> en los ficheros <strong>php</strong> es fácil encontrar burradas similares:</p>
<pre>
# find . -iname \*php -exec grep ini_set {} \;
(...)
ini_set('max_execution_time', 0);
</pre>
<p>Evidentemente podemos evitar que esto ocurra con <a href="/2012/05/php_admin_value-y-php_admin_flag">php_admin_value o php_admin_flag</a>, pero en realidad dichas funciones simplemente <strong>deberían ser usadas con mayor responsabilidad</strong>.</p>

	Tags: <a href="http://systemadmin.es/tag/php" title="PHP" rel="tag">PHP</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li><a href="http://systemadmin.es/2009/01/seguridad-en-php-deshabilitar-funciones" onclick="pageTracker._trackEvent('relacionados','1302');" title="Seguridad en PHP: deshabilitar funciones (25/January/2009)">Seguridad en PHP: deshabilitar funciones</a></li>
	<li><a href="http://systemadmin.es/2012/05/php_admin_value-y-php_admin_flag" onclick="pageTracker._trackEvent('relacionados','3885');" title="php_admin_value y php_admin_flag (11/May/2012)">php_admin_value y php_admin_flag</a></li>
	<li><a href="http://systemadmin.es/2009/05/php-configure-error-utf8_mime2text-has-new-signature-but-u8t_canonical-is-missing" onclick="pageTracker._trackEvent('relacionados','1705');" title="PHP: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing (14/May/2009)">PHP: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing</a></li>
	<li><a href="http://systemadmin.es/2012/05/php-easter-egg" onclick="pageTracker._trackEvent('relacionados','3900');" title="php Easter Egg (24/May/2012)">php Easter Egg</a></li>
	<li><a href="http://systemadmin.es/2011/08/ofuscacion-de-puertos-mediante-overflow-de-shorts" onclick="pageTracker._trackEvent('relacionados','3508');" title="Ofuscación de puertos mediante overflow de shorts (29/August/2011)">Ofuscación de puertos mediante overflow de shorts</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/el-mal-de-htaccess-y-los-ini_set-de-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>top en batch mode</title>
		<link>http://systemadmin.es/2012/05/top-en-batch-mode</link>
		<comments>http://systemadmin.es/2012/05/top-en-batch-mode#comments</comments>
		<pubDate>Wed, 16 May 2012 07:24:28 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[Monitorización]]></category>
		<category><![CDATA[Nagios]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3890</guid>
		<description><![CDATA[En el caso que queramos usar la salida del comando top en scripts, podemos usarlo en modo batch. A parte de indicar el batch mode mediante la opción -b, también deberemos indicar mediante la opción -n el número de veces que queremos ejecutar el top: $ top -b -n 2 Mediante la opción -d podemos [...]]]></description>
			<content:encoded><![CDATA[<p>En el caso que queramos usar la salida del comando <strong>top</strong> en scripts, podemos usarlo en <strong>modo batch</strong>.</p>
<p><!-- more --></p>
<p>A parte de indicar el batch mode mediante la <strong>opción -b</strong>, también deberemos indicar mediante la <strong>opción -n</strong> el número de veces que queremos ejecutar el <strong>top</strong>:</p>
<pre>
$ top -b -n 2
</pre>
<p>Mediante la <strong>opción -d</strong> podemos indicar el <strong>delay entre repeticiones</strong> de <strong>top</strong>:</p>
<pre>
$ top -b -n 2 -d 2
</pre>
<p>A partir de su salida, podemos realizar <strong>scripts de monitorización</strong> muy fácilmente. Por ejemplo, uno que <strong>monitoriza la CPU</strong> con la salida de <strong>top</strong> para <strong>Nagios</strong>:</p>
<pre>
#!/bin/bash

CPUIDLE=$(/usr/bin/top n 2 d 2 b -p 1 | grep -i "cpu(s)" | tail -1 | cut -d "%" -f 4 | cut -d "," -f 2 | cut -d " " -f 2)

CPUUSAGE=$(echo 100-$CPUIDLE | bc -l | sed 's/^\./0\./g' | sed 's/\..*//ig')
DISPCPUUSAGE=$(echo 100-$CPUIDLE | bc -l | sed 's/^\./0\./g')

while getopts 'u:p:v:w:c:' OPTION
do
  case $OPTION in
  w)    wflag=1
        wval="$OPTARG"
        ;;
  c)    cflag=1
        cval="$OPTARG"
        ;;
  ?)    echo Argument invalid
        printusage
        exit 3
        ;;
  esac
done

if [ $CPUUSAGE -gt $cval ];
then
echo "CRITICAL - CPU usage: $DISPCPUUSAGE%|cpuusage=$DISPCPUUSAGE"
exit 2
elif [ $CPUUSAGE -gt $wval ];
then
echo "WARNING - CPU usage: $DISPCPUUSAGE%|cpuusage=$DISPCPUUSAGE"
exit 1
fi

echo "OK - CPU usage: $DISPCPUUSAGE%|cpuusage=$DISPCPUUSAGE"
</pre>

	Tags: <a href="http://systemadmin.es/tag/nagios" title="Nagios" rel="tag">Nagios</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li><a href="http://systemadmin.es/2010/12/usar-el-event-handler-de-nagios-para-recuperar-servicios" onclick="pageTracker._trackEvent('relacionados','3036');" title="Usar el event handler de Nagios para recuperar servicios (8/December/2010)">Usar el event handler de Nagios para recuperar servicios</a></li>
	<li><a href="http://systemadmin.es/2010/06/obtener-la-temperatura-ambiente-de-un-servidor-mediante-ipmi" onclick="pageTracker._trackEvent('relacionados','2639');" title="Obtener la temperatura ambiente de un servidor mediante IPMI (9/June/2010)">Obtener la temperatura ambiente de un servidor mediante IPMI</a></li>
	<li><a href="http://systemadmin.es/2012/05/nrpe-error-request-contained-command-arguments" onclick="pageTracker._trackEvent('relacionados','3872');" title="nrpe: Error: Request contained command arguments! (2/May/2012)">nrpe: Error: Request contained command arguments!</a></li>
	<li><a href="http://systemadmin.es/2009/09/monitorizacion-de-nginx-mediante-nginx_status-similar-a-server-status" onclick="pageTracker._trackEvent('relacionados','1924');" title="Monitorización de nginx mediante nginx_status (similar a server-status) (14/September/2009)">Monitorización de nginx mediante nginx_status (similar a server-status)</a></li>
	<li><a href="http://systemadmin.es/2010/08/instalacion-de-nagios-con-mediawiki-y-rrdtool-2" onclick="pageTracker._trackEvent('relacionados','2786');" title="Instalación de Nagios con MediaWiki y RRDtool (II) (11/August/2010)">Instalación de Nagios con MediaWiki y RRDtool (II)</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/top-en-batch-mode/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Configurar un relay de correo a un postfix</title>
		<link>http://systemadmin.es/2012/05/postfix-como-relay</link>
		<comments>http://systemadmin.es/2012/05/postfix-como-relay#comments</comments>
		<pubDate>Tue, 15 May 2012 09:56:17 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[Correo]]></category>
		<category><![CDATA[postfix]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3888</guid>
		<description><![CDATA[En el caso que tengamos un equipo con postfix que queramos que mande los mails a través de otro servidor, deberemos configurar los siguientes parámetros: Primero de todo deberemos indicar el dominio que queremos que aparezca como origen. Si no lo sobrescribimos, en el Return-Path veremos usuario y el valor de myorigin. Por defecto aparecería [...]]]></description>
			<content:encoded><![CDATA[<p>En el caso que tengamos un equipo con <strong>postfix</strong> que queramos que mande los mails a través de otro servidor, deberemos configurar los siguientes parámetros:</p>
<p><!-- more --></p>
<p>Primero de todo deberemos indicar el dominio que queremos que aparezca como origen. Si no lo sobrescribimos, en el <strong>Return-Path</strong> veremos usuario y el valor de myorigin. Por defecto aparecería el <strong>hostname</strong> (lo que devuelva la función <strong>gethostname()</strong>), por lo que mejor usar el dominio (variable <strong>mydomain</strong>) y definir que <strong>myorigin</strong> sea <strong>mydomain</strong>:</p>
<pre>
mydomain = systemadmin.es
myorigin = $mydomain
</pre>
<p>A continuación para reenviar todos los mails generado al <strong>relay</strong> deberemos indicar la IP entre corchetes (<strong>[]</strong>) en la variable <strong>relayhost</strong>:</p>
<pre>
relayhost = [1.2.3.4]
</pre>
<p>Una vez reiniciado el postfix, todos los mails salientes se mandarán a través del relay configurado. Es una <a href="/2009/03/usando-qmail-para-entregar-correo-a-nuestro-relay">configuración equivalente al caso de qmail que se vió anteriormente</a>.</p>

	Tags: <a href="http://systemadmin.es/tag/postfix" title="postfix" rel="tag">postfix</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li>No hay posts relacionados.</li>
	</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/postfix-como-relay/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Unidades para cambiar valores de MySQL en caliente</title>
		<link>http://systemadmin.es/2012/05/unidades-para-cambiar-valores-de-mysql-en-caliente</link>
		<comments>http://systemadmin.es/2012/05/unidades-para-cambiar-valores-de-mysql-en-caliente#comments</comments>
		<pubDate>Mon, 14 May 2012 07:22:40 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3855</guid>
		<description><![CDATA[Mediante SET GLOBAL / SET SESSION podemos modificar ciertos valores de MySQL, pero no aceptan unidades: mysql> set session max_allowed_packet=20M; ERROR 1232 (42000): Incorrect argument type to variable 'max_allowed_packet' En lugar de tener que calcularlo fuera del MySQL, podemos indicar la operación. Por ejemplo, para 20M podemos indicar 20*1024*1024: mysql> show variables like 'max_allowed_packet'; +--------------------+----------+ [...]]]></description>
			<content:encoded><![CDATA[<p>Mediante <strong>SET GLOBAL</strong> / <strong>SET SESSION</strong> podemos modificar ciertos valores de MySQL, pero no aceptan unidades:</p>
<pre>
mysql> set session max_allowed_packet=20M;
ERROR 1232 (42000): Incorrect argument type to variable 'max_allowed_packet'
</pre>
<p><!-- more --></p>
<p>En lugar de tener que calcularlo fuera del <strong>MySQL</strong>, podemos indicar la operación. Por ejemplo, para <strong>20M</strong> podemos indicar <strong>20*1024*1024</strong>:</p>
<pre>
mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 10485760 |
+--------------------+----------+
1 row in set (0.00 sec)

mysql> set session max_allowed_packet=20*1024*1024;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 20971520 |
+--------------------+----------+
1 row in set (0.00 sec)

mysql>
</pre>

	Tags: <a href="http://systemadmin.es/tag/mysql" title="MySQL" rel="tag">MySQL</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li><a href="http://systemadmin.es/2009/03/vistas-views-en-mysql" onclick="pageTracker._trackEvent('relacionados','1586');" title="Vistas (views) en MySQL (27/March/2009)">Vistas (views) en MySQL</a></li>
	<li><a href="http://systemadmin.es/2012/03/ver-los-storage-engines-disponibles-en-mysql" onclick="pageTracker._trackEvent('relacionados','3805');" title="Ver los storage engines disponibles en MySQL (27/March/2012)">Ver los storage engines disponibles en MySQL</a></li>
	<li><a href="http://systemadmin.es/2011/05/ver-el-usuario-con-el-que-estamos-conectados-en-oracle-y-mysql" onclick="pageTracker._trackEvent('relacionados','3383');" title="Ver el usuario con el que estamos conectados en Oracle y MySQL (4/May/2011)">Ver el usuario con el que estamos conectados en Oracle y MySQL</a></li>
	<li><a href="http://systemadmin.es/2011/11/ver-el-estado-de-un-mysql" onclick="pageTracker._trackEvent('relacionados','3627');" title="Ver el estado de un MySQL (8/November/2011)">Ver el estado de un MySQL</a></li>
	<li><a href="http://systemadmin.es/2009/07/uso-de-mk-find-para-realizar-analyze-y-optimize-de-las-tablas-mysql" onclick="pageTracker._trackEvent('relacionados','1803');" title="Uso de mk-find para realizar analyze y optimize de las tablas MySQL (17/July/2009)">Uso de mk-find para realizar analyze y optimize de las tablas MySQL</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/unidades-para-cambiar-valores-de-mysql-en-caliente/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>php_admin_value y php_admin_flag</title>
		<link>http://systemadmin.es/2012/05/php_admin_value-y-php_admin_flag</link>
		<comments>http://systemadmin.es/2012/05/php_admin_value-y-php_admin_flag#comments</comments>
		<pubDate>Fri, 11 May 2012 05:50:35 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[LAMP y web]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=3885</guid>
		<description><![CDATA[Mediante las directivas php_admin_value y php_admin_flag de mod_php, podemos definir valores de PHP en la configuración de Apache, por ejemplo únicamente para un determinado VirtualHost sin que se puede sobrescribir. Dado el siguiente ejemplo: &#60;VirtualHost *:80&#62; (...) php_admin_value max_execution_time 5 (...) &#60;/VirtualHost&#62; Podemos comprobar cómo con ini_set no podremos cambiar el valor del parámetro: &#60;?php [...]]]></description>
			<content:encoded><![CDATA[<p>Mediante las directivas <strong>php_admin_value</strong> y <strong>php_admin_flag</strong> de <strong>mod_php</strong>, podemos definir valores de <strong>PHP</strong> en la configuración de <strong>Apache</strong>, por ejemplo únicamente para un determinado <strong>VirtualHost</strong> sin que se puede sobrescribir.</p>
<p><!-- more --></p>
<p>Dado el siguiente ejemplo:</p>
<pre>
&lt;VirtualHost *:80&gt;
(...)
   php_admin_value max_execution_time 5
(...)
&lt;/VirtualHost&gt;
</pre>
<p>Podemos comprobar cómo con <a href="/2009/10/cambiar-el-memory_limit-para-un-solo-script-php-mediante-ini_set">ini_set</a> no podremos cambiar el valor del parámetro:</p>
<pre>
&lt;?php
echo ini_get('max_execution_time')." ";
ini_set('max_execution_time',999);
echo ini_get('max_execution_time')." ";
?&gt;
</pre>
<p>Podemos comprobar como el valor de max_execution_time no se ha modificado con <strong>ini_set()</strong>:</p>
<pre>
$ curl localhost/check_iniset.php
5 5
</pre>
<p>De la misma forma, mediante una directiva en el <strong>.htaccess</strong> con <strong>AllowOveride all</strong> tampoco se podrá modificar desde la aplicación.</p>

	Tags: <a href="http://systemadmin.es/tag/php" title="PHP" rel="tag">PHP</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li><a href="http://systemadmin.es/2009/01/seguridad-en-php-deshabilitar-funciones" onclick="pageTracker._trackEvent('relacionados','1302');" title="Seguridad en PHP: deshabilitar funciones (25/January/2009)">Seguridad en PHP: deshabilitar funciones</a></li>
	<li><a href="http://systemadmin.es/2009/05/php-configure-error-utf8_mime2text-has-new-signature-but-u8t_canonical-is-missing" onclick="pageTracker._trackEvent('relacionados','1705');" title="PHP: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing (14/May/2009)">PHP: configure: error: utf8_mime2text() has new signature, but U8T_CANONICAL is missing</a></li>
	<li><a href="http://systemadmin.es/2012/05/php-easter-egg" onclick="pageTracker._trackEvent('relacionados','3900');" title="php Easter Egg (24/May/2012)">php Easter Egg</a></li>
	<li><a href="http://systemadmin.es/2011/08/ofuscacion-de-puertos-mediante-overflow-de-shorts" onclick="pageTracker._trackEvent('relacionados','3508');" title="Ofuscación de puertos mediante overflow de shorts (29/August/2011)">Ofuscación de puertos mediante overflow de shorts</a></li>
	<li><a href="http://systemadmin.es/2012/02/ofuscacion-con-rot13" onclick="pageTracker._trackEvent('relacionados','3705');" title="Ofuscación con ROT13 (3/February/2012)">Ofuscación con ROT13</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/php_admin_value-y-php_admin_flag/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SHUTDOWN vs SIGTERM en un MySQL</title>
		<link>http://systemadmin.es/2012/05/shutdown-vs-sigterm-en-un-mysql</link>
		<comments>http://systemadmin.es/2012/05/shutdown-vs-sigterm-en-un-mysql#comments</comments>
		<pubDate>Thu, 10 May 2012 07:26:22 +0000</pubDate>
		<dc:creator>Jordi Prats</dc:creator>
				<category><![CDATA[DBA]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://systemadmin.es/?p=2362</guid>
		<description><![CDATA[Existe la creencia que mandar un SIGTERM a un mysqld no es la forma correcta de apagar un MySQL, en realidad es otra opción igual de válida. En la documentación de MySQL referente al apagado del daemon podemos ver los pasos que se realizan: Ya sea mediante el mysqladmin shutdown o cuando el mysqld recibe [...]]]></description>
			<content:encoded><![CDATA[<p>Existe la <strong>creencia que mandar un SIGTERM a un mysqld</strong> no es la forma correcta de <strong>apagar un MySQL</strong>, en realidad es otra opción igual de válida.</p>
<p><!-- more --></p>
<p>En la <a href="http://dev.mysql.com/doc/refman/5.5/en/server-shutdown.html">documentación de MySQL referente al apagado del daemon</a> podemos ver los pasos que se realizan:</p>
<ul>
<li>Ya sea mediante el <strong>mysqladmin shutdown</strong> o cuando el <strong>mysqld recibe un SIGTERM</strong> se inicia el proceso de apagado</li>
<li>Si es un cliente que manda el shutdown (<strong>mysqldadmin shutdown</strong>) se <strong>crea un thread para gestionar el apagado del daemon</strong>. Si se manda el thread se puede crear o ser gestionado directamente por el handler del evento</li>
<li>A continuación <strong>deja de aceptar nuevas conexiones</strong></li>
<li>Se matan todas las conexiones establecidas <a href="/2009/05/matar-sesiones-en-mysql">mantado las queries</a> y haciendo rollback de las transacciones</li>
<li>Finalmente pasa a disco todos los buffers necesarios para cada <a href="/2012/03/ver-los-storage-engines-disponibles-en-mysql">storage engine</a> y finaliza el proceso</li>
</ul>
<p>A diferencia de <strong>Oracle</strong>, no dispone de otros modos de apagado. Haciendo la equivalencia sería como un <a href="/2009/11/apagar-una-base-de-datos-oracle">SHUTDOWN IMMEDIATE</a></p>

	Tags: <a href="http://systemadmin.es/tag/mysql" title="MySQL" rel="tag">MySQL</a><br />

	<h4 style="margin-top: 50px">Relacionados</h4>
	<ul class="st-related-posts">
	<li><a href="http://systemadmin.es/2009/03/vistas-views-en-mysql" onclick="pageTracker._trackEvent('relacionados','1586');" title="Vistas (views) en MySQL (27/March/2009)">Vistas (views) en MySQL</a></li>
	<li><a href="http://systemadmin.es/2012/03/ver-los-storage-engines-disponibles-en-mysql" onclick="pageTracker._trackEvent('relacionados','3805');" title="Ver los storage engines disponibles en MySQL (27/March/2012)">Ver los storage engines disponibles en MySQL</a></li>
	<li><a href="http://systemadmin.es/2011/05/ver-el-usuario-con-el-que-estamos-conectados-en-oracle-y-mysql" onclick="pageTracker._trackEvent('relacionados','3383');" title="Ver el usuario con el que estamos conectados en Oracle y MySQL (4/May/2011)">Ver el usuario con el que estamos conectados en Oracle y MySQL</a></li>
	<li><a href="http://systemadmin.es/2011/11/ver-el-estado-de-un-mysql" onclick="pageTracker._trackEvent('relacionados','3627');" title="Ver el estado de un MySQL (8/November/2011)">Ver el estado de un MySQL</a></li>
	<li><a href="http://systemadmin.es/2009/07/uso-de-mk-find-para-realizar-analyze-y-optimize-de-las-tablas-mysql" onclick="pageTracker._trackEvent('relacionados','1803');" title="Uso de mk-find para realizar analyze y optimize de las tablas MySQL (17/July/2009)">Uso de mk-find para realizar analyze y optimize de las tablas MySQL</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://systemadmin.es/2012/05/shutdown-vs-sigterm-en-un-mysql/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

