-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathusing.xml
executable file
·362 lines (344 loc) · 12.7 KB
/
using.xml
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
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: aab33d644359aba597e810e2fc0c0caa0d347c9c Maintainer: PhilDaiguille Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="faq.using" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Usar PHP</title>
<titleabbrev>Usar PHP</titleabbrev>
<para>
Esta sección reúne varios errores que puede encontrar
al escribir sus scripts PHP.
</para>
<qandaset>
<qandaentry xml:id="faq.using.parameterorder">
<!-- TODO: Mencionar argumentos nombrados -->
<question>
<para>
No recuerdo el orden de los parámetros en las funciones PHP,
¿son aleatorios?
</para>
</question>
<answer>
<para>
PHP reúne cientos de bibliotecas externas y a veces puede parecer
desconcertante. Sin embargo, una regla simple para recordar:
</para>
<para>
Los parámetros relacionados con las
<link linkend="book.array">funciones de arrays</link> están en el orden
"<emphasis>needle, haystack</emphasis>" mientras que los parámetros de las
<link linkend="book.strings">funciones que manejan cadenas</link>
son exactamente al revés,
"<emphasis>haystack, needle</emphasis>".
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.anyform">
<question>
<para>
Me gustaría escribir un script PHP genérico que pudiera procesar datos
de cualquier formulario. ¿Cómo puedo saber qué variables del método POST están disponibles?
</para>
</question>
<answer>
<para>
PHP proporciona varias <link linkend="language.variables.predefined">
variables predefinidas</link>, como la superglobal <varname>
$_POST</varname>. Puede iterar sobre <varname>$_POST</varname>
ya que es un array asociativo de todos los valores enviados por el método POST.
Por ejemplo, podemos iterar sobre él simplemente con &foreach;, verificar los valores vacíos y mostrarlos.
<programlisting role="php">
<![CDATA[
<?php
$empty = $post = array();
foreach ($_POST as $nomvar => $valeurvar) {
if (empty($varvalue)) {
$empty[$nomvar] = $valeurvar;
} else {
$post[$nomvar] = $valeurvar;
}
}
echo '<pre>';
if (empty($empty)) {
print "Ningún valor POST está vacío, valores posteados:\n";
var_dump($post);
} else {
print "Tenemos " . count($empty) . " valores vacíos\n";
print "Posteados :\n"; var_dump($post);
print "Vacíos :\n"; var_dump($empty);
exit;
}
echo '</pre>';
?>
]]>
</programlisting>
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.addslashes">
<!-- TODO Probablemente debería mencionar no hacer esto... -->
<question>
<para>
Necesito convertir todas las comillas simples (')
en una barra invertida seguida de una comilla simple (\'). ¿Cómo hacerlo
con una expresión regular? También me gustaría convertir " en \" y
\ en \\.
</para>
</question>
<answer>
<para>
Si asumimos que es para una base de datos, use
el mecanismo de escape proporcionado con la base de datos. Por
ejemplo, use la función
<function>mysql_real_escape_string</function> con MySQL y
<function>pg_escape_string</function> con PostgreSQL.
También hay funciones genéricas como
<function>addslashes</function> y <function>stripslashes</function>,
que son más comunes con el antiguo código PHP.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.wrong-order">
<question>
<para>
Cuando hago lo siguiente, la salida se muestra en el orden incorrecto:
<programlisting role="php">
<![CDATA[
<?php
function mafonction($argument)
{
echo $argument + 10;
}
$variable = 10;
echo "mafonction($variable) = " . mafonction($variable);
?>
]]>
</programlisting>
¿Qué está pasando?
</para>
</question>
<answer>
<para>
Para poder usar el resultado de su función en una expresión
(como concatenarlo con una cadena como en este ejemplo), debe
devolver el valor con <function>return</function>,
y no imprimirlo con <function>echo</function>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.newlines">
<question>
<para>
Hey, ¿dónde están mis nuevas líneas?
<programlisting role="php">
<![CDATA[
<pre>
<?php echo "Esta es mi primera línea."; ?>
<?php echo "Esta debería mostrarse debajo de la primera."; ?>
</pre>
]]>
</programlisting>
</para>
</question>
<answer>
<para>
En PHP, el final de un bloque de código es "?>" o
"?>\n" (donde \n significa una nueva línea). Entonces, en el ejemplo anterior, las frases se mostrarán en una sola línea, porque PHP
omite las nuevas líneas después del final del bloque. Esto significa que debe insertar una nueva línea adicional después de cada bloque de código PHP
para que se muestre.
</para>
<para>
¿Por qué PHP hace esto? Porque al formatear HTML, esto
le facilita la vida, ya que no desea esa nueva línea, pero debe crear líneas muy largas o hacer que el código fuente de la página sea ilegible para lograr este efecto.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.headers-sent">
<question>
<para>
Obtengo el mensaje 'Warning: Cannot send session cookie - headers already
sent...' o 'Cannot add header information - headers already sent...'.
</para>
</question>
<answer>
<para>
Las funciones <function>header</function>, <function>setcookie</function>,
y las <link linkend="ref.session">funciones de sesión</link>
deben agregar encabezados al flujo de salida, pero estos solo
pueden enviarse antes que el resto del contenido. No debe haber ninguna salida antes de usar estas funciones, como HTML, por ejemplo. La función <function>headers_sent</function> verificará si
su script ya ha enviado encabezados. Vea también
<link linkend="ref.outcontrol">las funciones de almacenamiento en búfer de salida</link>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.header">
<question>
<para>
Necesito acceder a la información en el encabezado de solicitud
directamente. ¿Cómo puedo hacerlo?
</para>
</question>
<answer>
<para>
La función <function>getallheaders</function> lo hará si está ejecutando
PHP como un módulo de Apache. El siguiente código le mostrará todos los encabezados de solicitud:
<programlisting role="php">
<![CDATA[
<?php
$headers = getallheaders();
foreach ($headers as $nom => $contenu) {
echo "headers[$nom] = $contenu<br />\n";
}
?>
]]>
</programlisting>
</para>
<para>
Vea también
<function>apache_lookup_uri</function>,
<function>apache_response_headers</function> y
<function>fsockopen</function>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.authentication">
<question>
<para>
Cuando intento usar la autenticación con IIS obtengo
<literal>'No Input file specified'</literal>.
</para>
</question>
<answer>
<para>
El modelo de seguridad de IIS es el culpable. Es un problema común para
todos los programas CGI que se ejecutan con IIS. Una alternativa es crear un archivo HTML (no ejecutado por PHP) como página de entrada en el directorio donde se requiere la autenticación. Luego, use una etiqueta META
para redirigir a la página PHP, o proporcione un enlace a ella. PHP reconocerá entonces la autenticación correctamente. Esto no debería
afectar a otros servidores NT. Para más información, vea:
<link xlink:href="&url.iis;">&url.iis;</link> y la sección del manual
sobre la <link linkend="features.http-auth">autenticación HTTP</link>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.iis.sharing">
<question>
<para>
Windows: No puedo acceder a los archivos compartidos en otra computadora
usando IIS.
</para>
</question>
<answer>
<para>
Debe modificar el servicio <literal>Ir a Servicios de Internet
Information</literal>. Localice su archivo PHP y edite sus propiedades.
Vaya a la pestaña <literal>Seguridad del archivo</literal>, <literal>Editar -<
Control de acceso anónimo y autenticación</literal>.
</para>
<para>
Puede resolver este problema desmarcando la casilla <literal>Acceso anónimo</literal> y dejando la casilla <literal>Autenticación integrada de Windows</literal> marcada, o marcando la casilla <literal>Acceso anónimo</literal> y editando el usuario que no debe tener los derechos de acceso.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.mixml">
<question>
<para>
¿Cómo mezclar XML y PHP? PHP se queja de mis etiquetas <?xml !
</para>
</question>
<answer>
<para>
Para incluir <?xml en su código PHP, deberá desactivar las
etiquetas cortas configurando la directiva PHP
<link linkend="ini.short-open-tag">short_open_tags</link> a
<literal>0</literal>. No puede cambiar esta directiva con
<function>ini_set</function>. Ya sea que <link linkend="ini.short-open-tag">
short_open_tags</link> esté activado o desactivado, siempre puede hacer esto:
<literal><?php echo '<?xml'; ?></literal>. El valor predeterminado para esta directiva es <literal>On</literal>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.variables">
<question>
<para>
¿Dónde puedo encontrar una lista completa de las variables predefinidas que puedo usar en mis scripts PHP?
</para>
</question>
<answer>
<para>
Lea la página del manual que trata sobre las <link linkend="language.variables.predefined">
variables predefinidas</link> ya que presenta una lista
parcial de las variables predefinidas disponibles en su script. Una
lista completa de las variables disponibles (y mucha información)
puede verse llamando a la función <function>phpinfo</function>.
Lea la sección del manual que trata sobre las
<link linkend="language.variables.external">variables no provenientes
de PHP</link>, que describe escenarios comunes para las variables
externas, como las provenientes de un formulario HTML, una cookie y la URL.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.freepdf">
<question>
<para>
¿Cómo puedo generar archivos PDF sin usar las bibliotecas no libres
PDFLib? Me gustaría una manera gratuita
y que no requiera bibliotecas PDF externas.
</para>
</question>
<answer>
<para>
Hay algunas alternativas escritas en PHP como
<link xlink:href="&url.pdf.fpdf;">FPDF</link> y
<link xlink:href="&url.pdf.tcpdf;">TCPDF</link>.
</para>
</answer>
</qandaentry>
<qandaentry xml:id="faq.using.shorthandbytes">
<question>
<para>
Algunas directivas PHP pueden tomar nombres literales,
y no solo valores &integer;.
¿Cuáles son todas las abreviaturas disponibles?
</para>
</question>
<answer>
<para>
Las opciones disponibles son K (para kilobytes) y M (para megabyte) y
G (para gigabyte), y no distinguen entre mayúsculas y minúsculas. Cualquier otra sintaxis se supone que representa bytes.
<literal>1M</literal> equivale a un megabyte o <literal>1048576</literal>
bytes. <literal>1K</literal> equivale a un kilobyte o
<literal>1024</literal> bytes. Estas notaciones abreviadas pueden usarse en el archivo &php.ini; y en la función <function>ini_set</function>.
Tenga en cuenta que el valor numérico se convierte en &integer; ;
por ejemplo, <literal>0.5M</literal> se interpreta como <literal>0</literal>.
</para>
<note>
<title>kilobyte versus kibibyte</title>
<para>
La notación PHP describe un kilobyte como igual a 1024 bytes, mientras que
el estándar <acronym>IEC</acronym> lo considera un kibibyte (kibibyte).
En resumen: k y K = 1024 bytes.
</para>
</note>
</answer>
</qandaentry>
</qandaset>
</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
-->