martes, 26 de abril de 2016

Invocar una nueva página, tras cargar mi página, con PHP-Javascript


Supongamos que tienes una página en PHP que deseas que efectúe un cierto proceso. Recordamos que en PHP se efectúa la comunicación con la Base de Datos, así que son múltiples cosas las que puedes hacer.

En mi caso, hice un script que se conecta a un webservice, la envía un XML, y recibe un XML de donde tomo ciertos datos. Esos datos me servirían para crear una nueva página (en este caso, el costo de envío). Así lo explique en una entrada anterior.

Generalmente en PHP, se puede cambiar de página utilizando el header('Location:'). Básicamente le dices, que ahora tu página se convierte en la nueva página que le indiques en el header.

Hay un par de problemas al usar el header para cambiar de página. Primero, para mi caso como era un documento XML mi página, que a su vez enviaba y recibía otro XML, el header tenía que corresponder al de un XML. Y ese header no funciona para páginas normales.

Además un segundo inconveniente: el header debe ser lo primero que despliegues en pantalla , el header debe ser llamado antes de mostrar cualquier cosa por pantalla, etiquetas HTML, líneas en blanco desde un fichero o desde PHP. Y como yo estaba primero que nada construyendo un XML, ese XML era enviado, así que falla al querer cambiar el header. Así que si deseas usar el header para cambiar la página, puedes hacer algunas acciones como consultar la base de datos y otros procesos, pero no desplegar nada en pantalla antes.

Yo creo un XML, y después envió toda mi página en XML al webservice de DHL, así que obviamente ya hubo una salida de información, y la redirección para cambiar de página después de hacer este proceso vía PHP es imposible.

Esta opción no funciona, y por mas que busqué en la red no encontré otra forma de invocar una página con PHP.

Es aquí donde entre Javascript. Lo que hice fue dejar que PHP hiciera todo el proceso. Y después mandará un página construida con todos los datos y un pequeño script de JavaScript. Recordemos que PHP se ejecuta en el servidor, así que cualquier código Javascript siempre se ejecutará después de PHP.

Al momento de estar cargando mi página, ya con todos los datos listos, el navegador se encontró con mi pequeño script:


 echo '<script type="text/javascript">
         function lanzadera(){
document.location.href="'.$urlSitio.'/pagar/?referencia='.$referencia.'&tipo='.$tipoPago.'&costoEnvio='.$costoEnvio.'&dias='.$days2.'";
         }
         window.onload = lanzadera;</script> ';  

El cual le dice que al momento de cargar la ventana (la cual ya tiene todos los datos que obtuve del webservice y que PHP consulto), ejecute una función, por medio del evento window.onload.

La función lanzadera, hace algo muy sencillo: cambia la localización de mi ventana a el script que yo deseo, es decir invoca una nueva página. A esa nueva página le mando los datos que ya consulte: costo de Envío, días que toma el envío, etc.

De esta manera es transparente para el usuario, aunque yo ejecute 2 scripts de PHP diferentes, el lo ve como si fuera una sola página y todo el proceso que hubo para crearla permanece oculto. 

El cual era mi objetivo desde un principio. Así que ya sabes, cuando necesites ejecutar 2 páginas php, sin que el usuario lo note, esta es una buena técnica. 

miércoles, 20 de abril de 2016

Como Android /ARM acabo con Windows/INTEL

En una entrada anterior, estuve analizando como GOOGLE supo leer el futuro de la tecnología mejor que Microsoft , y de esa forma convirtió a Android en el sistema operativo mas usado en el mundo, desbancando a Windows.

Pero no solo ese cambio ha traído el uso masivo de los smartphones. Retrocedamos a la época de las primeras PC. Cuando Bill Gates y Paul Allen vieron el número de enero de 1975 de Popular Elechtronics y descubrieron la Altair 8800. Una de las claves de esa máquina, es que fue la primera computadora de próposito general con un microprocesador.

El microprocesador era un INTEL 8008. Este procesador fue creado por INTEL. INTEL era un empresa que fue fundada en Mountain View (California) en 1968 por Gordon E. Moore (químico y físico, famoso por su "Ley de Moore") y Robert Noyce (físico y co-inventor del circuito integrado) cuando salieron de la empresa Fairchild Semiconductor. La empresa había decidido tomar un camino arriesgado, creando los primeros microprocesadores: circuitos que contenían en una sola pastilla de silicio, todos los componentes necesarios de un procesador: unidad de control, unidad aritmetico-lógica, registros, etc.

