<?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>Adobe User Group Granada &#187; php</title>
	<atom:link href="http://www.adobe-user-group-granada.es/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.adobe-user-group-granada.es</link>
	<description>Grupo de usuarios de Adobe orientado a Dreamweaver y Spry en la ciudad de Granada</description>
	<lastBuildDate>Sat, 21 Jan 2012 19:10:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Guía de supervivencia con Apache</title>
		<link>http://www.adobe-user-group-granada.es/guia-de-supervivencia-con-apache/</link>
		<comments>http://www.adobe-user-group-granada.es/guia-de-supervivencia-con-apache/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 18:31:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[apache]]></category>
		<category><![CDATA[artículos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tutoriales]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=1019</guid>
		<description><![CDATA[El servidor web Apache es uno de los más extendidos y con más opciones de configuración, esto implica que es complejo. Vamos a ver cómo sobrevivir con Apache.


Guía de supervivencia con Apache

Otras veces ya hemos visto como realizar una instalación de Apache con PHP y eAccelerator, una vez instalado los ficheros ejecutables importantes son:

apachectl: Mediante [...]]]></description>
			<content:encoded><![CDATA[<p>El <strong>servidor web Apache</strong> es uno de los más extendidos y con más opciones de configuración, esto implica que es complejo. Vamos a ver <strong>cómo sobrevivir con Apache</strong>.</p>
<p><span id="more-1019"></span></p>
<div id="attachment_3639">
<p><a href="http://systemadmin.es/wp-content/uploads/2011/11/supervivencia-con-Apache.jpg"></a>Guía de supervivencia con Apache</p>
</div>
<p>Otras veces ya hemos visto como realizar una <a href="http://systemadmin.es/2009/08/instalacion-de-un-servidor-lamp-v-apache-con-php-y-eaccelerator">instalación de Apache con PHP y eAccelerator</a>, una vez instalado los ficheros ejecutables importantes son:</p>
<ul>
<li><strong>apachectl</strong>: Mediante este script podremos:
<ul>
<li>Gestionar el arranque y parada del daemon (<strong>start</strong>/<strong>stop</strong>)</li>
<li>Comprobar la configuración (<strong>configtest</strong>):
<pre># /usr/local/apache22/bin/apachectl configtest
Syntax OK</pre>
</li>
<li>Recargar la configuración en caliente, sin apagar el daemon (<strong>graceful</strong>)</li>
</ul>
</li>
<li><strong>httpd</strong>: Binario del daemon, con dicho fichero podemos:
<ul>
<li>Indicar que fichero de configuración cargar (<strong>opción -f</strong>)</li>
<li>Ver el listado de módulos que carga (<strong>opción -M</strong>):
<pre># /usr/local/apache22/bin/httpd -M
Loaded Modules:
 core_module (static)
(...)
 jrun_module (shared)</pre>
</li>
<li>Al igual que con <strong>apachectl</strong>, comprobar la configuración con la <strong>opción -t</strong>:
<pre># /usr/local/apache22/bin/httpd -t
Syntax OK</pre>
</li>
<li>Ver el resumen de configuración de los <strong>VirtualHosts</strong> con la <strong>opción -S</strong>:
<pre># /usr/local/apache22/bin/httpd -S
VirtualHost configuration:
wildcard NameVirtualHosts and _default_ servers:
*:80                   is a NameVirtualHost
         default server shuvak.systemadmin.es (/usr/local/apache22/conf/extra/httpd-vhosts.conf:7)
         port 80 namevhost shuvak.systemadmin.es (/usr/local/apache22/conf/extra/httpd-vhosts.conf:7)
         port 80 namevhost systemadmin.es (/usr/local/apache22/conf/extra/vhosts/systemadmin.es.conf:1)
         port 80 namevhost foro.systemadmin.es (/usr/local/apache22/conf/extra/vhosts/foro.systemadmin.es.conf:1)
Syntax OK</pre>
</li>
</ul>
</li>
</ul>
<p>Un ejemplo de <strong>configuración típica de un VirtualHost</strong> sería la siguiente:</p>
<pre>&lt;VirtualHost *:80&gt;
        DocumentRoot "/var/www/systemadmin.es/htdocs"
        DirectoryIndex index.php
        ServerName systemadmin.es
        ServerAlias foro.systemadmin.es

        &lt;Directory /var/www/systemadmin.es/htdocs&gt;
            Options FollowSymLinks
            AllowOverride all
            Order deny,allow
            Allow from all
        &lt;/Directory&gt;

        ErrorLog  "| /usr/local/sbin/cronolog -S /var/www/systemadmin.es/logs/current.error.log /var/www/systemadmin.es/logs/%Y/%m/%d/error.log"
        CustomLog "| /usr/local/sbin/cronolog -S /var/www/systemadmin.es/logs/current.custom.log /var/www/systemadmin.es/logs/%Y/%m/%d/custom.log" combined

&lt;/VirtualHost&gt;</pre>
<p>Las directivas importantes son:</p>
<ul>
<li><strong>DocumentRoot</strong>: Directorio base desde el cual  serviremos el contenido. Deberemos acompañarlo de la directiva Directory  para establecer si se puede servir o no su contenido</li>
<li><strong>DirectoryIndex</strong>: Cuando se intente servir la raíz o  cualquier directorio (sin especificar fichero), cual se debería servir.  Típicamente se usa index.algo, pero podría ser cualquier fichero. Esta  directiva indica que fichero servir y en que orden de prioridad. Por  ejemplo:
<pre>DirectoryIndex index.php index.html index.htm</pre>
<p>Primero miraría si existe un fichero <strong>index.php</strong>, en caso que no exista buscaría el siguiente (<strong>index.html</strong>) y así el listado que indiquemos. En caso que no exista ninguno, <strong>se serviría un 404</strong></li>
<li><strong>ServerName</strong> y <strong>ServerAlias</strong>: Nombres a los que responde según el <a href="http://systemadmin.es/2010/08/especificar-que-host-header-debe-usar-el-curl">header Host</a>. Se pueden <strong>especificar wildcards</strong> tanto pode delante (<strong>*.systemadmin.es</strong>) como por detrás (<strong>webmail.*</strong>). La diferencia entre <strong>ServerName</strong> y <strong>ServerAlias</strong> a la practica tiene poca importancia.</li>
</ul>
<p>En cuanto a la <strong>gestión de logs</strong>, personalmente uso <a href="http://systemadmin.es/2009/01/rotacion-de-logs-de-apache-mediante-cronolog">cronolog</a> ya que una vez configurado cómo queremos almacenar los logs no  deberemos hacer mantenimiento a no se que queramos eliminar los  antiguos. Para ello suelo emplear un simple script que haga limpieza:</p>
<pre>#!/bin/bash
for i in $(find /var/www/ -maxdepth 2 -iname logs);
do

        #eliminacion de los mas antiguos de 10 dias
        find $i -mtime +10 -type f -exec rm {} \;

        #eliminacion de directios vacios
        find $i -empty -type d -exec rmdir {} \; 2&gt;/dev/null

        #compresión de logs ya rotados
        find $i -type f -iname \*\.log -mtime +2 -exec gzip {} \;

done</pre>
<p>Deberemos <strong>adaptar el find del for</strong> para que encuentre los directorios raíz dónde tenemos los logs.</p>
<p>Para conocer el estado del Apache existe el <a href="http://systemadmin.es/2009/02/instalacion-del-server-status-mod_status-de-apache">modulo mod_status</a>, que nos indica que esta haciendo dicho daemon. Generalmente se instala en <strong>/server-staus</strong> con <strong>acceso limitado por IP de origen</strong>.</p>
<p>En el <strong>scoreboard</strong> veremos los estado del los <strong>apachitos</strong> (procesos apache) y podremos ver si existe algún problema con algún VirtualHost. Típicamente podremos ver:</p>
<ul>
<li>Se nos llena el scoreboard de <strong>W</strong>: Cuando un slot esta en estado W significa que esta contestando, pero si vemos que se nos acumulan <strong>W</strong> posiblemente esta contestando muy lentamente por algún motivo o bien  simplemente se queda colgado. Generalmente indica problemas en la base  de datos.Si habilitamos la opción
<pre>ExtendedStatus On</pre>
<p>Tendremos un listado de todas las peticiones y su estado, para cuanto  tiempo lleva un slot en el estado actual deberemos fijarnos en la  columna <strong>SS</strong>. Por lo tanto, las peticiones <strong>en estado W que tenga el SS alto</strong> son las primeras que deberemos investigar. Evidentemente, si servimos contenido estático (un <strong>mp3</strong>) es lógico que tarde en ser entregado y por lo tanto que <strong>su SS sea alto</strong>.</li>
<li>Se nos llena el scoreboard de <strong>K</strong>: Tendremos que ver  si nos interesa reducir el tiempo de KeepAlive de las conexiones. Por  defecto lo tenemos a 5 segundos, pero lo podemos dejar en 1 o 2 segundos  según la aplicación.</li>
</ul>
<p>En otra ocasión ya hablamos de en que debemos fijarnos para <a href="http://systemadmin.es/2010/04/encontrar-la-raiz-del-problema-en-un-entorno-lamp-i">entender el problema que tenga un entorno LAMP</a></p>
<p>Otra cosa a tener en cuenta es la <a href="http://systemadmin.es/2009/04/diferencia-entre-serverlimit-y-maxclients-de-apache">diferencia entre ServerLimit y MaxClients</a>: <strong>ServerLimit</strong> es el límite fijo que no puede ser modificado mediante una recarga de configuración (graceful) mientras que <strong>MaxClients</strong> es el límite actual.</p>
<p>Actualmente <strong>mod_status</strong> no muestra los slots de Apache que quedan deshabilitados por la directiva <strong>MaxClients</strong>, por lo que nos puede dar pie a error al suponerlos libres. En su momento hice un patch para evitar esto y <strong>será incluido en la próxima release de Apache</strong> (2.4), actualmente <a href="http://systemadmin.es/2011/03/apache-2-4-beta-httpd-2-3-11">ya se encuentra disponible en la versión beta desde la versión 2.3.11</a>.</p>
<p>Nuestra fuente: <a href="http://systemadmin.es/2011/11/guia-de-supervivencia-con-apache" target="_blank">Systemadmin</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/guia-de-supervivencia-con-apache/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Librería PHP para TwitPic</title>
		<link>http://www.adobe-user-group-granada.es/libreria-php-para-twitpic/</link>
		<comments>http://www.adobe-user-group-granada.es/libreria-php-para-twitpic/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 10:14:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[redes sociales]]></category>
		<category><![CDATA[twitter]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=989</guid>
		<description><![CDATA[TwitPic es un servicio que se utiliza para subir fotos que luego publicas en Twitter. Si estás realizando una aplicación que tira de Twitter y quieres dar la oportunidad al usuario de subir sus fotos puedes hacer uso de esta aplicación y su API (es necesario darse de alta):


$twitpic = new TwitPic($api_key, $consumer_key, $consumer_secret, $oauth_token, [...]]]></description>
			<content:encoded><![CDATA[<p>TwitPic es un servicio que se utiliza para subir fotos que luego publicas en Twitter. Si estás realizando una aplicación que tira de Twitter y quieres dar la oportunidad al usuario de subir sus fotos puedes hacer uso de esta aplicación y su API (es necesario darse de alta):</p>
<p><span id="more-989"></span></p>
<p><code></p>
<pre>$twitpic = new TwitPic($api_key, $consumer_key, $consumer_secret, $oauth_token, $oauth_secret);
try {
  /*
  * Retrieves all images where the user is facetagged
  */
  $user = $twitpic-&gt;faces-&gt;show(<a href="http://www.php.net/array">array</a>('user'=&gt;'meltingice'));
  <a href="http://www.php.net/print_r">print_r</a>($user-&gt;images);

  $media = $twitpic-&gt;media-&gt;show(<a href="http://www.php.net/array">array</a>('id'=&gt;1234));
  <a href="http://www.php.net/echo">echo</a> $media-&gt;message;

  $user = $twitpic-&gt;users-&gt;show(<a href="http://www.php.net/array">array</a>('username'=&gt;'meltingice'), <a href="http://www.php.net/array">array</a>('process'=&gt;false, 'format'=&gt;'xml'));
  <a href="http://www.php.net/echo">echo</a> $user; // raw XML response data

  /*
  * Uploads an image to TwitPic
  */
  $resp = $twitpic-&gt;upload(<a href="http://www.php.net/array">array</a>('media'=&gt;'path/to/file.jpg', 'message'=&gt;'This is an example'));
  <a href="http://www.php.net/print_r">print_r</a>($resp);

  /*
  * Uploads an image to TwitPic AND posts a tweet
  * to Twitter.
  *
  * NOTE: this still uses v2 of the TwitPic API. This means that the code makes 2 separate
  * requests: one to TwitPic for the image, and one to Twitter for the tweet. Because of this,
  * understand this call may take a bit longer than simply uploading the image.
  */
  $resp = $twitpic-&gt;uploadAndPost(<a href="http://www.php.net/array">array</a>('media'=&gt;'path/to/file.jpg', 'message'=&gt;'Another example'));
  <a href="http://www.php.net/print_r">print_r</a>($resp);

} catch (TwitPicAPIException $e) {
  <a href="http://www.php.net/echo">echo</a> $e-&gt;getMessage();
}</pre>
<p></code><br />
<a href="https://github.com/meltingice/TwitPic-API-for-PHP">TwitPic API for PHP</a></p>
<p>Nuestra fuente: <a title="Libreria PHP para TwitPic" href="http://sentidoweb.com/2011/05/31/libreria-php-para-twitpic.php?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+sentidoweb+%28Sentido+Web%29&amp;utm_content=Google+International" target="_blank">Sentidoweb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/libreria-php-para-twitpic/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Subir y exportar documentos usando Google Docs y PHP</title>
		<link>http://www.adobe-user-group-granada.es/subir-y-exportar-documentos-usando-google-docs-y-php/</link>
		<comments>http://www.adobe-user-group-granada.es/subir-y-exportar-documentos-usando-google-docs-y-php/#comments</comments>
		<pubDate>Fri, 01 Apr 2011 09:17:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>
		<category><![CDATA[tutoriales]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=957</guid>
		<description><![CDATA[Uno de los problemas con los que nos podemos encontrar es tener un documento en un formato y tener que exportarlo en otro formato. La exportación se puede realizar utilizando Google Docs, quizás un tanto rebuscada la solución, aunque quizás no tanto.
Os paso un script que sube el fichero a Google Docs dentro de una [...]]]></description>
			<content:encoded><![CDATA[<p>Uno de los problemas con los que nos podemos encontrar es tener un documento en un formato y tener que exportarlo en otro formato. La exportación se puede realizar utilizando Google Docs, quizás un tanto rebuscada la solución, aunque quizás no tanto.</p>
<p>Os paso un script que sube el fichero a Google Docs dentro de una carpeta y acto seguido lo exporta a otro formato, en este caso subo un PPT y lo convierto en PDF (me hubiese encantado que fuera a HTML pero no acepta esa opción).</p>
<p><span id="more-957"></span></p>
<pre><code>
// Datos de login a la API de Google
$clientlogin_url = "https://www.google.com/accounts/ClientLogin";
$clientlogin_post = <a href="http://www.php.net/array">array</a>(
    "accountType" =&gt; "GOOGLE",
    "Email" =&gt; "miemail@gmail.com",
    "Passwd" =&gt; "mipassword",
    "service" =&gt; "writely",
    "source" =&gt; "WPDOCS"
);

// Inicializamos el CURL
$curl = curl_init($clientlogin_url);

// Obtenemos el string de autenticaciÃ³n
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $clientlogin_post);
curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($curl);
<a href="http://www.php.net/preg_match">preg_match</a>("/Auth=([a-z0-9_\-]+)/i", $response, $matches);
$auth = $matches[1];

// Cabeceras de autenticaciÃ³n
$headers = <a href="http://www.php.net/array">array</a>(
    "Authorization: GoogleLogin auth=" . $auth,
    "GData-Version: 3.0",
);

// Recuperamos los ficheros y carpetas que tenemos en Google Docs para no crear dos veces la misma carpeta
curl_setopt($curl, CURLOPT_URL, "http://docs.google.com/feeds/default/private/full?showfolders=true");
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl, CURLOPT_POST, false);
$listado = curl_exec($curl);
$nombre_carpeta = 'WPDOCS';

// Si no se ha creado la carpeta, la creamos
if (<a href="http://www.php.net/strpos">strpos</a>($listado, '&lt;title&gt;'.$nombre_carpeta.'&lt;/title&gt;') === FALSE) {
  // Make the request
  $h = <a href="http://www.php.net/array_merge">array_merge</a>($headers,<a href="http://www.php.net/array">array</a>('Content-Type: application/atom+xml'));
  $xml = '&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;entry xmlns="http://www.w3.org/2005/Atom"&gt;&lt;category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/docs/2007#folder"/&gt;&lt;title&gt;'.$nombre_carpeta.'&lt;/title&gt;&lt;/entry&gt;';
  curl_setopt($curl, CURLOPT_URL, "http://docs.google.com/feeds/default/private/full");
  curl_setopt($curl, CURLOPT_HTTPHEADER, $h);
  curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($curl, CURLOPT_POST, true);

  $response = curl_exec($curl);
  $response = simplexml_load_string($response);
  $id_folder = $response-&gt;id;
} else {
  // Recuperamos la ID de la carpeta creada anteriormente
  <a href="http://www.php.net/preg_match">preg_match</a>("#&lt;title&gt;$nombre_carpeta&lt;/title&gt;&lt;content type='application/atom\+xml;type=feed' src='([^']+)'#", $listado, $m);
  $id_folder = $m[1];
}

// Subimos el PPT
$h = <a href="http://www.php.net/array_merge">array_merge</a>($headers,<a href="http://www.php.net/array">array</a>('Content-Type: application/vnd.ms-powerpoint', 'Slug: fichero'));
$filepath='/path/fichero.ppt';
$data=((<a href="http://www.php.net/fread">fread</a>(<a href="http://www.php.net/fopen">fopen</a>($filepath, "rb"), <a href="http://www.php.net/filesize">filesize</a>($filepath))));
curl_setopt($curl, CURLOPT_URL, "http://docs.google.com/feeds/default/private/full");
curl_setopt($curl, CURLOPT_HTTPHEADER, $h);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_POST, true);
$response = curl_exec($curl);
$response = simplexml_load_string($response);
$id_doc = $response-&gt;id;

// Limpiamos los IDs de los ficheros devueltos por Google, solo nos interesa del %3A para adelante
<a href="http://www.php.net/preg_match">preg_match</a>('/%3A(.+)/', $id_doc, $m);
$id_doc = $m[1];
<a href="http://www.php.net/preg_match">preg_match</a>('/%3A(.+)/', $id_folder, $m);
$id_folder = $m[1];

// Lo movemos a la carpeta
$h = <a href="http://www.php.net/array_merge">array_merge</a>($headers,<a href="http://www.php.net/array">array</a>('Content-Type: application/atom+xml'));
$data = '&lt;?xml version=\'1.0\' encoding=\'UTF-8\'?&gt;&lt;entry xmlns="http://www.w3.org/2005/Atom"&gt;&lt;id&gt;https://docs.google.com/feeds/default/private/full/document%3A'.$id_doc.'&lt;/id&gt;&lt;/entry&gt;';
curl_setopt($curl, CURLOPT_URL, "http://docs.google.com/feeds/default/private/full/folder%3A".$id_folder);
curl_setopt($curl, CURLOPT_HTTPHEADER, $h);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_POST, true);
$response = curl_exec($curl);

//header('Content-type: text/xml');
//echo $response;
// Parse the response

// Exportamos a HTML
curl_setopt($curl, CURLOPT_URL, "http://docs.google.com/feeds/download/presentations/Export?docID=$id_doc&amp;exportFormat=pdf");
curl_setopt($curl, CURLOPT_HTTPHEADER, $h);
curl_setopt($curl, CURLOPT_POST, false);
<a href="http://www.php.net/header">header</a>('Content-type: application/pdf');
<a href="http://www.php.net/echo">echo</a> curl_exec($curl);

curl_close($curl);</code></pre>
<p>Nuestra fuente: <a href="http://sentidoweb.com/2011/03/27/subir-y-exportar-documentos-usando-google-docs-y-php.php?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+sentidoweb+%28Sentido+Web%29&amp;utm_content=Google+International" target="_blank">Sentidoweb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/subir-y-exportar-documentos-usando-google-docs-y-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejecutar código PHP desde linea de comandos</title>
		<link>http://www.adobe-user-group-granada.es/ejecutar-codigo-php-desde-linea-de-comandos/</link>
		<comments>http://www.adobe-user-group-granada.es/ejecutar-codigo-php-desde-linea-de-comandos/#comments</comments>
		<pubDate>Thu, 17 Feb 2011 10:34:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=937</guid>
		<description><![CDATA[En algunas ocasiones se pueden encontrar ejemplos de cosas sobrecomplicadas, un ejemplo es como ejecutar código PHP desde linea de comandos.
Es evidente que si queremos ejecutar un script PHP lo podemos hacer mediante unwget al fichero si esta colgado en un servidor web:

#!/bin/bash
wget http://ejemplo.com/scripts/ejemplo.php
rm ejemplo.php
Pero no hace falta tenerlo en el servidor web para poder ejecutarlo, por ejemplo:
&#60;?php
 [...]]]></description>
			<content:encoded><![CDATA[<p>En algunas ocasiones se pueden encontrar ejemplos de cosas <strong>sobrecomplicadas</strong>, un ejemplo es como ejecutar código <strong>PHP desde linea de comandos</strong>.<br />
Es evidente que si queremos ejecutar un <strong>script PHP</strong> lo podemos hacer mediante un<strong>wget</strong> al fichero si esta colgado en un servidor web:</p>
<p><span id="more-937"></span></p>
<pre>#!/bin/bash
wget http://ejemplo.com/scripts/ejemplo.php
rm ejemplo.php</pre>
<p>Pero no hace falta tenerlo en el servidor web para poder ejecutarlo, por ejemplo:</p>
<pre>&lt;?php
        echo "hola desde PHP\n";
?&gt;</pre>
<p>Si usamos el comando <strong>php</strong> desde linea de comandos y le pasamos el <strong>script</strong> lo estaremos ejecutando:</p>
<pre># php ejemplo1.php
hola desde PHP</pre>
<p>Si en el script además le añadimos el <strong>shebang</strong> con el path completo al binario de<strong>php</strong>:</p>
<pre>#!/usr/local/bin/php
&lt;?php
        echo "hola desde PHP\n";
?&gt;</pre>
<p>Podremos simplemente darle permisos de ejecución y ejecutarlo:</p>
<pre># chmod +x ejemplo2.php
# ./ejemplo2.php
hola desde PHP</pre>
<p>Nuestra fuente: <a href="http://systemadmin.es/2009/11/ejecutar-codigo-php-desde-linea-de-comandos" target="_blank">systemadmin.es</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/ejecutar-codigo-php-desde-linea-de-comandos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Acortar URLs mediante goo.gl y PHP</title>
		<link>http://www.adobe-user-group-granada.es/acortar-urls-mediante-goo-gl-y-php/</link>
		<comments>http://www.adobe-user-group-granada.es/acortar-urls-mediante-goo-gl-y-php/#comments</comments>
		<pubDate>Fri, 21 Jan 2011 10:16:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[enlaces]]></category>
		<category><![CDATA[google]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=929</guid>
		<description><![CDATA[La API de Google para acortar URLs permite acortar URLs, recuperar info del link original y las URLs  acortadas de un usuario, aunque para usarlo se necesita crear una clave y  dar de alta proyecto.
El resto es fácil, acceso mediante CURL y listo:
    define('GOOGLE_API_KEY', '[insert your key here]');
   [...]]]></description>
			<content:encoded><![CDATA[<p>La <a href="http://code.google.com/apis/urlshortener/index.html">API de Google para acortar URLs</a> permite acortar URLs, recuperar info del link original y las URLs  acortadas de un usuario, aunque para usarlo se necesita crear una clave y  dar de alta proyecto.<span id="more-929"></span></p>
<p>El resto es fácil, acceso mediante CURL y listo:</p>
<pre>    <a href="http://www.php.net/define">define</a>('GOOGLE_API_KEY', '[insert your key here]');
    <a href="http://www.php.net/define">define</a>('GOOGLE_ENDPOINT', 'https://www.googleapis.com/urlshortener/v1');

    function shortenUrl($longUrl)
    {
        // initialize the cURL connection
        $ch = curl_init(
            <a href="http://www.php.net/sprintf">sprintf</a>('%s/url?key=%s', GOOGLE_ENDPOINT, GOOGLE_API_KEY)
        );

        // tell cURL to return the data rather than outputting it
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

        // create the data to be encoded into JSON
        $requestData = <a href="http://www.php.net/array">array</a>(
            'longUrl' =&gt; $longUrl
        );

        // change the request type to POST
        curl_setopt($ch, CURLOPT_POST, true);

        // set the form content type for JSON data
        curl_setopt($ch, CURLOPT_HTTPHEADER, <a href="http://www.php.net/array">array</a>('Content-type: application/json'));

        // set the post body to encoded JSON data
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestData));

        // perform the request
        $result = curl_exec($ch);
        curl_close($ch);

        // decode and return the JSON response
        return json_decode($result, true);
    }

    $response = shortenUrl('http://phpriot.com');

    <a href="http://www.php.net/echo">echo</a> <a href="http://www.php.net/sprintf">sprintf</a>(
        '%s was shortened to %s',
        $response['longUrl'],
        $response['id']
    );
</pre>
<p>Nuestra fuente: <a href="http://sentidoweb.com/2011/01/18/acortar-urls-mediante-goo-gl-y-php.php?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+sentidoweb+%28Sentido+Web%29&amp;utm_content=Google+International" target="_blank">Sentidoweb</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/acortar-urls-mediante-goo-gl-y-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Deshabilitar PHP para un directorio concreto</title>
		<link>http://www.adobe-user-group-granada.es/deshabilitar-php-para-un-directorio-concreto/</link>
		<comments>http://www.adobe-user-group-granada.es/deshabilitar-php-para-un-directorio-concreto/#comments</comments>
		<pubDate>Mon, 17 Jan 2011 11:58:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=927</guid>
		<description><![CDATA[Existen partes dentro de cualquier aplicación dónde sólo existen ficheros de imágenes o vídeos dónde nunca debe ejecutarse un fichero PHP. Vamos a ver como deshabilitar el PHP por directorio:
Para deshabilitar PHP deberemos usar la directiva php_admin_flag con la opciónengine a off dentro del Directory que indiquemos:
	&#60;Directory "/var/systemadmin.es/htdocs/images"&#62;
		php_admin_flag engine off
	&#60;/Directory&#62;
De esta forma, aunque un usuario sea capaz de subir código en [...]]]></description>
			<content:encoded><![CDATA[<p>Existen partes dentro de cualquier aplicación dónde sólo existen ficheros de imágenes o vídeos dónde nunca debe ejecutarse un fichero <strong>PHP</strong>. Vamos a ver como <strong>deshabilitar el PHP</strong> por directorio:</p>
<p>Para <strong>deshabilitar PHP</strong> deberemos usar la directiva <strong>php_admin_flag</strong> con la opción<strong>engine</strong> a <strong>off</strong> dentro del <strong>Directory</strong> que indiquemos:</p>
<pre>	&lt;Directory "/var/systemadmin.es/htdocs/images"&gt;
		php_admin_flag engine off
	&lt;/Directory&gt;</pre>
<p>De esta forma, aunque un usuario sea capaz de subir código en la carpeta de imágenes por algún fallo en el control, el <strong>código PHP</strong> nunca se ejecutará y en su lugar se servirá como texto plan e inofensivo.</p>
<p>Nuestra fuente: <a href="http://systemadmin.es/2010/08/deshabilitar-php-para-un-directorio-concreto" target="_blank">Systemadmin.es</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/deshabilitar-php-para-un-directorio-concreto/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rasmus Lerdorf: Ingeniero estrella y padre del PHP</title>
		<link>http://www.adobe-user-group-granada.es/rasmus-lerdorf-ingeniero-estrella-y-padre-del-php/</link>
		<comments>http://www.adobe-user-group-granada.es/rasmus-lerdorf-ingeniero-estrella-y-padre-del-php/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 09:46:10 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[noticias]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=451</guid>
		<description><![CDATA[Rasmus Lerdorf, ingeniero de la Universidad de Waterloo, nació en Groenlandia y criado en Dinamarca; se ha consagrado como uno de los desarrolladores más importantes luego de la creación del lenguaje de programación PHP (Hypertext Pre Procesor) en 1995.
Durante toda su carrera ha trabajado en código abierto desde empresas tan consagradas como  IBM, Bell [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Rasmus Lerdorf</strong>, ingeniero de la Universidad de Waterloo, nació en Groenlandia y criado en Dinamarca; se ha consagrado como uno de los desarrolladores más importantes luego de la creación del <a href="http://www.maestrosdelweb.com/editorial/phpintro/">lenguaje de programación PHP</a> (Hypertext Pre Procesor) en 1995.</p>
<p><img class="alignright" src="http://www.maestrosdelweb.com/images/2010/02/introspectiva-rasmus-lerdorf.jpg" alt="Rasmus Lerdorf" />Durante toda su carrera ha trabajado en código abierto desde empresas tan consagradas como  IBM, Bell Globis y Yahoo.</p>
<p>Desde Septiembre de 2002 hasta noviembre del año pasado, Rasmus fue parte de Yahoo, en dónde no sólo generó servicios web y aportes gracias su amplia experiencia como autor de PHP, como ingenierio de infraestructura y arquitectura, también dictó muchas conferencias y trabajó en la oferta web 2.0 de la empresa.</p>
<p>Para aquellos seguidores de Rasmus en Twitter que se enteraron de su salida vía este servicio, muchos no se sorprendieron luego de varios comentarios que evidenciaban su malestar en la empresa: <a href="http://twitter.com/rasmus/status/7374054368">“Haciendo reviews focales de Yahoo. Espera, ¿no había renunciado? Esta era una de las cosas que más odiaba hacer cuando me pagaban para hacerlo”.</a></p>
<h3>Las versiones de PHP</h3>
<p>El nacimiento del lenguaje de programación PHP se ha desarrollado y comercializado a través <a href="http://www.zend.com/en/">Zend</a>, y todo bajo la supervisión de Lerdorf. La idea original partió cuando Rasmus sintió la necesidad de conocer cuantas visitas únicas recibía su sitio y creo un interprete de CGI sencillo, en el que solo usó <a href="http://geneura.ugr.es/CUR/PERL/">lenguaje Perl</a>.</p>
<p>PHP esta sobre Java en cuanto a popularidad para la creación de aplicaciones web. Para el fundador de Netscape, <a href="http://users.rcn.com/thomst/marca.html">Marc Andreessen</a> su característica se basa en la simplicidad y lo describe como un producto especialmente sencillo para los nuevos desarrolladores en relación a Java, que se ha transformado en algo mucho más complejo a la hora de trabajar.</p>
<p><span id="more-451"></span></p>
<p>Durante 1997 la segunda versión de PHP dejó como resultado a más de 50 mil dominios en Internet. De la mano de otros autores fue la aparición de PHP 3.0, que nació gracias a los desarrolladores <a href="http://blog.internetnews.com/skerner/2009/02/andi-gutmans-named-ceo-of-php.html">Andi Gutmans</a> y <a href="http://www.suraski.net/blog/">Zeev Suraski</a>, su función principal era la ampliación del núcleo.</p>
<p>La versión PHP4 fue lanzada en 2000 basada en el núcleo “<a href="http://www.zend.com/en/">Zend Engine</a>“. Desde ese entonces PHP es parte de millones de sitios, con más del 20% de los dominios en internet. Su última versión PHP5 vio la luz en 2004 y su última actualización fue a finales del 2009. La gracia de esta renovación es la capacidad de soportar la programación orientadas a objetos. Pero se espera que pronto se anuncie la fecha del lanzamiento de PHP6.</p>
<h3>La experiencia de los desarrolladores</h3>
<p><a href="http://www.learnphp-tutorial.com/"><img class="alignright" src="http://www.maestrosdelweb.com/images/2010/02/php-work.jpg" alt="php" /></a>Para José Tomás Albornoz (<a href="http://eljojo.net/">@elJOjo</a>), PHP es el lenguaje de programación más amigable y ligero para trabajar en la creación de sitios web. Desde que Jojo comenzó a trabajar en PHP a los 12 años, basto un par de pruebas a través de la descarga de algunos códigos, para que él los modificara por su cuenta.</p>
<p>PHP no sólo sirve para trabajar en sitios web, también para programar bots, como lo son <a href="http://twitter.com/donsaludador">@donsaludador</a> y <a href="http://twitter.com/dondespididor">@dondespedidor</a>. Otro ejemplo que nos comentó Albornoz fue el servicio de <a href="http://www.bittr.org/">bittr</a> en Chile, te permite usar Twitter a través de mensajes de textos (SMS) o mensajes multimedia (MMS) mediante cualquier compañía móvil con tarifas.</p>
<p>Por otro lado, Fernando Lagos (<a href="http://blog.zerial.org/">@Zerial</a>), con 5 años de experiencia en PHP, nos cuenta más acerca de las herramientas de este lenguaje:</p>
<blockquote><p>“Lo uso porque es un lenguaje orientado a web, para desarrollar aplicaciones dinámicas. PHP es uno de los lenguajes mas fáciles de aprender y muy intuitivo”.</p></blockquote>
<p>Zerial afirma que no existe niveles de programadores:</p>
<blockquote><p>“Creo que la línea que los separa es la orientación a objetos. Una persona que sabe sobre el paradigma de orientación a objetos y trabajar con programación OO usando PHP trabaja de una forma más ordenada”.</p></blockquote>
<h3>Sigue e interactúa con el creador de PHP</h3>
<p><a href="http://twitter.com/rasmus"><br />
<img class="alignright" src="http://www.maestrosdelweb.com/images/2010/02/rasmus-twitter.jpg" alt="rasmus" /></a>Más allá de ser un ingeniero brillante, Rasmus forma parte una hermosa familia en conjunto con Christine, su esposa. El desarrollador utiliza las redes sociales como una agenda con hojas de contactos y también comparte archivos personales como <a href="http://www.flickr.com/photos/rlerdorf/">las fotos del nacimiento de su hijo</a>.</p>
<p>Además a través de su sitio personal <a href="http://www.lerdorf.com/">Lerdorf.com</a> puedes conocer más acerca de su vida, proyectos y avances del padre del PHP. No te olvides que también lo puedes seguir en su cuenta en Twitter: <a href="http://twitter.com/rasmus">@rasmus</a>,  conocer sobre el futuro de PHP y sus actualizaciones.</p>
<p>Nuestra fuente: <a href="http://www.maestrosdelweb.com/editorial/rasmus-lerdorf-php/">maestrosdelweb.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/rasmus-lerdorf-ingeniero-estrella-y-padre-del-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Facebook desarrolla XHP</title>
		<link>http://www.adobe-user-group-granada.es/facebook-desarrolla-xhp/</link>
		<comments>http://www.adobe-user-group-granada.es/facebook-desarrolla-xhp/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 15:38:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=399</guid>
		<description><![CDATA[Si el otro día Facebook nos sorprendía con HipHop, hoy me entero que también han desarrollado una extensión para PHP llamada XHP, la cual permite añadir XML (o HTML) en el código PHP y que sea una expresión válida. ¿Qué quiere decir esto?, pues que no es necesario hacer tratar el HTML como string o [...]]]></description>
			<content:encoded><![CDATA[<p>Si el otro día <a href="http://sentidoweb.com/2010/02/03/facebook-crea-hiphop-para-php.php">Facebook nos sorprendía con HipHop</a>, hoy me entero que también han desarrollado una extensión para PHP llamada XHP, la cual permite añadir XML (o HTML) en el código PHP y que sea una expresión válida. ¿Qué quiere decir esto?, pues que no es necesario hacer tratar el HTML como string o usar <em>?&gt; … &lt;?php</em> para añadir HTML en nuestros scripts.</p>
<pre>$href = 'http://www.facebook.com';
<a href="http://www.php.net/echo">echo</a> &amp;lt;a href={$href}&amp;gt;Facebook&amp;lt;/a&amp;gt;;</pre>
<p>Además escapa automáticamente el contenido de las variables para evitar vulnerabilidades:</p>
<pre>&amp;lt;?php
<a href="http://www.php.net/echo">echo</a> '&amp;lt;div&amp;gt;Hello '.htmlspecialchars($_GET['name']).'&amp;lt;/div&amp;gt;';</pre>
<pre>&amp;lt;?php
<a href="http://www.php.net/echo">echo</a> &amp;lt;div&amp;gt;Hello {$_GET['name']}&amp;lt;/div&amp;gt;</pre>
<p>También ofrece la posibilidad de definir elementos XML, sus atributos o su estructura. Tengo mis dudas sobre su rendimiento, pero pensando en que ellos “compilan” el código PHP, al final no les afectará en rendimiento. <a href="http://wiki.github.com/facebook/xhp/">XHP</a> Vía / <a href="http://www.phpdeveloper.org/news/14004">PHPDeveloper.org</a></p>
<p>Nuestra Fuente: <a href="http://sentidoweb.com/2010/02/12/facebook-desarrolla-xhp.php?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+sentidoweb+%28Sentido+Web%29&amp;utm_content=Google+International" target="_blank">sentidoweb.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/facebook-desarrolla-xhp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Trucos para escribir menos código PHP</title>
		<link>http://www.adobe-user-group-granada.es/trucos-para-escribir-menos-codigo-php/</link>
		<comments>http://www.adobe-user-group-granada.es/trucos-para-escribir-menos-codigo-php/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 15:29:41 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[artículos]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programación]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=393</guid>
		<description><![CDATA[Aquí os dejo unos pocos trucos para escribir menos código PHP en tus scripts, seguro que algunos de estos trucos ya los conocías pero bueno me parece interesante recopilar estos trucos.
Reducir las sentencias if()
if($variable == 2)
{
$valor = true;
}
else
{
$valor = false;
}


Podríamos condensar esas 8 líneas de código en una única línea:
$valor = ($variable == 2) ? [...]]]></description>
			<content:encoded><![CDATA[<p>Aquí os dejo unos pocos <strong>trucos para escribir menos código PHP en tus scripts</strong>, seguro que algunos de estos trucos ya los conocías pero bueno me parece interesante recopilar estos trucos.</p>
<h2>Reducir las sentencias if()</h2>
<pre>if($variable == 2)
{
$valor = true;
}
else
{
$valor = false;
}
</pre>
<p><span id="more-393"></span></p>
<p>Podríamos condensar esas 8 líneas de código en una única línea:</p>
<pre>$valor = ($variable == 2) ? true : false;
</pre>
<h2>Declarando variables</h2>
<p>A menudo <strong>declaramos multiples variables cada una en líneas separadas</strong>, todas estas variables se podrían llegar a agrupar en una única declaración.</p>
<pre>$variable1 = 7;
$variable2 = 12;
$variable3 = 9;
</pre>
<p>Podríamos <strong>declarar varias variables con diferente valor en una única línea</strong> de la siguiente manera:</p>
<pre>list($variable1 ,$variable2 ,$variable3) = array(7,12,9);
</pre>
<p>Y más fácil todavia si las variables declaradas coinciden en el valor asignado:</p>
<pre>$variable1 = $variable2 = $variable3 = “Prueba”;
</pre>
<h2>Usar switch() en lugar de if()</h2>
<p>Parece algo lógico pero <strong>muchas veces utilizamos if() dónde podríamos ahorrar código usando switch()</strong>:</p>
<pre>if($opcion == “menu”)
{
//cargar menu
}
elseif($opcion == “portada”)
{
//cargar portada
}
else
{
//no cargar nada
}
</pre>
<p>Usando <strong>switch() podríamos reducir el código</strong> ostensiblemente:</p>
<pre>switch($opcion)
{
case ‘menu’:
//cargar menu
break;
case ‘portada’:
//cargar portada
break;
default:
//no cargar nada
}
</pre>
<p>Son sólo tres trucos pero <strong>seguramente te pueden ahorrar muchas líneas de código si sabes aplicarlos correctamente</strong>.</p>
<p>Nuestra Fuente:  <a href="http://www.tufuncion.com/reducir-codigo-ph?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+tufuncion+%28TuFuncion%29&amp;utm_content=Google+International" target="_blank">tufuncion.com</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/trucos-para-escribir-menos-codigo-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ejecutar scripts en php con un php.ini diferente</title>
		<link>http://www.adobe-user-group-granada.es/ejecutar-scripts-en-php-con-un-php-ini-diferente/</link>
		<comments>http://www.adobe-user-group-granada.es/ejecutar-scripts-en-php-con-un-php-ini-diferente/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 19:57:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[lamp]]></category>
		<category><![CDATA[php.ini]]></category>

		<guid isPermaLink="false">http://www.adobe-user-group-granada.es/?p=268</guid>
		<description><![CDATA[Es perfectamente normal tener una parte del código de una aplicación web que se ejecuta por interacción del usuario con el servidor web y otra que lo hace de forma periódica. Estas dos partes se suelen desarrollar en el mismo lenguaje para que compartan las partes comunes de código. Vamos a ver como aplicar restricciones por [...]]]></description>
			<content:encoded><![CDATA[<p>Es perfectamente normal tener una parte del código de una aplicación web que se ejecuta por interacción del usuario con el servidor web y otra que lo hace de forma periódica. Estas dos partes se suelen desarrollar en el mismo lenguaje para que compartan las partes comunes de código. Vamos a ver como <strong>aplicar restricciones por separado</strong>.</p>
<p>Para el código que se ejecuta con el servidor web suele ser útil <a href="/2009/01/seguridad-en-php-deshabilitar-funciones">deshabilitar funciones de PHP</a> que no queremos usar. El problema es que seguramente la parte de la aplicación que ejecutamos periódicamente (con el <strong>cron</strong> por ejemplo) tendrá unos requerimientos diferentes.</p>
<p>Para poder ejecutar los procesos (mailings, calculos varios…) podemos indicar que se use un <strong>php.ini diferente</strong> mediante el <strong>parámetro -c</strong>:</p>
<pre>php -c /etc/php.procesos.ini proceso.cualquiera.php
</pre>
<p>Mediante este comando indicamos a <strong>php</strong> que ejecute el script<strong>proceso.cualquiera.php</strong> usando la configuración presente en el fichero<strong>/etc/php.procesos.ini</strong>. En este fichero podremos ser más permisivos sin afectar a las<strong>restricciones del servidor web</strong>.</p>
<p>Nuestra Fuente: <a href="http://systemadmin.es/2010/02/ejecutar-scripts-en-php-con-un-phpini-diferente" target="_blank">SystemAdmin.es</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.adobe-user-group-granada.es/ejecutar-scripts-en-php-con-un-php-ini-diferente/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

