1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 00:12:06 +01:00
Files
archived-doc-es/chapters/tutorial.xml
Pedro Antonio Gil Rodríguez 5eed26a161 Actualización a la última versión
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@338594 c90b9560-bf6c-de11-be94-00142212c4b1
2016-02-12 09:53:22 +00:00

540 lines
24 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: ca7fbbaddcf091178e666a6586f4181d6e429b4d Maintainer: seros Status: ready -->
<!-- Reviewed: yes Maintainer: seros -->
<chapter xml:id="tutorial" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<info><title>Un tutorial sencillo</title></info>
<para>
A continuación, nos gustaría mostrarle lo esencial de PHP en un corto y
sencillo tutorial. Este documento solamente trata de la creación de páginas web
dinámicas con PHP, aunque PHP no solamente es capaz de crear páginas
web. Consulte la sección titulada <link linkend="intro-whatcando">¿Qué
puede hacer PHP?</link> para más información.
</para>
<para>
Las páginas web que usan PHP se tratan igual que páginas HTML
comunes y corrientes, y se pueden crear y editar de la misma manera
que normalmente se crean páginas HTML.
</para>
<section xml:id="tutorial.requirements">
<info><title>¿Qué necesito?</title></info>
<para>
En este manual se asume que se cuenta con un servidor que tiene soporte activado
para PHP y que todos los ficheros con la extensión <filename>.php</filename>
son tratados por PHP. En la mayoría de servidores, esta es la extensión predeterminada
para los ficheros de PHP, aunque puede preguntar al administrador de su servidor para estar seguro.
Si el servidor tiene soporte para PHP, entonces no es necesario hacer nada.
Simplemente cree sus ficheros <filename>.php</filename>, guárdelos en su
directorio web y el servidor los analizará por usted.
No hay necesidad de compilar nada o instalar otras
herramientas. Piense en estos ficheros habilitados para PHP como simples
ficheros HTML con el añadido de una nueva familia de etiquetas mágicas que permiten
todo tipo de cosas.
</para>
<para>
Digamos que quiere ahorrar el preciado ancho de banda y trabajar localmente.
En este caso, querrá instalar un servidor web, como
<link xlink:href="&url.apache;">Apache</link>, y por supuesto
<link xlink:href="&url.php.downloads;">PHP</link>. Lo más seguro
es que también quiera instalar una base de datos como
<link xlink:href="&url.mysql.docs;">MySQL</link>.
</para>
<para>
Puede instalarlos de forma independiente o bien puede elegir una manera más sencilla.
Este manual contiene <link linkend="install">Instrucciones de instalación
de PHP</link> (asumiendo que tiene algún tipo de servidor web ya configurado).
Si tuviera problemas con la instalación, sugerimos que formule sus preguntas en
nuestra <link xlink:href="&url.php.mailing-lists;">lista de correo de
instalación</link>. Si elige la manera más sencilla,
<link xlink:href="&url.installkits;">localice un paquete preconfigurado</link>
para su sistema operativo, el cual instala automáticamente todo esto
con únicamente unos pocos clics de ratón. Es sencillo configurar un servidor web con
soporte para PHP en cualquier sistema operativo, incluyendo MacOSX, Linux y Windows.
En Linux, podría encontrar útil <link xlink:href="&url.rpmfind;">rpmfind</link> y
<link xlink:href="&url.rpmfind.pbone;">PBone</link> para
localizar los RPM. También puede visitar <link
xlink:href="&url.apt-get;">apt-get</link> para buscar paquetes para Debian..
</para>
</section>
<section xml:id="tutorial.firstpage">
<info><title>Su primera página con PHP</title></info>
<para>
Comience por crear un fichero llamado <filename>hola.php</filename> y póngalo
en el directorio raíz de su servidor web (<varname>DOCUMENT_ROOT</varname>)
con el siguiente contenido:
</para>
<para>
<example>
<info><title>Nuestro primer script de PHP: <filename>hola.php</filename></title></info>
<programlisting role="php">
<![CDATA[
<html>
<head>
<title>Prueba de PHP</title>
</head>
<body>
<?php echo '<p>Hola Mundo</p>'; ?>
</body>
</html>
]]>
</programlisting>
<simpara>
Utilice su navegador web para acceder al fichero con el URL de su servidor, finalizado
con la referencia al fichero <literal>/hola.php</literal>. Si está programando localmente,
este URL será algo parecido a <literal>http://localhost/hola.php</literal> o
<literal>http://127.0.0.1/hola.php</literal>, pero esto depende de la
configuración de su servidor web. Si todo está configurado correctamente,
el fichero será analizado por PHP y se enviará el siguiente contenido a
su navegador:
</simpara>
<screen role="html">
<![CDATA[
<html>
<head>
<title>Prueba de PHP</title>
</head>
<body>
<p>Hola mundo</p>
</body>
</html>
]]>
</screen>
</example>
</para>
<para>
Este programa es extremadamente simple y realmente no es necesario utilizar
PHP para crear una página como esta. Lo único que muestra es:
<literal>Hola mundo</literal> empleando la sentencia <function>echo</function>
de PHP. Observe que el fichero <emphasis>no necesita ser ejecutable</emphasis>
o especial de ninguna forma. El servidor reconoce que este fichero necesita ser interpretado
por PHP debido al empleo de la extensión ".php", ya que el servidor está configurado
para enviarlo a PHP. Piense como si fuera un fichero HTML normal que tiene una serie
de etiquetas especiales disponibles con las que puede hacer muchas cosas interesantes.
</para>
<para>
Si intentó usar este ejemplo y no produjo ningún resultado, se le preguntó si deseaba descargar
el fichero, o se mostró todo el fichero como texto, lo más seguro es que PHP no se encuentre
habilitado en su servidor o no esté configurado adecuadamente.
Pídale a su administrador que lo habilite utilizando el capítulo
<link linkend="install">Instalación</link>
del manual. Si está trabajando localmente, lea también el
capítulo dedicado a la instalación para asegurarse de que todo esté configurado
adecuadamente. Asegúrese de que está accediendo al fichero mediante http y que el servidor
muestre el resultado. Si está abriendo el fichero desde el sistema de ficheros,
probablemente no será analizado por PHP. Si el problema persiste,
no dude en usar alguna de las múltiples opciones del
<link xlink:href="&url.php.support;">Soporte para PHP</link>.
</para>
<para>
El objetivo de este ejemplo es el formato de las etiquetas especiales de PHP.
En este ejemplo utilizamos <literal>&lt;?php</literal> para indicar el
inicio de una etiqueta de PHP. Después ponemos la sentencia y abandonamos el modo PHP
añadiendo la etiqueta de cierre <literal>?&gt;</literal>. De esta manera, se puede
entrar y salir del modo PHP en un fichero HTML cada vez que se quiera. Para más
información, lea la sección del manual titulada <link linkend="language.basic-syntax">
Sintaxis básica de PHP</link>.
</para>
<note>
<info><title>Una observación sobre los avances de línea</title></info>
<para>
Los avances de línea tienen poco sentido en HTML, aunque sigue siendo buena idea
hacer que el código HTML se vea limpio y claro poniendo avances de línea. PHP
automáticamente eliminará los avances de línea que estén después de
una etiqueta de cierre <literal>?&gt;</literal>. Esto puede ser
muy útil al poner muchos bloques de PHP o incluir ficheros que contienen PHP
y que se supone que no deben mostrar nada. Al mismo tiempo, puede resultar
un poco confuso. Se puede poner un espacio después de la etiqueta de cierre
<literal>?&gt;</literal> para mostrar forzosamente un espacio y un avance de línea,
o se puede poner un avance de línea explícito en el último echo/print dentro
del bloque de PHP.
</para>
</note>
<note>
<info><title>Una observación sobre los editores de texto</title></info>
<para>
Hay muchos editores de texto y Entornos de Desarrollo Integrados (IDE por sus siglas en Inglés)
que se pueden emplear para crear, editar, y gestionar ficheros de PHP. Se puede encontrar
una lista parcial de estos en <link xlink:href="&url.phpeditorlist;">Lista de editores de
PHP</link>. Si desea recomendar un editor, por favor visite la página mencionada
anteriormente y pregunte al mantenedor de la página para que lo incluya en la lista. Contar
con un editor que resalte la sintaxis puede ser de mucha ayuda.
</para>
</note>
<note>
<info><title>Una observación sobre los procesadores de texto</title></info>
<para>
Los procesadores de texto como StarOffice Writer, Microsoft Word y Abiword
no son buenas opciones para editar ficheros de PHP. Si desea utilizar uno de
estos programas para probar este script, asegúrese de guardar el documento
como <emphasis>texto sin formato</emphasis>, o de lo contrario, PHP no será capaz de leerlo y ejecutarlo.
</para>
</note>
<note>
<info><title>Una observación sobre el Bloc de Notas de Windows</title></info>
<para>
Si escribe sus scripts de PHP usando el Bloc de Notas de Windows, debe asegurarse
de que sus ficheros sean guardados con la extensión <filename>.php</filename>.
(El Bloc de Notas automáticamente añade la extensión <filename>.txt</filename> a los
ficheros a menos que siga los siguientes pasos para prevenirlo). Cuando guarde el fichero
y el programa le pregunte qué nombre desea dar al fichero, entrecomille el nombre
(es decir, "<filename>hola.php</filename>"). Una alternativa es hacer clic en el
menú desplegable "Documentos de Texto (*.txt)" del cuadro de diálogo "Guardar como", y cambiar a la
opción "Todos los archivos (*.*)". Aquí puede escribir el nombre del fichero sin las comillas.
</para>
</note>
<para>
Ahora que ha creado un pequeño script de PHP que funciona correctamente, es
hora de crear el script de PHP más famoso: hacer una llamada a la
función <function>phpinfo</function> para obtener mucha información útil
acerca de su sistema y configuración, como las
<link linkend="language.variables.predefined">variables predefinidas</link> disponibles,
los módulos de PHP cargados, y los ajustes de <link linkend="configuration">configuración</link>.
Tómese algo de tiempo para revisar esta importante información.
</para>
<para>
<example>
<info><title>Obtener la información del sistema desde PHP</title></info>
<programlisting role="php">
<![CDATA[
<?php phpinfo(); ?>
]]>
</programlisting>
</example>
</para>
</section>
<section xml:id="tutorial.useful">
<info><title>Algo útil</title></info>
<para>
Hagamos ahora algo que puede ser más útil. Vamos a comprobar
qué tipo de navegador está utilizando el usuario visitante.
Para hacerlo, vamos a comprobar el string del agente de usuario que el navegador
envía como parte de la petición HTTP. Esta información es almacenada en una <link
linkend="language.variables">variable</link>. En PHP, las variables siempre
comienzan con un signo de dólar. La variable que nos interesa ahora es
<varname>$_SERVER['HTTP_USER_AGENT']</varname>.
</para>
<note>
<para>
<varname>$_SERVER</varname> es una variable especial reservada
por PHP que contiene toda la información del servidor web.
Es conocida como una superglobal. Consulte la página del manual sobre
<link linkend="language.variables.superglobals">Superglobales</link>
para más información. Estas variables especiales fueron introducidas en la versión
<link xlink:href="&url.php.release4.1.0;">4.1.0</link> de PHP. Antes se podían usar
en su lugar los antiguos arrays <varname>$HTTP_*_VARS</varname>,
tales como <varname>$HTTP_SERVER_VARS</varname>. A partir de PHP 5.4.0,
estos antiguos arrays han sido eliminados. (Véase también la nota sobre
<link linkend="tutorial.oldcode">código antiguo</link>).
</para>
</note>
<para>
Para mostrar esta variable, se puede hacer simplemente:
</para>
<para>
<example>
<info><title>Imprimir una variable (elemento de array)</title></info>
<programlisting role="php">
<![CDATA[
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
]]>
</programlisting>
<para>
Un ejemplo del resultado de este script podría ser:
</para>
<screen role="html">
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
</screen>
</example>
</para>
<para>
Hay muchos <link linkend="language.types">tipos</link> de
variables en PHP. En el ejemplo anterior se muestra un elemento
de un <link linkend="language.types.array">Array</link>.
Los arrays pueden ser muy útiles.
</para>
<para>
<varname>$_SERVER</varname> es simplemente una variable que se encuentra
disponible automáticamente en PHP. Se puede encontrar una lista en la
sección <link linkend="reserved.variables">Variables reservadas</link>
del manual, o se puede obtener una lista completa observando
la salida de la función <function>phpinfo</function> usada en el
ejemplo de la sección anterior.
</para>
<para>
Puede usar múltiples sentencias de PHP dentro de una etiqueta de PHP y crear
pequeños bloques de código que realicen más que un simple 'echo'.
Por ejemplo, si se quisiera detectar el uso de Internet Explorer,
se podría hacer algo así:
</para>
<para>
<example>
<info><title>Ejemplo usando <link linkend="language.control-structures">estructuras
de control</link> y <link linkend="language.functions">funciones</link></title></info>
<programlisting role="php">
<![CDATA[
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
echo 'Está usando Internet Explorer.<br />';
}
?>
]]>
</programlisting>
<para>
Un ejemplo del resultado de este script sería:
</para>
<screen role="html">
<![CDATA[
Está usando Internet Explorer.<br />
]]>
</screen>
</example>
</para>
<para>
Aquí hemos introducido un par de conceptos nuevos. Tenemos
una sentencia <link linkend="control-structures.if">if</link>.
Si está familiarizado con la sintaxis básica del lenguaje C,
debería parecerle lógico. De lo contrario, probablemente debería
conseguir un libro que le introduzca a PHP, y leer el primer
par de capítulos, o leer la parte del manual titulada
<link linkend="langref">Referencia del lenguaje</link>.
</para>
<para>
El segundo concepto que introducimos fue la función llamada a
<function>strpos</function>. <function>strpos</function> es una función
integrada en PHP que busca un string dentro de otro. En este caso estamos
buscando <literal>'MSIE'</literal> (también llamado aguja) dentro de
<varname>$_SERVER['HTTP_USER_AGENT']</varname> (también llamado pajar).
Si el string se encuentra dentro del pajar, la función devuelve la posición
de la aguja relativa al inicio del pajar. De lo contrario,
devuelve &false;. Si no devuelve &false;, la expresión <link
linkend="control-structures.if">if</link> se evalúa como &true;
y se ejecuta el código entre llaves {}. De lo contrario, el código no
será ejecutado. Tómese la libertad de crear ejemplos similares,
con <link linkend="control-structures.if">if</link>,
<link linkend="control-structures.else">else</link>, y otras
funciones como <function>strtoupper</function> y
<function>strlen</function>. Cada página del manual relacionada también
contiene ejemplos. Si no está seguro de cómo usar estas funciones, es recomendable
que lea las páginas del manual sobre <link linkend="about.prototypes">Cómo interpretar
una definición de función</link> y la sección sobre <link
linkend="language.functions">Funciones de PHP</link>.
</para>
<para>
Podemos dar un paso más y mostrar cómo se puede entrar y salir
del modo PHP incluso en medio de un bloque de código de PHP:
</para>
<para>
<example>
<info><title>Mezcla de los modos HTML y PHP</title></info>
<programlisting role="php">
<![CDATA[
<?php
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE) {
?>
<h3>strpos() debe haber devuelto no falso</h3>
<p>Está usando Internet Explorer</p>
<?php
} else {
?>
<h3>strpos() debe haber devuelto falso</h3>
<p>No está usando Internet Explorer</p>
<?php
}
?>
]]>
</programlisting>
<para>
Un ejemplo del resultado del script podría ser:
</para>
<screen role="html">
<![CDATA[
<h3>strpos() debe haber devuelto no falso</h3>
<p>Está usando Internet Explorer</p>
]]>
</screen>
</example>
</para>
<para>
En vez de usar una sentencia echo de PHP para mostrar algo, salimos
del modo PHP y enviamos solamente HTML. Este es un punto muy importante y potente
que se ha de observar aquí, y es que la fluidez lógica del script permanece intacta.
Solamente uno de los bloques HTML terminará siendo enviado al navegador dependiendo
del resultado de <function>strpos</function>. En otras palabras, depende de si
el string <literal>MSIE</literal> fue encontrada o no.
</para>
</section>
<section xml:id="tutorial.forms">
<info><title>Tratar con formularios</title></info>
<para>
Otra de las características más potentes de PHP es la forma de gestionar
formularios HTML. El concepto básico que es importante entender es que cualquier
elemento de un formulario estará disponible automáticamente en sus scripts
de PHP. Por favor, lea la sección del manual sobre <link
linkend="language.variables.external">Variables desde fuentes externas</link>
para obtener más información y ejemplos sobre cómo usar formularios
con PHP. Observemos un ejemplo:
</para>
<para>
<example>
<info><title>Un formulario HTML sencillo</title></info>
<programlisting role="html">
<![CDATA[
<form action="accion.php" method="post">
<p>Su nombre: <input type="text" name="nombre" /></p>
<p>Su edad: <input type="text" name="edad" /></p>
<p><input type="submit" /></p>
</form>
]]>
</programlisting>
</example>
</para>
<para>
No hay nada especial en este formulario. Es solamente un formulario HTML
sin ninguna clase de etiqueta especial. Cuando el usuario rellena este formulario
y oprime el botón de envío, se llama a la página
<filename>accion.php</filename>. En este fichero se podría escribir algo así:
</para>
<para>
<example>
<info><title>Mostrar información de nuestro formulario</title></info>
<programlisting role="php">
<![CDATA[
Hola <?php echo htmlspecialchars($_POST['nombre']); ?>.
Usted tiene <?php echo (int)$_POST['edad']; ?> años.
]]>
</programlisting>
<para>
Un ejemplo del resultado de este script podría ser:
</para>
<screen role="html">
<![CDATA[
Hola José. Usted tiene 22 años.
]]>
</screen>
</example>
</para>
<para>
Excepto las partes de <function>htmlspecialchars</function> y de
<literal>(int)</literal>, debería ser obvio qué es lo que hace el código.
<function>htmlspecialchars</function> garantiza que cualquier carácter que sea
especial en html se codifique adecuadamente, de manera que nadie pueda inyectar etiquetas
HTML o Javascript en la página. El campo edad, ya que sabemos que es un número, podemos
<link linkend="language.types.typecasting">convertirlo</link> a un valor de tipo
<type>integer</type> que automáticamente se deshará de cualquier
carácter no numérico. También se puede hacer lo mismo con PHP con la
extensión <link linkend="ref.filter">filter</link>.
Las variables <varname>$_POST['nombre']</varname> y <varname>$_POST['edad']</varname>
son establecidas automáticamente por PHP. Anteriormente hemos usado
la superglobal <varname>$_SERVER</varname>; arriba introdujimos
la superglobal <varname>$_POST</varname>,
la cual contiene todos los datos de POST. Observe que el
<emphasis>método</emphasis> de nuestro formulario es POST. Si hubiésemos usado
el método <emphasis>GET</emphasis>, nuestra información estaría en su lugar
en la superglobal <varname>$_GET</varname>.
También se podría usar la superglobal <varname>$_REQUEST</varname>,
si no le preocupa la fuente de los datos solicitados. Contiene
toda la información de los datos de GET, POST y COOKIE mezclada.
</para>
<para>
En PHP, también puede tratar con entradas de XForms; aunque probablemente al principio
se sienta cómodo con los formularios de HTML, los cuales están ampliamente respaldados.
A pesar de que trabajar con XForms no es para principiantes, podrían interesarle.
Si es así, en la sección de características hay una <link linkend="features.xforms">
pequeña introducción a la manipulación de datos recibidos desde XForms</link>.
</para>
</section>
<section xml:id="tutorial.oldcode">
<info><title>Utilizar código antiguo en nuevas versiones de PHP</title></info>
<para>
Ahora que PHP ha crecido y se ha convertido en un lenguaje popular, hay
muchos más repositorios y bibliotecas que contienen código que puede reutilizar.
Los desarrolladores de PHP han intentado preservar la retrocompatibilidad,
es decir, si un script fue escrito para una versión antigua, funcionará (idealmente) sin ningún
cambio en una versión reciente de PHP. En la práctica, normalmente son necesarios algunos cambios.
</para>
<para>
Dos de los cambios más importantes que afectan el código antiguo son:
<itemizedlist>
<listitem>
<simpara>
Los antiguos arrays <varname>$HTTP_*_VARS</varname> ya no están disponibles a
partir de PHP 5.4.0. Los siguientes
<link linkend="language.variables.superglobals">arrays superglobales</link>
fueron introducidos en PHP <link xlink:href="&url.php.release4.1.0;">4.1.0</link>.
Son: <varname>$_GET</varname>, <varname>$_POST</varname>,
<varname>$_COOKIE</varname>, <varname>$_SERVER</varname>,
<varname>$_FILES</varname>, <varname>$_ENV</varname>,
<varname>$_REQUEST</varname>, y <varname>$_SESSION</varname>.
</simpara>
</listitem>
<listitem>
<simpara>
Las variables externas ya no son registradas en el ámbito global de forma
predeterminada. En otras palabras, a partir de PHP
<link xlink:href="&url.php.release4.2.0;">4.2.0</link>, la directiva de PHP
<link linkend="ini.register-globals">register_globals</link> está
desactivada (<emphasis>off</emphasis>) por defecto en &php.ini;. El mejor
método para acceder a estos valores es por medio de las variables superglobales
mencionadas anteriormente. Los scripts, libros y tutoriales antiguos podrían contar con que
esta directiva esté activada (<literal>on</literal>). Si fuera <literal>on</literal>,
por ejemplo, se podría usar <varname>$id</varname> desde el URL
<literal>http://www.example.com/foo.php?id=42</literal>. Ya esté activada
o desactivada, <varname>$_GET['id']</varname> está siempre disponible.
</simpara>
</listitem>
</itemizedlist>
Para más información relacionada con estos cambios, véase la sección sobre
<link linkend="language.variables.predefined">variables predefinidas</link>
y los enlaces que incluye.
</para>
</section>
<section xml:id="tutorial.whatsnext">
<info><title>¿Y ahora qué?</title></info>
<para>
Con sus nuevos conocimientos debería ser capaz de entender la mayoría
del manual y los diversos scripts de ejemplo disponibles en los
archivos de ejemplos.
</para>
<para>
Para ver varias presentaciones que muestran más acerca de lo que puede hacer PHP,
véase el Sitio de Material de Conferencias de PHP:
<link xlink:href="&url.php.talks;">&url.php.talks;</link>
</para>
</section>
</chapter>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->