Era un invento revolucionario, pero aún no se hacía con el éxito entre los consumidores. La Altair 8800, era solo un máquina de propósito general, que no había desarrollado su potencial. Solo una caja de luces para aficionados.

Pero entonces llegan Bill y Paul y la dotan de el Altair BASIC, un software con el que el usuario podia programar la máquina e interactuar con ella. El éxito de esa máquina y sus sucesoras, fue total.

De ese modo y a través de máquinas similares que siguieron , como la IBM PC, los procesadores de INTEL llegaron a estar en todas partes. No solo Microsoft si no también INTEL se vio beneficiado con el nacimiento de la PC. La arquitectura de INTEL fue la más exitosa, en especial la familia X86 que iba incluida en las IBM PC. Casi todas las máquinas incluían los chips de INTEL.

Tal fue el monopolio de estas empresas que llegó a llamársele WIN-TEL: máquinas con procesador INTEL y sistema operativo Windows. Windows llego a funcionar bajo otras arquitecturas, pero siempre era preferida la X86. IBM cedió a Microsoft e INTEL dos de los componentes esenciales de la PC, y pronto todos los fabricantes de hardware hicieron lo mismo. Así podían ofrecer lo mismo que IBM, y solo necesitaban instalar el software de Microsoft para que hiciera lo mismo. y para que todo fuera compatible, se usaban los mismos procesadores. 

Sin embargo ni Microsoft ni INTEL, supieron ver el enorme potencial de la revolución móvil que se gestaría años después, estaban cómodos en la cima dominando el mercado de las computadoras personales.

La arquitectura X86 tiene ventajas y desventajas. Comencemos por lo básico: se basa en la arquitectura CISC (Complex Instruction Set Computer o   Computador con Conjunto de Instrucciones Complejas). Esta arquitectura está basada en instrucciones complejas, que indican a un procesador múltiples tareas a efectuar con una sola instrucción. Como consecuencia, se necesitan menos instrucciones para ejecutar un programa. Por lo tanto se necesitan compiladores mas sencillos, y menos memoria para guardar las instrucciones. Los primeros procesadores de INTEL y todos los que dominaron la era del PC, están basados en CISC.

Debido al poder ejecutar instrucciones complejas, los procesadores CISC tienen una gran potencia de calculo. Sin embargo tienen también sus desventajas. El hardware debe ser complejo y consume una gran cantidad de energía. Al consumir tanta energía , llega otro problema letal: el sobrecalentamiento. ¿A quien no se le fundió alguna vez una tarjeta madre debido al calor del procesador? Es por eso que si abres una CPU, lo primero que ves son los enormes ventiladores de la tarjeta madre y el procesador. Los procesadores CISC debido al alto calor que generan, con el tiempo llegan a fundir los circuitos, para evitar esto se necesita ventilación mecánica.

Por eso las máquinas portátiles no pudieron seguir reduciéndose de tamaño, la disipación de calor a sido uno de los principales problemas de las computadoras.

Desde los años 70 en IBM comenzó a desarrollarse una tecnología que permitiera optimizar el rendimiento del procesador. Como resultado de esa investigación nació RISC (Reduced Instruction Set Computing o Computador con Conjunto de Instrucciones Reducidas). Esta arquitectura se basa en una idea muy simple: descomponer una instrucción compleja, en un conjunto reducido de instrucciones genéricas. De esa manera con la arquitectura RISC se tienen menos instrucciones diferentes, y cada instrucción ejecuta menos tareas. Es decir que CISC tiene un conjunto amplio de instrucciones, y cada una de ellas hace muchos tareas. 

Las ventajas de RISC son notables, se necesitará hardware mas sencillo, por lo tanto se consume menos energía y el calentamiento es mucho menor. Como desventaja, requiere mas memoria y los compiladores tienen mayor trabajo al traducir las instrucciones a ensamblador.

El IBM 801 que empezó a crearse en 1975, fue diseñado por John Cocke y es considerado el primer procesador RISC de la historia. Pero en esa época la arquitectura CISC dominaba y RISC no se abrió paso en las computadoras personales.

