<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/faq.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'faq.using.php',
    1 => 'Usar PHP',
    2 => 'Usar PHP',
  ),
  'up' => 
  array (
    0 => 'faq.php',
    1 => 'FAQ',
  ),
  'prev' => 
  array (
    0 => 'faq.build.php',
    1 => 'Problemas de Compilaci&oacute;n',
  ),
  'next' => 
  array (
    0 => 'faq.passwords.php',
    1 => 'Hash de Contrase&ntilde;as',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'faq/using.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="faq.using" class="chapter">
  <h1 class="title">Usar PHP</h1>

  

  <p class="para">
   Esta sección reúne varios errores que puede encontrar
   al escribir sus scripts PHP.
  </p>

  <div class="qandaset"><ol class="qandaset_questions"><li><a href="#faq.using.parameterorder">
     
      No recuerdo el orden de los par&aacute;metros en las funciones PHP,
      &iquest;son aleatorios?
     
    </a></li><li><a href="#faq.using.anyform">
     
      Me gustar&iacute;a escribir un script PHP gen&eacute;rico que pudiera procesar datos
      de cualquier formulario. &iquest;C&oacute;mo puedo saber qu&eacute; variables del m&eacute;todo POST est&aacute;n disponibles?
     
    </a></li><li><a href="#faq.using.addslashes">
     
      Necesito convertir todas las comillas simples (&#039;)
      en una barra invertida seguida de una comilla simple (\&#039;). &iquest;C&oacute;mo hacerlo
      con una expresi&oacute;n regular? Tambi&eacute;n me gustar&iacute;a convertir &quot; en \&quot; y
      \ en \\.
     
    </a></li><li><a href="#faq.using.wrong-order">
     
      Cuando hago lo siguiente, la salida se muestra en el orden incorrecto:
     

&lt;?php
function mafonction($argument)
{
    echo $argument + 10;
}
$variable = 10;
echo &quot;mafonction($variable) = &quot; . mafonction($variable);
?&gt;

    
     &iquest;Qu&eacute; est&aacute; pasando?
     
    </a></li><li><a href="#faq.using.newlines">
     
      Hey, &iquest;d&oacute;nde est&aacute;n mis nuevas l&iacute;neas?
      

&lt;pre&gt;
&lt;?php echo &quot;Esta es mi primera l&iacute;nea.&quot;; ?&gt;
&lt;?php echo &quot;Esta deber&iacute;a mostrarse debajo de la primera.&quot;; ?&gt;
&lt;/pre&gt;

      
     
    </a></li><li><a href="#faq.using.headers-sent">
     
      Obtengo el mensaje &#039;Warning: Cannot send session cookie - headers already
      sent...&#039; o &#039;Cannot add header information - headers already sent...&#039;.
     
    </a></li><li><a href="#faq.using.header">
     
      Necesito acceder a la informaci&oacute;n en el encabezado de solicitud
      directamente. &iquest;C&oacute;mo puedo hacerlo?
     
    </a></li><li><a href="#faq.using.authentication">
     
      Cuando intento usar la autenticaci&oacute;n con IIS obtengo
      &#039;No Input file specified&#039;.
     
    </a></li><li><a href="#faq.using.iis.sharing">
     
      Windows: No puedo acceder a los archivos compartidos en otra computadora
      usando IIS.
     
    </a></li><li><a href="#faq.using.mixml">
     
      &iquest;C&oacute;mo mezclar XML y PHP? PHP se queja de mis etiquetas &lt;?xml !
     
    </a></li><li><a href="#faq.using.variables">
     
      &iquest;D&oacute;nde puedo encontrar una lista completa de las variables predefinidas que puedo usar en mis scripts PHP?
     
    </a></li><li><a href="#faq.using.freepdf">
     
      &iquest;C&oacute;mo puedo generar archivos PDF sin usar las bibliotecas no libres
      PDFLib? Me gustar&iacute;a una manera gratuita
      y que no requiera bibliotecas PDF externas.
     
    </a></li><li><a href="#faq.using.shorthandbytes">
     
      Algunas directivas PHP pueden tomar nombres literales,
      y no solo valores int.
      &iquest;Cu&aacute;les son todas las abreviaturas disponibles?
     
    </a></li></ol></div>

   <dl class="qandaentry" id="faq.using.parameterorder">
    <dt><strong>
     
      No recuerdo el orden de los parámetros en las funciones PHP,
      ¿son aleatorios?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      PHP reúne cientos de bibliotecas externas y a veces puede parecer
      desconcertante. Sin embargo, una regla simple para recordar:
     </p>
     <p class="para">
      Los parámetros relacionados con las
      <a href="book.array.php" class="link">funciones de arrays</a> están en el orden
      &quot;<em>needle, haystack</em>&quot; mientras que los parámetros de las
      <a href="book.strings.php" class="link">funciones que manejan cadenas</a>
      son exactamente al revés,
      &quot;<em>haystack, needle</em>&quot;.
     </p>
     <p class="para">
      A partir de PHP 8.0, los <a href="functions.arguments.php#functions.named-arguments" class="link">argumentos con nombre</a>
      permiten pasar argumentos por nombre de parámetro, haciendo que el orden de los parámetros sea menos importante.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.anyform">
    <dt><strong>
     
      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?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      PHP proporciona varias <a href="language.variables.predefined.php" class="link">
      variables predefinidas</a>, como la superglobal <var class="varname"><a href="reserved.variables.post.php" class="classname">$_POST</a></var>.
      Puede iterar sobre <var class="varname"><a href="reserved.variables.post.php" class="classname">$_POST</a></var>
      ya que es un array asociativo de todos los valores enviados por el método POST.
      Por ejemplo, podemos iterar sobre él simplemente con <a href="control-structures.foreach.php" class="link"><code class="literal">foreach</code></a>, verificar los valores vacíos y mostrarlos.
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$empty </span><span style="color: #007700">= </span><span style="color: #0000BB">$post </span><span style="color: #007700">= array();<br />foreach (</span><span style="color: #0000BB">$_POST </span><span style="color: #007700">as </span><span style="color: #0000BB">$nomvar </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$valeurvar</span><span style="color: #007700">) {<br />    if (empty(</span><span style="color: #0000BB">$varvalue</span><span style="color: #007700">)) {<br />        </span><span style="color: #0000BB">$empty</span><span style="color: #007700">[</span><span style="color: #0000BB">$nomvar</span><span style="color: #007700">] = </span><span style="color: #0000BB">$valeurvar</span><span style="color: #007700">;<br />    } else {<br />        </span><span style="color: #0000BB">$post</span><span style="color: #007700">[</span><span style="color: #0000BB">$nomvar</span><span style="color: #007700">] = </span><span style="color: #0000BB">$valeurvar</span><span style="color: #007700">;<br />    }<br />}<br /><br />echo </span><span style="color: #DD0000">'&lt;pre&gt;'</span><span style="color: #007700">;<br />if (empty(</span><span style="color: #0000BB">$empty</span><span style="color: #007700">)) {<br />    print </span><span style="color: #DD0000">"Ningún valor POST está vacío, valores posteados:\n"</span><span style="color: #007700">;<br />    </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$post</span><span style="color: #007700">);<br />} else {<br />    print </span><span style="color: #DD0000">"Tenemos " </span><span style="color: #007700">. </span><span style="color: #0000BB">count</span><span style="color: #007700">(</span><span style="color: #0000BB">$empty</span><span style="color: #007700">) . </span><span style="color: #DD0000">" valores vacíos\n"</span><span style="color: #007700">;<br />    print </span><span style="color: #DD0000">"Posteados :\n"</span><span style="color: #007700">; </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$post</span><span style="color: #007700">);<br />    print </span><span style="color: #DD0000">"Vacíos :\n"</span><span style="color: #007700">;  </span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$empty</span><span style="color: #007700">);<br />    exit;<br />}<br />echo </span><span style="color: #DD0000">'&lt;/pre&gt;'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.addslashes">
    <dt><strong>
     
      Necesito convertir todas las comillas simples (&#039;)
      en una barra invertida seguida de una comilla simple (\&#039;). ¿Cómo hacerlo
      con una expresión regular? También me gustaría convertir &quot; en \&quot; y
      \ en \\.
     
    </strong></dt>
    <dd class="answer">
     <p class="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
      <span class="function"><a href="function.mysql-real-escape-string.php" class="function">mysql_real_escape_string()</a></span> con MySQL y
      <span class="function"><a href="function.pg-escape-string.php" class="function">pg_escape_string()</a></span> con PostgreSQL.
      También hay funciones genéricas como
      <span class="function"><a href="function.addslashes.php" class="function">addslashes()</a></span> y <span class="function"><a href="function.stripslashes.php" class="function">stripslashes()</a></span>,
      que son más comunes con el antiguo código PHP.
     </p>
     <p class="para">
      Escapar valores manualmente es propenso a errores y depende del contexto.
      Es preferible utilizar las API de bases de datos que soportan sentencias preparadas y
      vinculación de parámetros en lugar de construir consultas concatenando
      cadenas escapadas.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.wrong-order">
    <dt><strong>
     
      Cuando hago lo siguiente, la salida se muestra en el orden incorrecto:
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">function </span><span style="color: #0000BB">mafonction</span><span style="color: #007700">(</span><span style="color: #0000BB">$argument</span><span style="color: #007700">)<br />{<br />    echo </span><span style="color: #0000BB">$argument </span><span style="color: #007700">+ </span><span style="color: #0000BB">10</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">$variable </span><span style="color: #007700">= </span><span style="color: #0000BB">10</span><span style="color: #007700">;<br />echo </span><span style="color: #DD0000">"mafonction(</span><span style="color: #0000BB">$variable</span><span style="color: #DD0000">) = " </span><span style="color: #007700">. </span><span style="color: #0000BB">mafonction</span><span style="color: #007700">(</span><span style="color: #0000BB">$variable</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

     ¿Qué está pasando?
     
    </strong></dt>
    <dd class="answer">
     <p class="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 <span class="function"><a href="function.return.php" class="function">return</a></span>,
      y no imprimirlo con <span class="function"><a href="function.echo.php" class="function">echo</a></span>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.newlines">
    <dt><strong>
     
      Hey, ¿dónde están mis nuevas líneas?
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">&lt;pre&gt;<br /><span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esta es mi primera línea."</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;<br />&lt;?php </span><span style="color: #007700">echo </span><span style="color: #DD0000">"Esta debería mostrarse debajo de la primera."</span><span style="color: #007700">; </span><span style="color: #0000BB">?&gt;<br /></span>&lt;/pre&gt;</span></code></div>
      </div>

     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      En PHP, el final de un bloque de código es &quot;?&gt;&quot; o
      &quot;?&gt;\n&quot; (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.
     </p>
     <p class="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.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.headers-sent">
    <dt><strong>
     
      Obtengo el mensaje &#039;Warning: Cannot send session cookie - headers already
      sent...&#039; o &#039;Cannot add header information - headers already sent...&#039;.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Las funciones <span class="function"><a href="function.header.php" class="function">header()</a></span>, <span class="function"><a href="function.setcookie.php" class="function">setcookie()</a></span>,
      y las <a href="ref.session.php" class="link">funciones de sesión</a>
      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 <span class="function"><a href="function.headers-sent.php" class="function">headers_sent()</a></span> verificará si
      su script ya ha enviado encabezados. Vea también
      <a href="ref.outcontrol.php" class="link">las funciones de almacenamiento en búfer de salida</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.header">
    <dt><strong>
     
      Necesito acceder a la información en el encabezado de solicitud
      directamente. ¿Cómo puedo hacerlo?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      La función <span class="function"><a href="function.getallheaders.php" class="function">getallheaders()</a></span> lo hará si está ejecutando
      PHP como un módulo de Apache. El siguiente código le mostrará todos los encabezados de solicitud:
      <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$headers </span><span style="color: #007700">= </span><span style="color: #0000BB">getallheaders</span><span style="color: #007700">();<br />foreach (</span><span style="color: #0000BB">$headers </span><span style="color: #007700">as </span><span style="color: #0000BB">$nom </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$contenu</span><span style="color: #007700">) {<br />    echo </span><span style="color: #DD0000">"headers[</span><span style="color: #0000BB">$nom</span><span style="color: #DD0000">] = </span><span style="color: #0000BB">$contenu</span><span style="color: #DD0000">&lt;br /&gt;\n"</span><span style="color: #007700">;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
      </div>

     </p>
     <p class="para">
      Vea también
      <span class="function"><a href="function.apache-lookup-uri.php" class="function">apache_lookup_uri()</a></span>,
      <span class="function"><a href="function.apache-response-headers.php" class="function">apache_response_headers()</a></span> y
      <span class="function"><a href="function.fsockopen.php" class="function">fsockopen()</a></span>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.authentication">
    <dt><strong>
     
      Cuando intento usar la autenticación con IIS obtengo
      <code class="literal">&#039;No Input file specified&#039;</code>.
     
    </strong></dt>
    <dd class="answer">
     <p class="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:
      <a href="http://support.microsoft.com/kb/q160422/" class="link external">&raquo;&nbsp;http://support.microsoft.com/kb/q160422/</a> y la sección del manual
      sobre la <a href="features.http-auth.php" class="link">autenticación HTTP</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.iis.sharing">
    <dt><strong>
     
      Windows: No puedo acceder a los archivos compartidos en otra computadora
      usando IIS.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Debe modificar el servicio <code class="literal">Ir a Servicios de Internet
      Information</code>. Localice su archivo PHP y edite sus propiedades.
      Vaya a la pestaña <code class="literal">Seguridad del archivo</code>, <code class="literal">Editar -&lt;
      Control de acceso anónimo y autenticación</code>.
     </p>
     <p class="para">
      Puede resolver este problema desmarcando la casilla <code class="literal">Acceso anónimo</code> y dejando la casilla <code class="literal">Autenticación integrada de Windows</code> marcada, o marcando la casilla <code class="literal">Acceso anónimo</code> y editando el usuario que no debe tener los derechos de acceso.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.mixml">
    <dt><strong>
     
      ¿Cómo mezclar XML y PHP? PHP se queja de mis etiquetas &lt;?xml !
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Para incluir &lt;?xml en su código PHP, deberá desactivar las
      etiquetas cortas configurando la directiva PHP
      <a href="ini.core.php#ini.short-open-tag" class="link">short_open_tags</a> a
      <code class="literal">0</code>. No puede cambiar esta directiva con
      <span class="function"><a href="function.ini-set.php" class="function">ini_set()</a></span>. Ya sea que <a href="ini.core.php#ini.short-open-tag" class="link">
      short_open_tags</a> esté activado o desactivado, siempre puede hacer esto:
      <code class="literal">&lt;?php echo &#039;&lt;?xml&#039;; ?&gt;</code>.  El valor predeterminado para esta directiva es <code class="literal">On</code>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.variables">
    <dt><strong>
     
      ¿Dónde puedo encontrar una lista completa de las variables predefinidas que puedo usar en mis scripts PHP?
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Lea la página del manual que trata sobre las <a href="language.variables.predefined.php" class="link">
      variables predefinidas</a> 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 <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>.
      Lea la sección del manual que trata sobre las
      <a href="language.variables.external.php" class="link">variables no provenientes
      de PHP</a>, que describe escenarios comunes para las variables
      externas, como las provenientes de un formulario HTML, una cookie y la URL.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.freepdf">
    <dt><strong>
     
      ¿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.
     
    </strong></dt>
    <dd class="answer">
     <p class="para">
      Hay algunas alternativas escritas en PHP como
      <a href="http://www.fpdf.org/" class="link external">&raquo;&nbsp;FPDF</a> y
      <a href="http://www.tcpdf.org/" class="link external">&raquo;&nbsp;TCPDF</a>.
     </p>
    </dd>
   </dl>

   <dl class="qandaentry" id="faq.using.shorthandbytes">
    <dt><strong>
     
      Algunas directivas PHP pueden tomar nombres literales,
      y no solo valores <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>.
      ¿Cuáles son todas las abreviaturas disponibles?
     
    </strong></dt>
    <dd class="answer">
     <p class="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.
      <code class="literal">1M</code> equivale a un megabyte o <code class="literal">1048576</code>
      bytes. <code class="literal">1K</code> equivale a un kilobyte o
      <code class="literal">1024</code> bytes. Estas notaciones abreviadas pueden usarse en el archivo <var class="filename">php.ini</var> y en la función <span class="function"><a href="function.ini-set.php" class="function">ini_set()</a></span>.
      Tenga en cuenta que el valor numérico se convierte en <span class="type"><a href="language.types.integer.php" class="type int">int</a></span> ;
      por ejemplo, <code class="literal">0.5M</code> se interpreta como <code class="literal">0</code>.
     </p>
     <blockquote class="note"><p><strong class="note">Nota</strong>: 
      <strong>kilobyte versus kibibyte</strong><br />
      <p class="para">
       La notación PHP describe un kilobyte como igual a 1024 bytes, mientras que
       el estándar <abbr>IEC</abbr> lo considera un kibibyte (kibibyte).
       En resumen: k y K = 1024 bytes.
      </p>
     </p></blockquote>
    </dd>
   </dl>
  
 </div>
<?php manual_footer($setup); ?>