-
Notifications
You must be signed in to change notification settings - Fork 59
Expand file tree
/
Copy pathtutorial.xml
More file actions
465 lines (444 loc) · 17 KB
/
tutorial.xml
File metadata and controls
465 lines (444 loc) · 17 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 876557ae38f6ca5035618f7cea48ca627118b437 Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: no Maintainer: Marqitos -->
<chapter xml:id="tutorial" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Una introducción a PHP</title>
<para>
En esta sección, se pretende ilustrar los principios básicos
de PHP en una breve introducción. Este capítulo trata únicamente
de la creación de páginas web dinámicas con PHP, dejando de lado
temporalmente las otras posibilidades de PHP. Consulte la sección
<link linkend="intro-whatcando">¿Qué puede hacer PHP?</link> para
más información.
</para>
<para>
Las páginas web que utilizan PHP se tratan como páginas HTML clásicas,
y se pueden crear, editar y borrar de la misma manera que normalmente se crean
las páginas HTML clásicas.
</para>
<section xml:id="tutorial.firstpage">
<title>Su primera página PHP</title>
<simpara>
Este tutorial presupone que PHP ya está instalado.
Las instrucciones de instalación se pueden encontrar en la
<link xlink:href="&url.php.downloads;">página de descargas</link>.
</simpara>
<para>
Cree un fichero llamado <filename>hola.php</filename>
con el siguiente contenido :
</para>
<para>
<example>
<title>Nuestro primer script PHP : <filename>hola.php</filename></title>
<programlisting role="php">
<![CDATA[
<?php
echo "¡Hola Mundo!";
?>
]]>
</programlisting>
<simpara>
Usando su terminal, navegue hasta el directorio que contiene este fichero y
inicie un servidor de desarrollo con el siguiente comando:
</simpara>
<programlisting role="shell">
<![CDATA[
php -S localhost:8000
]]>
</programlisting>
<simpara>
Utilice su navegador para acceder al fichero utilizando la URL de su servidor web, terminando
por la referencia al fichero <literal>/hola.php</literal>.
De acuerdo con el comando ejecutado anteriormente, la URL será
<literal>http://localhost:8000/hello.php</literal>.
Si todo está correctamente configurado, este fichero será analizado por PHP
y se verá el mensaje "¡Hola Mundo!" en su navegador.
</simpara>
<simpara>
PHP puede ser integrado en una página web HTML normal. Esto significa que, en su documento HTML,
se pueden escribir instrucciones PHP, como se demuestra en el siguiente ejemplo:
</simpara>
<programlisting role="php">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>Prueba PHP</title>
</head>
<body>
<?php echo '<p>Hola mundo</p>'; ?>
</body>
</html>
]]>
</programlisting>
<simpara>
Esto producirá el siguiente resultado :
</simpara>
<screen role="html">
<![CDATA[
<!DOCTYPE html>
<html>
<head>
<title>Prueba PHP</title>
</head>
<body>
<p>Hola mundo</p>
</body>
</html>
]]>
</screen>
</example>
</para>
<para>
Este programa es extremadamente simple y no se necesita PHP
para crear una página web como esta. Solo muestra
<literal>Hola mundo</literal>, gracias a la función
<function>echo</function>
de PHP. Note que este fichero <emphasis>no necesita ser ejecutable</emphasis>
ni nada más, en ningún caso. El servidor sabe que este fichero necesita ser interpretado
por PHP, porque se utiliza la extensión ".php", y el servidor está configurado para
pasarlos a PHP. Considere esto como una página HTML normal que contiene una serie
de etiquetas especiales que le permitirán realizar muchas cosas interesantes.
</para>
<para>
El punto importante de este ejemplo era mostrar el formato de las
etiquetas especiales PHP. Hemos utilizado aquí
<literal><?php</literal> para indicar el inicio de la etiqueta PHP.
Luego, introdujimos los comandos PHP y cerramos las etiquetas
PHP con <literal>?></literal>. Se puede pasar del modo PHP
al modo HTML y viceversa, de esta manera, y a su gusto. Para más
información, lea la sección del manual sobre la
<link linkend="language.basic-syntax">sintaxis básica de PHP</link>.
</para>
<note>
<title>Una nota sobre los retornos de línea</title>
<para>
Los retornos de línea tienen un significado mínimo en HTML, sin embargo,
siempre es una buena idea hacer que su HTML sea lo más bonito y cercano
posible añadiendo retornos de línea. Un retorno de línea que sigue inmediatamente a una etiqueta de cierre PHP (<literal>?></literal>)
será eliminado por PHP. Esto puede ser realmente muy útil cuando se insertan varios bloques PHP o ficheros incluidos que contienen PHP que
no está destinado a mostrar nada. Al mismo tiempo, puede ser confuso. Se puede añadir un espacio después de la etiqueta de cierre
PHP (<literal>?></literal>) para forzar el espacio y un retorno de línea a mostrarse, o se puede añadir explícitamente un retorno de línea
en el último echo/print de su bloque PHP.
</para>
</note>
<note>
<title>Una nota sobre los editores de texto</title>
<para>
Existen muchos editores de texto y entornos de
desarrollo (IDE) que se pueden utilizar para crear, editar
y gestionar sus aplicaciones PHP. Una lista parcial de estas herramientas
se mantiene en la dirección
<link xlink:href="&url.phpeditorlist;">PHP Editor's List</link>.
Si desea recomendar un editor en particular, visite
esta página y pida al webmaster que añada su editor. Tener al menos
un editor de texto con coloración de sintaxis es altamente recomendado.
</para>
</note>
<note>
<title>Una nota sobre los procesadores de texto</title>
<para>
Los procesadores de texto como StarOffice Writer, Microsoft Word y
Abiword son muy malas opciones para editar scripts PHP.
Si desea utilizar uno de ellos, a pesar de todo, para probar sus
scripts, debe asegurarse de que guarda los ficheros en formato
de texto solo (<emphasis>plain text</emphasis>) : de lo contrario, PHP no será capaz de leer
y ejecutar estos scripts.
</para>
</note>
<para>
Ahora que ha creado un script PHP que funciona, es el momento
de crear el mejor script PHP ! Haga una llamada a la función
<function>phpinfo</function> y verá mucha información
interesante sobre su sistema y su configuración como las
<link
linkend="language.variables.predefined">variables predefinidas disponibles</link>,
los módulos PHP cargados así como la <link linkend="configuration">configuración</link>.
Tómese el tiempo para revisar esta información importante.
</para>
<para>
<example>
<title>Recuperación de la información del sistema desde PHP</title>
<programlisting role="php">
<![CDATA[
<?php
phpinfo();
?>
]]>
</programlisting>
</example>
</para>
</section>
<section xml:id="tutorial.useful">
<title>Trucos prácticos</title>
<para>
Realicemos ahora algo más potente. Vamos
a verificar el tipo de navegador que el visitante de nuestro sitio utiliza.
Para ello, accederemos a la información que el navegador
del visitante nos envía, durante su petición HTTP. Esta información
se almacena en una <link linkend="language.variables">variable</link>.
Las variables son fáciles de identificar, ya que todas comienzan
con un signo dólar. La variable que nos interesa aquí es
<varname>$_SERVER['HTTP_USER_AGENT']</varname>.
</para>
<note>
<para>
<varname>$_SERVER</varname> es una
variable especial de PHP, que contiene toda la información
relativa al servidor web. Es una variable reservada de PHP,
y una superglobal. Consulte las páginas del manual que tratan de las
<link linkend="language.variables.superglobals">Auto-globales</link>
(también conocidas como super-globales).
</para>
</note>
<para>
Para mostrar esta variable, simplemente se puede hacer :
</para>
<para>
<example>
<title>Mostrar el contenido de una variable (elemento de array)</title>
<programlisting role="php">
<![CDATA[
<?php
echo $_SERVER['HTTP_USER_AGENT'];
?>
]]>
</programlisting>
<para>
Un resultado posible del script podría ser :
</para>
<screen role="html">
<![CDATA[
Mozilla/5.0 (Linux) Firefox/112.0
]]>
</screen>
</example>
</para>
<para>
Hay muchos <link linkend="language.types">tipos</link> de
variables disponibles en PHP. En el ejemplo anterior, hemos mostrado
un elemento de una variable <link linkend="language.types.array">Array</link>.
Los arrays pueden ser muy útiles.
</para>
<para>
<varname>$_SERVER</varname> es simplemente una variable que está automáticamente
disponible en su script. Una lista de todas las variables que están
disponibles se proporciona en la sección
<link linkend="reserved.variables">Variables reservadas</link> o también se puede obtener una lista completa leyendo la salida de la función
<function>phpinfo</function> utilizada en el ejemplo de la sección anterior.
</para>
<para>
Se pueden añadir varios comandos PHP en una etiqueta PHP, y crear
pequeños bloques de código que realizan operaciones más complejas
que un simple mostrado. Por ejemplo, si queremos verificar que el
navegador es de la familia Firefox, se puede
hacer esto :
</para>
<para>
<example>
<title>Ejemplo utilizando las
<link linkend="language.control-structures">estructuras de control</link> y
las <link linkend="language.functions">funciones</link></title>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
echo 'Está utilizando Firefox.';
}
?>
]]>
</programlisting>
<para>
El resultado de este script, si está utilizando Firefox, será :
</para>
<screen role="html">
<![CDATA[
Está utilizando Firefox.
]]>
</screen>
</example>
</para>
<para>
Aquí, introducimos varios nuevos conceptos. Tenemos una
estructura <link linkend="control-structures.if">if</link>.
Si está familiarizado con las sintaxis básicas del lenguaje C, esto
no le sorprenderá. Si no conoce lo suficiente el lenguaje C o
otro lenguaje cuya sintaxis sea similar a la anterior, sería mejor
que leyera una introducción a PHP, y asimilara
los primeros capítulos, o bien lea el capítulo dedicado a
<link linkend="langref">la referencia del lenguaje</link>.
</para>
<para>
El segundo concepto que hemos introducido es la función <function>str_contains</function>.
<function>str_contains</function> es una función interna de PHP, que determina
la presencia de una cadena dada en otra. En nuestro caso, hemos buscado la cadena <literal>"Firefox"</literal> en la cadena
<varname>$_SERVER['HTTP_USER_AGENT']</varname>.
De lo contrario, devuelve &false;.
Si devuelve &true; la estructura <link linkend="control-structures.if">if</link>
recibe &true; y el código entre llaves {} se ejecuta. De lo contrario, el código no se
ejecuta. No dude en
experimentar con otros ejemplos, utilizando
<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 de la documentación también contiene ejemplos. Si no está seguro del uso de estas funciones, debe leer
la página del manual
"<link linkend="about.prototypes">cómo leer una definición de función</link>"
así como la <link linkend="language.functions">sección sobre las funciones PHP</link>.
</para>
<para>
Ahora podemos avanzar y mostrarle cómo utilizar el modo PHP,
en medio del código HTML :
</para>
<para>
<example>
<title>Pasar del modo PHP al modo HTML y viceversa</title>
<programlisting role="php">
<![CDATA[
<?php
if (str_contains($_SERVER['HTTP_USER_AGENT'], 'Firefox')) {
?>
<h3>str_contains() ha devuelto true</h3>
<p>Está utilizando Firefox</p>
<?php
} else {
?>
<h3>str_contains() ha devuelto false</h3>
<p>No está utilizando Firefox</p>
<?php
}
?>
]]>
</programlisting>
<para>
Un ejemplo de resultado obtenido en este script es :
</para>
<screen role="html">
<![CDATA[
<h3>str_contains() ha devuelto true</h3>
<p>Está utilizando Firefox</p>
]]>
</screen>
</example>
</para>
<para>
En lugar de utilizar un comando <function>echo</function>, para mostrar
texto, se puede utilizar código HTML puro. El punto importante a tener en cuenta
aquí es que la lógica de programación se conserva. Solo uno de los dos
bloques HTML se mostrará, según el resultado de la función <function>str_contains</function>.
En otras palabras, depende de si la cadena <literal>Firefox</literal>
ha sido encontrada o no.
</para>
</section>
<section xml:id="tutorial.forms">
<title>Utilizar un formulario</title>
<para>
Uno de los puntos fuertes de PHP es su capacidad para manejar formularios.
El concepto básico que es importante entender es que todos los
campos de un formulario estarán automáticamente disponibles en el
script PHP de acción. Lea el capítulo del manual relativo a las
<link linkend="language.variables.external">variables desde fuentes externas a PHP</link>
para más información y ejemplos sobre cómo utilizar los
formularios. Aquí hay un ejemplo de formulario HTML :
</para>
<para>
<example>
<title>Un formulario HTML simple</title>
<programlisting role="html">
<![CDATA[
<form action="action.php" method="post">
<label>Su nombre :</label>
<input name="nombre" id="nombre" type="text" />
<label>Su edad :</label>
<input name="edad" id="edad" type="number" /></p>
<button type="submit">Validar</button>
</form>
]]>
</programlisting>
</example>
</para>
<para>
No hay nada especial en este formulario. Está en HTML
puro, sin ninguna configuración especial. Cuando el visitante
rellena el formulario, y hace clic en el botón OK, se llama al fichero <filename>action.php</filename>. En este
fichero, se puede escribir el siguiente script :
</para>
<para>
<example>
<title>Mostrar datos de un formulario</title>
<programlisting role="php">
<![CDATA[
Hola, <?php echo htmlspecialchars($_POST['nombre']); ?>.
Tienes <?php echo (int) $_POST['edad']; ?> años.
]]>
</programlisting>
<para>
Aquí está el resultado que podría obtener, según
los valores que haya introducido :
</para>
<screen role="html">
<![CDATA[
Hola Juan.
Tienes 29 años.
]]>
</screen>
</example>
</para>
<para>
Aparte de las partes <function>htmlspecialchars</function> y
<literal>(int)</literal>, este script solo hace cosas evidentes.
<function>htmlspecialchars</function> se asegura de que todos los caracteres
especiales HTML se codifiquen correctamente para evitar inyecciones
de etiquetas HTML y de Javascript en sus páginas. Para la edad, dado que
sabemos que es un entero, se puede
<link linkend="language.types.typecasting">convertir</link> en un
&integer;. También se puede pedir a PHP que lo haga
automáticamente por usted utilizando la extensión
<link linkend="ref.filter">filter</link>.
Las variables <varname>$_POST['nombre']</varname> y
<varname>$_POST['edad']</varname> son creadas automáticamente por PHP.
Un poco antes en este tutorial, hemos utilizado la variable
<varname>$_SERVER</varname>, una superglobal. Ahora, hemos introducido otra superglobal <varname>$_POST</varname>
que contiene todos los datos enviados por el método POST. Tenga en cuenta que
en nuestro formulario, hemos elegido el <emphasis>método</emphasis> POST.
Si hubiéramos utilizado el <emphasis>método</emphasis> GET entonces nuestro formulario
habría colocado esta información en la variable <varname>$_GET</varname>,
otra superglobal. También se puede utilizar la variable
<varname>$_REQUEST</varname>, si no desea preocuparse por el método utilizado. Contiene
una mezcla de los datos de GET, POST, COOKIE y FILE.
</para>
</section>
<section xml:id="tutorial.whatsnext">
<title>¿Y después?</title>
<para>
Con lo que sabe, ahora es capaz de comprender
lo esencial de la documentación PHP, y los diferentes scripts de ejemplo
disponibles en los archivos.
</para>
<para>
Diferentes presentaciones de las capacidades de PHP están disponibles en el
sitio de las conferencias 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
-->