Si embargo las diferencias entre las dos arquitecturas son notables, la arquitectura RISC permite construir procesadores que pueden ir en dispositivos mas pequeños pues no necesitan disipador de calor. Su principal desventaja era la falta de potencia de calculo pues rerquerian mas instrucciones para hacer los mismo que CISC.


Los dispositivos móviles adoptaron la tecnología RISC, basada en la arquitectura ARM. ARM venida de Acorn Computers Ltd, es una arquitectura en base RISC,  En 1983, Acorn inició el diseño de lo que un par de años más tarde fue la Acorn RISC Machine, ARM, y que tuvo en el ARM1 su primer chip final . Sin embargo no tuvo mucho éxito por esos años. En 1998 la empresa se transformó en ARM Holdings.

ARM nació como una arquitectura para uso en ordenadores y dispositivos de bolsillo, su primer exponente en el terreno móvil fue el Newton de Apple en 1993. Pero seguía sin tener éxito pues es resto de la tecnología que integraba el Newton no estaba a la altura.

Poco a poco fue ganando popularidad con la aparición de los teléfonos celulares y las pda, basados mayormente en la tecnología ARM. Sin embargo estos dispositivos distaban de ser tan populares como las PC.

Un punto de inflexión lo marca la aparición del primer Iphone en 2007: INTEL rehusó participar en el proyecto, y Apple buscó una solución basada en ARM. Aún entonces no se notaba tanto el impacto, pues a pesar del éxito del Iphone, como lo fue el Apple II en la época de las PC, era un producto destinado a un nicho y condenado a no dominar el mercado.

Sin embargo la mesa estaba puesta para Google, que como he mencionado en otras entradas lanzó Android para dominar el mercado móvil, el HTC Dream, el primer smartphone con Android, aparece en 2008. Google supo ver la revolución que era el smartphone, los aciertos de hardware de Apple, y como podía dominar el mundo del software. 

Por supuesto el núcleo de todos los futuros smartphones, serían los procesadores ARM. Pero el sistema operativo que los mandaría sería Android. Google dotó de una interfaz sencilla y visual, una capacidad de efectuar múltiples tareas y una versatilidad enorme a los dispositivos ARM.

El resto lo conocemos, el día de hoy existen mas dispositivos con Android que PC con Windows. Pero la gran mayoría de estos dispositivos tienen una característica mas en comun:  tienen como cerebro un procesador ARM. Aunque ha habido intentos de INTEL de entrar en el mercado móvil, han sido tardío y escasos. Android ha sido adaptado a la arquitectura X86, pero nativamente solo existía para ARM. 

Es por ello que Google no ha sido el único beneficiado con el surgimiento del smartphone y de llamada era POST-PC. ARM también ya que ha hecho que sus procesadore sean los mas populares.

A diferencia de INTEL, ARM no fabrica sus procesadores, licencia el diseño a diversas empresas que se encargan de fabricarlos. Qualcomm. Mediatek, Samsung, Nvidia, entre otras, se encargan de producir chips ARM.

Mientras INTEL sigue cayendo en ganancias y utilidades, porque no supo entender la próxima revolución tecnológica. En esta era POST-PC las ventas de las PC siguen cayendo, y las de smartphones aumentando. 

Los procesadores ARM permiten que tu smartphone puedas tenerlo contigo, ya que al no necesitar disipadores de calor no incluyen ventilación y pueden tener un tamaño reducido. Y claro, como procesadores que son, se calientan, pero a un grado menor que la arquitectura X86.

La era POST-PC ha traído grandes cambios en la tecnología y aquellos que no han sabido ver el futuro, se están quedando obsoletos y condenados a vivir del pasado.




viernes, 15 de abril de 2016

Envío y recepción de XML a Web Services con PHP. Un ejemplo práctico para Webservice de DHL

El día de hoy vamos a hablar de Web Services. Primero que nada ¿que es un Web Service?

Piensa en el Internet. Por definición, es una red para compartir datos. Generalmente, interactúa con el usuario. Tu entras a una página web, rellenas algunos campos y obtienes información a cambio como respuesta. La mayoría de las páginas, están hechas para interactuar con el usuario. Sin embargo , la red tiene mucho potencial. Y una de las premisas básicas de la tecnología moderna, es automatizar lo más posible los procesos. Es decir que la red no solo sea usada solo por personas, sino por procesos automáticos.

