<?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>BodegaWeb &#187; PHP</title>
	<atom:link href="http://bodegaweb.com/category/software/php/feed" rel="self" type="application/rss+xml" />
	<link>http://bodegaweb.com</link>
	<description>De todo un poco en internet</description>
	<lastBuildDate>Fri, 30 Apr 2010 04:37:20 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Seo: Como optimizar nuestra paginacion para los buscadores (parte 1).</title>
		<link>http://bodegaweb.com/seo-como-optimizar-nuestra-paginacion-para-los-buscadores-parte-1.html</link>
		<comments>http://bodegaweb.com/seo-como-optimizar-nuestra-paginacion-para-los-buscadores-parte-1.html#comments</comments>
		<pubDate>Thu, 09 Jul 2009 15:19:41 +0000</pubDate>
		<dc:creator>ramzax200</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Seo]]></category>
		<category><![CDATA[buscadores]]></category>
		<category><![CDATA[goole]]></category>
		<category><![CDATA[optimizacion]]></category>

		<guid isPermaLink="false">http://bodegaweb.com/?p=251</guid>
		<description><![CDATA[En esta ocacion les traigo un consejo mas para Seo, es un consejo muy util y que no todos saben, con el cual aprovecharan al 100% la paginacion de sus sitios.
Con paginacion me refiero cuando tienen articulos, notas, paginas, de la forma en que aparece en la parte inferior algo como Pagina 1 2 3 [...]]]></description>
			<content:encoded><![CDATA[<p>En esta ocacion les traigo un consejo mas para Seo, es un consejo muy util y que no todos saben, con el cual aprovecharan al 100% la paginacion de sus sitios.<br />
Con paginacion me refiero cuando tienen articulos, notas, paginas, de la forma en que aparece en la parte inferior algo como Pagina 1 2 3 4 5 6 7 8.</p>
<p>Normalmente, si no lo tienen optimizado cada una de las paginas tiene el mismo titulo, ya sea la pagina 1, 2, 3, 4, 5, etc&#8230; todas comparten el titulo. Para lo que vamos a hacer es necesario tener conocimientos en php.</p>
<p>La idea es colocar un titulo unico para cada pagina de la paginacion, y estos titulos los vamos a conocer de 2 formas diferentes.</p>
<p>1. La primera es listando una serie de frases con las cuales nos queremos posicionar.<br />
2. La segunda es conociendo las frases de busqueda por las que han entrado a nuestro sitio desde buscadores, y aun no aparecemos en el puesto #1 o cercano. Esto lo podemos hacer con google analytics para conocer las entradas desde buscadores.</p>
<p>Ahora nos disponemos a hacer el listado completo de frases que serviran para los titulos de nuestra paginacion.</p>
<p>Ej:</p>
<blockquote><p>$titulos=array(<br />
&#8220;Autos deportivos&#8221;,<br />
&#8220;Fotos de Autos&#8221;,<br />
&#8220;Fotos de coches&#8221;,<br />
&#8220;Autos arreglados&#8221;);</p>
<p>//Debemos de saber la pagina actual, para extraer el titulo correspondiente.<br />
$titulo_actual=$titulos[$pagina];</p></blockquote>
<p>Ya conociendo el titulo de la pagina, debemos colocarlo en las etiquetas de &lt;title&gt;&lt;/title&gt; dentro del &lt;header&gt;&lt;/header&gt;.</p>
<blockquote><p>echo &#8220;&lt;title&gt;$titulo_actual&lt;/title&gt;&#8221;;</p></blockquote>
<p>Posteriormente lo colocaremos dentro de etiquetas &lt;h1&gt;  o &lt;h2&gt; en el contenido del sitio.</p>
<blockquote><p>echo &#8220;&lt;h2&gt;$titulo_actual&lt;/h2&gt;&#8221;;</p></blockquote>
<p>Ya con esto empezamos a optimizar la paginacion para los buscadores, teniendo un titulo unico de pagina y la frase optimizada dentro del contenido de nuestro sitio.</p>
<p>Y esto es todo, mas adelante publicare el consejo numero 2 para optimizar la paginacion para buscadores.</p>
<p>Seo y optimizacion para buscadores.</p>
]]></content:encoded>
			<wfw:commentRss>http://bodegaweb.com/seo-como-optimizar-nuestra-paginacion-para-los-buscadores-parte-1.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PhpMailer directo a Bandeja de Entrada (Hotmail)</title>
		<link>http://bodegaweb.com/phpmailer-directo-a-bandeja-de-entrada-hotmail.html</link>
		<comments>http://bodegaweb.com/phpmailer-directo-a-bandeja-de-entrada-hotmail.html#comments</comments>
		<pubDate>Fri, 08 May 2009 09:10:10 +0000</pubDate>
		<dc:creator>ramzax200</dc:creator>
				<category><![CDATA[PhpMailer]]></category>
		<category><![CDATA[hotmail]]></category>

		<guid isPermaLink="false">http://bodegaweb.com/?p=213</guid>
		<description><![CDATA[PhpMailer es un sistema para enviar correos facilmente desde tu web. (Posteriormente explicaremos mas al respecto).
Lo curioso es que normalmente HOTMAIL manda a correo no deseado los mensajes provinientes de direcciones desconocidas.
Solo los que son &#8220;direcciones seguras&#8221; llegan a tu bandeja de entrada.
Cuando me puse a probar el &#8220;test_script&#8221; que viene en la libreria PHPMAILER [...]]]></description>
			<content:encoded><![CDATA[<p>PhpMailer es un sistema para enviar correos facilmente desde tu web. (Posteriormente explicaremos mas al respecto).</p>
<p>Lo curioso es que normalmente HOTMAIL manda a <strong>correo no deseado</strong> los mensajes provinientes de direcciones desconocidas.<br />
Solo los que son &#8220;direcciones seguras&#8221; llegan a tu <strong>bandeja de entrada</strong>.</p>
<p>Cuando me puse a probar el &#8220;<span style="color: #0000ff;"><strong>test_script</strong></span>&#8221; que viene en la libreria PHPMAILER me di cuenta que los correos llegaban directo a <strong>Bandeja de entrada</strong>.<br />
Hice varias pruebas con mis propios scripts, y todos llegaban a <strong>correo no deseado</strong> si la direccion no estaba en la <strong>lista segura</strong>.</p>
<p>Al percatarme de esto, hice modificaciones en el &#8220;<span style="color: #0000ff;"><strong>test_script</strong></span>&#8221; y fue que me di cuenta, que si dejamos en el titulo <strong>&#8220;PHPMailer SMTP&#8221; </strong>y como Attachment la imagen que viene por defecto <strong>$mail-&gt;AddAttachment(&#8220;images/phpmailer.gif&#8221;, &#8220;phpmailer.gif&#8221;);</strong> asi si llegaba directo a <strong>Bandeja de entrada</strong>.</p>
<h3>¿A que se debe esto?</h3>
<p>No lo se, quiza Hotmail de ciertos permisos, cuando llega ese &#8220;titulo&#8221; mas ese &#8220;archivo adjunto&#8221;.</p>
<p><strong>¿Quien se anima a hacer pruebas de spam con ese metodo?<br />
¿Llegara a bandeja de entrada siempre?</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://bodegaweb.com/phpmailer-directo-a-bandeja-de-entrada-hotmail.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Instalar PHP 4 en Windows</title>
		<link>http://bodegaweb.com/instalar-php-4-en-windows.html</link>
		<comments>http://bodegaweb.com/instalar-php-4-en-windows.html#comments</comments>
		<pubDate>Mon, 30 Mar 2009 21:33:45 +0000</pubDate>
		<dc:creator>ramzax200</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://bodegaweb.com/?p=104</guid>
		<description><![CDATA[En este post te enseñaremos como instalar PHP 4 en Windows, sabemos que no es la version mas actualizada y proximamente te traeremos el manual para instalar PHP 5 en cualquier sistema operativo.

1. En http://www.php.net/downloads.php dirígete a &#8220;Windows binaries&#8221; y descárgate la última versión estable del programa.
2. Descomprime el archivo que te acabas de bajar [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_124" class="wp-caption alignright" style="width: 160px"><a href="http://bodegaweb.com/wp-content/uploads/2009/03/5345php.jpg"><img class="size-thumbnail wp-image-124" title="PHP LOGO" src="http://bodegaweb.com/wp-content/uploads/2009/03/5345php-150x106.jpg" alt="5345php" width="150" height="106" /></a><p class="wp-caption-text"> </p></div>
<p>En este post te enseñaremos como instalar PHP 4 en Windows, sabemos que no es la version mas actualizada y proximamente te traeremos el manual para instalar PHP 5 en cualquier sistema operativo.</p>
<p><span id="more-104"></span></p>
<p><strong>1.</strong> En <strong><a href="http://www.php.net/downloads.php" target="_blank">http://www.php.net/downloads.php</a></strong> dirígete a &#8220;<strong>Windows binaries</strong>&#8221; y descárgate la última versión estable del programa.</p>
<p><strong>2.</strong> Descomprime el archivo que te acabas de bajar y extrae todos los archivos a una capeta temporal. (Nota: asegúrate de que tu sistema está configurado para ver todos los archivos, incluso los ocultos: en el explorador pestaña &#8220;ver&#8221; elige la opción: &#8220;Mostrar todos los archivos&#8221;).</p>
<p><strong>3.</strong> Copia todos los archivos     .dll desde la carpeta temporal que hemos creado a la Carpeta System (en w95/98 es c:\windows\system, mientras que en Windows NT es c:\WINNT)</p>
<p><strong>4.</strong> Cambia el nombre del archivo <strong>php.ini-dist</strong> a <strong>php.ini</strong> y cópialo en el directorio de windows <strong>c:\windows</strong> o <strong>c:\WINNT</strong>.</p>
<ul>
<li> En C, crea una carpeta con el nombre PHP4, y copia en ella el archivo <strong>PHP.EXE</strong></li>
<li> En c:\Archivos de programa\Apache Group\Apache\conf selecciona el archivo <strong>httpd.conf </strong>y ábrelo con un editor de textos (el bloc de notas por ejemplo).</li>
</ul>
<p><strong>5.</strong> Al final del archivo httpd.conf añade las siguientes líneas:</p>
<ul>
<li> ScriptAlias /php4/ &#8220;C:/php4/&#8221;</li>
<li> AddType Application/x-httpd-php .php</li>
<li> Action application/x.httpd-php &#8220;/php4/php.exe&#8221;</li>
<li> Action application/xhttpd-php .php3 (con esta última línea te aseguras de que si sigues algún ejercicio de php3, se ejecutará correctamente).</li>
</ul>
<p><strong>6.</strong> Guarda el archivo <strong>httpd.conf</strong>. (Nota:Asegurate de que lo guardas como un archivo de texto sin formato y no como .doc o .rtf o similar)</p>
<p><strong>7.</strong> Vete otra vez al menú de inicio reinicia el servidor apache, para recargar los archivos de configuración y que apache reconozca que se la ha añadido php.</p>
<p><strong>8.</strong> Crea un archivo: info.txt, con el mismo contenido que se a continuación, y guárdalo en c:\Archivo de programas\Apache Group\Apache\httdocs con el nombre info.php (esto es, cámbiale la extensión .txt por la extensión .php)</p>
<p><strong>9.</strong> Abre el navegador y escribe <strong>http://localhost/info.php</strong> tienes que ver una página con el logo de php e información sobre la versión de php que tienes instalada. Ya está instalado y puedes empezar a programar con php.</p>
<p>Recuerda que siempre que quieras ejecutar un archivo php en local tienes que:</p>
<p><strong>1.</strong> Ejecutar Apache<br />
<strong>2.</strong> Colocar las archivos en la carpeta en c:\Archivo de programas\Apache Group\Apache\httdocs<br />
<strong>3.</strong> En el navegador dirigirte a http://localhost/carpeta/archivo.php</p>
]]></content:encoded>
			<wfw:commentRss>http://bodegaweb.com/instalar-php-4-en-windows.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Servidor de Sockets en PHP</title>
		<link>http://bodegaweb.com/servidor-de-sockets-en-php.html</link>
		<comments>http://bodegaweb.com/servidor-de-sockets-en-php.html#comments</comments>
		<pubDate>Mon, 30 Mar 2009 07:51:48 +0000</pubDate>
		<dc:creator>ramzax200</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Scripts]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[Raymond Fain]]></category>
		<category><![CDATA[Servidor]]></category>
		<category><![CDATA[Sockets]]></category>

		<guid isPermaLink="false">http://bodegaweb.com/?p=86</guid>
		<description><![CDATA[Un servidor de sockets es un servidor que posibilita la comunicacion entre multiples computadoras por medio de sockets, consume mucho menos recursos y bandwitdh que la comunicacion http, y es ideal para los juegos Multijugadores y Online hechos con Action Script de Flash o cualquier otro programa o lenguaje.
En esta entrada te explicaremos de manera [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_124" class="wp-caption alignright" style="width: 160px"><a href="http://bodegaweb.com/wp-content/uploads/2009/03/5345php.jpg"><img class="size-thumbnail wp-image-124" title="Servidor de Sockets en PHP" src="http://bodegaweb.com/wp-content/uploads/2009/03/5345php-150x106.jpg" alt="Servidor de Sockets en PHP" width="150" height="106" /></a><p class="wp-caption-text"> </p></div>
<p>Un servidor de sockets es un servidor que posibilita la comunicacion entre multiples computadoras por medio de sockets, consume mucho menos recursos y bandwitdh que la comunicacion http, y es <strong>ideal </strong>para los juegos <strong>Multijugadores </strong>y <strong>Online </strong>hechos con Action Script de Flash o cualquier otro programa o lenguaje.</p>
<p>En esta entrada te explicaremos de manera rapida como Crear tu propio servidor de Sockets en PHP.</p>
<p><span id="more-86"></span></p>
<p>Fuente en Ingles: http://djz.hu/2007/07/26/php-socket-server-chat-gateway-for-flash-clients/</p>
<p>Primero que nada, no pienso escribir un manual paso a paso de &#8220;COMO CREAR UN SOCKET SERVER CON PHP PARA FLASH O JUEGOS MULTIJUGADORES EN 10 MINUTOS&#8221; o algo asi.<br />
Lo que haremos sera solo explicar el funcionamiento basico del servidor de sockets con php y comunicarlo con flash en un puerto determinado.</p>
<p>Presentare ademas del codigo del servidor de sockets, un sencillo archivo en Flash, capaz de demostrar el funcionamiento de Flash con un Servidor de Sockets en php.</p>
<p>La idea fundamental y la base del sistema la hemos extraido de aqui : <a href="http://www.kirupa.com/developer/flash8/php5sockets_flash8.htm" target="_blank">kirupa.com &#8211; PHP 5 Sockets with Flash 8</a></p>
<p>Para empezar necesitamos de preferencia un servidor dedicado propio, o un servidor virtual al cual podamos tener acceso a shell o crear demonios.</p>
<p>Entonces, necesitamos crear un demonio php, sin limite de tiempo de ejecucion. Asi podra correr ilimitadamente o hasta que se reinicie el server.</p>
<p><strong>Empezando con el codigo:</strong></p>
<p>Declaramos la IP address donde nos conectaremos y el puerto escucha. Recuerden que debe de estar abierto en caso que haya un firewall.</p>
<pre lang="php">#!/usr/bin/php -q

Vamos a crear un array para las conexiones de datos, (si lo usa para chatear, sería útil para almacenar apodos en el mismo.), Y empezar a crear y escuchar un socket. Por favor tenga en cuenta, que todo lo que se imprime con "echo" va a un archivo "log" en nuestro caso.
<pre lang="php"> $_sockets = array();

if (($master = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) &lt; 0)
{
  echo "socket_create() failed, reason: " . socket_strerror($master) . "\n";
}

socket_set_option($master, SOL_SOCKET,SO_REUSEADDR, 1);

if (($ret = socket_bind($master, $address, $port)) &lt; 0)
{
  echo "socket_bind() failed, reason: " . socket_strerror($ret) . "\n";
}

if (($ret = socket_listen($master, 5)) &lt; 0)
{
  echo "socket_listen() failed, reason: " . socket_strerror($ret) . "\n";
}
else
{
  $started=time();
  echo "[".date('Y-m-d H:i:s')."] SERVER CREATED ( MAXCONN:".SOMAXCONN." ) \n";
  echo "[".date('Y-m-d H:i:s')."] Listening on ".$address.":".$port."\n";
}

$read_sockets = array($master);</pre>
<p>SOMAXCONN es una variable que establece el número de conexiones que puede manejar su máquina. En el mundo Unix se puede ajustar en tiempo de compilación del kernel, o se puede ajustar via sysctl.<br />
Después de esto vamos a crear un bucle persistente para tramitar las solicitudes.</p>
<pre lang="php">while (true)
{
  $changed_sockets = $read_sockets;
  $num_changed_sockets = socket_select($changed_sockets, $write = NULL, $except = NULL, NULL);

  foreach($changed_sockets as $socket)
  {
    if ($socket == $master)
    {
	   if (($client = socket_accept($master)) &lt; 0)
	   {
       echo "socket_accept() failed: reason: " . socket_strerror($msgsock) . "\n";
    	 continue;
	   }
	   else
	   {
	     array_push($read_sockets, $client);
	     echo "[".date('Y-m-d H:i:s')."] CONNECTED "."(".count($read_sockets)."/".SOMAXCONN.")\n";
	   }
    }
    else
    {
      $bytes = @socket_recv($socket, $buffer, 2048, 0);
      /*

      Here comes the core... <img src='http://bodegaweb.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> 

      */
    }
}</pre>
<p>Así pues, estos son los conceptos básicos. Hasta este punto, este código es casi el mismo que Raymond Fain del socketShell.php antes mencionados.</p>
<p>Como ya he comentado vamos a editar sólo una parte del código.<br />
Por lo que cada código que cito ahora, irá dentro de el bucle principal. Despues definiremos las funciones. Estas funciones se van fuera, el bucle.<br />
Lo ideal para realizar un servidor de sockets, es que cuente con los permisos "cross-domain-policy", ya que asi posibilita la interaccion entre servidores con flash.</p>
<p>El "Cross-domain-policy" es una serie de datos, en formato XML, que se parece a esto, en nuestro caso:<br />
Por lo tanto, almacenarla en una variable, y si se hace una solicitud debemos mostrarlo:</p>
<pre lang="php">if (preg_match("/policy-file-request/i", $buffer) || preg_match("/crossdomain/i", $buffer))
{
  echo "[".date('Y-m-d H:i:s')."] CROSSDOMAIN.XML REQUEST\n";
  $contents='';

  socket_write($socket,$contents);
  $contents="";

  $index = array_search($socket, $read_sockets);
  unset($read_sockets[$index]);
  socket_shutdown($socket, 2);
  socket_close($socket);
}</pre>
<p>Al recibir una peticion de cross-domain-policy debemos cerrar el socket, ya que si se envia correctamente el permiso entonces se abre un socket nuevo con la conexion adecuada.<br />
Ahora, cuando un usuario pierde la conexion, se sale del sitio o cualquier otra razon, debemos de cortar el socket y borrar sus variables.</p>
<pre lang="php">if (strlen($buffer) == 0)
{
  //we get the user's uniqe id from the database
  $id=$_sockets[intval($socket)]['nick'];

  $index = array_search($socket, $read_sockets);

  unset($read_sockets[$index]); // we clean up
  unset($_sockets[intval($socket)]); // we clean up our own data
  // cleaning up is essential when creating a daemon
  // we can't leave junk in the memory
  @socket_shutdown($socket, 2);
  @socket_close($socket);

  $allclients = $read_sockets; // reload active clients

  // $socket is now pointing to a dead resource id
  // but the send_Message() function will need it, I'll explain later

  send_Message($allclients, "");
  echo "[".date('Y-m-d H:i:s')."] QUIT ".$id."\n";
}</pre>
<p>Y ahora, la comunicacion real del socket:</p>
<pre lang="php">else
{
  $allclients = $read_sockets;
  array_shift($allclients);

  $piece = explode(" ",trim($buffer)); // we strip out all unwanted data
  $cmd = strtoupper($piece[0]);
}</pre>
<p>Suponiendo un codigo como el del protocolo IRC: <em><strong>MSG</strong> PARA MENSAJE</em></p>
<p>Debemos separar por medio del "espacio" para formar un array, y detectar el codigo que vamos a efectuar, despues, unir el resto que sera el "mensaje":</p>
<pre lang="php">if (!empty($piece[1])) $content = $piece[1];

switch ($cmd)
{
  case "IDENTIFY":
    $id = trim($piece[1]);
    $passwd = trim($piece[2]);
    send_Identify($allclients, $socket, $id, $passwd);
  break;

  case "MSG":
    $id = trim($piece[1]);
    $msg="";
    foreach ($piece as $key=&gt;$val)
    {
      if ($key &gt; "1") $msg.=$val." ";
    }
    $msg = trim($msg);
    send_Msg($allclients, $socket, $id, $msg);
  break;

  case "LIST":
    list_Users($allclients, $socket);
    break;
}</pre>
<p>Ahora, vamos con las funciones, declaradas despues del bucle. Debemos recalcar, que para enviar datos al cliente debemos de anexar un chr(0) por alguna razon de la comunicacion.</p>
<pre lang="php">function send_Identify($allclients, $socket, $id, $passwd)
{
  global $_sockets;
  $nicks = array();

  $dbconf = new DATABASE_CONFIG;

  $db_host = $dbconf-&gt;host;
  $db_base = $dbconf-&gt;database;
  $db_login = $dbconf-&gt;login;
  $db_password = $dbconf-&gt;password;

  foreach ($_sockets as $_socket)
  {
    foreach ($_socket as $key=&gt;$val)
    {
      if (empty($nicks[$val])) $nicks[$val]=1;
      else $nicks[$val]=$nicks[$val]+1;
    }
  }

  if (empty($nicks[$id]))
  {
    $s=1;
    //  Here will be a simple authentication.

    $link = mysql_connect($db_host, $db_login, $db_password);
    if (!$link) die("Could not connect:" . mysql_error() . "\n");

    $db_selected = mysql_select_db($db_base, $link);
    if (!$db_selected) die("Can't use $db_base :" . mysql_error() . "\n");

    $result = mysql_query("SELECT nick FROM members WHERE id='".intval($id)."' AND password='".crypt($passwd)."' AND active='1' LIMIT 1");
    $data = mysql_fetch_array($result);
    $name = $data['name'];
    $_sockets[intval($socket)]=array('id'=&gt;$id, 'nick'=&gt;$name);

    mysql_free_result($result);
    mysql_close($link);</pre>
<p>Es escencial que cerremos la conexion a la base de datos, que si no en un par de horas se acomularan los intentos de conexion a la base de datos y se colapsara el server.</p>
<pre lang="php">  }
  else $s=0;

  //   We'll answer to the flash in XML form.
  //   But we receive in plain text format.

  if ($s == 1)
  {
    $out = "";
    send_Message($allclients, "");
    // this goes to all active, identified clients
    echo "[".date('Y-m-d H:i:s')."] LOGIN ".$id."(".count($allclients)."/".SOMAXCONN.")\n";
  }
  else $out = "";

  socket_write($socket, $out.chr(0)); // write back to the client
}

function send_Msg($allclients,$socket,$id,$msg)
{
    global $_sockets;

    if (!empty($_sockets[intval($socket)]))
    {
        $nicks = array(); //amig fut a parancs ebben vannak a nickek.

        foreach ($_sockets as $_socket)
        {
             foreach ($_socket as $key=&gt;$val)
             {
                  // this check's the onliners
                  if (empty($nicks[$val])) $nicks[$val]=1;
                  else $nicks[$val]=$nicks[$val]+1; // we shouldn't have duplicated nicks, but what if...
             }
        }

        foreach($allclients as $client)
        {
            if (!empty($_sockets[$client]['nick']) &amp;&amp; ($_sockets[$client]['nick'] == $id))
            {
              $_client = $client;
              $out = "";
            }
            elseif(empty($nicks[$id]))
            //not online or something similar
            {
               //backto the sender
               $_client = $socket;
               $out = "";
            }
        }
    }
    else
    {
        //backto the sender
        $_client = $socket;
        $out = "";
    }
    if (!empty($out))
    {
       socket_write($socket, $out.chr(0)); //send to back ourself. we have to handle it in flash
       socket_write($_client, $out.chr(0)); //send to the recipient
    }
}</pre>
<p>Ahora creamos la funcion encargada de enviar un mensaje a todos los conectados:</p>
<pre lang="php">    function send_Message($allclients, $socket, $buf)
    {
      global $_sockets;

      foreach($allclients as $client)
      {
        @socket_write($client, $buf.chr(0));
      }
    }

    function list_Users($allclients,$socket)
    {
      global $_sockets;
      $out = "";
      foreach($allclients as $client)
      {
        if (!empty($_sockets[$client]['nick']) &amp;&amp; ($_sockets[$client]['nick'] != ""))
        {
          $out .= "";
        }
      }
      $out .= "";
      socket_write($socket, $out.chr(0));
    }
?&gt;</pre>
<p>Y eso es todo por parte de PHP, que basicamente es lo primordial para entender el funcionamiento, de ahi podemos agregar mas funciones y comandos.<br />
<strong><a href="http://bodegaweb.com/wp-content/uploads/2009/03/phpircgateway.rar" target="_blank">El archivo fuente PHP esta AQUI</a></strong><br />
El archivo FLASH lo publicare mas adelante.<br />
Les dejo un codigo BASH de regalo que es para arrancar el demonio php.</p>
<pre lang="php">#!/bin/sh
if [ "X$1" = "Xstart" ] ; then
    chmod +x /var/www/chat/phpircgateway.php
    /var/www/chat/phpircgateway.php &gt;&gt; /var/log/chat/chat.log &amp;
    echo "Starting chat"
fi</pre>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://bodegaweb.com/servidor-de-sockets-en-php.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
