La implementación de la barra de progreso de carga es fácil y no requiere ninguna extensión adicional de PHP, JavaScript o Flash. Pero necesita PHP 5.4 y versiones posteriores .
Usted tiene que permitir la recogida de la información de progreso de carga mediante el establecimiento de la directiva session.upload_progress.enabled
a On
en php.ini
.
Luego, agregue una entrada oculta al formulario de carga HTML justo antes de cualquier otra entrada de archivo. El atributo HTML name
de esa entrada oculta debe ser el mismo que el valor de la directiva session.upload_progress.name
de php.ini
(eventualmente precedido por session.upload_progress.prefix
). El value
atributo depende de usted, se utilizará como parte de la clave de sesión.
El formulario HTML podría verse así:
<form action="upload.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="<?php echo ini_get('session.upload_progress.prefix').ini_get('session.upload_progress.name'); ?>" value="myupload" />
<input type="file" name="file1" />
<input type="submit" />
</form>
Cuando envíe este formulario, PHP debería crear una nueva clave en la $_SESSION
estructura superglobal que se completará con la información del estado de carga. La clave está concatenada name
yvalue
de la entrada oculta.
En PHP puede echar un vistazo a la información de carga completa:
var_dump($_SESSION[
ini_get('session.upload_progress.prefix')
.ini_get('session.upload_progress.name')
.'_myupload'
]);
La salida tendrá un aspecto similar al siguiente:
$_SESSION["upload_progress_myupload"] = array(
"start_time" => 1234567890,
"content_length" => 57343257,
"bytes_processed" => 54321,
"done" => false,
"files" => array(
0 => array(
"field_name" => "file1",
"name" => "filename.ext",
"tmp_name" => "/tmp/phpxxxxxx",
"error" => 0,
"done" => false,
"start_time" => 1234567890,
"bytes_processed" => 54321,
)
)
);
Hay toda la información necesaria para crear una barra de progreso: tiene la información si la carga aún está en progreso, la información de cuántos bytes se transferirán en total y cuántos bytes ya se han transferido.
Para presentar el progreso de la carga al usuario, escriba un script PHP diferente al de carga, que solo verá la información de carga en la sesión y la devolverá en formato JSON, por ejemplo. Este script se puede llamar periódicamente, por ejemplo, cada segundo, utilizando AJAX y la información presentada al usuario.
Incluso puede cancelar la carga configurando $_SESSION[$key]['cancel_upload']
a true
.
Para obtener información detallada, configuraciones adicionales y comentarios del usuario, consulte el manual de PHP .