Por supuesto, una página normal en HTML no nos sirve para esto. No solo es difícil de leer, no ofrece descripción de los datos y en general no se adecua a un formato que pueda ser leído por un proceso, está hecha para ser leída por un humano. Pensando en eso tenemos el concepto de Web Service. Un web service es una tecnología que mediante un conjunto de estándares y protocolos, permite intercambiar datos entre aplicaciones. Es decir es un sitio web, que en vez de esperar entrada de personas que interactúen con él, está esperando recibir una solicitud de una aplicación externa en el cliente, y asu vez mediante la información de entrada, será procesada y generará una salida que le devuelve al cliente.

Básicamente es una herramienta muy poderosa, ya que permite la comunicación de las aplicaciones con los sitios web, y el intercambio de datos. Imagina que tienes un programa que toma una serie de datos de tu base de datos local, los procesa y envía a un web service externo, que de acuerdo a estos le devolverá una respuesta que podrá interpretar tu programa local y en base a ella actuar.

Esta herramienta es especialmente útil, para compartir y acceder a datos entre diversos sitios web. Como ejemplo, digamos que tengo una tienda en línea. Yo poseo los datos del producto, precios, además de datos de los compradores y en fin todo lo que necesito para mi tienda. Pero quiero implementar la cotización del envío de dichos productos a mis clientes, y que se haga dentro de mi página.

DHL, usándolo como ejemplo, tiene un cotizador en línea por supuesto, pero lo que yo quiero es que mi sitio mediante código se contacte con el cotizador y le mande los datos necesarios: peso, alto, ancho, profundidad, número de piezas, y claro código postal del cliente a donde hare el envio; y despues recibir la cotización para integrarla en el costo del producto. Todo esto debe ser transparente para el usuario de mi página.

Un apunte mas, los web services se envían los datos mediante XML. Así que si conoces este formato, es hora de empezar a conocerlo. A primera vista no es muy legible, pero es un estándar muy aceptado.Para comunicaciones vía AJAX la mayoría de los programadores prefieren JSON.   Hay una cierta controversia sobre si XML o JSON es un mejor lenguaje de intercambio de datos, pero no entraremos en ella pues daría para un enorme post.

Al final XML no es mas que una cadena de texto con cierto formato. Algo muy importante que debes tener en cuenta: todo se engloba dentro de TAGS o etiquetas, tiene una estructura jerárquica, puedes usar arreglos y estructuras de datos, y siempre debes cerrar el TAG que abriste.

Al final si has usado HTML, verás que XML es muy similar. Solo que mientras HTML describe cómo es una página web, XML describe cómo es un conjunto de datos.

Llegados a este punto, entendemos cómo funcionara la comunicación con el web service:

1.-Tomo datos, ya sea de mi base de datos u otra fuente, y los usó para construir un archivo XML, el cual debe tener el formato y estructura requerida por el web service.

2.- Envío el XML a el web service.

3.-El web service recibe mi XML.

4.- El web service interpreta mi XML. Lee los datos que le envíe.

5.- Mediante un proceso interno el web service genera una respuesta en formato XML de acuerdo a los datos recibidos.

6.- Me envía este nuevo XML.

6.-.-Recibo la respuesta en XML. 

7.-Interpreto mi XML para poder utilizar los datos que me han sido enviados.

Ahora bien este proceso lo haremos mediante PHP. En una entrada anterior, ya vimos cómo crear un XML y enviarlo a otra máquina. Básicamente XML es solo texto, así que formamos nuestra cadena de texto con los datos requeridos. Y para el envío, utilizaremos la herramienta CURL. Quedaria el codigo siguiente:

<!doctype html>
<html>
<head>
<meta charset="UTF-8">

</head> 
<body>
<?php
$codigoPostal = $datosEnvio->nDirCP;
$referencia = str_pad($referencia, 28, "0", STR_PAD_LEFT);
$site = 'DHLMexico';
$password = 'hUv5E3nMjQz6';
$countryCode= 'MX';
$postalCode= '25000';
$paymentCountryCode = 'MX';
$dimensionUnit = "CM";
$weigthUnit = "KG";
$time = time();
$tiempo =  date("Y-m-dTH:i:sP", $time);
$fecha = date("Y-m-d", $time);
$GMT = date("P", $time);
$tiempo =str_replace ( "CD",  "", $tiempo );
$tiempoRecoleccion = "PT".date("H", $time)."H".date("i", $time)."M";

 $buffer= '<?xml version="1.0" encoding="UTF-8"?>
