1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-26 08:22:08 +01:00
Files
archived-doc-es/reference/session/upload-progress.xml
Pedro Antonio Gil Rodríguez 4d083af4c3 Correcciones menores
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@333835 c90b9560-bf6c-de11-be94-00142212c4b1
2014-06-19 11:18:47 +00:00

149 lines
5.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: 7ae525d165ef8f5575bff8b76e3cc6970df9df77 Maintainer: seros Status: ready -->
<!-- Reviewed: no -->
<chapter xml:id="session.upload-progress" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>Progreso de Subida en Sesiones</title>
<para>
Cuando la opción INI
<link linkend="ini.session.upload-progress.enabled">session.upload_progress.enabled</link>
está habilitada, PHP podrá rastrear el progreso de subida de
ficheros individuales que están siendo subidos.
Esta información no es particularmente útil para la petición de subida real
en sí misma, pero durante la subida del archivo, una aplicación puede enviar una petición POST
a un nodo distinto (mediante <acronym>XHR</acronym> por ejemplo) para comprobar el
estado.
</para>
<para>
El progreso de subida estará disponible en la variable superglobal <varname>$_SESSION</varname>
cuando una subida está en progreso, y al usar POST con una variable con
el mismo nombre al que está establecido el ajuste INI
<link linkend="ini.session.upload-progress.name">session.upload_progress.name</link>.
Cuando PHP detecta tales peticiones POST,
rellenará un array en la variable
<varname>$_SESSION</varname>, donde el índice es un valor concatenado de las opciones INI
<link linkend="ini.session.upload-progress.prefix">session.upload_progress.prefix</link>
y
<link linkend="ini.session.upload-progress.name">session.upload_progress.name</link>.
La clave se recupera normalmente leyendo estas opciones INI,
es decir
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
$clave = ini_get("session.upload_progress.prefix") . $_POST[ini_get("session.upload_progress.name")];
var_dump($_SESSION[$clave]);
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
También es posible <emphasis>cancelar</emphasis> la subida de ficheros que está
en progreso, estableciendo la clave <literal>$_SESSION[$clave]["cancel_upload"]</literal> a
&true;.
Cuando se suben múltiples ficheros en la misma petición, esto solamente cancelará la
subida de ficheros que está en progreso, y las subidas de ficheros pendientes, pero no
eliminará de manera satisfactoria las subidas completadas.
Cuando una subida se cancela de esta manera, la clave <literal>error</literal> del
array <varname>$_FILES</varname> será establecida a
<constant>UPLOAD_ERR_EXTENSION</constant>.
</para>
<para>
Las opciones INI
<link linkend="ini.session.upload-progress.freq">session.upload_progress.freq</link>
y
<link linkend="ini.session.upload-progress.min-freq">session.upload_progress.min_freq</link>
controlan con qué frecuencia debería ser recalculada la información del progreso de
subida.
Con una cantidad razonable de estos dos ajustes, la sobrecarga de esta
característica es casi inexistente
</para>
<para>
<example>
<title>Ejemplo de información</title>
<para>
Ejemplo de la esctructura del array del progreso de subida.
</para>
<programlisting role="html" xml:id="session.upload-progress.example-form">
<![CDATA[
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get("session.upload_progress.name"); ?>" value="123" />
<input type="file" name="file1" />
<input type="file" name="file2" />
<input type="submit" />
</form>
]]>
</programlisting>
<para>
La información almacenada en la sesión se parecerá a esta:
</para>
<programlisting role="php" xml:id="session.upload-progress.example-array">
<![CDATA[
<?php
$_SESSION["upload_progress_123"] = array(
"start_time" => 1234567890, // El instante de la petición
"content_length" => 57343257, // longitud del contenido de POST
"bytes_processed" => 453489, // Cantidad de bytes recibidos y procesados
"done" => false, // True cuando el gestor de POST ha finalizado, satisfactoriamente o no
"files" => array(
0 => array(
"field_name" => "file1", // nombre del campo <input/>
// Los siguientes 3 elementos son iguales que aquellos de $_FILES
"name" => "foo.avi",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => true, // True cuando el gestor de POST ha terminado de manejar este fichero
"start_time" => 1234567890, // Cuándo se empezo a procesar este fichero
"bytes_processed" => 57343250, // Número de bytes recibidos y procesados de este fichero
),
// Otro fichero, no terminado de subir, en la misma petición
1 => array(
"field_name" => "file2",
"name" => "bar.avi",
"tmp_name" => NULL,
"error" => 0,
"done" => false,
"start_time" => 1234567899,
"bytes_processed" => 54554,
),
)
);
]]>
</programlisting>
</example>
</para>
<warning>
<para>
El almacenamiento en búfer de peticiones del servidor ha sido deshabilitado para que
esto funcione apropiadamente, si no, PHP podría ver la subida de ficheros una vez realizada
esta completamente. Los servidores como Nginx almacenan en búfer peticiones más grandes.
</para>
</warning>
</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
-->