<p:DCTRequest xmlns:p="http://www.dhl.com" xmlns:p1="http://www.dhl.com/datatypes" xmlns:p2="http://www.dhl.com/DCTRequestdatatypes" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.dhl.com DCT-req.xsd">
    <GetQuote>
    <Request>
      <ServiceHeader>
        <MessageTime>'.$tiempo.'</MessageTime>
        <MessageReference>'.$referencia.'</MessageReference>
        <SiteID>'.$site.'</SiteID>
        <Password>'.$password.'</Password>
        </ServiceHeader>
    </Request>
    <From>
      <CountryCode>'.$countryCode.'</CountryCode>
      <Postalcode>'.$postalCode.'</Postalcode>
    </From>
   <BkgDetails>
      <PaymentCountryCode>'.$paymentCountryCode.'</PaymentCountryCode>
      <Date>'.$fecha.'</Date>
      <ReadyTime>'.$tiempoRecoleccion.'</ReadyTime>
      <ReadyTimeGMTOffset>'.$GMT.'</ReadyTimeGMTOffset>
      <DimensionUnit>'.$dimensionUnit.'</DimensionUnit>
      <WeightUnit>'.$weigthUnit.'</WeightUnit>
      <Pieces>';
  $i=0;
  while ($articulo = $detalleCompra->fetch_object())
  {
    $i++;
  $linea = queryOne("SELECT nLinea FROM InvArticulos WHERE nArticulo=$articulo->nArticulo ");
  $medidasArt =  queryOne ("SELECT nAltura,nAnchura,nProfundidad,nPeso FROM InvLineas WHERE nLinea=$linea->nLinea ");
    $anchura =  $medidasArt->nAnchura;
    $altura = $medidasArt->nAltura;
    $profundidad= $medidasArt->nProfundidad;
    $peso = $medidasArt->nPeso;
    $buffer.='<Piece>
          <PieceID>'.$i.'</PieceID>
          <Height>'.$altura.'</Height>
          <Depth>'.$profundidad.'</Depth>
          <Width>'.$anchura.'</Width>
          <Weight>'.$peso.'</Weight>
        </Piece>';
  }
 $buffer.='</Pieces>';
  $buffer.='<IsDutiable>N</IsDutiable>
      <NetworkTypeCode>AL</NetworkTypeCode>
</BkgDetails>
    <To>
      <CountryCode>'.$countryCode.'</CountryCode>
      <Postalcode>'.$codigoPostal.'</Postalcode>
    </To>
   <Dutiable>
      <DeclaredCurrency>MXN</DeclaredCurrency>
      <DeclaredValue>0</DeclaredValue>
    </Dutiable>
  </GetQuote>
  </p:DCTRequest>';


$url ="http://xmlpitest-ea.dhl.com/XMLShippingServlet";  //URL de DHL

$prexml = $buffer;

//Iniciamos una sesion cURL
$soap_do = curl_init();
//Indicamos a donde deseamos enviar nuestro post
curl_setopt($soap_do, CURLOPT_URL,$url );
//Indicamos lo que queremos enviar en nuestro post, en este caso un xml
curl_setopt($soap_do, CURLOPT_POSTFIELDS,$prexml);
//Añadimos una opción más para poder almacenar la respuesta en una variable
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 300);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, 1);
//Ejecutamos el curl y almacenamos la respuesta en una variable

$respuesta=curl_exec($soap_do);

//Cerramos nuesta sesión
curl_close($soap_do);

Como se puede ver, es muy sencillo. Solo debemos dar los datos correctos, y seguir la estructura del XML que espera recibir el web service, En este caso esta estructura deben proporcionarnosla así, como una descripción de los datos esperados. Para este ejemplo incluimos unidades de medida, peso, longitud, ancho, profundidad, todo para cada articulo. Luego vía CURL, usando la URL del Web service, mandamos la información. Y esperamos recibir una respuesta, claro. No olvides poner las cabeceras correctamente, para tu XML se cree en el formato adecuado.

A continuación:

$xmlsimp = simplexml_load_string($respuesta);
$response = $xmlsimp->GetQuoteResponse->BkgDetails;

$tarifa1=0;
$tarifa2=0;
$days1 =0;
$days2=0;
foreach($response->QtdShp as $item)
{
 
    if($item->LocalProductName == "ECONOMY SELECT DOMESTIC" && $tarifa1==0)
    { $tarifa1=  $item->ShippingCharge;
$days1=(int)$item->TotalTransitDays+(int)$item->PickupPostalLocAddDays+(int)$item->DeliveryPostalLocAddDays;
      }
 
    if($item->LocalProductName == "EXPRESS DOMESTIC")
    {
      $tarifa2=$item->ShippingCharge;
$days2=(int)$item->TotalTransitDays+(int)$item->PickupPostalLocAddDays+(int)$item->DeliveryPostalLocAddDays;
      }
}  

echo "TARIFA ECONOMY SELECT DOMESTIC:".$tarifa1." entrega en ".$days1;
echo "TARIFA  EXPRESS DOMESTIC:".$tarifa2." entrega en ".$days2;


Lo primero que hago es cargar mi XML de respuesta con simplexml_load_string. Esa es la parte fácil, lo más complicado siempre es descifrar la estructura del XML para recorrerlo. Esa función te devuelve una estructura de datos que puedes recorrer como cualquier estructura en PHP. ¿Pero como sabes en que nivel esta el dato que necesitas? En mi caso, debía bajar al siguiente nivel:

$xmlsimp->GetQuoteResponse->BkgDetails

Lo que me indica que dentro de mi TAG principal, debía bajar al TAG GetQuoteResponse, y a su vez dentro de este ir al TAG BkgDetails. ¿Cómo lo supe? Pues no me quedo de otra que inspeccionar visualmente mi XML. Es un poco complicado, pero no queda de otra que verlo y ver que TAG va dentro de cada TAG, viendo donde se cierra y abre cada una. Y en caso de XML complejos, suele ser tedioso. No lo olvides, para indicar que vas a leer cierto TAG, se hace con el operador ->, y cada vez que lo usas bajas un nivel dentro de la estructura.

Una vez en el nivel adecuado, tengo el TAG QtdShp, el cual es un arreglo de TAGs en el cual cada elemento es un producto que ofrece DHL. Con producto me refiero a la clase de envio, el cual puede ser de varios tipos.

Como la información está en forma de  arreglo puede recorrerse con un for each. Dentro de ese TAG tengo tanto el monto del costo de envío, como los días que tomas el envio contenidos en 3 TAGS diferentes que debo sumar. Así que ya solo es de seleccionar los productos adecuados que sí puedo aplicar, en este caso "ECONOMY SELECT DOMESTIC" y "EXPRESS DOMESTIC". Y así obtengo los datos que necesito.

Como ves, una vez conociendo la estructura del XML, es muy fácil leer los datos que necesitas.

¿Sencillo no? Bueno no siempre funcionara  a la primera. por ello no olvides incluir estas lineas:

if(curl_errno($soap_do))
{
    echo 'error:' . curl_error($c);
}

Asi si tu XML tiene mal algun campo o error en el formato, verás el error que te regreso el Web service.

En realidad como puedes observar el crear un XML, enviarlo a un Web service y procesar la respuesta con PHP es muy sencillo. El mayor problema que tendrás será descifrar la estructura del XML.




jueves, 14 de abril de 2016

¿Qué es XAMPP? Y cómo convierte tu máquina en un servidor WEB

Cuando uno comienza en el mundo de PHP, lo primero que te das cuenta es que no es un lenguaje que venga listo para usarse, ni que cuente con un IDE de desarrollo. Si, no es Visual BASIC.

Una de las razones de esto, es que está muy enfocado al desarrollo web, por lo que básicamente se espera que ejecutes PHP en tu navegador.

Es cierto PHP también puede ejecutarse desde la consola, pero generalmente la mayoría de los scripts de PHP son creados para ejecutarse en un servidor web.

¿Y como hago para ejecutar PHP vía mi navegador?

Bueno, necesitas que tu máquina sea un servidor web. Para esto en realidad solo necesitas un programa que actúa como un servidor web. Espera, ¿pero que es un servidor web? Aplicandolo al software, es un programa que procesa la aplicación del lado del servidor, realizando conexiones con el cliente y generando respuestas. Se oye complicado. Pero básicamente, el servidor recibe peticiones a través del navegador y te entrega en respuesta una página web. Recibe las peticiones bajo HTTP, y te regresa código HTML (incluido JavaScript). Recuerda, ese código que recibes, tu navegador se encarga de interpretarlo y transformarlo en letras y colores bonitos, lo que recibe es un esquema de la pagina web (imagina lo pesado que sería transmitir si te mandara en lugar del guión, toda la página hecha).



Recuerda, el servidor web es el que construye la estructura de la página web. Es decir toma el código PHP, lo ejecuta, y genera una página en código HTML. Así que si quieres ver el resultado de tus scripts PHP en el navegador, necesitas un servidor web.

Es aquí donde entra Apache. Apache es un servidor web de código abierto, disponible para Linux, Windows, UNIX, Mac OS, en fin todas las plataformas.

Es decir, cuando tu envías una URL a tu navegador, Apache hace varias funciones. Por ejemplo, toma la URL , la interpreta y se encarga de identificar a qué recurso del servidor se refiere. Si le mandas parámetros, los interpreta y proporciona como entrada a tu script. Una vez identificado el archivo, ejecuta todos los lenguajes que se ejecutan del lado del servidor como PHP, y finalmente te manda el resultado.

¿Donde entra XAMPP en todo esto? Bueno XAMPP no es mas que un paquete de software integrado, como sus siglas dicen contiene: Apache, MySQL, PHP y Perl. La X significa que es universal: se ejecuta en UNIX, Linux, Windows y Mac Os.

Ya que contiene el servidor web, la base de datos y los lenguajes de programación necesarios para desarrollo web, si quieres comenzar con PHP lo ideal es que instales el paquete XAMPP completo. Si lo haces, en automático tu máquina será un servidor web. El link de descarga está aquí.

Una vez instalado, ya tienes PHP. Pero además tienes un entorno para ejecutarlo. El instalador de XAMPP es muy sencillo. Te hará la instalación completa de Apache, MySql y PHP y te los deja configurados y listos para funcionar.

Una vez instalado, abre el "XAMPP Control Panel" que se encuentra en Menú Inicio->Todos los Programas->XAMPP, si tu máquina funciona bajo Windows.


Como ves, es muy sencillo, este programa te indica gráficamente si Apache y MySql están encendidos, y si no están simplemente debes dar click en el botón Start para arrancarlos. Y si deseas apagar un módulo, en el botón Stop. Como nota Apache usa los puertos 80 y 443 y MySql el 3306, pero a veces el firewall o el antivirus te los bloquean, así que si te da mensaje de error al querer encender estos módulos, prueba bajar el firewall y el antivirus. Así que el control de los módulos, lo haces en este panel.

En el apartado Config puedes configurar tu servidor web. Para Apache los archivos mas importantes son:

httpd.conf : El archivo principal de configuración de Apache. Incluye los módulos de Apache que se cargan y otros parámetros importantes.

php.ini: El archivo de configuración de PHP.

config.inc.php: El archivo de configuración de PHPmyAdmin (este es un administrador de la BD mySql que se lanza vía el navegador web).

Y para MySql el archivo:

my.ini: Contiene la configuración de la Base de Datos MySQL.

En el apartado Logs del Panel de Control, tenemos algunos logs muy importantes, por ejemplo para Apache:

error.log: contiene el log de los errores del servidor Apache.

php_error_log: contiene el log de los errores de PHP.

Y para mySQL tenemos el archivo:

mysql_error: contiene el log de los errores de la BD mySql.

Como ves mediante este panel puedes hacer toda la administración de tu servidor.

Una vez instalado XAMPP ya estas listo para empezar a desarrollar en PHP. No lo olvides C:\xampp\htdocs es tu directorio raíz en donde Apache buscará las páginas web. Dentro de ese directorio puedes crear diversas subcarpetas para diferentes proyectos, digamos que cada proyecto es un sitio web. El primer archivo en ejecutarse en cada carpeta, es el index.php.

Por ejemplo, teclea http://localhost/ en tu navegador. Aparecerá la página de XAMPP que se crea mediante el archivo index.php que viene incluido en la instalación. Si creas una supcarperta, solo teclea http://localhost/nuevacarpeta donde nueva carpeta es el nombre que le diste a tu carpeta. Si creas un archivo index.php, se ejecutara. Y vuala !ya estas programando en PHP!. Es el inicio. De ti depende lo lejos que puedas llegar.